]> Ada Mode Copyright © 1999, 2000, 2001, 2002, 2003, 2004,2005, 2006, 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being “The GNU Manifesto”, “Distribution” and “GNU GENERAL PUBLIC LICENSE”, with the Front-Cover texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License” in the Emacs manual. (a) The FSF's Back-Cover Text is: “You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.” This document is part of a collection distributed under the GNU Free Documentation License. If you want to distribute this document separately from the collection, you can do so by adding a copy of the license to the document, as described in section 6 of the license. Overview The Emacs mode for programming in Ada helps the user in understanding existing code and facilitates writing new code. When the Gnu Ada compiler GNAT is used, the cross-reference information output by the compiler is used to provide powerful code navigation (jump to definition, find all uses, etc). When you open a file with a file extension of .ads or .adb, Emacs will automatically load and activate Ada mode. Ada mode works without any customization, if you are using the GNAT compiler (https://libre2.adacore.com/) and the GNAT default naming convention. You must customize a few things if you are using a different compiler or file naming convention; See , See . In addition, you may want to customize the indentation, capitalization, and other things; See . Finally, for large Ada projects, you will want to set up an Emacs Ada mode project file for each project; See . Note that these are different from the GNAT project files used by gnatmake and other GNAT commands. See the Emacs info manual, section 'Running Debuggers Under Emacs', for general information on debugging. Installation Ada mode is part of the standard Emacs distribution; if you use that, no files need to be installed. Ada mode is also available as a separate distribution, from the Emacs Ada mode website http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html. The separate distribution may be more recent. For installing the separate distribution, see the README file in the distribution. To see what version of Ada mode you have installed, do M-x ada-mode-version. The following files are provided with the Ada mode distribution: ada-mode.el: The main file for Ada mode, providing indentation,formatting of parameter lists, moving through code, comment handlingand automatic casing. ada-prj.el: GUI editing of Ada mode project files, using Emacswidgets. ada-stmt.el: Ada statement templates. ada-xref.el: GNAT cross-references, completion of identifiers,and compilation. Also provides project files (which are notGNAT-specific). Customizing Ada mode Here we assume you are familiar with setting variables in Emacs, either thru 'customize' or in elisp (in your .emacs file). For a basic introduction to customize, elisp, and Emacs in general, see the tutorial in These global Emacs settings are strongly recommended (put them in your .emacs): (global-font-lock-mode t) (transient-mark-mode t) (global-font-lock-mode t)’ turns on syntax highlighting for all buffers (it is off by default because it may be too slow for some machines). (transient-mark-mode t)’ highlights selected text. See the Emacs help for each of these variables for more information. Non-standard file names By default, Ada mode is configured to use the GNAT file naming convention, where file names are a simple modification of the Ada names, and the extension for specs and bodies are ‘.ads’ and ‘.adb’, respectively. Ada mode uses the file extentions to allow moving from a package body to the corresponding spec and back. Ada mode supports a list of alternative file extensions for specs and bodies. For instance, if your spec and bodies files are called unit_s.ada and unit_b.ada, respectively, you can add the following to your .emacs file: (ada-add-extensions "_s.ada" "_b.ada") You can define additional extensions: (ada-add-extensions ".ads" "_b.ada") (ada-add-extensions ".ads" ".body") This means that whenever Ada mode looks for the body for a file whose extension is .ads, it will take the first available file that ends with either .adb, _b.ada or .body. Simililarly, if Ada mode is looking for a spec, it will look for .ads or _s.ada. If the filename is not derived from the Ada name following the GNAT convention, things are a little more complicated. You then need to rewrite the function ada-make-filename-from-adaname. Doing that is beyond the scope of this manual; see the current definitions in ada-mode.el and ada-xref.el for examples. Other compiler By default, Ada mode is configured to use the Gnu Ada compiler GNAT. To use a different Ada compiler, you must specify the command lines used to run that compiler, either in lisp variables or in Emacs Ada mode project files. See for the list of project variables, and the corresponding lisp variables. Other customization All user-settable Ada mode variables can be set via the menu ‘Ada | Customize’. Click on the ‘Help’ button there for help on using customize. To modify a specific variable, you can directly call the function customize-variable; just type M-x customize-variable RET variable-name RET). Alternately, you can specify variable settings in the Emacs configuration file, .emacs. This file is coded in Emacs lisp, and the syntax to set a variable is the following: (setq variable-name value) Compiling Executing Ada projects can be compiled, linked, and executed using commands on the Ada menu. All of these commands can be customized via a project file (see ), but the defaults are sufficient for using the GNAT compiler for simple projects (single files, or several files in a single directory). Even when no project file is used, the GUI project editor (menu Ada | Project | Edit) shows the settings of the various project file variables referenced here. Compile commands Here are the commands for building and using an Ada project, as listed in the Ada menu. In multi-file projects, there must be one file that is the main program. That is given by the main_unit project file variable; it defaults to the current file if not yet set, but is also set by the “set main and build” command. Check file Compiles the current file in syntax check mode, by runningcheck_cmd defined in the current project file. This typicallyruns faster than full compile mode, speeding up finding and fixingcompilation errors.This sets main_unit only if it has not been set yet. Compile file Compiles the current file, by running comp_cmd from the currentproject file.This does not set main_unit. Set main and Build Sets main_unit to the current file, then executes the Buildcommand. Show main Display main_unit in the message buffer. Build Compiles all obsolete units of the current main_unit, and linksmain_unit, by running make_cmd from the current project.This sets main_unit only if it has not been set yet. Run Executes the main program in a shell, displayed in a separate Emacsbuffer. This runs run_cmd from the current project. Theexecution buffer allows for interactive input/output.To modify the run command, in particular to provide or change thecommand line arguments, type C-u before invoking the command.This command is not available for a cross-compilation toolchain. It is important when using these commands to understand how main_unit is used and changed. Build runs 'gnatmake' on the main unit. During a typical edit/compile session, this is the only command you need to invoke, which is why it is bound to C-c C-c. It will compile all files needed by the main unit, and display compilation errors in any of them. Note that Build can be invoked from any Ada buffer; typically you will be fixing errors in files other than the main, but you don't have to switch back to the main to invoke the compiler again. Novices and students typically work on single-file Ada projects. In this case, C-c C-m will normally be the only command needed; it will build the current file, rather than the last-built main. There are three ways to change main_unit: Invoke Ada | Set main and Build, which sets main_unit tothe current file. Invoke Ada | Project | Edit, edit main_unit andmain, and click [save] Invoke Ada | Project | Load, and load a project file that specifies main_unit Compiler errors The Check file, Compile file, and Build commands all place compilation errors in a separate buffer named *compilation*. Each line in this buffer will become active: you can simply click on it with the middle button of the mouse, or move point to it and press RET. Emacs will then display the relevant source file and put point on the line and column where the error was found. You can also press the C-x ` key (next-error), and Emacs will jump to the first error. If you press that key again, it will move you to the second error, and so on. Some error messages might also include references to other files. These references are also clickable in the same way, or put point after the line number and press RET. Project files An Emacs Ada mode project file specifies what directories hold sources for your project, and allows you to customize the compilation commands and other things on a per-project basis. Note that Ada mode project files ‘*.adp’ are different than GNAT compiler project files ‘*.gpr’. Project File Overview Project files have a simple syntax; they may be edited directly. Each line specifies a project variable name and its value, separated by “=”: src_dir=/Projects/my_project/src_1 src_dir=/Projects/my_project/src_2 Some variables (like src_dir) are lists; multiple occurances are concatenated. There must be no space between the variable name and “=”, and no trailing spaces. Alternately, a GUI editor for project files is available (see ). It uses Emacs widgets, similar to Emacs customize. The GUI editor also provides a convenient way to view current project settings, if they have been modified using menu commands rather than by editing the project file. After the first Ada mode build command is invoked, there is always a current project file, given by the lisp variable ada-prj-default-project-file. Currently, the only way to show the current project file is to invoke the GUI editor. To find the project file the first time, Ada mode uses the following search algorithm: If ada-prj-default-project-file is set, use that. Otherwise, search for a file in the current directory withthe same base name as the Ada file, but extension given byada-prj-file-extension (default ".adp"). If not found, search for *.adp in the current directory; ifseveral are found, prompt the user to select one. If none are found, use default.adp in the current directory (evenif it does not exist). This algorithm always sets ada-prj-default-project-file, even when the file does not actually exist. To change the project file before or after the first one is found, invoke Ada | Project | Load .... Or, in lisp, evaluate ada-set-default-project-file "/path/file.adp". This sets ada-prj-default-project-file, and reads the project file. GUI Editor The project file editor is invoked with the menu ‘Ada | Projects | Edit’. Once in the buffer for editing the project file, you can save your modification using the ‘[save]’ button at the bottom of the buffer, or the C-x C-s binding. To cancel your modifications, kill the buffer or click on the ‘[cancel]’ button. Project file variables The following variables can be defined in a project file; some can also be defined in lisp variables. To set a project variable that is a list, specify each element of the list on a separate line in the project file. Any project variable can be referenced in other project variables, using a shell-like notation. For instance, if the variable comp_cmd contains ${comp_opt}, the value of the comp_opt variable will be substituted when comp_cmd is used. Most project variables have defaults that can be changed by setting lisp variables; the table below identifies the lisp variable for each project variable. Lisp variables corresponding to project variables that are lists are lisp lists. Here is the list of variables. In the default values, the current directory "." is the project file directory. build_dir [default: "."] The compile commands will be issued in this directory. src_dir [default: "."] A list of directories to search for source files, both for compilecommands and source navigation. obj_dir [default: "."] A list of directories to search for library files. Ada mode searchesthis list for the ‘.ali’ files generated by GNAT that containcross-reference information.The compiler commands must place the ‘.ali’ files in one of thesedirectories; the default commands do that. casing [default: ("~/.emacs_case_exceptions") List of files containing casing exceptions. See the help onada-case-exception-file for more info. Lisp variable: ada-case-exception-file. comp_opt [default: "-gnatq -gnatQ"] Holds user compiler options; used in the default compile commands. Thedefault value tells gnatmake to generate library files forcross-referencing even when there are errors.If source code for the project is in multiple directories, theappropriate compiler options must be added here. for examples of this. Alternately, GNAT project files maybe used; .Lisp variable: ada-prj-default-comp-opt. bind_opt [default: ""] Holds user binder options; used in the default build commands.Lisp variable: ada-prj-default-bind-opt. link_opt [default: ""] Holds user linker options; used in the default build commands.Lisp variable: ada-prj-default-link-opt. gnatmake_opt [default: "-g"] Holds user gnatmake options; used in the default build commands.If a GNAT project file is used (for example project.gpr), thisoption should be set to -Pproject.gpr.Lisp variable: ada-prj-default-gnatmake-opt. gnatfind_opt [default: "-rf"] Holds user gnatfind options; used in the default find commands.Lisp variable: ada-prj-gnatfind-switches. main [default: current file] Specifies the name of the executable file for the project; used in thedefault build commands. main_unit [default: current Ada unit] Specifies the name of the main Ada unit for the project; used in thedefault build commands. cross_prefix [default: ""] Name of target machine in a cross-compilation environment. Used indefault compile and build commands. remote_machine [default: ""] Name of the machine to log into before issuing the compile and buildcommands. If this variable is empty, the command will be run on thelocal machine. comp_cmd [default: "${cross_prefix}gnatmake -u -c ${gnatmake_opt} ${full_current} -cargs ${comp_opt}"] Command used to compile a single file.The name of the file is substituted for full_current.Lisp variable: ada-prj-default-comp-cmd. check_cmd [default: "${cross_prefix}gnatmake -u -c -gnatc ${gnatmake_opt} ${full_current} -cargs ${comp_opt}"] Command used to syntax check a single file.The name of the file is substituted for full_current.Lisp variable: ada-prj-default-check-cmd make_cmd [default: "${cross_prefix}gnatmake -o ${main} ${main_unit} ${gnatmake_opt} -cargs ${comp_opt} -bargs ${bind_opt} -largs ${link_opt}"] Command used to build the application.Lisp variable: ada-prj-default-make-cmd. run_cmd [default: "./${main}"] Command used to run the application. debug_pre_cmd [default: "cd ${build_dir}"] Command executed before debug_cmd. debug_cmd [default: "${cross_prefix}gdb ${main}"] Command used to debug the applicationLisp variable: ada-prj-default-debugger. debug_post_cmd [default: ""] Command executed after debug_cmd. Compiling Examples We present several small projects, and walk thru the process of compiling, linking, and running them. The first example illustrates more Ada mode features than the others; you should work thru that example before doing the others. All of these examples assume you are using GNAT. The source for these examples is available on the Emacs Ada mode website mentioned in See . No project filesThis example uses no project files. First, create a directory Example_1, containing: hello.adb: with Ada.Text_IO; procedure Hello is begin Put_Line("Hello from hello.adb"); end Hello; Yes, this is missing “use Ada.Text_IO;” - we want to demonstrate compiler error handling. hello_2.adb: with Hello_Pkg; procedure Hello_2 is begin Hello_Pkg.Say_Hello; end Hello_2; hello_pkg.ads: package Hello_Pkg is procedure Say_Hello; end Hello_Pkg; hello_pkg.adb: with Ada.Text_IO; package Hello_Pkg is procedure Say_Hello is begin Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); end Say_Hello; end Hello_Pkg; Yes, this is missing the keyword body; another compiler error example. In buffer hello.adb, invoke Ada | Check file. You should get a *compilation* buffer containing something like (the directory paths will be different): cd c:/Examples/Example_1/ gnatmake -u -c -gnatc -g c:/Examples/Example_1/hello.adb -cargs -gnatq -gnatQ gcc -c -Ic:/Examples/Example_1/ -gnatc -g -gnatq -gnatQ -I- c:/Examples/Example_1/hello.adb hello.adb:4:04: "Put_Line" is not visible hello.adb:4:04: non-visible declaration at a-textio.ads:264 hello.adb:4:04: non-visible declaration at a-textio.ads:260 gnatmake: "c:/Examples/Example_1/hello.adb" compilation error If you have enabled font-lock, the lines with actual errors (starting with hello.adb) are highlighted, with the file name in red. Now type C-x ` (on a PC keyboard, ` is next to 1). Or you can click the middle mouse button on the first error line. The compilation buffer scrolls to put the first error on the top line, and point is put at the place of the error in the hello.adb buffer. To fix the error, change the line to be Ada.Text_IO.Put_Line ("hello from hello.adb"): Now invoke Ada | Show main; this displays Ada mode main_unit: hello. Now (in buffer hello.adb), invoke Ada | Build. You are prompted to save the file (if you haven't already). Then the compilation buffer is displayed again, containing: cd c:/Examples/Example_1/ gnatmake -o hello hello -g -cargs -gnatq -gnatQ -bargs -largs gcc -c -g -gnatq -gnatQ hello.adb gnatbind -x hello.ali gnatlink hello.ali -o hello.exe -g The compilation has succeeded without errors; hello.exe now exists in the same directory as hello.adb. Now invoke Ada | Run. A *run* buffer is displayed, containing Hello from hello.adb Process run finished That completes the first part of this example. Now we will compile a multi-file project. Open the file hello_2.adb, and invoke Ada | Set main and Build. This finds an error in hello_pkg.adb: cd c:/Examples/Example_1/ gnatmake -o hello_2 hello_2 -g -cargs -gnatq -gnatQ -bargs -largs gcc -c -g -gnatq -gnatQ hello_pkg.adb hello_pkg.adb:2:08: keyword "body" expected here [see file name] gnatmake: "hello_pkg.adb" compilation error This demonstrates that gnatmake finds the files needed by the main program. However, it cannot find files in a different directory, unless you use an Emacs Ada mode project file to specify the other directories; See , or a GNAT project file; . Invoke Ada | Show main; this displays Ada mode main_unit: hello_2. Move to the error with C-x `, and fix the error by adding body: package body Hello_Pkg is Now, while still in hello_pkg.adb, invoke Ada | Build. gnatmake successfully builds hello_2. This demonstrates that Emacs has remembered the main file, in the project variable main_unit, and used it for the Build command. Finally, again while in hello_pkg.adb, invoke Ada | Run. The *run* buffer displays Hello from hello_pkg.adb. One final point. If you switch back to buffer hello.adb, and invoke Ada | Run, hello_2.exe will be run. That is because main_unit is still set to hello_2, as you can see when you invoke Ada | Project | Edit. There are three ways to change main_unit: Invoke Ada | Set main and Build, which sets main_unit tothe current file. Invoke Ada | Project | Edit, edit main_unit andmain, and click [save] Invoke Ada | Project | Load, and load a project file that specifies main_unit Set compiler options This example illustrates using an Emacs Ada mode project file to set a compiler option. If you have files from Example_1 open in Emacs, you should close them so you don't get confused. Use menu File | Close (current buffer). In directory Example_2, create these files: hello.adb: with Ada.Text_IO; procedure Hello is begin Put_Line("Hello from hello.adb"); end Hello; This is the same as hello.adb from Example_1. It has two errors; missing “use Ada.Text_IO;”, and no space between Put_Line and its argument list. hello.adp: comp_opt=-gnatyt This tells the GNAT compiler to check for token spacing; in particular, there must be a space preceding a parenthesis. In buffer hello.adb, invoke Ada | Project | Load..., and select Example_2/hello.adp. Then, again in buffer hello.adb, invoke Ada | Set main and Build. You should get a *compilation* buffer containing something like (the directory paths will be different): cd c:/Examples/Example_2/ gnatmake -o hello hello -g -cargs -gnatyt -bargs -largs gcc -c -g -gnatyt hello.adb hello.adb:4:04: "Put_Line" is not visible hello.adb:4:04: non-visible declaration at a-textio.ads:264 hello.adb:4:04: non-visible declaration at a-textio.ads:260 hello.adb:4:12: (style) space required gnatmake: "hello.adb" compilation error Compare this to the compiler output in ; the gnatmake option -cargs -gnatq -gnatQ has been replaced by -cargs -gnaty, and an additional error is reported in hello.adb on line 4. This shows that hello.adp is being used to set the compiler options. Fixing the error, linking and running the code proceed as in . Set source search path In this example, we show how to deal with files in more than one directory. We start with the same code as in ; create those files (with the errors present) Create the directory Example_3, containing: hello_pkg.ads: package Hello_Pkg is procedure Say_Hello; end Hello_Pkg; hello_pkg.adb: with Ada.Text_IO; package Hello_Pkg is procedure Say_Hello is begin Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); end Say_Hello; end Hello_Pkg; These are the same files from example 1; hello_pkg.adb has an error on line 2. In addition, create a directory Example_3/Other, containing these files: Other/hello_3.adb: with Hello_Pkg; with Ada.Text_IO; use Ada.Text_IO; procedure Hello_3 is begin Hello_Pkg.Say_Hello; Put_Line ("From hello_3"); end Hello_3; There are no errors in this file. Other/other.adp: src_dir=.. comp_opt=-I.. Note that there must be no trailing spaces. In buffer hello_3.adb, invoke Ada | Project | Load..., and select Example_3/Other/other.adp. Then, again in hello_3.adb, invoke Ada | Set main and Build. You should get a *compilation* buffer containing something like (the directory paths will be different): cd c:/Examples/Example_3/Other/ gnatmake -o hello_3 hello_3 -g -cargs -I.. -bargs -largs gcc -c -g -I.. hello_3.adb gcc -c -I./ -g -I.. -I- C:\Examples\Example_3\hello_pkg.adb hello_pkg.adb:2:08: keyword "body" expected here [see file name] gnatmake: "C:\Examples\Example_3\hello_pkg.adb" compilation error Compare the -cargs option to the compiler output in ; this shows that other.adp is being used to set the compiler options. Move to the error with C-x `. Ada mode searches the list of directories given by src_dir for the file mentioned in the compiler error message. Fixing the error, linking and running the code proceed as in . Use GNAT project file In this example, we show how to use a GNAT project file. Create the directory Example_4, containing: hello_pkg.ads: package Hello_Pkg is procedure Say_Hello; end Hello_Pkg; hello_pkg.adb: with Ada.Text_IO; package Hello_Pkg is procedure Say_Hello is begin Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); end Say_Hello; end Hello_Pkg; These are the same files from example 1; hello_pkg.adb has an error on line 2. In addition, create a directory Example_4/Gnat_Project, containing these files: Other/hello_4.adb: with Hello_Pkg; with Ada.Text_IO; use Ada.Text_IO; procedure Hello_4 is begin Hello_Pkg.Say_Hello; Put_Line ("From hello_4"); end Hello_4; There are no errors in this file. Gnat_Project/hello_4.adp: src_dir=.. gnatmake_opt=-Phello_4.gpr Gnat_Project/hello_4.gpr: Project Hello_4 is for Source_Dirs use (".", ".."); end Hello_4; In buffer hello_4.adb, invoke Ada | Project | Load..., and select Example_4/Gnat_Project/hello_4.adp. Then, again in hello_4.adb, invoke Ada | Set main and Build. You should get a *compilation* buffer containing something like (the directory paths will be different): cd c:/Examples/Example_4/Gnat_Project/ gnatmake -o hello_4 hello_4 -Phello_4.gpr -cargs -gnatq -gnatQ -bargs -largs gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\Gnat_Project\hello_4.adb gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb hello_pkg.adb:2:08: keyword "body" expected here [see file name] gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error Compare the gcc options to the compiler output in ; this shows that hello_4.gpr is being used to set the compiler options. Fixing the error, linking and running the code proceed as in . Moving Through Ada Code There are several easy to use commands to navigate through Ada code. All these functions are available through the Ada menu, and you can also use the following key bindings or the command names. Some of these menu entries are available only if the GNAT compiler is used, since the implementation relies on the GNAT cross-referencing information. M-C-e ada-next-procedureMove to the next function/procedure/task, which ever comes next(ada-next-procedure). M-C-a ada-previous-procedureMove to previous function/procedure/task(ada-previous-procedure). M-x ada-next-package ada-next-packageMove to next package. M-x ada-previous-package ada-previous-packageMove to previous package. C-c C-a ada-move-to-startMove to matching start of end (ada-move-to-start). Ifpoint is at the end of a subprogram, this command jumps to thecorresponding begin if the user optionada-move-to-declaration is nil (default), otherwise it jumps tothe subprogram declaration. C-c C-e ada-move-to-endMove point to end of current block (ada-move-to-end). C-c o Switch between corresponding spec and body file(ff-find-other-file). If point is in a subprogram, positionpoint on the corresponding declaration or body in the other file. C-c c-d ada-goto-declarationMove from any reference to its declaration, for from a declaration toits body (for procedures, tasks, private and incomplete types). C-c C-r ada-find-referencesRuns the gnatfind command to search for all references to theidentifier surrounding point (ada-find-references). UseC-x ` (next-error) to visit each reference (as forcompilation errors). If the ada-xref-create-ali variable is non-nil, Emacs will try to run GNAT for you whenever cross-reference information is needed, and is older than the current source file. Identifier completion Emacs and Ada mode provide two general ways for the completion of identifiers. This is an easy way to type faster: you just have to type the first few letters of an identifiers, and then loop through all the possible completions. The first method is general for Emacs. It works by parsing all open files for possible completions. For instance, if the words ‘my_identifier’, ‘my_subprogram’ are the only words starting with ‘my’ in any of the opened files, then you will have this scenario: You type: myM-/ Emacs inserts: ‘my_identifier’ If you press M-/ once again, Emacs replaces ‘my_identifier’ with ‘my_subprogram’. Pressing M-/ once more will bring you back to ‘my_identifier’. This is a very fast way to do completion, and the casing of words will also be respected. The second method (C-TAB) is specific to Ada mode and the GNAT compiler. Emacs will search the cross-information for possible completions. The main advantage is that this completion is more accurate: only existing identifier will be suggested. On the other hand, this completion is a little bit slower and requires that you have compiled your file at least once since you created that identifier. C-TAB ada-complete-identifierComplete current identifier using cross-reference information. M-/ Complete identifier using buffer information (not Ada-specific). Automatic Smart Indentation Ada mode comes with a full set of rules for automatic indentation. You can also configure the indentation, via the following variables: ada-broken-indent (default value: 2) Number of columns to indent the continuation of a broken line. ada-indent (default value: 3) Number of columns for default indentation. ada-indent-record-rel-type (default value: 3) Indentation for record relative to type or use. ada-indent-return (default value: 0) Indentation for return relative to function (ifada-indent-return is greater than 0), or the open parenthesis(if ada-indent-return is negative or 0). Note that in the secondcase, when there is no open parenthesis, the indentation is donerelative to function with the value of ada-broken-indent. ada-label-indent (default value: -4) Number of columns to indent a label. ada-stmt-end-indent (default value: 0) Number of columns to indent a statement end keyword on a separate line. ada-when-indent (default value: 3) Indentation for when relative to exception or case. ada-indent-is-separate (default value: t) Non-nil means indent is separate or is abstract if on a single line. ada-indent-to-open-paren (default value: t) Non-nil means indent according to the innermost open parenthesis. ada-indent-after-return (default value: t) Non-nil means that the current line will also be re-indentedbefore inserting a newline, when you press RET. Most of the time, the indentation will be automatic, i.e when you press RET, the cursor will move to the correct column on the next line. You can also indent single lines, or the current region, with TAB. Another mode of indentation exists that helps you to set up your indentation scheme. If you press C-c TAB, Ada mode will do the following: Reindent the current line, as TAB would do. Temporarily move the cursor to a reference line, i.e., the line thatwas used to calculate the current indentation. Display in the message window the name of the variable that providedthe offset for the indentation. The exact indentation of the current line is the same as the one for the reference line, plus an offset given by the variable. TAB Indent the current line or the current region. C-M-\ Indent lines in the current region. C-c TAB Indent the current line and display the name of the variable used forindentation. Formatting Parameter Lists C-c C-f ada-format-paramlistFormat the parameter list (ada-format-paramlist). This aligns the declarations on the colon (‘:’) separating argument names and argument types, and aligns the in, out and in out keywords. Automatic Casing Casing of identifiers, attributes and keywords is automatically performed while typing when the variable ada-auto-case is set. Every time you press a word separator, the previous word is automatically cased. You can customize the automatic casing differently for keywords, attributes and identifiers. The relevant variables are the following: ada-case-keyword, ada-case-attribute and ada-case-identifier. All these variables can have one of the following values: downcase-word The word will be lowercase. For instance My_vARIable isconverted to my_variable. upcase-word The word will be uppercase. For instance My_vARIable isconverted to MY_VARIABLE. ada-capitalize-word The first letter and each letter following an underscore (‘_’)are uppercase, others are lowercase. For instance My_vARIableis converted to My_Variable. ada-loose-case-word Characters after an underscore ‘_’ character are uppercase,others are not modified. For instance My_vARIable is convertedto My_VARIable. Ada mode allows you to define exceptions to these rules, in a file specified by the variable variable ada-case-exception-file (default ~/.emacs_case_exceptions). Each line in this file specifies the casing of one word or word fragment. Comments may be included, separated from the word by a space. If the word starts with an asterisk (*), it defines the casing af a word fragemnt (or “substring”); part of a word between two underscores or word boundary. For example: DOD Department of Defense *IO GNAT The GNAT compiler from Ada Core Technologies The word fragment *IO applies to any word containing “_io”; Text_IO, Hardware_IO, etc. ada-create-case-exception There are two ways to add new items to this file: you can simply edit it as you would edit any text file. Or you can position point on the word you want to add, and select menu ‘Ada | Edit | Create Case Exception’, or press C-c C-y (ada-create-case-exception). The word will automatically be added to the current list of exceptions and to the file. To define a word fragment case exception, select the word fragment, then select menu ‘Ada | Edit | Create Case Exception Substring’. It is sometimes useful to have multiple exception files around (for instance, one could be the standard Ada acronyms, the second some company specific exceptions, and the last one some project specific exceptions). If you set up the variable ada-case-exception-file as a list of files, each of them will be parsed and used in your emacs session. However, when you save a new exception through the menu, as described above, the new exception will be added to the first file in the list. C-c C-b ada-adjust-case-bufferAdjust case in the whole buffer (ada-adjust-case-buffer). C-c C-y Create a new entry in the exception dictionary, with the word underthe cursor (ada-create-case-exception) C-c C-t ada-case-read-exceptionsRereads the exception dictionary from the fileada-case-exception-file (ada-case-read-exceptions). Statement Templates Templates are defined for most Ada statements, using the Emacs “skeleton” package. They can be inserted in the buffer using the following commands: C-c t b ada-exception-blockexception Block (ada-exception-block). C-c t c ada-casecase (ada-case). C-c t d ada-declare-blockdeclare Block (ada-declare-block). C-c t e ada-elseelse (ada-else). C-c t f ada-for-loopfor Loop (ada-for-loop). C-c t h ada-headerHeader (ada-header). C-c t i ada-ifif (ada-if). C-c t k ada-package-bodypackage Body (ada-package-body). C-c t l ada-looploop (ada-loop). C-c p ada-subprogram-bodysubprogram body (ada-subprogram-body). C-c t t ada-task-bodytask Body (ada-task-body). C-c t w ada-whilewhile Loop (ada-while). C-c t u ada-useuse (ada-use). C-c t x ada-exitexit (ada-exit). C-c t C-a ada-arrayarray (ada-array). C-c t C-e ada-elsifelsif (ada-elsif). C-c t C-f ada-function-specfunction Spec (ada-function-spec). C-c t C-k ada-package-specpackage Spec (ada-package-spec). C-c t C-p ada-procedure-specprocedure Spec (ada-package-spec. C-c t C-r ada-recordrecord (ada-record). C-c t C-s ada-subtypesubtype (ada-subtype). C-c t C-t ada-task-spectask Spec (ada-task-spec). C-c t C-u ada-withwith (ada-with). C-c t C-v ada-privateprivate (ada-private). C-c t C-w ada-whenwhen (ada-when). C-c t C-x ada-exceptionexception (ada-exception). C-c t C-y ada-typetype (ada-type). Comment Handling By default, comment lines get indented like Ada code. There are a few additional functions to handle comments: M-; Start a comment in default column. M-j Continue comment on next line. C-c ; Comment the selected region (add – at the beginning of lines). C-c : Uncomment the selected region M-q autofill the current comment. GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. PREAMBLEThe purpose of this License is to make a manual, textbook, or otherfunctional and useful document “free” in the sense of freedom: toassure everyone the effective freedom to copy and redistribute it,with or without modifying it, either commercially or noncommercially.Secondarily, this License preserves for the author and publisher a wayto get credit for their work, while not being considered responsiblefor modifications made by others.This License is a kind of “copyleft,” which means that derivativeworks of the document must themselves be free in the same sense. Itcomplements the GNU General Public License, which is a copyleftlicense designed for free software.We have designed this License in order to use it for manuals for freesoftware, because free software needs free documentation: a freeprogram should come with manuals providing the same freedoms that thesoftware does. But this License is not limited to software manuals;it can be used for any textual work, regardless of subject matter orwhether it is published as a printed book. We recommend this Licenseprincipally for works whose purpose is instruction or reference. APPLICABILITY AND DEFINITIONSThis License applies to any manual or other work, in any medium, thatcontains a notice placed by the copyright holder saying it can bedistributed under the terms of this License. Such a notice grants aworld-wide, royalty-free license, unlimited in duration, to use thatwork under the conditions stated herein. The “Document,” below,refers to any such manual or work. Any member of the public is alicensee, and is addressed as “you.” You accept the license if youcopy, modify or distribute the work in a way requiring permissionunder copyright law.A “Modified Version” of the Document means any work containing theDocument or a portion of it, either copied verbatim, or withmodifications and/or translated into another language.A “Secondary Section” is a named appendix or a front-matter section ofthe Document that deals exclusively with the relationship of thepublishers or authors of the Document to the Document's overall subject(or to related matters) and contains nothing that could fall directlywithin that overall subject. (Thus, if the Document is in part atextbook of mathematics, a Secondary Section may not explain anymathematics.) The relationship could be a matter of historicalconnection with the subject or with related matters, or of legal,commercial, philosophical, ethical or political position regardingthem.The “Invariant Sections” are certain Secondary Sections whose titlesare designated, as being those of Invariant Sections, in the noticethat says that the Document is released under this License. If asection does not fit the above definition of Secondary then it is notallowed to be designated as Invariant. The Document may contain zeroInvariant Sections. If the Document does not identify any InvariantSections then there are none.The “Cover Texts” are certain short passages of text that are listed,as Front-Cover Texts or Back-Cover Texts, in the notice that says thatthe Document is released under this License. A Front-Cover Text maybe at most 5 words, and a Back-Cover Text may be at most 25 words.A “Transparent” copy of the Document means a machine-readable copy,represented in a format whose specification is available to thegeneral public, that is suitable for revising the documentstraightforwardly with generic text editors or (for images composed ofpixels) generic paint programs or (for drawings) some widely availabledrawing editor, and that is suitable for input to text formatters orfor automatic translation to a variety of formats suitable for inputto text formatters. A copy made in an otherwise Transparent fileformat whose markup, or absence of markup, has been arranged to thwartor discourage subsequent modification by readers is not Transparent.An image format is not Transparent if used for any substantial amountof text. A copy that is not “Transparent” is called “Opaque.”Examples of suitable formats for Transparent copies include plainASCII without markup, Texinfo input format, LaTeX input format, SGMLor XML using a publicly available DTD, and standard-conforming simpleHTML, PostScript or PDF designed for human modification. Examples oftransparent image formats include PNG, XCF and JPG. Opaque formatsinclude proprietary formats that can be read and edited only byproprietary word processors, SGML or XML for which the DTD and/orprocessing tools are not generally available, and themachine-generated HTML, PostScript or PDF produced by some wordprocessors for output purposes only.The “Title Page” means, for a printed book, the title page itself,plus such following pages as are needed to hold, legibly, the materialthis License requires to appear in the title page. For works informats which do not have any title page as such, “Title Page” meansthe text near the most prominent appearance of the work's title,preceding the beginning of the body of the text.A section “Entitled XYZ” means a named subunit of the Document whosetitle either is precisely XYZ or contains XYZ in parentheses followingtext that translates XYZ in another language. (Here XYZ stands for aspecific section name mentioned below, such as “Acknowledgements,”“Dedications,” “Endorsements,” or “History.”) To “Preserve the Title”of such a section when you modify the Document means that it remains asection “Entitled XYZ” according to this definition.The Document may include Warranty Disclaimers next to the notice whichstates that this License applies to the Document. These WarrantyDisclaimers are considered to be included by reference in thisLicense, but only as regards disclaiming warranties: any otherimplication that these Warranty Disclaimers may have is void and hasno effect on the meaning of this License. VERBATIM COPYINGYou may copy and distribute the Document in any medium, eithercommercially or noncommercially, provided that this License, thecopyright notices, and the license notice saying this License appliesto the Document are reproduced in all copies, and that you add no otherconditions whatsoever to those of this License. You may not usetechnical measures to obstruct or control the reading or furthercopying of the copies you make or distribute. However, you may acceptcompensation in exchange for copies. If you distribute a large enoughnumber of copies you must also follow the conditions in section 3.You may also lend copies, under the same conditions stated above, andyou may publicly display copies. COPYING IN QUANTITYIf you publish printed copies (or copies in media that commonly haveprinted covers) of the Document, numbering more than 100, and theDocument's license notice requires Cover Texts, you must enclose thecopies in covers that carry, clearly and legibly, all these CoverTexts: Front-Cover Texts on the front cover, and Back-Cover Texts onthe back cover. Both covers must also clearly and legibly identifyyou as the publisher of these copies. The front cover must presentthe full title with all words of the title equally prominent andvisible. You may add other material on the covers in addition.Copying with changes limited to the covers, as long as they preservethe title of the Document and satisfy these conditions, can be treatedas verbatim copying in other respects.If the required texts for either cover are too voluminous to fitlegibly, you should put the first ones listed (as many as fitreasonably) on the actual cover, and continue the rest onto adjacentpages.If you publish or distribute Opaque copies of the Document numberingmore than 100, you must either include a machine-readable Transparentcopy along with each Opaque copy, or state in or with each Opaque copya computer-network location from which the general network-usingpublic has access to download using public-standard network protocolsa complete Transparent copy of the Document, free of added material.If you use the latter option, you must take reasonably prudent steps,when you begin distribution of Opaque copies in quantity, to ensurethat this Transparent copy will remain thus accessible at the statedlocation until at least one year after the last time you distribute anOpaque copy (directly or through your agents or retailers) of thatedition to the public.It is requested, but not required, that you contact the authors of theDocument well before redistributing any large number of copies, to givethem a chance to provide you with an updated version of the Document. MODIFICATIONSYou may copy and distribute a Modified Version of the Document underthe conditions of sections 2 and 3 above, provided that you releasethe Modified Version under precisely this License, with the ModifiedVersion filling the role of the Document, thus licensing distributionand modification of the Modified Version to whoever possesses a copyof it. In addition, you must do these things in the Modified Version:A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.C. State on the Title page the name of the publisher of the Modified Version, as the publisher.D. Preserve all the copyright notices of the Document.E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.H. Include an unaltered copy of this License.I. Preserve the section Entitled “History,” Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.K. For any section Entitled “Acknowledgements” or “Dedications,” Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.M. Delete any section Entitled “Endorsements.” Such a section may not be included in the Modified Version.N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.O. Preserve any Warranty Disclaimers.If the Modified Version includes new front-matter sections orappendices that qualify as Secondary Sections and contain no materialcopied from the Document, you may at your option designate some or allof these sections as invariant. To do this, add their titles to thelist of Invariant Sections in the Modified Version's license notice.These titles must be distinct from any other section titles.You may add a section Entitled “Endorsements,” provided it containsnothing but endorsements of your Modified Version by variousparties–for example, statements of peer review or that the text hasbeen approved by an organization as the authoritative definition of astandard.You may add a passage of up to five words as a Front-Cover Text, and apassage of up to 25 words as a Back-Cover Text, to the end of the listof Cover Texts in the Modified Version. Only one passage ofFront-Cover Text and one of Back-Cover Text may be added by (orthrough arrangements made by) any one entity. If the Document alreadyincludes a cover text for the same cover, previously added by you orby arrangement made by the same entity you are acting on behalf of,you may not add another; but you may replace the old one, on explicitpermission from the previous publisher that added the old one.The author(s) and publisher(s) of the Document do not by this Licensegive permission to use their names for publicity for or to assert orimply endorsement of any Modified Version. COMBINING DOCUMENTSYou may combine the Document with other documents released under thisLicense, under the terms defined in section 4 above for modifiedversions, provided that you include in the combination all of theInvariant Sections of all of the original documents, unmodified, andlist them all as Invariant Sections of your combined work in itslicense notice, and that you preserve all their Warranty Disclaimers.The combined work need only contain one copy of this License, andmultiple identical Invariant Sections may be replaced with a singlecopy. If there are multiple Invariant Sections with the same name butdifferent contents, make the title of each such section unique byadding at the end of it, in parentheses, the name of the originalauthor or publisher of that section if known, or else a unique number.Make the same adjustment to the section titles in the list ofInvariant Sections in the license notice of the combined work.In the combination, you must combine any sections Entitled “History”in the various original documents, forming one section Entitled“History”; likewise combine any sections Entitled “Acknowledgements,”and any sections Entitled “Dedications.” You must delete all sectionsEntitled “Endorsements.” COLLECTIONS OF DOCUMENTSYou may make a collection consisting of the Document and other documentsreleased under this License, and replace the individual copies of thisLicense in the various documents with a single copy that is included inthe collection, provided that you follow the rules of this License forverbatim copying of each of the documents in all other respects.You may extract a single document from such a collection, and distributeit individually under this License, provided you insert a copy of thisLicense into the extracted document, and follow this License in allother respects regarding verbatim copying of that document. AGGREGATION WITH INDEPENDENT WORKSA compilation of the Document or its derivatives with other separateand independent documents or works, in or on a volume of a storage ordistribution medium, is called an “aggregate” if the copyrightresulting from the compilation is not used to limit the legal rightsof the compilation's users beyond what the individual works permit.When the Document is included in an aggregate, this License does notapply to the other works in the aggregate which are not themselvesderivative works of the Document.If the Cover Text requirement of section 3 is applicable to thesecopies of the Document, then if the Document is less than one half ofthe entire aggregate, the Document's Cover Texts may be placed oncovers that bracket the Document within the aggregate, or theelectronic equivalent of covers if the Document is in electronic form.Otherwise they must appear on printed covers that bracket the wholeaggregate. TRANSLATIONTranslation is considered a kind of modification, so you maydistribute translations of the Document under the terms of section 4.Replacing Invariant Sections with translations requires specialpermission from their copyright holders, but you may includetranslations of some or all Invariant Sections in addition to theoriginal versions of these Invariant Sections. You may include atranslation of this License, and all the license notices in theDocument, and any Warranty Disclaimers, provided that you also includethe original English version of this License and the original versionsof those notices and disclaimers. In case of a disagreement betweenthe translation and the original version of this License or a noticeor disclaimer, the original version will prevail.If a section in the Document is Entitled “Acknowledgements,”“Dedications,” or “History,” the requirement (section 4) to Preserveits Title (section 1) will typically require changing the actualtitle. TERMINATIONYou may not copy, modify, sublicense, or distribute the Document exceptas expressly provided for under this License. Any other attempt tocopy, modify, sublicense or distribute the Document is void, and willautomatically terminate your rights under this License. However,parties who have received copies, or rights, from you under thisLicense will not have their licenses terminated so long as suchparties remain in full compliance. FUTURE REVISIONS OF THIS LICENSEThe Free Software Foundation may publish new, revised versionsof the GNU Free Documentation License from time to time. Such newversions will be similar in spirit to the present version, but maydiffer in detail to address new problems or concerns. Seehttp://www.gnu.org/copyleft/.Each version of the License is given a distinguishing version number.If the Document specifies that a particular numbered version of thisLicense “or any later version” applies to it, you have the option offollowing the terms and conditions either of that specified version orof any later version that has been published (not as a draft) by theFree Software Foundation. If the Document does not specify a versionnumber of this License, you may choose any version ever published (notas a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License.'' If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this: with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
xreflabel="Index" id="Index"> Index A ada-adjust-case-buffer, see ada-array, see ada-case, see ada-case-read-exceptions, see ada-complete-identifier, see ada-create-case-exception, see ada-declare-block, see ada-else, see ada-elsif, see ada-exception, see ada-exception-block, see ada-exit, see ada-find-references, see ada-for-loop, see ada-format-paramlist, see ada-function-spec, see ada-goto-declaration, see ada-header, see ada-if, see ada-loop, see ada-move-to-end, see ada-move-to-start, see ada-next-package, see ada-next-procedure, see ada-package-body, see ada-package-spec, see ada-previous-package, see ada-previous-procedure, see ada-private, see ada-procedure-spec, see ada-record, see ada-subprogram-body, see ada-subtype, see ada-task-body, see ada-task-spec, see ada-type, see ada-use, see ada-when, see ada-while, see ada-with, see