1 \input texinfo @c -*-texinfo-*-
2 @setfilename ../../info/ada-mode
6 Copyright @copyright{} 1999--2013 Free Software Foundation, Inc.
9 Permission is granted to copy, distribute and/or modify this document
10 under the terms of the GNU Free Documentation License, Version 1.3 or
11 any later version published by the Free Software Foundation; with no
12 Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
13 and with the Back-Cover Texts as in (a) below. A copy of the license
14 is included in the section entitled ``GNU Free Documentation License''.
16 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
17 modify this GNU manual.''
21 @dircategory Emacs editing modes
23 * Ada mode: (ada-mode). Emacs mode for editing and compiling Ada code.
30 @subtitle An Emacs major mode for programming in Ada
31 @subtitle Ada Mode Version 4.00
34 @vskip 0pt plus 1filll
49 * Installation:: Installing Ada mode on your system
50 * Customization:: Setting up Ada mode to your taste
51 * Compiling Executing:: Working with your application within Emacs
52 * Project files:: Describing the organization of your project
53 * Compiling Examples:: A small tutorial
54 * Moving Through Ada Code:: Moving easily through Ada sources
55 * Identifier completion:: Finishing words automatically
56 * Automatic Smart Indentation:: Indenting your code automatically as you type
57 * Formatting Parameter Lists:: Formatting subprograms' parameter lists
59 * Automatic Casing:: Adjusting the case of words automatically
60 * Statement Templates:: Inserting code templates
61 * Comment Handling:: Reformatting comments easily
62 * GNU Free Documentation License:: The license for this documentation.
70 The Emacs mode for programming in Ada helps the user in understanding
71 existing code and facilitates writing new code.
73 When the Gnu Ada compiler GNAT is used, the cross-reference
74 information output by the compiler is used to provide powerful code
75 navigation (jump to definition, find all uses, etc.).
77 When you open a file with a file extension of @file{.ads} or
78 @file{.adb}, Emacs will automatically load and activate Ada mode.
80 Ada mode works without any customization, if you are using the GNAT
81 compiler (@url{https://libre2.adacore.com/}) and the GNAT default
84 You must customize a few things if you are using a different compiler
85 or file naming convention; @xref{Other compiler}, @xref{Non-standard
88 In addition, you may want to customize the indentation,
89 capitalization, and other things; @xref{Other customization}.
91 Finally, for large Ada projects, you will want to set up an Emacs
92 Ada mode project file for each project; @xref{Project files}. Note
93 that these are different from the GNAT project files used by gnatmake
94 and other GNAT commands.
96 See the Emacs info manual, section 'Running Debuggers Under Emacs',
97 for general information on debugging.
100 @chapter Installation
102 Ada mode is part of the standard Emacs distribution; if you use that,
103 no files need to be installed.
105 Ada mode is also available as a separate distribution, from the Emacs
107 @uref{http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html}. The
108 separate distribution may be more recent.
110 For installing the separate distribution, see the @file{README} file
113 To see what version of Ada mode you have installed, do @kbd{M-x
116 The following files are provided with the Ada mode distribution:
121 @file{ada-mode.el}: The main file for Ada mode, providing indentation,
122 formatting of parameter lists, moving through code, comment handling
123 and automatic casing.
126 @file{ada-prj.el}: GUI editing of Ada mode project files, using Emacs
130 @file{ada-stmt.el}: Ada statement templates.
133 @file{ada-xref.el}: GNAT cross-references, completion of identifiers,
134 and compilation. Also provides project files (which are not
140 @chapter Customizing Ada mode
142 Here we assume you are familiar with setting variables in Emacs,
143 either thru 'customize' or in elisp (in your @file{.emacs} file). For
144 a basic introduction to customize, elisp, and Emacs in general, see
147 @cite{The GNU Emacs Manual}.
150 @cite{The GNU Emacs Manual}.
153 @ref{Top, , The GNU Emacs Manual, emacs, The GNU Emacs Manual}.
156 These global Emacs settings are strongly recommended (put them in your
160 (global-font-lock-mode t)
161 (transient-mark-mode t)
164 @samp{(global-font-lock-mode t)} turns on syntax
165 highlighting for all buffers (it is off by default because it may be
166 too slow for some machines).
168 @samp{(transient-mark-mode t)} highlights selected text.
170 See the Emacs help for each of these variables for more information.
173 * Non-standard file names::
175 * Other customization::
178 @node Non-standard file names
179 @section Non-standard file names
181 By default, Ada mode is configured to use the GNAT file naming
182 convention, where file names are a simple modification of the Ada
183 names, and the extension for specs and bodies are
184 @samp{.ads} and @samp{.adb}, respectively.
186 Ada mode uses the file extensions to allow moving from a package body
187 to the corresponding spec and back.
189 Ada mode supports a list of alternative file extensions for specs and bodies.
191 For instance, if your spec and bodies files are called
192 @file{@var{unit}_s.ada} and @file{@var{unit}_b.ada}, respectively, you
193 can add the following to your @file{.emacs} file:
196 (ada-add-extensions "_s.ada" "_b.ada")
199 You can define additional extensions:
202 (ada-add-extensions ".ads" "_b.ada")
203 (ada-add-extensions ".ads" ".body")
206 This means that whenever Ada mode looks for the body for a file
207 whose extension is @file{.ads}, it will take the first available file
208 that ends with either @file{.adb}, @file{_b.ada} or
211 Similarly, if Ada mode is looking for a spec, it will look for
212 @file{.ads} or @file{_s.ada}.
214 If the filename is not derived from the Ada name following the GNAT
215 convention, things are a little more complicated. You then need to
216 rewrite the function @code{ada-make-filename-from-adaname}. Doing that
217 is beyond the scope of this manual; see the current definitions in
218 @file{ada-mode.el} and @file{ada-xref.el} for examples.
221 @section Other compiler
223 By default, Ada mode is configured to use the Gnu Ada compiler GNAT.
225 To use a different Ada compiler, you must specify the command lines
226 used to run that compiler, either in lisp variables or in Emacs
227 Ada mode project files. See @ref{Project file variables} for the list
228 of project variables, and the corresponding lisp variables.
230 @node Other customization
231 @section Other customization
233 All user-settable Ada mode variables can be set via the menu
234 @samp{Ada | Customize}. Click on the @samp{Help} button there for help
237 To modify a specific variable, you can directly call the function
238 @code{customize-variable}; just type @kbd{M-x customize-variable
239 @key{RET} @var{variable-name} @key{RET}}).
241 Alternately, you can specify variable settings in the Emacs
242 configuration file, @file{.emacs}. This file is coded in Emacs lisp,
243 and the syntax to set a variable is the following:
245 (setq variable-name value)
248 @node Compiling Executing
249 @chapter Compiling Executing
251 Ada projects can be compiled, linked, and executed using commands on
252 the Ada menu. All of these commands can be customized via a project
253 file (@pxref{Project files}), but the defaults are sufficient for using
254 the GNAT compiler for simple projects (single files, or several files
255 in a single directory).
257 Even when no project file is used, the GUI project editor (menu
258 @samp{Ada | Project | Edit}) shows the settings of the various project
259 file variables referenced here.
266 @node Compile commands
267 @section Compile commands
269 Here are the commands for building and using an Ada project, as
270 listed in the Ada menu.
272 In multi-file projects, there must be one file that is the main
273 program. That is given by the @code{main} project file variable;
274 it defaults to the current file if not yet set, but is also set by the
275 ``set main and build'' command.
280 Compiles the current file in syntax check mode, by running
281 @code{check_cmd} defined in the current project file. This typically
282 runs faster than full compile mode, speeding up finding and fixing
285 This sets @code{main} only if it has not been set yet.
288 Compiles the current file, by running @code{comp_cmd} from the current
291 This does not set @code{main}.
293 @item Set main and Build
294 Sets @code{main} to the current file, then executes the Build
298 Display @code{main} in the message buffer.
301 Compiles all obsolete units of the current @code{main}, and links
302 @code{main}, by running @code{make_cmd} from the current project.
304 This sets @code{main} only if it has not been set yet.
307 Executes the main program in a shell, displayed in a separate Emacs
308 buffer. This runs @code{run_cmd} from the current project. The
309 execution buffer allows for interactive input/output.
311 To modify the run command, in particular to provide or change the
312 command line arguments, type @kbd{C-u} before invoking the command.
314 This command is not available for a cross-compilation toolchain.
317 It is important when using these commands to understand how
318 @code{main} is used and changed.
320 Build runs 'gnatmake' on the main unit. During a typical edit/compile
321 session, this is the only command you need to invoke, which is why it
322 is bound to @kbd{C-c C-c}. It will compile all files needed by the
323 main unit, and display compilation errors in any of them.
325 Note that Build can be invoked from any Ada buffer; typically you will
326 be fixing errors in files other than the main, but you don't have to
327 switch back to the main to invoke the compiler again.
329 Novices and students typically work on single-file Ada projects. In
330 this case, @kbd{C-c C-m} will normally be the only command needed; it
331 will build the current file, rather than the last-built main.
333 There are three ways to change @code{main}:
337 Invoke @samp{Ada | Set main and Build}, which sets @code{main} to
341 Invoke @samp{Ada | Project | Edit}, edit @code{main} and
342 @code{main}, and click @samp{[save]}
345 Invoke @samp{Ada | Project | Load}, and load a project file that specifies @code{main}
349 @node Compiler errors
350 @section Compiler errors
352 The @code{Check file}, @code{Compile file}, and @code{Build} commands
353 all place compilation errors in a separate buffer named
354 @code{*compilation*}.
356 Each line in this buffer will become active: you can simply click on
357 it with the middle button of the mouse, or move point to it and press
358 @key{RET}. Emacs will then display the relevant source file and put
359 point on the line and column where the error was found.
361 You can also press the @kbd{C-x `} key (@code{next-error}), and Emacs
362 will jump to the first error. If you press that key again, it will
363 move you to the second error, and so on.
365 Some error messages might also include references to other files. These
366 references are also clickable in the same way, or put point after the
367 line number and press @key{RET}.
370 @chapter Project files
372 An Emacs Ada mode project file specifies what directories hold sources
373 for your project, and allows you to customize the compilation commands
374 and other things on a per-project basis.
376 Note that Ada mode project files @samp{*.adp} are different than GNAT
377 compiler project files @samp{*.gpr}. However, Emacs Ada mode can use a
378 GNAT project file to specify the project directories. If no
379 other customization is needed, a GNAT project file can be used without
380 an Emacs Ada mode project file.
383 * Project File Overview::
385 * Project file variables::
388 @node Project File Overview
389 @section Project File Overview
391 Project files have a simple syntax; they may be edited directly. Each
392 line specifies a project variable name and its value, separated by ``='':
394 src_dir=/Projects/my_project/src_1
395 src_dir=/Projects/my_project/src_2
398 Some variables (like @code{src_dir}) are lists; multiple occurrences
401 There must be no space between the variable name and ``='', and no
404 Alternately, a GUI editor for project files is available (@pxref{GUI
405 Editor}). It uses Emacs widgets, similar to Emacs customize.
407 The GUI editor also provides a convenient way to view current project
408 settings, if they have been modified using menu commands rather than
409 by editing the project file.
411 After the first Ada mode build command is invoked, there is always a
412 current project file, given by the lisp variable
413 @code{ada-prj-default-project-file}. Currently, the only way to show
414 the current project file is to invoke the GUI editor.
416 To find the project file the first time, Ada mode uses the following
421 If @code{ada-prj-default-project-file} is set, use that.
424 Otherwise, search for a file in the current directory with
425 the same base name as the Ada file, but extension given by
426 @code{ada-prj-file-extension} (default @code{".adp"}).
429 If not found, search for @file{*.adp} in the current directory; if
430 several are found, prompt the user to select one.
433 If none are found, use @file{default.adp} in the current directory (even
434 if it does not exist).
438 This algorithm always sets @code{ada-prj-default-project-file}, even
439 when the file does not actually exist.
441 To change the project file before or after the first one is found,
442 invoke @samp{Ada | Project | Load ...}.
444 Or, in lisp, evaluate @code{(ada-set-default-project-file "/path/file.adp")}.
445 This sets @code{ada-prj-default-project-file}, and reads the project file.
447 You can also specify a GNAT project file to @samp{Ada | Project | Load
448 ...} or @code{ada-set-default-project-file}. Emacs Ada mode checks the
449 file extension; if it is @code{.gpr}, the file is treated as a GNAT
450 project file. Any other extension is treated as an Emacs Ada mode
456 The project file editor is invoked with the menu @samp{Ada | Projects
459 Once in the buffer for editing the project file, you can save your
460 modification using the @samp{[save]} button at the bottom of the
461 buffer, or the @kbd{C-x C-s} binding. To cancel your modifications,
462 kill the buffer or click on the @samp{[cancel]} button.
464 @node Project file variables
465 @section Project file variables
467 The following variables can be defined in a project file; some can
468 also be defined in lisp variables.
470 To set a project variable that is a list, specify each element of the
471 list on a separate line in the project file.
473 Any project variable can be referenced in other project variables,
474 using a shell-like notation. For instance, if the variable
475 @code{comp_cmd} contains @code{$@{comp_opt@}}, the value of the
476 @code{comp_opt} variable will be substituted when @code{comp_cmd} is
479 In addition, process environment variables can be referenced using the
480 same syntax, or the normal @code{$var} syntax.
482 Most project variables have defaults that can be changed by setting
483 lisp variables; the table below identifies the lisp variable for each
484 project variable. Lisp variables corresponding to project variables
485 that are lists are lisp lists.
487 In general, project variables are evaluated when referenced in
488 Emacs Ada mode commands. Relative file paths are expanded to
489 absolute relative to @code{$@{build_dir@}}.
491 Here is the list of variables. In the default values, the current
492 directory @code{"."} is the project file directory.
495 @c defined in ada-default-prj-properties; alphabetical order
497 @item @code{ada_project_path_sep} [default: @code{":" or ";"}]
498 Path separator for @code{ADA_PROJECT_PATH}. It defaults to the correct
499 value for a native implementation of GNAT for the current operating
500 system. The user must override this when using Windows native GNAT
501 with Cygwin Emacs, and perhaps in other cases.
503 Lisp variable: @code{ada-prj-ada-project-path-sep}.
505 @item @code{ada_project_path} [default: @code{""}]
506 A list of directories to search for GNAT project files.
508 If set, the @code{ADA_PROJECT_PATH} process environment variable is
509 set to this value in the Emacs process when the Emacs Ada mode project
510 is selected via menu @samp{Ada | Project | Load}.
512 For @code{ada_project_path}, relative file paths are expanded to
513 absolute when the Emacs Ada project file is read, rather than when the
514 project file is selected.
516 For example if the project file is in the directory
517 @file{/home/myproject}, the environment variable @code{GDS_ROOT} is
518 set to @code{/home/shared}, and the project file contains:
520 ada_project_path_sep=:
521 ada_project_path=$GDS_ROOT/makerules
522 ada_project_path=../opentoken
524 then as a result the environment variable @code{ADA_PROJECT_PATH} will
525 be set to @code{"/home/shared/makerules:/home/opentoken/"}.
527 The default value is not the current value of this environment
528 variable, because that will typically have been set by another
529 project, and will therefore be incorrect for this project.
531 If you have the environment variable set correctly for all of your
532 projects, you do not need to set this project variable.
534 @item @code{bind_opt} [default: @code{""}]
535 Holds user binder options; used in the default build commands.
537 Lisp variable: @code{ada-prj-default-bind-opt}.
539 @item @code{build_dir} [default: @code{"."}]
540 The compile commands will be issued in this directory.
542 @item @code{casing} [default: @code{("~/.emacs_case_exceptions")}
543 List of files containing casing exceptions. See the help on
544 @code{ada-case-exception-file} for more info.
545 @c FIXME: section on case exceptions
547 Lisp variable: @code{ada-case-exception-file}.
549 @item @code{check_cmd} [default: @code{"$@{cross_prefix@}gnatmake -u -c -gnatc $@{gnatmake_opt@} $@{full_current@} -cargs $@{comp_opt@}"}]
550 Command used to syntax check a single file.
551 The name of the file is substituted for @code{full_current}.
553 Lisp variable: @code{ada-prj-default-check-cmd}
555 @item @code{comp_cmd} [default: @code{"$@{cross_prefix@}gnatmake -u -c $@{gnatmake_opt@} $@{full_current@} -cargs $@{comp_opt@}"}]
556 Command used to compile a single file.
557 The name of the file is substituted for @code{full_current}.
559 Lisp variable: @code{ada-prj-default-comp-cmd}.
561 @item @code{comp_opt} [default: @code{"-gnatq -gnatQ"}]
562 Holds user compiler options; used in the default compile commands. The
563 default value tells gnatmake to generate library files for
564 cross-referencing even when there are errors.
566 If source code for the project is in multiple directories, the
567 appropriate compiler options must be added here. @ref{Set source
568 search path} for examples of this. Alternately, GNAT project files may
569 be used; @ref{Use GNAT project file}.
571 Lisp variable: @code{ada-prj-default-comp-opt}.
573 @item @code{cross_prefix} [default: @code{""}]
574 Name of target machine in a cross-compilation environment. Used in
575 default compile and build commands.
577 @item @code{debug_cmd} [default: @code{"$@{cross_prefix@}gdb $@{main@}"}]
578 Command used to debug the application
580 Lisp variable: @code{ada-prj-default-debugger}.
582 @item @code{debug_post_cmd} [default: @code{""}]
583 Command executed after @code{debug_cmd}.
585 @item @code{debug_pre_cmd} [default: @code{"cd $@{build_dir@}"}]
586 Command executed before @code{debug_cmd}.
588 @item @code{gnatfind_opt} [default: @code{"-rf"}]
589 Holds user gnatfind options; used in the default find commands.
591 Lisp variable: @code{ada-prj-gnatfind-switches}.
593 @item @code{gnatmake_opt} [default: @code{"-g"}]
594 Holds user gnatmake options; used in the default build commands.
596 Lisp variable: @code{ada-prj-default-gnatmake-opt}.
598 @item @code{gpr_file} [default: @code{""}]
599 Specify GNAT project file.
601 If set, the source and object directories specified in the GNAT
602 project file are appended to @code{src_dir} and @code{obj_dir}. This
603 allows specifying Ada source directories with a GNAT project file, and
604 other source directories with the Emacs project file.
606 In addition, @code{-P@{gpr_file@}} is added to the project variable
607 @code{gnatmake_opt} whenever it is referenced. With the default
608 project variables, this passes the project file to all gnatmake
611 Lisp variable: @code{ada-prj-default-gpr-file}.
613 @c FIXME: add gnatstub-opts
615 @item @code{link_opt} [default: @code{""}]
616 Holds user linker options; used in the default build commands.
618 Lisp variable: @code{ada-prj-default-link-opt}.
620 @item @code{main} [default: current file]
621 Specifies the name of the executable file for the project; used in the
622 default build commands.
624 @item @code{make_cmd} [default: @code{"$@{cross_prefix@}gnatmake -o $@{main@} $@{main@} $@{gnatmake_opt@} -cargs $@{comp_opt@} -bargs $@{bind_opt@} -largs $@{link_opt@}"}]
625 Command used to build the application.
627 Lisp variable: @code{ada-prj-default-make-cmd}.
629 @item @code{obj_dir} [default: @code{"."}]
630 A list of directories to search for library files. Ada mode searches
631 this list for the @samp{.ali} files generated by GNAT that contain
632 cross-reference information.
634 The compiler commands must place the @samp{.ali} files in one of these
635 directories; the default commands do that.
637 @item @code{remote_machine} [default: @code{""}]
638 Name of the machine to log into before issuing the compile and build
639 commands. If this variable is empty, the command will be run on the
642 @item @code{run_cmd} [default: @code{"./$@{main@}"}]
643 Command used to run the application.
645 @item @code{src_dir} [default: @code{"."}]
646 A list of directories to search for source files, both for compile
647 commands and source navigation.
651 @node Compiling Examples
652 @chapter Compiling Examples
654 We present several small projects, and walk thru the process of
655 compiling, linking, and running them.
657 The first example illustrates more Ada mode features than the others;
658 you should work thru that example before doing the others.
660 All of these examples assume you are using GNAT.
662 The source for these examples is available on the Emacs Ada mode
663 website mentioned in @xref{Installation}.
666 * No project files:: Just menus
667 * Set compiler options:: A basic Ada mode project file
668 * Set source search path:: Source in multiple directories
669 * Use GNAT project file::
670 * Use multiple GNAT project files::
673 @node No project files
674 @section No project files
675 This example uses no project files.
677 First, create a directory @file{Example_1}, containing:
685 Put_Line("Hello from hello.adb");
689 Yes, this is missing ``use Ada.Text_IO;'' - we want to demonstrate
690 compiler error handling.
702 This file has no errors.
704 @file{hello_pkg.ads}:
712 This file has no errors.
714 @file{hello_pkg.adb}:
721 Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb");
726 Yes, this is missing the keyword @code{body}; another compiler error
729 In buffer @file{hello.adb}, invoke @samp{Ada | Check file}. You should
730 get a @code{*compilation*} buffer containing something like (the
731 directory paths will be different):
734 cd c:/Examples/Example_1/
735 gnatmake -u -c -gnatc -g c:/Examples/Example_1/hello.adb -cargs -gnatq -gnatQ
736 gcc -c -Ic:/Examples/Example_1/ -gnatc -g -gnatq -gnatQ -I- c:/Examples/Example_1/hello.adb
737 hello.adb:4:04: "Put_Line" is not visible
738 hello.adb:4:04: non-visible declaration at a-textio.ads:264
739 hello.adb:4:04: non-visible declaration at a-textio.ads:260
740 gnatmake: "c:/Examples/Example_1/hello.adb" compilation error
743 If you have enabled font-lock, the lines with actual errors (starting
744 with @file{hello.adb}) are highlighted, with the file name in red.
746 Now type @kbd{C-x `} (on a PC keyboard, @key{`} is next to @key{1}).
747 Or you can click the middle mouse button on the first error line. The
748 compilation buffer scrolls to put the first error on the top line, and
749 point is put at the place of the error in the @file{hello.adb} buffer.
751 To fix the error, change the line to be
754 Ada.Text_IO.Put_Line ("hello from hello.adb");
757 Now invoke @samp{Ada | Show main}; this displays @samp{Ada mode main: hello}.
759 Now (in buffer @file{hello.adb}), invoke @samp{Ada | Build}. You are
760 prompted to save the file (if you haven't already). Then the
761 compilation buffer is displayed again, containing:
764 cd c:/Examples/Example_1/
765 gnatmake -o hello hello -g -cargs -gnatq -gnatQ -bargs -largs
766 gcc -c -g -gnatq -gnatQ hello.adb
767 gnatbind -x hello.ali
768 gnatlink hello.ali -o hello.exe -g
771 The compilation has succeeded without errors; @file{hello.exe} now
772 exists in the same directory as @file{hello.adb}.
774 Now invoke @samp{Ada | Run}. A @file{*run*} buffer is displayed,
783 That completes the first part of this example.
785 Now we will compile a multi-file project. Open the file
786 @file{hello_2.adb}, and invoke @samp{Ada | Set main and Build}. This
787 finds an error in @file{hello_pkg.adb}:
790 cd c:/Examples/Example_1/
791 gnatmake -o hello_2 hello_2 -g -cargs -gnatq -gnatQ -bargs -largs
792 gcc -c -g -gnatq -gnatQ hello_pkg.adb
793 hello_pkg.adb:2:08: keyword "body" expected here [see file name]
794 gnatmake: "hello_pkg.adb" compilation error
797 This demonstrates that gnatmake finds the files needed by the main
798 program. However, it cannot find files in a different directory,
799 unless you use an Emacs Ada mode project file to specify the other directories;
800 @xref{Set source search path}, or a GNAT project file; @ref{Use GNAT
803 Invoke @samp{Ada | Show main}; this displays @file{Ada mode main: hello_2}.
805 Move to the error with @kbd{C-x `}, and fix the error by adding @code{body}:
808 package body Hello_Pkg is
811 Now, while still in @file{hello_pkg.adb}, invoke @samp{Ada | Build}.
812 gnatmake successfully builds @file{hello_2}. This demonstrates that
813 Emacs has remembered the main file, in the project variable
814 @code{main}, and used it for the Build command.
816 Finally, again while in @file{hello_pkg.adb}, invoke @samp{Ada | Run}.
817 The @code{*run*} buffer displays @code{Hello from hello_pkg.adb}.
819 One final point. If you switch back to buffer @file{hello.adb}, and
820 invoke @samp{Ada | Run}, @file{hello_2.exe} will be run. That is
821 because @code{main} is still set to @code{hello_2}, as you can
822 see when you invoke @samp{Ada | Project | Edit}.
824 There are three ways to change @code{main}:
828 Invoke @samp{Ada | Set main and Build}, which sets @code{main} to
832 Invoke @samp{Ada | Project | Edit}, edit @code{main}, and click @samp{[save]}
835 Invoke @samp{Ada | Project | Load}, and load a project file that specifies @code{main}
839 @node Set compiler options
840 @section Set compiler options
842 This example illustrates using an Emacs Ada mode project file to set a
845 If you have files from @file{Example_1} open in Emacs, you should
846 close them so you don't get confused. Use menu @samp{File | Close
849 In directory @file{Example_2}, create these files:
857 Put_Line("Hello from hello.adb");
861 This is the same as @file{hello.adb} from @file{Example_1}. It has two
862 errors; missing ``use Ada.Text_IO;'', and no space between
863 @code{Put_Line} and its argument list.
871 This tells the GNAT compiler to check for token spacing; in
872 particular, there must be a space preceding a parenthesis.
874 In buffer @file{hello.adb}, invoke @samp{Ada | Project | Load...}, and
875 select @file{Example_2/hello.adp}.
877 Then, again in buffer @file{hello.adb}, invoke @samp{Ada | Set main and
878 Build}. You should get a @code{*compilation*} buffer containing
879 something like (the directory paths will be different):
882 cd c:/Examples/Example_2/
883 gnatmake -o hello hello -g -cargs -gnatyt -bargs -largs
884 gcc -c -g -gnatyt hello.adb
885 hello.adb:4:04: "Put_Line" is not visible
886 hello.adb:4:04: non-visible declaration at a-textio.ads:264
887 hello.adb:4:04: non-visible declaration at a-textio.ads:260
888 hello.adb:4:12: (style) space required
889 gnatmake: "hello.adb" compilation error
892 Compare this to the compiler output in @ref{No project files}; the
893 gnatmake option @code{-cargs -gnatq -gnatQ} has been replaced by
894 @code{-cargs -gnaty}, and an additional error is reported in
895 @file{hello.adb} on line 4. This shows that @file{hello.adp} is being
896 used to set the compiler options.
898 Fixing the error, linking and running the code proceed as in @ref{No
901 @node Set source search path
902 @section Set source search path
904 In this example, we show how to deal with files in more than one
905 directory. We start with the same code as in @ref{No project files};
906 create those files (with the errors present)
908 Create the directory @file{Example_3}, containing:
910 @file{hello_pkg.ads}:
918 @file{hello_pkg.adb}:
925 Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb");
930 These are the same files from example 1; @file{hello_pkg.adb} has an
933 In addition, create a directory @file{Example_3/Other}, containing these files:
935 @file{Other/hello_3.adb}:
939 with Ada.Text_IO; use Ada.Text_IO;
943 Put_Line ("From hello_3");
947 There are no errors in this file.
949 @file{Other/other.adp}:
956 Note that there must be no trailing spaces.
958 In buffer @file{hello_3.adb}, invoke @samp{Ada | Project | Load...}, and
959 select @file{Example_3/Other/other.adp}.
961 Then, again in @file{hello_3.adb}, invoke @samp{Ada | Set main and
962 Build}. You should get a @code{*compilation*} buffer containing
963 something like (the directory paths will be different):
966 cd c:/Examples/Example_3/Other/
967 gnatmake -o hello_3 hello_3 -g -cargs -I.. -bargs -largs
968 gcc -c -g -I.. hello_3.adb
969 gcc -c -I./ -g -I.. -I- C:\Examples\Example_3\hello_pkg.adb
970 hello_pkg.adb:2:08: keyword "body" expected here [see file name]
971 gnatmake: "C:\Examples\Example_3\hello_pkg.adb" compilation error
974 Compare the @code{-cargs} option to the compiler output in @ref{Set
975 compiler options}; this shows that @file{other.adp} is being used to
976 set the compiler options.
978 Move to the error with @kbd{C-x `}. Ada mode searches the list of
979 directories given by @code{src_dir} for the file mentioned in the
980 compiler error message.
982 Fixing the error, linking and running the code proceed as in @ref{No
985 @node Use GNAT project file
986 @section Use GNAT project file
988 In this example, we show how to use a GNAT project file, with no Ada
991 Create the directory @file{Example_4}, containing:
993 @file{hello_pkg.ads}:
1001 @file{hello_pkg.adb}:
1005 package Hello_Pkg is
1008 Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb");
1013 These are the same files from example 1; @file{hello_pkg.adb} has an
1016 In addition, create a directory @file{Example_4/Gnat_Project},
1017 containing these files:
1019 @file{Gnat_Project/hello_4.adb}:
1023 with Ada.Text_IO; use Ada.Text_IO;
1026 Hello_Pkg.Say_Hello;
1027 Put_Line ("From hello_4");
1031 There are no errors in this file.
1033 @file{Gnat_Project/hello_4.gpr}:
1037 for Source_Dirs use (".", "..");
1041 In buffer @file{hello_4.adb}, invoke @samp{Ada | Project | Load...}, and
1042 select @file{Example_4/Gnat_Project/hello_4.gpr}.
1044 Then, again in @file{hello_4.adb}, invoke @samp{Ada | Set main and
1045 Build}. You should get a @code{*compilation*} buffer containing
1046 something like (the directory paths will be different):
1049 cd c:/Examples/Example_4/Gnat_Project/
1050 gnatmake -o hello_4 hello_4 -Phello_4.gpr -cargs -gnatq -gnatQ -bargs -largs
1051 gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\Gnat_Project\hello_4.adb
1052 gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb
1053 hello_pkg.adb:2:08: keyword "body" expected here [see file name]
1054 gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error
1057 Compare the @code{gcc} options to the compiler output in @ref{Set
1058 compiler options}; this shows that @file{hello_4.gpr} is being used to
1059 set the compiler options.
1061 Fixing the error, linking and running the code proceed as in @ref{No
1064 @node Use multiple GNAT project files
1065 @section Use multiple GNAT project files
1067 In this example, we show how to use multiple GNAT project files,
1068 specifying the GNAT project search path in an Ada mode project file.
1070 Create the directory @file{Example_4} as specified in @ref{Use GNAT
1073 Create the directory @file{Example_5}, containing:
1079 with Ada.Text_IO; use Ada.Text_IO;
1082 Hello_Pkg.Say_Hello;
1083 Put_Line ("From hello_5");
1087 There are no errors in this file.
1092 ada_project_path=../Example_4/Gnat_Project
1093 gpr_file=hello_5.gpr
1101 for Source_Dirs use (".");
1103 for Default_Switches ("Ada") use ("-g", "-gnatyt");
1108 In buffer @file{hello_5.adb}, invoke @samp{Ada | Project | Load...}, and
1109 select @file{Example_5/hello_5.adp}.
1111 Then, again in @file{hello_5.adb}, invoke @samp{Ada | Set main and
1112 Build}. You should get a @code{*compilation*} buffer containing
1113 something like (the directory paths will be different):
1116 cd c:/Examples/Example_5/
1117 gnatmake -o hello_5 hello_5 -Phello_5.gpr -g -cargs -gnatq -gnatQ -bargs -largs
1118 gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_5\hello_5.adb
1119 gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb
1120 hello_pkg.adb:2:08: keyword "body" expected here [see file name]
1121 gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error
1124 Now type @kbd{C-x `}. @file{Example_4/hello_pkg.adb} is shown,
1125 demonstrating that @file{hello_5.gpr} and @file{hello_4.gpr} are being
1126 used to set the compilation search path.
1128 @node Moving Through Ada Code
1129 @chapter Moving Through Ada Code
1131 There are several easy to use commands to navigate through Ada code. All
1132 these functions are available through the Ada menu, and you can also
1133 use the following key bindings or the command names. Some of these
1134 menu entries are available only if the GNAT compiler is used, since
1135 the implementation relies on the GNAT cross-referencing information.
1139 @findex ada-next-procedure
1140 Move to the next function/procedure/task, which ever comes next
1141 (@code{ada-next-procedure}).
1143 @findex ada-previous-procedure
1144 Move to previous function/procedure/task
1145 (@code{ada-previous-procedure}).
1146 @item M-x ada-next-package
1147 @findex ada-next-package
1148 Move to next package.
1149 @item M-x ada-previous-package
1150 @findex ada-previous-package
1151 Move to previous package.
1153 @findex ada-move-to-start
1154 Move to matching start of @code{end} (@code{ada-move-to-start}). If
1155 point is at the end of a subprogram, this command jumps to the
1156 corresponding @code{begin} if the user option
1157 @code{ada-move-to-declaration} is @code{nil} (default), otherwise it jumps to
1158 the subprogram declaration.
1160 @findex ada-move-to-end
1161 Move point to end of current block (@code{ada-move-to-end}).
1163 Switch between corresponding spec and body file
1164 (@code{ff-find-other-file}). If point is in a subprogram, position
1165 point on the corresponding declaration or body in the other file.
1167 @findex ada-goto-declaration
1168 Move from any reference to its declaration, for from a declaration to
1169 its body (for procedures, tasks, private and incomplete types).
1171 @findex ada-find-references
1172 Runs the @file{gnatfind} command to search for all references to the
1173 identifier surrounding point (@code{ada-find-references}). Use
1174 @kbd{C-x `} (@code{next-error}) to visit each reference (as for
1175 compilation errors).
1178 If the @code{ada-xref-create-ali} variable is non-@code{nil}, Emacs
1179 will try to run GNAT for you whenever cross-reference information is
1180 needed, and is older than the current source file.
1182 @node Identifier completion
1183 @chapter Identifier completion
1185 Emacs and Ada mode provide two general ways for the completion of
1186 identifiers. This is an easy way to type faster: you just have to type
1187 the first few letters of an identifiers, and then loop through all the
1188 possible completions.
1190 The first method is general for Emacs. It works by parsing all open
1191 files for possible completions.
1193 For instance, if the words @samp{my_identifier}, @samp{my_subprogram}
1194 are the only words starting with @samp{my} in any of the opened files,
1195 then you will have this scenario:
1198 You type: my@kbd{M-/}
1199 Emacs inserts: @samp{my_identifier}
1200 If you press @kbd{M-/} once again, Emacs replaces @samp{my_identifier} with
1201 @samp{my_subprogram}.
1202 Pressing @kbd{M-/} once more will bring you back to @samp{my_identifier}.
1205 This is a very fast way to do completion, and the casing of words will
1208 The second method (@kbd{C-@key{TAB}}) is specific to Ada mode and the GNAT
1209 compiler. Emacs will search the cross-information for possible
1212 The main advantage is that this completion is more accurate: only
1213 existing identifier will be suggested.
1215 On the other hand, this completion is a little bit slower and requires
1216 that you have compiled your file at least once since you created that
1221 @findex ada-complete-identifier
1222 Complete current identifier using cross-reference information.
1224 Complete identifier using buffer information (not Ada-specific).
1227 @node Automatic Smart Indentation
1228 @chapter Automatic Smart Indentation
1230 Ada mode comes with a full set of rules for automatic indentation. You
1231 can also configure the indentation, via the following variables:
1234 @item @code{ada-broken-indent} (default value: 2)
1235 Number of columns to indent the continuation of a broken line.
1237 @item @code{ada-indent} (default value: 3)
1238 Number of columns for default indentation.
1240 @item @code{ada-indent-record-rel-type} (default value: 3)
1241 Indentation for @code{record} relative to @code{type} or @code{use}.
1243 @item @code{ada-indent-return} (default value: 0)
1244 Indentation for @code{return} relative to @code{function} (if
1245 @code{ada-indent-return} is greater than 0), or the open parenthesis
1246 (if @code{ada-indent-return} is negative or 0). Note that in the second
1247 case, when there is no open parenthesis, the indentation is done
1248 relative to @code{function} with the value of @code{ada-broken-indent}.
1250 @item @code{ada-label-indent} (default value: -4)
1251 Number of columns to indent a label.
1253 @item @code{ada-stmt-end-indent} (default value: 0)
1254 Number of columns to indent a statement @code{end} keyword on a separate line.
1256 @item @code{ada-when-indent} (default value: 3)
1257 Indentation for @code{when} relative to @code{exception} or @code{case}.
1259 @item @code{ada-indent-is-separate} (default value: t)
1260 Non-@code{nil} means indent @code{is separate} or @code{is abstract} if on a single line.
1262 @item @code{ada-indent-to-open-paren} (default value: t)
1263 Non-@code{nil} means indent according to the innermost open parenthesis.
1265 @item @code{ada-indent-after-return} (default value: t)
1266 Non-@code{nil} means that the current line will also be re-indented
1267 before inserting a newline, when you press @key{RET}.
1270 Most of the time, the indentation will be automatic, i.e., when you
1271 press @key{RET}, the cursor will move to the correct column on the
1274 You can also indent single lines, or the current region, with @key{TAB}.
1276 Another mode of indentation exists that helps you to set up your
1277 indentation scheme. If you press @kbd{C-c @key{TAB}}, Ada mode will do
1282 Reindent the current line, as @key{TAB} would do.
1284 Temporarily move the cursor to a reference line, i.e., the line that
1285 was used to calculate the current indentation.
1287 Display in the message window the name of the variable that provided
1288 the offset for the indentation.
1291 The exact indentation of the current line is the same as the one for the
1292 reference line, plus an offset given by the variable.
1296 Indent the current line or the current region.
1298 Indent lines in the current region.
1300 Indent the current line and display the name of the variable used for
1304 @node Formatting Parameter Lists
1305 @chapter Formatting Parameter Lists
1309 @findex ada-format-paramlist
1310 Format the parameter list (@code{ada-format-paramlist}).
1313 This aligns the declarations on the colon (@samp{:}) separating
1314 argument names and argument types, and aligns the @code{in},
1315 @code{out} and @code{in out} keywords.
1317 @node Automatic Casing
1318 @chapter Automatic Casing
1320 Casing of identifiers, attributes and keywords is automatically
1321 performed while typing when the variable @code{ada-auto-case} is set.
1322 Every time you press a word separator, the previous word is
1323 automatically cased.
1325 You can customize the automatic casing differently for keywords,
1326 attributes and identifiers. The relevant variables are the following:
1327 @code{ada-case-keyword}, @code{ada-case-attribute} and
1328 @code{ada-case-identifier}.
1330 All these variables can have one of the following values:
1334 The word will be lowercase. For instance @code{My_vARIable} is
1335 converted to @code{my_variable}.
1338 The word will be uppercase. For instance @code{My_vARIable} is
1339 converted to @code{MY_VARIABLE}.
1341 @item ada-capitalize-word
1342 The first letter and each letter following an underscore (@samp{_})
1343 are uppercase, others are lowercase. For instance @code{My_vARIable}
1344 is converted to @code{My_Variable}.
1346 @item ada-loose-case-word
1347 Characters after an underscore @samp{_} character are uppercase,
1348 others are not modified. For instance @code{My_vARIable} is converted
1349 to @code{My_VARIable}.
1352 Ada mode allows you to define exceptions to these rules, in a file
1353 specified by the variable @code{ada-case-exception-file}
1354 (default @file{~/.emacs_case_exceptions}). Each line in this file
1355 specifies the casing of one word or word fragment. Comments may be
1356 included, separated from the word by a space.
1358 If the word starts with an asterisk (@key{*}), it defines the casing
1359 as a word fragment (or ``substring''); part of a word between two
1360 underscores or word boundary.
1365 DOD Department of Defense
1367 GNAT The GNAT compiler from Ada Core Technologies
1370 The word fragment @code{*IO} applies to any word containing ``_io'';
1371 @code{Text_IO}, @code{Hardware_IO}, etc.
1373 @findex ada-create-case-exception
1374 There are two ways to add new items to this file: you can simply edit
1375 it as you would edit any text file. Or you can position point on the
1376 word you want to add, and select menu @samp{Ada | Edit | Create Case
1377 Exception}, or press @kbd{C-c C-y} (@code{ada-create-case-exception}).
1378 The word will automatically be added to the current list of exceptions
1381 To define a word fragment case exception, select the word fragment,
1382 then select menu @samp{Ada | Edit | Create Case Exception Substring}.
1384 It is sometimes useful to have multiple exception files around (for
1385 instance, one could be the standard Ada acronyms, the second some
1386 company specific exceptions, and the last one some project specific
1387 exceptions). If you set up the variable @code{ada-case-exception-file}
1388 as a list of files, each of them will be parsed and used in your emacs
1389 session. However, when you save a new exception through the menu, as
1390 described above, the new exception will be added to the first file in
1395 @findex ada-adjust-case-buffer
1396 Adjust case in the whole buffer (@code{ada-adjust-case-buffer}).
1398 Create a new entry in the exception dictionary, with the word under
1399 the cursor (@code{ada-create-case-exception})
1401 @findex ada-case-read-exceptions
1402 Rereads the exception dictionary from the file
1403 @code{ada-case-exception-file} (@code{ada-case-read-exceptions}).
1406 @node Statement Templates
1407 @chapter Statement Templates
1409 Templates are defined for most Ada statements, using the Emacs
1410 ``skeleton'' package. They can be inserted in the buffer using the
1415 @findex ada-exception-block
1416 exception Block (@code{ada-exception-block}).
1419 case (@code{ada-case}).
1421 @findex ada-declare-block
1422 declare Block (@code{ada-declare-block}).
1425 else (@code{ada-else}).
1427 @findex ada-for-loop
1428 for Loop (@code{ada-for-loop}).
1431 Header (@code{ada-header}).
1436 @findex ada-package-body
1437 package Body (@code{ada-package-body}).
1440 loop (@code{ada-loop}).
1442 @findex ada-subprogram-body
1443 subprogram body (@code{ada-subprogram-body}).
1445 @findex ada-task-body
1446 task Body (@code{ada-task-body}).
1449 while Loop (@code{ada-while}).
1452 use (@code{ada-use}).
1455 exit (@code{ada-exit}).
1458 array (@code{ada-array}).
1461 elsif (@code{ada-elsif}).
1463 @findex ada-function-spec
1464 function Spec (@code{ada-function-spec}).
1466 @findex ada-package-spec
1467 package Spec (@code{ada-package-spec}).
1469 @findex ada-procedure-spec
1470 procedure Spec (@code{ada-package-spec}.
1473 record (@code{ada-record}).
1476 subtype (@code{ada-subtype}).
1478 @findex ada-task-spec
1479 task Spec (@code{ada-task-spec}).
1482 with (@code{ada-with}).
1485 private (@code{ada-private}).
1488 when (@code{ada-when}).
1490 @findex ada-exception
1491 exception (@code{ada-exception}).
1494 type (@code{ada-type}).
1497 @node Comment Handling
1498 @chapter Comment Handling
1500 By default, comment lines get indented like Ada code. There are a few
1501 additional functions to handle comments:
1505 Start a comment in default column.
1507 Continue comment on next line.
1509 Comment the selected region (add @samp{--} at the beginning of lines).
1511 Uncomment the selected region
1513 autofill the current comment.
1516 @node GNU Free Documentation License
1517 @appendix GNU Free Documentation License
1518 @include doclicense.texi