Add arch taglines
[bpt/emacs.git] / man / ada-mode.texi
CommitLineData
00ce3714 1\input texinfo @c -*-texinfo-*-
f895bc1f 2@setfilename ../info/ada-mode
00ce3714
GM
3@settitle Ada Mode
4
8ba00a55
GM
5@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6@comment The following lines inserts the copyright notice
7@comment into the Info file.
8@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00ce3714 9
18f952d5
KB
10@copying
11Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
00ce3714 12
18f952d5 13@quotation
8ba00a55
GM
14Permission is granted to copy, distribute and/or modify this document
15under the terms of the GNU Free Documentation License, Version 1.1 or
16any later version published by the Free Software Foundation; with the
17Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
18``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
19Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
20license is included in the section entitled ``GNU Free Documentation
21License'' in the Emacs manual.
00ce3714 22
8ba00a55
GM
23(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
24this GNU Manual, like GNU software. Copies published by the Free
25Software Foundation raise funds for GNU development.''
00ce3714 26
8ba00a55
GM
27This document is part of a collection distributed under the GNU Free
28Documentation License. If you want to distribute this document
29separately from the collection, you can do so by adding a copy of the
30license to the document, as described in section 6 of the license.
18f952d5
KB
31@end quotation
32@end copying
8ba00a55 33
18f952d5
KB
34@dircategory Emacs
35@direntry
36* Ada mode: (ada-mode). Emacs mode for editing Ada code.
37@end direntry
00ce3714
GM
38
39@titlepage
40@sp 10
41@title{Ada Mode}
42@sp 2
43@subtitle An Emacs major mode for programming Ada 95 with GNAT
44@subtitle July 1998 for Ada Mode Version 3.0
45@sp 2
00ce3714
GM
46@page
47@vskip 0pt plus 1filll
18f952d5 48@insertcopying
00ce3714
GM
49@end titlepage
50
8ba00a55 51
00ce3714
GM
52@node Top, Overview, (dir), (dir)
53
54@menu
55* Overview::
2e78ad14
RS
56* Installation:: Installing Ada mode on your system
57* Customization:: Setting up Ada mode to your taste
00ce3714
GM
58* Project files:: Describing the organization of your project
59* Syntax highlighting:: Using specific colors and fonts to highlight
60 the structure of your files
61* Moving Through Ada Code:: Moving easily through Ada sources
62* Identifier completion:: Finishing words automatically
63* Index Menu of Subprograms:: A menu of all the types and subprograms
64 defined in your application
65* File Browser:: Easy access to your files
66* Automatic Smart Indentation:: Indenting your code automatically as you type
28665d46 67* Formatting Parameter Lists:: Formatting subprograms' parameter lists
00ce3714
GM
68 automatically
69* Automatic Casing:: Adjusting the case of words automatically
70* Statement Templates:: Inserting code templates
71* Comment Handling:: Reformatting comments easily
72* Compiling Executing:: Working with your application within Emacs
73* Debugging:: Debugging your application
74* Using non-standard file names:: Configuring Emacs for special file names
75* Working Remotely:: Working on a different machine
de803500 76* Index::
00ce3714
GM
77@end menu
78
79
80@c -----------------------------------------------------------------------
81@node Overview, Installation, Top, Top
82@chapter Overview
83@c -----------------------------------------------------------------------
84
85The Emacs mode for programming in Ada 95 with GNAT helps the user in
86understanding existing code and facilitates writing new code. It
87furthermore provides some utility functions for easier integration of
88standard Emacs features when programming in Ada.
89
90@section General features:
91
92@itemize @bullet
2e78ad14
RS
93@item
94full Integrated Development Environment:
00ce3714 95@itemize @bullet
2e78ad14
RS
96@item
97support of ``project files'' for the configuration (directories,
00ce3714 98compilation options,...)
2e78ad14
RS
99@item
100compiling and stepping through error messages.
101@item
102running and debugging your applications within Emacs.
00ce3714 103@end itemize
2e78ad14
RS
104@item
105easy to use for beginners by pull-down menus,
106@item
107user configurable by many user-option variables.
00ce3714
GM
108@end itemize
109
110@section Ada mode features that help understanding code:
111
112@itemize @bullet
2e78ad14
RS
113@item
114functions for easy and quick stepping through Ada code,
115@item
116getting cross reference information for identifiers (e.g. find the
00ce3714 117defining place by a keystroke),
2e78ad14
RS
118@item
119displaying an index menu of types and subprograms and move point to
00ce3714 120the chosen one,
2e78ad14
RS
121@item
122automatic color highlighting of the various entities in Ada code.
00ce3714
GM
123@end itemize
124
125@section Emacs support for writing Ada code:
126
127@itemize @bullet
2e78ad14
RS
128@item
129switching between spec and body files with eventually
00ce3714 130auto-generation of body files,
2e78ad14 131@item
28665d46 132automatic formatting of subprograms' parameter lists.
2e78ad14
RS
133@item
134automatic smart indentation according to Ada syntax,
135@item
136automatic completion of identifiers,
137@item
138automatic casing of identifiers, keywords, and attributes,
139@item
140insertion of statement templates,
141@item
142filling comment paragraphs like filling normal text,
00ce3714
GM
143@end itemize
144
145@c -----------------------------------------------------------------------
146@node Installation, Customization, Overview, Top
147@chapter Installation
148@c -----------------------------------------------------------------------
149
2e78ad14 150If you got Ada mode as a separate distribution, you should have a
00ce3714
GM
151look at the @file{README} file. It explains the basic steps necessary
152for a good installation of the emacs Ada mode.
153
154Installing the Ada mode is basically just a matter of copying a few
155files into the Emacs library directories. Every time you open a file
156with a file extension of @file{.ads} or @file{.adb}, Emacs will
2e78ad14 157automatically load and activate Ada mode.
00ce3714 158
744e59f6 159@xref{Using non-standard file names}, if your files do
00ce3714
GM
160not use these extensions and if you want Emacs to automatically start the
161Ada mode every time you edit an Ada file.
162
744e59f6 163Also, for general usage variables that you might want to set,
177c0ea7 164see
744e59f6
RC
165@iftex
166@cite{The GNU Emacs Manual}.
167@end iftex
168@ifhtml
169@cite{The GNU Emacs Manual}.
170@end ifhtml
171@ifinfo
172@ref{Top, , The GNU Emacs Manual, emacs, The GNU Emacs Manual}.
173@end ifinfo
00ce3714
GM
174
175@c ---------------------------------------------------------------------
176@section Required files
177@c ---------------------------------------------------------------------
178
179This Ada mode works best with Emacs 20.3 or higher (the easy editing
180features for the project files won't work with any older version), but
181most of the commands should work with older versions too. Please try to
182install the most recent version of Emacs on your system before
2e78ad14 183installing Ada mode.
00ce3714 184
2e78ad14 185Although part of Ada mode is compiler-independent, the most advanced
00ce3714
GM
186features are specific to the Gnat compiler @url{http://www.gnat.com}.
187
188The following files are provided with the Ada mode distribution:
189
190@itemize @bullet
191
2e78ad14
RS
192@item
193@file{ada-mode.el}: The main file for Ada mode.
00ce3714
GM
194This is the only file which does not require Gnat. It contains the
195functions for indentation, formatting of parameter lists, stepping
196through code, comment handling and automatic casing. Emacs versions
19720.2 and higher already contain Ada mode version 2.27, which is an older
198version of this file and should be replaced. Loading @file{ada-mode.el}
199from the current distribution supersedes the standard installation.
200
2e78ad14
RS
201@item
202@file{ada-stmt.el}: Contains the statement templates feature.
00ce3714 203
2e78ad14
RS
204@item
205@file{ada-xref.el}: This file provides the main support for Gnat.
00ce3714
GM
206This is where the functions for cross-references, completion of
207identifiers, support for project files and compilation of your
208application are defined.
209
2e78ad14
RS
210@item
211@file{ada-prj.el}: The functions to use for easy-edition of the
212project files. This file is the only one which really requires Emacs
213at least 20.2. It uses the new widget features from Emacs.
00ce3714
GM
214
215@end itemize
216
217@c --------------------------------------------------------------------
218@node Customization, Project files, Installation, Top
2e78ad14 219@chapter Customizing Ada mode
00ce3714
GM
220@c ---------------------------------------------------------------------
221
2e78ad14 222Ada mode is fully customizable. Everything, from the file names to
00ce3714
GM
223the automatic indentation and the automatic casing can be adapted to
224your own needs.
225
226There are two different kinds of variables that control this
227customization, both are easy to modify.
228
229The first set of variables are standard Emacs variables. Of course, some
2e78ad14 230are defined only for Ada mode, whereas others have a more general
00ce3714
GM
231meaning in Emacs. Please see the Emacs documentation for more
232information on the latest. In this documentation, we will detail all the
2e78ad14 233variables that are specific to Ada mode, and a few others. The names
00ce3714
GM
234will be given, as in @code{ada-case-identifier}.
235
236Emacs provides an easy way to modify them, through a special mode called
237customization. To access this mode, select the menu
2e78ad14 238@samp{Ada->Customize}. This will open a new buffer with some fields that
00ce3714
GM
239you can edit. For instance, you will get something like:
240@example
241Put below the compiler switches.
242comp_opt= _____________________________________
243@end example
244The first line gives a brief description of the variable. The second
245line is the name of the variable and the field where you can give a
246value for this variable. Simply type what you want in the field.
247
248When you are finished modifying the variables, you can simply click on
249the @b{Save for future sessions} button at the top of the buffer (click
250with the middle mouse button). This will save the values in your
251@file{.emacs} file, so that next time you start Emacs they will have the
252same values.
253
254To modify a specific variable, you can directly call the function
2e78ad14
RS
255@code{customize-variable} from Emacs (just type @kbd{M-x
256customize-variable @key{RET} @var{variable-name} @key{RET}}).
00ce3714
GM
257
258Some users might prefer to modify the variables directly in their
259configuration file, @file{.emacs}. This file is coded in Emacs lisp, and
260the syntax to set a variable is the following:
261@example
262(setq variable-name value)
263@end example
264
265The second set of variables for customization are set through the use of
266project files. These variables are specific to a given project, whereas
267the first set was more general. For more information, please
268@xref{Project files}.
269
270@c ---------------------------------------------------------------------
271@node Project files, Syntax highlighting, Customization, Top
272@chapter Project files
273@c ---------------------------------------------------------------------
274
275@c ---------------------------------------------------------------------
276@section General overview
277@c ---------------------------------------------------------------------
278
279Emacs provides a full Integrated Development Environment for GNAT and
280Ada programmers. That is to say, editing, compiling, executing and
281debugging can be performed within Emacs in a convenient and natural way.
282
283To take full advantage of this features, it is possible to create a file
2e78ad14 284in the main directory of your application, with a @samp{.adp} extension.
00ce3714
GM
285This file contain all needed information dealing with the way your
286application is organized between directories, the commands to compile,
287run and debug it etc. Creating this file is not mandatory and convenient
288defaults are automatically provided for simple setups. It only becomes
289necessary when those above mentioned defaults need customizing.
290
291A simple way to edit this file is provided for Emacs 20.2 or newer, with
292the following functions, that you can access also through the Ada
293menu. It is also possible to edit the project file as a regular text
294file.
295
296Once in the buffer for editing the project file, you can save your
2e78ad14 297modification using the @samp{[OK]} button at the bottom of the buffer, or
00ce3714 298simply use the usual @kbd{C-x C-s} binding. To cancel your
2e78ad14 299modifications, simply kill the buffer or click on the @samp{[CANCEL]} button
00ce3714
GM
300at the button.
301
302Each buffer using Ada mode will be associated with one project file when
303there is one available, so that Emacs can easily navigate through
304related source files for instance.
305
306The exact algorithm to determine which project file should be used is
307described in the next section, but you can force the project file you
308want to use by setting one or two variables in your @file{.emacs} file.
309
310@itemize @bullet
2e78ad14
RS
311@item
312To set up a default project file to use for any directory, anywhere
00ce3714
GM
313on your system, set the variable @code{ada-prj-default-project-file} to
314the name of that file.
2e78ad14 315
00ce3714 316@example
2e78ad14 317(set 'ada-prj-default-project-file "/dir1/dir2/file")
00ce3714
GM
318@end example
319
2e78ad14
RS
320@item
321For finer control, you can set a per-directory project file.
00ce3714 322This is done through the variable @code{ada-xref-default-prj-file}.
2e78ad14 323
00ce3714
GM
324@example
325 (set 'ada-xref-default-prj-file
326 '(("/dir1/dir2" . "/dir3/file1")
327 ("/dir4/dir5" . "/dir6/file2")))
328@end example
2e78ad14 329
00ce3714
GM
330Note: This has a higher priority than the first variable, so the first
331choice is to use this variable settings, and otherwise
332@code{ada-prj-default-project-file}.
333@end itemize
334
335
336@table @kbd
2e78ad14 337@item C-c u
de803500 338@findex ada-customize
2e78ad14 339Create or edit the project file for the current buffer (@code{ada-customize}).
177c0ea7 340@item C-c c
de803500 341@findex ada-change-prj
2e78ad14 342Change the project file associated with the current Ada buffer (@code{ada-change-prj}).
00ce3714 343@item C-c d
de803500
EZ
344@findex ada-change-default-project
345Change the default project file for the current directory
346(@code{ada-change-default-project}). Every new file opened from this
347directory will be associated with that file by default.
2e78ad14 348@item ada-set-default-project-file
de803500 349@findex ada-set-default-project-file
00ce3714
GM
350Set the default project file to use for *any* Ada file opened anywhere
351on your system. This sets this file only for the current Emacs session.
352@end table
353
354@c ---------------------------------------------------------------------
355@section Project file variables
356@c ---------------------------------------------------------------------
357
358The following variables can be defined in a project file. They all have
359a default value, so that small projects do not need to create a project
360file.
361
362Some variables below can be referenced in other variables, using a
363shell-like notation. For instance, if the variable @code{comp_cmd}
364contains a sequence like @code{$@{comp_opt@}}, the value of that variable
365will be substituted.
366
367Here is the list of variables:
368
2e78ad14
RS
369@table @asis
370@item @code{src_dir} [default: @code{"./"}]
371This is a list of directories where Ada mode will look for source
00ce3714
GM
372files. These directories are used mainly in two cases, both as a switch
373for the compiler and for the cross-references.
374
2e78ad14
RS
375@item @code{obj_dir} [default: @code{"./"}]
376This is a list of directories where to look for object and library
377files. The library files are the @samp{.ali} files generated by Gnat
378and that contain cross-reference informations.
00ce3714 379
2e78ad14 380@item @code{comp_opt} [default: @code{""}]
00ce3714
GM
381Creates a variable which can be referred to subsequently by using the
382@code{$@{comp_opt@}} notation. This is intended to store the default
2e78ad14 383switches given to @command{gnatmake} and @command{gcc}.
00ce3714 384
2e78ad14 385@item @code{bind_opt=@var{switches}} [default: @code{""}]
00ce3714
GM
386Creates a variable which can be referred to subsequently by using the
387@code{$@{bind_opt@}} notation. This is intended to store the default
2e78ad14 388switches given to @command{gnatbind}.
00ce3714 389
2e78ad14 390@item @code{link_opt=@var{switches}} [default: @code{""}]
00ce3714
GM
391Creates a variable which can be referred to subsequently by using the
392@code{$@{link_opt@}} notation. This is intended to store the default
2e78ad14 393switches given to @command{gnatlink}.
00ce3714 394
2e78ad14 395@item @code{main=@var{executable}} [default: @code{""}]
00ce3714
GM
396Specifies the name of the executable for the application. This variable
397can be referred to in the following lines by using the @code{$@{main@}}
398notation.
399
2e78ad14 400@item @code{cross_prefix=@var{prefix}} [default: @code{""}]
00ce3714
GM
401This variable should be set if you are working in a cross-compilation
402environment. This is the prefix used in front of the gnatmake commands.
403
2e78ad14
RS
404@item @code{remote_machine=@var{machine}} [default: @code{""}]
405This is the name of the machine to log into before issuing the
406compilation command. If this variable is empty, the command will be
407run on the local machine. This will not work on Windows NT machines,
408since Ada mode will simply precede the compilation command with a
409@command{rsh} command, unknown on Windows.
00ce3714 410
2e78ad14 411@item @code{comp_cmd=@var{command}} [default: @code{"$@{cross_prefix@}gcc -c -I$@{src_dir@} -g -gnatq"}]
00ce3714
GM
412Specifies the command used to compile a single file in the application.
413The name of the file will be added at the end of this command.
414
2e78ad14 415@item @code{make_cmd=@var{command}} [default: @code{"$@{cross_prefix@}gnatmake $@{main@} -aI$@{src_dir@} -aO$@{obj_dir@} -g -gnatq -cargs $@{comp_opt@} -bargs $@{bind_opt@} -largs $@{link_opt@}"]}'
00ce3714
GM
416Specifies the command used to recompile the whole application.
417
2e78ad14 418@item @code{run_cmd=@var{command}} [default: @code{"$@{main@}"}]
00ce3714
GM
419Specifies the command used to run the application.
420
2e78ad14 421@item @code{debug_cmd=@var{command}} [default: @code{"$@{cross_prefix@}gdb $@{main@}"}]
00ce3714
GM
422Specifies the command used to debug the application
423
424@end table
425
426@c ---------------------------------------------------------------------
427@section Detailed algorithm
428@c ---------------------------------------------------------------------
429
430This section gives more details on the project file setup and is only of
431interest for advanced users.
432
433Usually, an Ada file is part of a larger application, whose sources and
434objects can be spread over multiple directories. The first time emacs is
435asked to compile, run or debug an application, or when a cross reference
436function is used (goto declaration for instance), the following steps
437are taken:
438
439@itemize @bullet
2e78ad14
RS
440@item
441find the appropriate project file, open and parse it.
00ce3714
GM
442All the fields read in the project file are then stored by emacs
443locally. Finding the project file requires a few steps:
444
445@itemize @minus
2e78ad14
RS
446@item
447if a file from the same directory was already associated with
00ce3714
GM
448a project file, use the same one. This is the variable
449@code{ada-xref-default-prj-file} described above.
2e78ad14
RS
450@item
451if the variable @code{ada-prj-default-project-file} is set,
00ce3714 452use the project file specified in this variable.
2e78ad14
RS
453@item
454if there is a project file whose name is the same as the source file
455except for the suffix, use this one.
456@item
457if there's only one project file in the source directory, use
00ce3714 458that one.
2e78ad14
RS
459@item
460if there are more than one project file in the source directory,
00ce3714 461ask the user.
2e78ad14
RS
462@item
463if there are no project files in the source directory use standard
00ce3714
GM
464default values.
465@end itemize
466
467The first project file that is selected in a given directory becomes the
468default project file for this directory and is used implicitly for other
469sources unless specified otherwise by the user.
470
2e78ad14 471@item
1cd0f7e3 472look for the corresponding @samp{.ali} file in the @code{obj_dir} defined
00ce3714
GM
473in the project file. If this file can not be found, emacs proposes to
474compile the source using the @code{comp_cmd} defined in the project file
475in order to create the ali file.
476
2e78ad14 477@item
1cd0f7e3 478when cross referencing is requested, the @samp{.ali} file is parsed to
00ce3714 479determine the file and line of the identifier definition. It is
1cd0f7e3
EZ
480possible for the @samp{.ali} file to be older than the source file,
481in which case it will be recompiled if the variable
482@code{ada-xref-create-ali} is set, otherwise the reference is searched
483in the obsolete ali file with possible inaccurate results.
00ce3714 484
2e78ad14
RS
485@item
486look for the file containing the declaration using the source
00ce3714
GM
487path @code{src_dir} defined in the project file. Put the cursor at the
488correct position and display this new cursor.
489@end itemize
490
491@c -----------------------------------------------------------------------
492@node Syntax highlighting, Moving Through Ada Code, Project files, Top
493@chapter Syntax highlighting
494@c -----------------------------------------------------------------------
495
2e78ad14 496Ada mode is made to help you understand the structure of your source
00ce3714
GM
497files. Some people like having colors or different fonts depending on
498the context: commands should be displayed differently than keywords,
2e78ad14 499which should also be different from strings, @dots{}
00ce3714
GM
500
501Emacs is able to display in a different way the following syntactic
502entities:
503
504@itemize @bullet
505@item keywords
506@item commands
507@item strings
508@item gnatprep statements (preprocessor)
509@item types (under certain conditions)
510@item other words
511@end itemize
512
513This is not the default behavior for Emacs. You have to explicitly
514activate it. This requires that you add a new line in your @file{.emacs}
515file (if this file does not exist, just create it).
516
517@example
2e78ad14 518(global-font-lock-mode t)
00ce3714
GM
519@end example
520
521But the default colors might not be the ones you like. Fortunately,
522there is a very easy way to change them. Just select the menu
2e78ad14
RS
523@samp{Help->Customize->Specific Face...} and press @key{RET}. This
524will display a buffer will all the ``faces'' (the colors) that Emacs knows
00ce3714
GM
525about. You can change any of them.
526
527
528@c -----------------------------------------------------------------------
529@node Moving Through Ada Code, Identifier completion, Syntax highlighting, Top
530@chapter Moving Through Ada Code
531@c -----------------------------------------------------------------------
532
533There are several easy to use commands to stroll through Ada code. All
534these functions are available through the Ada menu, and you can also use
535the following key bindings or the command names:
536
537@table @kbd
718fb8a1 538@item C-M-e
de803500 539@findex ada-next-procedure
2e78ad14
RS
540Move to the next function/procedure/task, which ever comes next
541(@code{ada-next-procedure}).
718fb8a1 542@item C-M-a
de803500 543@findex ada-previous-procedure
2e78ad14
RS
544Move to previous function/procedure/task
545(@code{ada-previous-procedure}).
546@item M-x ada-next-package
de803500 547@findex ada-next-package
00ce3714 548Move to next package.
2e78ad14 549@item M-x ada-prev-package
de803500 550@findex ada-prev-package
00ce3714 551Move to previous package.
2e78ad14 552@item C-c C-a
de803500 553@findex ada-move-to-start
2e78ad14
RS
554Move to matching start of @code{end} (@code{ada-move-to-start}). If
555point is at the end of a subprogram, this command jumps to the
556corresponding @code{begin} if the user option
557@code{ada-move-to-declaration} is @code{nil} (default), it jumps to
558the subprogram declaration otherwise.
559@item C-c C-e
de803500 560@findex ada-move-to-end
2e78ad14
RS
561Move point to end of current block (@code{ada-move-to-end}).
562@item C-c o
563Switch between corresponding spec and body file
564(@code{ff-find-other-file}). If the cursor is on a subprogram, switch
565between declaration and body.
00ce3714 566@item C-c c-d
de803500 567@findex ada-goto-declaration
00ce3714
GM
568Move from any reference to its declaration and switch between
569declaration and body (for procedures, tasks, private and incomplete
570types).
2e78ad14 571@item C-c C-r
de803500 572@findex ada-find-references
2e78ad14
RS
573runs the @file{gnatfind} command to search for all references to the
574entity pointed by the cursor (@code{ada-find-references}). Use
575@kbd{C-x `} (@code{next-error}) to visit each reference (as for
576compilation errors).
00ce3714
GM
577@end table
578
579These functions use the information in the output of the Gnat Ada
580compiler. However, if your application was compiled with the
2e78ad14 581@samp{-gnatx} switch, these functions will not work, since no extra
00ce3714
GM
582information is generated by GNAT. See GNAT documentation for further
583information.
584
585Emacs will try to run Gnat for you whenever the cross-reference
586informations are older than your source file (provided the
2e78ad14 587@code{ada-xref-create-ali} variable is non-@code{nil}). Gnat then produces a
00ce3714 588file with the same name as the current Ada file but with the extension
2e78ad14 589changed to @file{.ali}. This files are normally used by the binder, but
00ce3714
GM
590they will also contain additional cross-referencing information.
591
592@c -----------------------------------------------------------------------
593@node Identifier completion, Index Menu of Subprograms, Moving Through Ada Code, Top
594@chapter Identifier completion
595@c -----------------------------------------------------------------------
596
597@c -----------------------------------------------------------------------
598@section Overview
599@c -----------------------------------------------------------------------
600
2e78ad14 601Emacs and Ada mode provide two general ways for the completion of
00ce3714
GM
602identifiers. This is an easy way to type faster: you just have to type
603the first few letters of an identifiers, and then loop through all the
604possible completions.
605
606The first method is general for Emacs. It will work both with Ada
2e78ad14 607buffers, but also in C buffers, Java buffers, @enddots{} The idea is to parse
00ce3714
GM
608all the opened buffers for possible completions.
609
2e78ad14
RS
610For instance, if the words @samp{my_identifier}, @samp{my_subprogram}
611are the only words starting with @samp{my} in any of the opened files,
612then you will have this scenario:
613
614@quotation
00ce3714 615You type: my@key{M-/}
2e78ad14
RS
616Emacs inserts: @samp{my_identifier}
617If you press @key{M-/} once again, Emacs replaces @samp{my_identifier} with
618@samp{my_subprogram}.
619Pressing @key{M-/} once more will bring you back to @samp{my_identifier}.
620@end quotation
00ce3714
GM
621
622This is a very fast way to do completion, and the casing of words will
623also be respected.
624
625The second method is specific to Ada buffer, and even to users of the
1cd0f7e3
EZ
626Gnat compiler. Emacs will search the cross-information found in the
627@samp{.ali} files generated by Gnat for possible completions.
00ce3714
GM
628
629The main advantage is that this completion is more accurate: only
630existing identifier will be suggested, you don't need to have a file
2e78ad14 631opened that already contains this identifiers, @enddots{}
00ce3714
GM
632
633On the other hand, this completion is a little bit slower and requires
634that you have compiled your file at least once since you created that
635identifier.
636
637@c -----------------------------------------------------------------------
638@section Summary of commands
639@c -----------------------------------------------------------------------
640
641@table @kbd
2e78ad14 642@item C-@key{TAB}
de803500 643@findex ada-complete-identifier
2e78ad14
RS
644Complete accurately current identifier using information in @samp{.ali} file
645(@code{ada-complete-identifier}).
00ce3714 646@item M-/
2e78ad14 647Complete identifier using buffer information (not Ada-specific).
00ce3714
GM
648@end table
649
650@c -----------------------------------------------------------------------
651@node Index Menu of Subprograms, File Browser, Identifier completion, Top
652@chapter Index Menu of Subprograms
653@c -----------------------------------------------------------------------
654
655You can display a choice menu with all procedure/function/task
656declarations in the file and choose an item by mouse click to get to its
2e78ad14
RS
657declaration. This function is accessible through the @samp{Ada} menu when
658editing a Ada file, or simply through the following key binding:
00ce3714
GM
659
660@table @kbd
6aa73dc4 661@item C-S-Mouse-3
00ce3714
GM
662display index menu
663@end table
664
665@c -----------------------------------------------------------------------
666@node File Browser, Automatic Smart Indentation, Index Menu of Subprograms, Top
667@chapter File Browser
668@c -----------------------------------------------------------------------
669
670Emacs provides a special mode, called @code{speedbar}. When this mode is
671activated, a new frame is displayed, with a file browser. The files from
672the current directory are displayed, and you can click on them as you
673would with any file browser. The following commands are then available.
674
675You can click on a directory name or file name to open it. The editor
676will automatically select the best possible mode for this file,
2e78ad14 677including of course Ada mode for files written in Ada.
00ce3714 678
2e78ad14 679If you click on the @samp{[+]} symbol near a file name, all the symbols (types,
00ce3714
GM
680variables and subprograms) defined in that file will be displayed, and
681you can directly click on them to open the right file at the right
682place.
683
684You can activate this mode by typing @key{M-x speedbar} in the editor.
28665d46 685This will open a new frame. A better way might be to associate the
00ce3714
GM
686following key binding
687
688@example
689(global-set-key [f7] 'speedbar-get-focus)
690@end example
691
2e78ad14 692Every time you press @key{F7}, the mouse will automatically move to the
00ce3714
GM
693speedbar frame (which will be created if it does not exist).
694
695@c -----------------------------------------------------------------------
696@node Automatic Smart Indentation, Formatting Parameter Lists, File Browser, Top
697@chapter Automatic Smart Indentation
698@c -----------------------------------------------------------------------
699
2e78ad14 700Ada mode comes with a full set of rules for automatic indentation.
00ce3714
GM
701You can of course configure the indentation as you want, by setting the
702value of a few variables.
703
704As always, the preferred way to modify variables is to use the
2e78ad14 705@samp{Ada->Customize} menu (don't forget to save your changes!). This
00ce3714
GM
706will also show you some example of code where this variable is used, and
707hopefully make things clearer.
708
709The relevant variables are the following:
710
2e78ad14
RS
711@table @asis
712@item @code{ada-broken-indent} (default value: 2)
713Number of columns to indent the continuation of a broken line.
00ce3714 714
2e78ad14
RS
715@item @code{ada-indent} (default value: 3)
716Width of the default indentation.
00ce3714 717
2e78ad14
RS
718@item @code{ada-indent-record-rel-type} (default value: 3)
719Indentation for @code{record} relative to @code{type} or @code{use}.
00ce3714 720
2e78ad14
RS
721@item @code{ada-indent-return} (default value: 0)
722Indentation for @code{return} relative to @code{function} (if
723@code{ada-indent-return} is greater than 0), or the open parenthesis
724(if @code{ada-indent-return} is negative or null). Note that in the second
725case, when there is no open parenthesis, the indentation is done
726relative to @code{function} with the value of @code{ada-broken-indent}.
00ce3714 727
2e78ad14
RS
728@item @code{ada-label-indent} (default value: -4)
729Number of columns to indent a label.
00ce3714 730
2e78ad14
RS
731@item @code{ada-stmt-end-indent} (default value: 0)
732Number of columns to indent a statement @code{end} keyword on a separate line.
00ce3714 733
2e78ad14
RS
734@item @code{ada-when-indent} (default value: 3)
735Indentation for @code{when} relative to @code{exception} or @code{case}.
00ce3714 736
2e78ad14
RS
737@item @code{ada-indent-is-separate} (default value: t)
738Non-@code{nil} means indent @code{is separate} or @code{is abstract} if on a single line.
00ce3714 739
2e78ad14
RS
740@item @code{ada-indent-to-open-paren} (default value: t)
741Non-@code{nil} means indent according to the innermost open parenthesis.
00ce3714 742
2e78ad14
RS
743@item @code{ada-indent-after-return} (default value: t)
744Non-@code{nil} means that the current line will also be re-indented before
745inserting a newline, when you press @key{RET}.
00ce3714
GM
746@end table
747
748Most of the time, the indentation will be automatic, i.e when you will
2e78ad14 749press @key{RET}, the cursor will move to the correct column on the
00ce3714
GM
750next line.
751
752However, you might want or need sometimes to re-indent the current line
753or a set of lines. For this, you can simply go to that line, or select
2e78ad14 754the lines, and then press @key{TAB}. This will automatically re-indent
00ce3714
GM
755the lines.
756
2e78ad14
RS
757Another mode of indentation exists that helps you to set up your
758indentation scheme. If you press @kbd{C-c @key{TAB}}, Ada mode will do
759the following:
760
00ce3714 761@itemize @bullet
2e78ad14
RS
762@item
763Reindent the current line, as @key{TAB} would do.
764@item
765Temporarily move the cursor to a reference line, i.e., the line that
766was used to calculate the current indentation.
767@item
768Display at the bottom of the window the name of the variable that
769provided the offset for the indentation.
00ce3714
GM
770@end itemize
771
772The exact indentation of the current line is the same as the one for the
773reference line, plus an offset given by the variable.
774
2e78ad14
RS
775Once you know the name of the variable, you can either modify it
776through the usual @samp{Ada->Customize} menu, or by typing @kbd{M-x
777customize-variable @key{RET}} in the Emacs window, and then give the
778name of the variable.
00ce3714
GM
779
780@table @kbd
2e78ad14
RS
781@item @key{TAB}
782Indent the current line or the current region.
718fb8a1 783@item C-M-\
2e78ad14
RS
784Indent lines in the current selected block.
785@item C-c @key{TAB}
786Indent the current line and prints the name of the variable used for
00ce3714
GM
787indentation.
788@end table
789
790
791
792@c -----------------------------------------------------------------------
793@node Formatting Parameter Lists, Automatic Casing, Automatic Smart Indentation, Top
794@chapter Formatting Parameter Lists
795@c -----------------------------------------------------------------------
796
2e78ad14
RS
797To help you correctly align fields in a subprogram parameter list,
798Emacs provides one function that will do most of the work for you.
799This function will align the declarations on the colon (@samp{:})
800separating argument names and argument types, plus align the
801@code{in}, @code{out} and @code{in out} keywords if required.
00ce3714
GM
802
803@table @kbd
2e78ad14 804@item C-c C-f
de803500 805@findex ada-format-paramlist
2e78ad14 806Format the parameter list (@code{ada-format-paramlist}).
00ce3714
GM
807@end table
808
809@c -----------------------------------------------------------------------
810@node Automatic Casing, Statement Templates, Formatting Parameter Lists, Top
811@chapter Automatic Casing
812@c -----------------------------------------------------------------------
813
814Casing of identifiers, attributes and keywords is automatically
815performed while typing when the variable @code{ada-auto-case} is set.
816Every time you press a word separator, the previous word is
817automatically cased.
818
819You can customize the automatic casing differently for keywords,
820attributes and identifiers. The relevant variables are the following:
821@code{ada-case-keyword}, @code{ada-case-attribute} and
822@code{ada-case-identifier}.
823
824All these variables can have one of the following values:
825
2e78ad14 826@table @code
00ce3714
GM
827@item downcase-word
828The previous word will simply be in all lower cases. For instance
829@code{My_vARIable} is converted to @code{my_variable}.
830
831@item upcase-word
832The previous word will be fully converted to upper cases. For instance
833@code{My_vARIable} is converted to @code{MY_VARIABLE}.
834
835@item ada-capitalize-word
836All letters, except the first one of the word and every letter after the
2e78ad14 837@samp{_} character are lower cased. Other letters are upper cased. For
00ce3714
GM
838instance @code{My_vARIable} is converted to @code{My_Variable}.
839
840@item ada-loose-case-word
841No letters is modified in the previous word, except the ones after the
2e78ad14 842@samp{_} character that are upper cased. For instance @code{My_vARIable} is
00ce3714
GM
843converted to @code{My_VARIable}.
844@end table
845
846These functions, although they will work in most cases, will not be
847accurate sometimes. The Ada mode allows you to define some exceptions,
848that will always be cased the same way.
849
850The idea is to create a dictionary of exceptions, and store it in a
851file. This file should contain one identifier per line, with the casing
852you want to force. The default name for this file is
853@file{~/.emacs_case_exceptions}. You can of course change this name,
854through the variable @code{ada-case-exception-file}.
855
856Note that each line in this file must start with the key word whose
857casing you want to specify. The rest of the line can be used for
858comments (explaining for instance what an abbreviation means, as
2e78ad14 859recommended in the Ada 95 Quality and Style, paragraph 3.1.4). Thus, a
00ce3714
GM
860good example for this file could be:
861
862@example
863DOD Department of Defense
864Text_IO
865GNAT The GNAT compiler from Ada Core Technologies
866@end example
867
868When working on project involving multiple programmers, we recommend
869that every member of the team sets this variable to the same value,
870which should point to a system-wide file that each of them can
871write. That way, you will ensure that the casing is consistent
872throughout your application(s).
873
de803500 874@findex ada-create-case-exception
00ce3714
GM
875There are two ways to add new items to this file: you can simply edit it
876as you would edit any text file, and add or suppress entries in this
877file. Remember that you should put one entity per line. The other,
878easier way, is to position the cursor over the word you want to add, in
879an Ada buffer. This word should have the casing you want. Then simply
2e78ad14 880select the menu @samp{Ada->Edit->Create Case Exception}, or the key
de803500
EZ
881@kbd{C-c C-y} (@code{ada-create-case-exception}). The word will
882automatically be added to the current list of exceptions and to the file.
00ce3714
GM
883
884It is sometimes useful to have multiple exception files around (for
885instance, one could be the standard Ada acronyms, the second some
886company specific exceptions, and the last one some project specific
887exceptions). If you set up the variable @code{ada-case-exception-file}
888as a list of files, each of them will be parsed and used in your emacs
889session.
890
891However, when you save a new exception through the menu, as described
892above, the new exception will be added to the first file in the list
893only. You can not automatically add an exception to one of the other
894files, although you can of course edit the files by hand at any time.
895
896Automatic casing can be performed on port or whole buffer using:
2e78ad14 897
00ce3714
GM
898@table @kbd
899@item C-c C-b
de803500
EZ
900@findex ada-adjust-case-buffer
901Adjust case in the whole buffer (@code{ada-adjust-case-buffer}).
00ce3714
GM
902@item C-c C-y
903Create a new entry in the exception dictionary, with the word under
de803500 904the cursor (@code{ada-create-case-exception})
00ce3714 905@item C-c C-t
de803500 906@findex ada-case-read-exceptions
00ce3714 907Rereads the exception dictionary from the file
de803500 908@code{ada-case-exception-file} (@code{ada-case-read-exceptions}).
00ce3714
GM
909@end table
910
911@c -----------------------------------------------------------------------
912@node Statement Templates, Comment Handling, Automatic Casing, Top
913@chapter Statement Templates
914@c -----------------------------------------------------------------------
915
916NOTE: This features are not available on VMS for Emacs 19.28. The
917functions used here do not exist on Emacs 19.28.
918
919Templates exist for most Ada statements. They can be inserted in the
920buffer using the following commands:
921
922@table @kbd
923@item C-c t b
de803500
EZ
924@findex ada-exception-block
925exception Block (@code{ada-exception-block}).
00ce3714 926@item C-c t c
de803500
EZ
927@findex ada-case
928case (@code{ada-case}).
00ce3714 929@item C-c t d
de803500
EZ
930@findex ada-declare-block
931declare Block (@code{ada-declare-block}).
00ce3714 932@item C-c t e
de803500
EZ
933@findex ada-else
934else (@code{ada-else}).
00ce3714 935@item C-c t f
de803500
EZ
936@findex ada-for-loop
937for Loop (@code{ada-for-loop}).
00ce3714 938@item C-c t h
de803500
EZ
939@findex ada-header
940Header (@code{ada-header}).
00ce3714 941@item C-c t i
de803500
EZ
942@findex ada-if
943if (@code{ada-if}).
00ce3714 944@item C-c t k
de803500
EZ
945@findex ada-package-body
946package Body (@code{ada-package-body}).
00ce3714 947@item C-c t l
de803500
EZ
948@findex ada-loop
949loop (@code{ada-loop}).
950@item C-c p
951@findex ada-subprogram-body
952subprogram body (@code{ada-subprogram-body}).
00ce3714 953@item C-c t t
de803500
EZ
954@findex ada-task-body
955task Body (@code{ada-task-body}).
00ce3714 956@item C-c t w
de803500
EZ
957@findex ada-while
958while Loop (@code{ada-while}).
00ce3714 959@item C-c t u
de803500
EZ
960@findex ada-use
961use (@code{ada-use}).
00ce3714 962@item C-c t x
de803500
EZ
963@findex ada-exit
964exit (@code{ada-exit}).
00ce3714 965@item C-c t C-a
de803500
EZ
966@findex ada-array
967array (@code{ada-array}).
00ce3714 968@item C-c t C-e
de803500
EZ
969@findex ada-elsif
970elsif (@code{ada-elsif}).
00ce3714 971@item C-c t C-f
de803500
EZ
972@findex ada-function-spec
973function Spec (@code{ada-function-spec}).
00ce3714 974@item C-c t C-k
de803500
EZ
975@findex ada-package-spec
976package Spec (@code{ada-package-spec}).
00ce3714 977@item C-c t C-p
de803500
EZ
978@findex ada-procedure-spec
979procedure Spec (@code{ada-package-spec}.
00ce3714 980@item C-c t C-r
de803500
EZ
981@findex ada-record
982record (@code{ada-record}).
00ce3714 983@item C-c t C-s
de803500
EZ
984@findex ada-subtype
985subtype (@code{ada-subtype}).
00ce3714 986@item C-c t C-t
de803500
EZ
987@findex ada-task-spec
988task Spec (@code{ada-task-spec}).
00ce3714 989@item C-c t C-u
de803500
EZ
990@findex ada-with
991with (@code{ada-with}).
00ce3714 992@item C-c t C-v
de803500
EZ
993@findex ada-private
994private (@code{ada-private}).
00ce3714 995@item C-c t C-w
de803500
EZ
996@findex ada-when
997when (@code{ada-when}).
00ce3714 998@item C-c t C-x
de803500
EZ
999@findex ada-exception
1000exception (@code{ada-exception}).
00ce3714 1001@item C-c t C-y
de803500
EZ
1002@findex ada-type
1003type (@code{ada-type}).
00ce3714
GM
1004@end table
1005
1006@c -----------------------------------------------------------------------
1007@node Comment Handling, Compiling Executing, Statement Templates, Top
1008@chapter Comment Handling
1009@c -----------------------------------------------------------------------
1010
1011By default, comment lines get indented like Ada code. There are a few
1012additional functions to handle comments:
1013
1014
1015@table @kbd
1016@item M-;
1017Start a comment in default column.
1018@item M-j
1019Continue comment on next line.
2e78ad14 1020@item C-c ;
00ce3714
GM
1021Comment the selected region (add -- at the beginning of lines).
1022@item C-c :
1023Uncomment the selected region
1024@item M-q
1025autofill the current comment.
1026@end table
1027
1028@c -----------------------------------------------------------------------
1029@node Compiling Executing, Debugging, Comment Handling, Top
1030@chapter Compiling Executing
1031@c -----------------------------------------------------------------------
1032
1033Ada mode provides a much complete environment for compiling, debugging
1034and running an application within Emacs.
1035
1036All the commands used by Emacs to manipulate your application can be
1037customized in the project file. Some default values are provided, but
1038these will likely not be good enough for a big or even medium-sized
1039project. See the section on the project file for an explanation on how
1040to set up the commands to use.
1041
1042One of the variables you can set in your project file,
1043@code{cross_prefix}, indicates whether you are using a cross-compilation
1044environment, and if yes for which target. The default command used for
1045compilation will add this @code{cross_prefix} in front of the name:
1046@code{gcc} will become @code{cross_prefix}-@code{gcc}, @code{gnatmake}
1cd0f7e3 1047will become @code{cross_prefix}-@code{gnatmake}, @enddots{}
00ce3714
GM
1048
1049This will also modify the way your application is run and debugged,
1050although this is not implemented at the moment.
1051
1052Here are the commands for building and using an Ada application
1053
1054@itemize @bullet
1055
1056@item Compiling the current source
1057This command is issued when issuing the @code{compile} command from the
1058Ada menu. It compiles unconditionally the current source using the
1059@code{comp_cmd} variable of the project file. Compilation options can be
1060customized with the variable @code{comp_opt} of the project file.
1061
1062Emacs will display a new buffer that contains the result of the
1063compilation. Each line associated with an error will become active: you
1064can simply click on it with the middle button of the mouse, or move the
2e78ad14 1065cursor on it and press @key{RET}. Emacs will then display the
00ce3714
GM
1066relevant source file and put the cursor on the line and column the error
1067was found at.
1068
1069You can also simply press the @kbd{C-x `} key and Emacs will jump to the
1070first error. If you press that key again, it will move you to the second
1071error, and so on.
1072
1073Some error messages might also include references to some files. These
1074references are also clickable in the same way.
1075
1076
1077@item (Re)building the whole application
1078This command is issued when you select the @code{build} command from the
1079Ada menu. It compiles all obsolete units of the current application
1080using the @code{make_cmd} variable of the project file. Compilation
1081options can be customized with the variable @code{comp_opt} of the
1082project file, binder options with @code{bind_opt} and linker options
1083with @code{link_opt}. The main unit of the application may be specified
1084with @code{main}.
1085
1086The compilation buffer is also active in the same way it was for the above
1087command.
1088
1089@item Running the application
1090This command is issued when you select the @code{run} command from the
1091Ada menu. It executes the current application in an emacs
1092buffer. Arguments can be passed through before executing. The execution
1093buffer allows for interactive input/output.
1094
1095This command is not yet available in a cross-compilation
1096toolchain. Emacs would first need to log on the target before running
1097the application. This will be implemented in a future release of Gnat.
1098
1099@end itemize
1100
1101@c ---------------------------------------------------------------------
1102@node Debugging, Using non-standard file names, Compiling Executing, Top
1103@chapter Debugging your application
1104@c ---------------------------------------------------------------------
1105
1106You can set up in the project file a command to use to debug your
1107application. Emacs is compatible with a lot of debuggers, and provide an
1108easy interface to them.
1109
1110This selection will focus on the gdb debugger, and two of the graphical
1111interfaces that exist for it.
1112
1113In all cases, the main window in Emacs will be split in two: in the
1114upper buffer, the source code will appear, whereas the debugger
1115input/output window is displayed at the bottom. You can enter the
1116debugger commands as usual in the command window. Every time a new
1117source file is selected by the debugger (for instance as a result of a
1118@code{frame} command), the appropriate source file is displayed in the
1119upper buffer.
1120
1121The source window is interactive: you can click on an identifier with the
1122right mouse button, and print its value in the debugger window. You can
1123also set a breakpoint simply by right-clicking on a line.
1124
1125You can easily use Emacs as the source window when you are using a
1126graphical interface for the debugger. The interesting thing is that,
1127whereas you still have the graphical nifties, you can also you the
2e78ad14
RS
1128cross-references features that Ada mode provides to look at the
1129definition for the identifiers, @enddots{}
00ce3714
GM
1130
1131Here is how you can set up gdbtk and ddd for use with Emacs (These are
1132the commands you should setup in the project file):
1133
1134@itemize @bullet
1135@item gdbtk
2e78ad14 1136should be used with the switch @samp{--emacs_gdbtk}. It provides a nice
00ce3714
GM
1137backtrace window, as well as a tasks window. You can click interactively
1138on both of them, and Emacs will display the source file on the correct
1139line.
1140
1141@item ddd (Data Display Debugger)
2e78ad14
RS
1142should be used with the switches @samp{--tty} and
1143@samp{--fullname}. Whenever you print a variable from Emacs, it will
1144be displayed graphically in the data window.
00ce3714
GM
1145
1146@end itemize
1147
1148
1149@c ---------------------------------------------------------------------
1150@node Using non-standard file names, Working Remotely, Debugging, Top
1151@chapter Using non-standard file names
1152@c ---------------------------------------------------------------------
1153
1154By default, Emacs is configured to use the GNAT style file names, where
1155file names are the package names, and the extension for spec and bodies
2e78ad14 1156are respectively @samp{.ads} and @samp{.adb}.
00ce3714
GM
1157
1158If you want to use other types of file names, you will need to modify
2e78ad14 1159your @file{.emacs} file.
00ce3714 1160
2e78ad14 1161Adding new possible extensions is easy. Since Ada mode needs to know
00ce3714 1162how to go from the body to the spec (and back), you always have to
2e78ad14 1163specify both. A function is provided with Ada mode to add new
00ce3714
GM
1164extensions.
1165
2e78ad14
RS
1166For instance, if your spec and bodies files are called
1167@file{@var{unit}_s.ada} and @file{@var{unit}_b.ada}, respectively, you
1168need to add the following to your @file{.emacs} file:
00ce3714
GM
1169
1170@example
1171(ada-add-extensions "_s.ada" "_b.ada")
1172@end example
1173
1174Note that it is possible to redefine the extension, even if they already
1175exist, as in:
1176
1177@example
1178(ada-add-extensions ".ads" "_b.ada")
1179(ada-add-extensions ".ads" ".body")
1180@end example
1181
1182This simply means that whenever the ada-mode will look for the body for
1183a file whose extension is @file{.ads}, it will take the first available
1184file that ends with either @file{.adb} (standard), @file{_b.ada} or
1185@file{.body}.
1186
2e78ad14
RS
1187If the filename is not the unit name, then things are a little more
1188complicated. You then need to rewrite the function
1189@code{ada-make-filename-from-adaname} (see the file @file{ada-mode.el}
1190for an example).
00ce3714
GM
1191
1192@c ---------------------------------------------------------------------
de803500 1193@node Working Remotely, Index, Using non-standard file names, Top
00ce3714
GM
1194@chapter Working Remotely
1195@c ---------------------------------------------------------------------
1196
1197When you work on project that involve a lot of programmers, it is
1198generally the case that you will edit the files on your own machine, but
1199you want to compile, run and debug your application in another buffer.
1200
1201Fortunately, here too Emacs provides a very convenient way to do this.
1202
1203@c ---------------------------------------------------------------------
1204@section Remote editing
1205@c ---------------------------------------------------------------------
1206
1207First of all, the files do not need to be on your machine. Emacs can
1208edit any remote file, by doing transparent FTP sessions between your
1209machine and the remote machine that stores your files. This is a special
1210Emacs mode, called @code{ange-ftp}. To use it, you just have to use a
1211slightly different syntax when you open a file.
1212
2e78ad14 1213For instance, if you want to open the file @file{/work/foo.adb} on the machine
00ce3714
GM
1214aleph.gnu.org, where you log in as qwe, you would simply do this:
1215
2e78ad14
RS
1216@example
1217C-x C-f /qwe@@aleph.gnu.org:/work/foo.adb @key{RET}
00ce3714
GM
1218@end example
1219
2e78ad14
RS
1220@noindent
1221i.e., use your name, the name of the machine and the name of the file.
1222
00ce3714
GM
1223The first time, Emacs will ask you for a password that it will remember
1224until you close the current Emacs. Even if the ftp session times out,
1225you won't need to reenter your password.
1226
1227Every time you save the file, Emacs will upload it to the remote machine
1228transparently. No file is modified on the local machine.
1229
1230@c ---------------------------------------------------------------------
1231@section Remote compiling
1232@c ---------------------------------------------------------------------
1233
1234If the machine you want to compile on is not the one your Emacs is
1235running on, you can set the variable @code{remote_machine} in the
1236project file for your application.
1237
2e78ad14 1238This will force Emacs to issue a @command{rsh} command for the compilation,
00ce3714
GM
1239instead of running it on the local machine. Unfortunately, this won't
1240work on Windows workstations, since this protocol is not supported.
1241
1242@example
1243If your @code{remote_machine} is aleph.gnu.org and the standard
1244compilation command is @code{cd /work/ && gnatmake foo}, then Emacs will
1245actually issue the command @code{rsh aleph.gnu.org 'cd /work/ &&
1246gnatmake foo'}.
1247@end example
1248
1249The advantage of using the @code{remote_machine} variable is that it is
1250easier to change that machine without having to modify the compilation
1251command.
1252
1253Note that if you need to set up some environment variables before the
1254compilation, you need to insert a call to the appropriate initialization
1255script in the compilation command, for instance:
1256
1257@example
2e78ad14 1258build_cmd= initialization_script; cd /work/ && gnatmake foo
00ce3714
GM
1259@end example
1260
1261@c ---------------------------------------------------------------------
1262@section Remote running and debugging
1263@c ---------------------------------------------------------------------
1264
1265This feature is not completely implemented yet.
1266
1267However, most of the time, you will be able to run your application
2e78ad14
RS
1268remotely simply by replacing it with a @command{rsh} call.
1269For instance, if your command was @code{$@{main@}}, you could replace it with
1270@code{rsh aleph.gnu.org $@{main@}}.
00ce3714 1271
2e78ad14
RS
1272However, this would not work on vxworks, for instance, where
1273@command{rsh} is not supported.
00ce3714 1274
de803500
EZ
1275@node Index, , Working Remotely, Top
1276@unnumbered Index
1277
1278@printindex fn
1279
00ce3714
GM
1280@contents
1281@bye
ab5796a9
MB
1282
1283@ignore
1284 arch-tag: 68cf0d8a-55cc-4190-a28d-4984fa56ed1e
1285@end ignore