aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Dominik1999-12-20 11:18:31 +0000
committerCarsten Dominik1999-12-20 11:18:31 +0000
commit797c8ebcdd861ad6798acad8554ed6dbb37927bb (patch)
tree388ded65215d9b8d7c4cb91bb40df850f75e0914
parent8c7bb45418226564a3cc75ccb68aec2cf11bc575 (diff)
downloademacs-797c8ebcdd861ad6798acad8554ed6dbb37927bb.tar.gz
emacs-797c8ebcdd861ad6798acad8554ed6dbb37927bb.zip
TeXInfo documentation of the IDLWAVE mode and shell
-rw-r--r--man/idlwave.texi1784
1 files changed, 1784 insertions, 0 deletions
diff --git a/man/idlwave.texi b/man/idlwave.texi
new file mode 100644
index 00000000000..6082e8dfdf4
--- /dev/null
+++ b/man/idlwave.texi
@@ -0,0 +1,1784 @@
1\input texinfo @c -*-texinfo-*-
2@c %**start of header
3@setfilename ../info/idlwave
4@settitle IDLWAVE User Manual
5@dircategory Editors
6@direntry
7* IDLWAVE: (idlwave). Major mode and shell for IDL and WAVE/CL files.
8@end direntry
9@synindex ky cp
10@syncodeindex vr cp
11@syncodeindex fn cp
12@set VERSION 3.11
13@set EDITION 1.7
14@set IDLVERSION 5.3
15@set NSYSROUTINES 1226
16@set NSYSKEYWORDS 5230
17@set DATE December 1999
18@set AUTHOR Carsten Dominik
19@set AUTHOR-EMAIL dominik@@astro.uva.nl
20@set MAINTAINER Carsten Dominik
21@set MAINTAINER-EMAIL dominik@@astro.uva.nl
22@c %**end of header
23@finalout
24
25@ifinfo
26This file documents IDLWAVE, a major mode for editing IDL and
27WAVE/CL files with Emacs. It also implements a shell for running IDL as
28a subprocess.@refill
29
30This is edition @value{EDITION} of the IDLWAVE User Manual for
31IDLWAVE @value{VERSION}@refill
32
33Copyright (c) 1999 Free Software Foundation, Inc.
34
35Permission is granted to make and distribute verbatim
36copies of this manual provided the copyright notice and
37this permission notice are preserved on all copies.
38
39@ignore
40Permission is granted to process this file through TeX
41and print the results, provided the printed document
42carries a copying permission notice identical to this
43one except for the removal of this paragraph (this
44paragraph not being relevant to the printed manual).
45
46@end ignore
47Permission is granted to copy and distribute modified
48versions of this manual under the conditions for
49verbatim copying, provided that the entire resulting
50derived work is distributed under the terms of a permission
51notice identical to this one.
52
53Permission is granted to copy and distribute
54translations of this manual into another language,
55under the above conditions for modified versions,
56except that this permission notice may be stated in a
57translation approved by the Free Software Foundation.
58@end ifinfo
59
60@titlepage
61@title IDLWAVE User Manual
62@subtitle Major Emacs mode and shell for IDL and WAVE/CL files
63@subtitle Edition @value{EDITION}, @value{DATE}
64
65@author by Carsten Dominik
66@page
67Copyright @copyright{} 1999 Free Software Foundation, Inc.
68
69@sp 2
70This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
71IDLWAVE version @value{VERSION}, @value{DATE}.@refill
72
73@sp 2
74
75Permission is granted to make and distribute verbatim
76copies of this manual provided the copyright notice and
77this permission notice are preserved on all copies.
78
79Permission is granted to copy and distribute modified
80versions of this manual under the conditions for
81verbatim copying, provided that the entire resulting
82derive work is distributed under the terms of a permission
83notice identical to this one.
84
85Permission is granted to copy and distribute
86translations of this manual into another language,
87under the above conditions for modified versions,
88except that this permission notice may be stated in a
89translation approved by the Free Software Foundation.
90
91@end titlepage
92@page
93
94@ifinfo
95@node Top, Introduction, (dir), (dir)
96
97IDLWAVE is a package to support editing command files for the
98Interactive Data Language (IDL), and for running IDL as an inferior
99shell. @refill
100
101@end ifinfo
102
103@menu
104* Introduction:: What IDLWAVE is and what not
105* IDLWAVE in a Nutshell:: One page quick-start guide
106* The IDLWAVE Major Mode:: The mode to edit IDL programs
107* The IDLWAVE Shell:: The mode to run IDL as inferior program
108* Installation:: How to Install or Upgrade
109* Acknowledgement:: Who helped
110* Sources of Routine Info:: How does IDLWAVE know about routine XYZ
111* Configuration Examples:: The user is king...
112* Index:: Fast access
113
114@detailmenu
115
116 --- The Detailed Node Listing ---
117
118The IDLWAVE Major Mode
119
120* Code Formatting:: Making code look nice
121* Routine Info:: Calling Sequences and Keywords
122* Completion:: Completing routine names and Keywords
123* Code Templates:: Abbreviations for frequent constructs
124* Actions:: Changing case, Padding, End checking
125* Doc Header:: Inserting a standard header
126* Motion Commands:: Moving through the structure of a program
127* Misc Options:: Things that fit nowhere else
128
129Code Formatting
130
131* Code Indentation:: Reflecting the logical structure
132* Comment Indentation:: Special indentation for comment lines
133* Continuation Lines:: Splitting statements over lines
134* Syntax Highlighting:: Font-lock support
135
136Actions
137
138* Block Boundary Check:: Is the END correct
139* Padding Operators:: Enforcing space around `=' etc
140* Case Changes:: Enforcing upper case keywords
141
142The IDLWAVE Shell
143
144* Starting the Shell:: How to launch IDL as a subprocess
145* Using the Shell:: Interactively working with the Shell
146* Debugging IDL Programs:: Compilation/Debugging
147
148Debugging IDL Programs
149
150* Compiling Programs:: Compiling buffers under the shell
151* Breakpoints and Stepping:: Deciding where to stop and look
152* Examining Variables:: What is the value now?
153
154Installation
155
156* Installing IDLWAVE:: How to install the distribution
157* Upgrading from idl.el:: Necessary configuration changes
158
159Sources of Routine Info
160
161* Routine Definitions:: Where IDL Routines are defined.
162* Routine Information Sources:: So how does IDLWAVE know about...
163* Library Scan:: Scanning the Libraries for Routine Info
164* Updating idlwave-rinfo.el:: Scanning the Reference Manual
165@end detailmenu
166@end menu
167
168@node Introduction, IDLWAVE in a Nutshell, Top, Top
169@chapter Introduction
170@cindex Introduction
171@cindex CORBA (Common Object Request Broker Architecture)
172@cindex cc-mode.el
173@cindex Feature overview
174
175IDLWAVE is a package to support editing command files for the
176Interactive Data Language (IDL), and for running IDL as an inferior
177shell. It also can be used for WAVE/CL command files, but the support
178for these is limited. Note that this package has nothing to do with the
179Interface Definition Language as part of the Common Object Request
180Broker Architecture (CORBA).
181
182IDLWAVE is the successor to the @file{idl.el} and @file{idl-shell.el}
183files written by Chris Chase. The modes and files had to be renamed
184because of a name space conflict with CORBAs @code{idl-mode}, defined in
185Emacs in the file @file{cc-mode.el}. If you have been using the old
186files, check @ref{Upgrading from idl.el} for information on how to
187switch.
188
189IDLWAVE consists of two parts: A major mode for editing command files
190(@code{idlwave-mode}) and a mode to allow running the IDL program as an
191inferior shell (@code{idlwave-shell-mode}). Both modes work closely
192together and form a complete development environment.@refill
193
194Here is a brief summary of what IDLWAVE does.
195
196@itemize @bullet
197@item
198Code indentation and formatting.
199@item
200Font-lock support on three levels.
201@item
202Display of calling sequence and keywords of more than 1000 IDL
203routines.
204@item
205Context sensitive completion of routine names and keywords.
206@item
207Insertion of code templates.
208@item
209Actions to enforce coding standards during typing.
210@item
211Block structure check.
212@item
213Documentation support.
214@item
215Running IDL as inferior process.
216@item
217Shell with history search, command line editing and completion.
218@item
219Compilation, execution and debugging of programs directly from the source
220buffer.
221@item
222Examining expressions with a mouse click.
223@end itemize
224
225@ifnottex
226@cindex Screenshots
227Here are a number of screenshots showing IDLWAVE in action.
228@itemize @bullet
229@item
230@uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/font-lock.gif,
231XEmacs 21.1 with formatted and fontified code}
232@item
233@uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/rinfo.gif,
234XEmacs 21.1 displaying routine info}
235@item
236@uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/complete.gif,
237XEmacs 21.1 completing a keyword}
238@item
239@uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/shell.gif,
240XEmacs 21.1 with debugging toolbar; execution stopped at a breakpoint}
241@end itemize
242@end ifnottex
243
244In this manual, each section contains a list of user options related to
245the subject. Don't be confused by the shear number of options available
246-- in most cases the default settings are just fine. The variables are
247listed here to make sure you know where to look if you want to change
248things. For a full description of what a particular variable does and
249how to configure it, see the documentation string of that variable.
250Some configuration examples are also given in the appendix.
251
252@node IDLWAVE in a Nutshell, The IDLWAVE Major Mode, Introduction, Top
253@chapter IDLWAVE in a Nutshell
254@cindex Quick-Start
255@cindex Getting Started
256@cindex IDLWAVE in a Nutshell
257@cindex Nutshell, IDLWAVE in a
258
259If you are in a hurry, here is some quick-start information.
260
261@subheading Editing IDL Programs
262
263@multitable @columnfractions .15 .85
264@item @key{TAB}
265@tab Indent the current line relative to context.
266@item @kbd{M-C-\}
267@tab Re-indent all lines in the current region.
268@item @kbd{M-@key{RET}}
269@tab Start a continuation line. Or split the current line at point.
270@item @kbd{M-q}
271@tab Fill the current comment paragraph.
272@item @kbd{C-c ?}
273@tab Display calling sequence, keywords of the procedure/function call
274at point.
275@item @kbd{M-@key{TAB}}
276@tab Complete a procedure name, function name or keyword in the buffer.
277@item @kbd{C-c C-i}
278@tab Update IDLWAVE's knowledge about functions and procedures.
279@item @kbd{C-c C-v}
280@tab Find the source code of a procedure/function.
281@item @kbd{C-c C-h}
282@tab Insert a standard documentation header.
283@item @kbd{C-c C-m}
284@tab Insert a new timestamp and history item in the documentation header.
285@end multitable
286
287@subheading Running the IDLWAVE Shell, Debugging Programs
288
289@multitable @columnfractions .15 .85
290@item @kbd{C-c C-s}
291@tab Start IDL as a subprocess and/or switch to the interaction buffer.
292@item @kbd{C-u C-c C-s}
293@tab Start the shell in a separate frame.
294@item @kbd{M-p}
295@tab Cycle back through IDL command history matching command line input.
296@item @kbd{M-n}
297@tab Cycle forward.
298@item @kbd{M-@key{TAB}}
299@tab Complete a procedure name, function name or keyword in the shell buffer.
300@item @kbd{C-c C-d C-c}
301@tab Save and compile the source file in the current buffer.
302@item @kbd{C-c C-d C-x}
303@tab Goto next syntax error.
304@item @kbd{C-c C-d C-b}
305@tab Set a breakpoint at the current source line.
306@item @kbd{C-c C-d C-d}
307@tab Clear the current breakpoint.
308@item @kbd{C-c C-d C-p}
309@tab Ask IDL to print the value of the expression near point.
310@end multitable
311
312@subheading Commonly used Settings in @file{.emacs}
313@lisp
314;; Change the indentation preferences
315(setq idlwave-main-block-indent 2 ; default 0
316 idlwave-block-indent 2 ; default 4
317 idlwave-end-offset -2) ; default -4
318
319;; Syntax Highlighting
320(add-hook 'idlwave-mode-hook 'turn-on-font-lock)
321;; Automatically expand END to ENDIF, ENDELSE, ...
322(setq idlwave-expand-generic-end t)
323
324;; Automatically start the shell when needed
325(setq idlwave-shell-automatic-start t)
326;; Always use a separate frame for the shell buffer
327(setq idlwave-shell-use-dedicated-frame t)
328
329;; Specify a file where library info can be stored.
330(setq idlwave-libinfo-file "~/idlinfo.el")
331@end lisp
332
333@node The IDLWAVE Major Mode, The IDLWAVE Shell, IDLWAVE in a Nutshell, Top
334@chapter The IDLWAVE Major Mode
335@cindex IDLWAVE major mode
336@cindex Major mode, @code{idlwave-mode}
337
338The IDLWAVE major mode supports editing IDL and WAVE/CL command files.
339In this chapter we describe the main features of the mode and how to
340customize them.
341
342@menu
343* Code Formatting:: Making code look nice
344* Routine Info:: Calling Sequences and Keywords
345* Completion:: Completing routine names and Keywords
346* Code Templates:: Abbreviations for frequent constructs
347* Actions:: Changing case, Padding, End checking
348* Doc Header:: Inserting a standard header
349* Motion Commands:: Moving through the structure of a program
350* Misc Options:: Things that fit nowhere else
351@end menu
352
353@node Code Formatting, Routine Info, The IDLWAVE Major Mode, The IDLWAVE Major Mode
354@section Code Formatting
355@cindex Code formatting
356@cindex Formatting, of code
357
358@menu
359* Code Indentation:: Reflecting the logical structure
360* Comment Indentation:: Special indentation for comment lines
361* Continuation Lines:: Splitting statements over lines
362* Syntax Highlighting:: Font-lock support
363@end menu
364
365@node Code Indentation, Comment Indentation, Code Formatting, Code Formatting
366@subsection Code Indentation
367@cindex Code indentation
368@cindex Indentation
369
370Like all Emacs programming modes, IDLWAVE performs code indentation.
371The @key{TAB} key indents the current line relative to context.
372@key{LFD} insert a newline and indents the new line. The indentation is
373governed by a number of variables.
374
375@cindex Foreign code, adapting
376@cindex Indentation, of foreign code
377To re-indent a larger portion of code (e.g. when working with foreign code
378written with different conventions), use @kbd{M-C-\}
379(@code{indent-region}) after marking the relevant code. Useful marking
380commands are @kbd{C-x h} (the entire file) or @kbd{M-C-h} (the
381current subprogram). @xref{Actions}, for information how to impose
382additional formatting conventions on foreign code.
383
384@defopt idlwave-main-block-indent (@code{0})
385Extra indentation for the main block of code. That is the block between
386the FUNCTION/PRO statement and the END statement for that program
387unit.@refill
388@end defopt
389
390@defopt idlwave-block-indent (@code{4})
391Extra indentation applied to block lines. If you change this, you
392probably also want to change @code{idlwave-end-offset}.@refill
393@end defopt
394
395@defopt idlwave-end-offset (@code{-4})
396Extra indentation applied to block END lines. A value equal to negative
397@code{idlwave-block-indent} will make END lines line up with the block
398BEGIN lines.@refill
399@end defopt
400
401@defopt idlwave-continuation-indent (@code{2})
402Extra indentation applied to continuation lines and insided unbalanced
403parenthesis.@refill
404@end defopt
405
406@node Comment Indentation, Continuation Lines, Code Indentation, Code Formatting
407@subsection Comment Indentation
408@cindex Comment indentation
409@cindex Hanging paragraphs
410@cindex Paragraphs, filling
411@cindex Paragraphs, hanging
412
413In IDL, lines starting with a @samp{;} are called @emph{comment lines}.
414Comment lines are indented as follows:
415
416@multitable @columnfractions .1 .90
417@item @code{;;;}
418@tab The indentation of lines starting with three semicolons remains
419unchanged.
420@item @code{;;}
421@tab Lines starting with two semicolons are indented like the surrounding code.
422@item @code{;}
423@tab Lines starting with a single semicolon are indent to a minimum column.
424@end multitable
425
426The indentation of comments starting in column 0 is never changed.
427
428@defopt idlwave-no-change-comment
429The indentation of a comment that starts with this regular
430expression will not be changed.
431@end defopt
432
433@defopt idlwave-begin-line-comment
434A comment anchored at the beginning of line. A comment matched by this
435regular expression will not have its indentation changed.@refill
436@end defopt
437
438@defopt idlwave-code-comment
439A comment that starts with this regular expression on a line by itself
440is indented as if it is a part of IDL code.@refill
441@end defopt
442
443@node Continuation Lines, Syntax Highlighting, Comment Indentation, Code Formatting
444@subsection Continuation Lines and Filling
445@cindex Continuation lines
446@cindex Line splitting
447@cindex Splitting, of lines
448@cindex Filling
449@cindex @code{auto-fill-mode}
450@cindex Hanging paragraphs
451
452In IDL, a newline character terminates a statement unless preceded by a
453@samp{$}. If you would like to start a continuation line, use
454@kbd{M-@key{RET}} which calls the command @code{idlwave-split-line}. It
455inserts a @samp{$} to indicate that the following line is a continuation
456of the current line, terminates the line with a newline and indents the
457new line. The command @kbd{M-@key{RET}} can also be used in the middle
458of a line to split the line at that point. When used inside a long
459string constant, the string is split with the @samp{+} concatenation
460operator. You could even use @code{auto-fill-mode} to automatically
461break code lines into several lines while you type. For this, set the
462variable @code{idlwave-fill-comment-line-only} to @code{nil} and turn on
463@code{auto-fill-mode}. @code{auto-fill-mode} can be toggled with
464@kbd{C-c C-a}.
465
466When filling comment paragraphs, IDLWAVE overloads the normal filling
467functions and uses a function which creates hanging paragraphs as they
468are customary in the IDL routine headers. When @code{auto-fill-mode} is
469turned on, comments will be auto-filled. If the first line of a
470paragraph is matched by @code{idlwave-hang-indent-regexp}, subsequent
471lines are indented to after the position of this match, as in the
472following example.
473
474@example
475; INPUTS
476; x - an array containing
477; lots of interesting numbers.
478;
479; y - another variable where
480; a hanging paragraph is used
481; to describe it.
482@end example
483
484You also refill a comment paragraph with @kbd{M-q}.
485
486@defopt idlwave-fill-comment-line-only (@code{t})
487Non-@code{nil} means auto fill will only operate on comment lines.
488@end defopt
489
490@defopt idlwave-auto-fill-split-string (@code{t})
491Non-@code{nil} means auto fill will split strings with the IDL @samp{+}
492operator.
493@end defopt
494
495@defopt idlwave-split-line-string (@code{t})
496Non-@code{nil} means @code{idlwave-split-line} will split strings with
497@samp{+}.
498@end defopt
499
500@defopt idlwave-hanging-indent
501Non-@code{nil} means comment paragraphs are indented under the hanging
502indent given by @code{idlwave-hang-indent-regexp} match in the first
503line of the paragraph.@refill
504@end defopt
505
506@defopt idlwave-hang-indent-regexp
507Regular expression matching the position of the hanging indent
508in the first line of a comment paragraph.@refill
509@end defopt
510
511@defopt idlwave-use-last-hang-indent (@code{nil})
512Non-@code{nil} means use last match on line for
513@code{idlwave-indent-regexp}.@refill
514@end defopt
515
516@node Syntax Highlighting, , Continuation Lines, Code Formatting
517@subsection Syntax Highlighting
518@cindex Syntax highlighting
519@cindex Font lock
520
521Highlighting of keywords, comments, strings etc. can be accomplished
522with @code{font-lock}. To enable @code{font-lock} for IDL files, place
523the following line into your @file{.emacs} (see
524@ref{Configuration Examples})@refill
525
526@lisp
527(add-hook 'idlwave-mode-hook 'turn-on-font-lock)
528@end lisp
529
530IDLWAVE supports 3 levels of syntax highlighting. The variable
531@code{font-lock-maximum-decoration} determines which level is selected.
532
533@defopt idlwave-default-font-lock-items
534Items which should be fontified on the default fontification level
5352.@refill
536@end defopt
537
538@node Routine Info, Completion, Code Formatting, The IDLWAVE Major Mode
539@section Routine Info
540@cindex Routine info
541
542IDL defines more than one thousand procedures, functions and object
543methods. This large command set makes it difficult to remember the
544calling sequence and keywords of a command. IDLWAVE contains a list of
545all builtin routines with calling sequences and keywords@footnote{This
546list was created by scanning the IDL manual and might contain (very few)
547errors. Please report any detected errors to the maintainer, so that
548they can be fixed.}. It also scans Emacs buffers and library files for
549routine definitions and queries the IDLWAVE-Shell for the properties of
550modules currently compiled under the shell. When you have edited a
551buffer or compiled additional routines under the shell, use @kbd{C-c
552C-i} (@code{idlwave-update-routine-info}) to update IDLWAVE's idea about
553these routines.@refill
554
555To display the information about a routine, press @kbd{C-c ?} which
556calls the command @code{idlwave-routine-info}. When the current cursor
557position is on the name or in the argument list of a procedure or
558function, information will be displayed about the routine. For example,
559consider the cursor positions in the following line
560
561@example
562plot,x,alog(x+5*sin(x) + 2),
563 1 2 3 4 5 6 7 8
564@end example
565
566@cindex Object methods
567On positions 1,2 and 8, information about the @samp{plot} procedure will
568be shown. On positions 3,4, and 7, the @samp{alog} function will be
569described, while positions 5 and 6 will select the @samp{sin} function.
570When you ask for routine information about an object method, and the
571method exists in several classes, IDLWAVE queries for the class of the
572object.
573
574@cindex Calling sequences
575@cindex Keywords of a routine
576The description displayed contains the calling sequence, the list of
577keywords and the origin of this information (@emph{system routine},
578@emph{library routine}, @emph{Emacs buffer}, or @emph{compiled
579module}). It looks like this:
580
581@example
582Usage: MAP_PROJ_INFO, iproj
583Keywords: CIRCLE CURRENT CYLINDRICAL NAME UV_LIMITS WIDTH
584Origin: buffer visiting /soft1/idl/lib/map_set.pro
585@end example
586
587Some of the text in the @file{*Help*} buffer will be active (it
588highlights when you move the mouse over it). Clicking with the middle
589mouse button on any of the active fields will try to find the source file of
590the routine and display it in another window. Another click on the same
591line will switch back to the buffer from which @kbd{C-c ?} was
592called. Clicking with the right mouse button on an active field will
593search the IDL online help for this item.@refill
594
595@cindex Routine source file
596@cindex Module source file
597Another way to find the source file of a routine is the command @kbd{C-c
598C-v} (@code{idlwave-find-module}). It asks for a module name, offering
599the same default as @code{idlwave-routine-info} would have used. In the
600minibuffer, specify a complete routine name (including the class part).
601IDLWAVE will display the source file in another window.@refill
602
603@cindex @code{RESOLVE_ROUTINE}
604@cindex Compiling library modules
605@cindex Routines, resolving
606@cindex Online help, for IDL routines
607The two other commands that work with the routine at point need a
608running IDLWAVE shell. The key sequence @kbd{M-?} calls the command
609@code{idlwave-routine-info-from-idlhelp}. This sends the command line
610@samp{ONLINE_HELP, '@var{routine_name}'} to IDL in order to display the
611documentation of the routine in the IDL online documentation. The key
612sequence @kbd{C-c =} calls the command @code{idlwave-resolve} and sends
613the line @samp{RESOLVE_ROUTINE, '@var{routine_name}'} to IDL in order to
614resolve (compile) it.
615
616@code{idlwave-resolve} is one way to get a library module within reach
617of IDLWAVE's routine info collecting functions. A better way is to
618prescan (parts of) the library (@pxref{Library Scan}). Routine info on
619library modules will then be available without the need to compile the
620modules first, and even without a running shell.
621
622@xref{Sources of Routine Info}, for in-depth information where IDLWAVE
623collects data about routines, and how to update this information.
624
625@defopt idlwave-scan-all-buffers-for-routine-info (@code{t})
626Non-@code{nil} means, scan all buffers for IDL programs when updating
627info. When this variable is @code{nil}, it only parses the current
628buffer.@refill
629@end defopt
630
631@defopt idlwave-query-shell-for-routine-info (@code{t})
632Non-@code{nil} means query the shell for info about compiled routines.
633@end defopt
634
635@defopt idlwave-resize-routine-help-window (@code{t})
636Non-@code{nil} means, resize the Routine-info @file{*Help*} window to
637fit the content.@refill
638@end defopt
639
640
641@node Completion, Code Templates, Routine Info, The IDLWAVE Major Mode
642@section Completion
643@cindex Completion
644
645IDLWAVE offers completion for routine names and keywords. As in many
646programming modes, completion is bound to @kbd{M-@key{TAB}}.
647Completion uses the same internal information as routine info,
648so in order to update IDLWAVE's idea about your own routines after you
649have edited or compiled them, press @kbd{C-c C-i}
650(@code{idlwave-update-routine-info}).@refill
651
652The completion function is context sensitive and figures out what to
653complete at point. Here are example lines and what @kbd{M-@key{TAB}}
654would try to complete when the cursor is on the position marked with a
655@samp{*}.
656
657@example
658plo* @r{Procedure}
659x = a* @r{Function}
660plot,xra* @r{Keyword of @code{plot} procedure}
661plot,x,y,/x* @r{Keyword of @code{plot} procedure}
662plot,min(* @r{Keyword of @code{min} function}
663obj -> a* @r{Object method (procedure)}
664a(2,3) = obj -> a* @r{Object method (function)}
665x = obj_new('IDL* @r{Class name}
666x = obj_new('MyCl',a* @r{Keyword to @code{Init} method in class @code{MyCl}}
667@end example
668
669@cindex Scrolling the @file{*Completions*} window
670@cindex Completion, scrolling
671If the list of completions is too long to fit in the
672@file{*Completions*} window, the window can be scrolled by pressing
673@kbd{M-@key{TAB}} repeatedly.@refill
674
675@cindex Case of completed words
676The case of the completed words is determined by what is already in the
677buffer. When the partial word being completed is all lower case, the
678completion will be lower case as well. If at least one character is
679upper case, the string will be completed in upper case or mixed case.
680The default is to use upper case for procedures, functions and keywords,
681and mixed case for object class names and methods, similar to the
682conventions in the IDL manuals. These defaults can be changed with the
683variable @code{idlwave-completion-case}.@refill
684
685@defopt idlwave-completion-case
686Association list setting the case (UPPER/lower/Capitalized/...) of completed
687words.@refill
688@end defopt
689
690@defopt idlwave-completion-force-default-case (@code{nil})
691Non-@code{nil} means, completion will always honor the settings in
692@code{idlwave-completion-case}. When nil (the default), lower case
693strings will be completed to lower case.
694@end defopt
695
696@defopt idlwave-complete-empty-string-as-lower-case (@code{nil})
697Non-@code{nil} means, the empty string is considered lower case for
698completion.@refill
699@end defopt
700
701@defopt idlwave-keyword-completion-adds-equal (@code{t})
702Non-@code{nil} means, completion automatically adds @samp{=} after
703completed keywords.@refill
704@end defopt
705
706@defopt idlwave-function-completion-adds-paren (@code{t})
707Non-@code{nil} means, completion automatically adds @samp{(} after
708completed function. A value of `2' means, also add the closing
709parenthesis and position cursor between the two.@refill
710@end defopt
711
712@defopt idlwave-completion-restore-window-configuration (@code{t})
713Non-@code{nil} means, restore window configuration after successful
714completion.@refill
715@end defopt
716
717@subsubheading Object Method Completion and Class Ambiguity
718@cindex Object methods
719@cindex Class ambiguity
720An object method is not uniquely determined without the object's class.
721Since the class part is usually omitted in the source code, IDLWAVE
722considers all available methods in all classes as possible completions
723of an object method name. For keywords, the combined keywords of the
724current method in all available classes will be considered. In the
725@file{*Completions*} buffer, the classes allowed for each completion
726will be shown next to the item (see option
727@code{idlwave-completion-show-classes}).@refill
728
729You can also call @code{idlwave-complete} with a prefix arg: @kbd{C-u
730M-@key{TAB}}. IDLWAVE will then prompt you for the class in order to
731narrow down the number of possible completions. The variable
732@code{idlwave-query-class} can be configured to make this behavior the
733default (not really recommended). After you have specified the class
734for a particular statement (e.g. when completing the method), IDLWAVE
735can remember it for the rest of the editing session. Subsequent
736completions in the same statement (e.g. keywords) can then reuse this
737class information. Remembering the class works by placing a text
738property in the object operator @samp{->}. This is not enabled by
739default - the variable @code{idlwave-store-inquired-class} can be used
740to turn it on.@refill
741
742@defopt idlwave-completion-show-classes (@code{t})
743Non-@code{nil} means, show classes in @file{*Completions*} buffer when
744completing object methods and keywords.@refill
745@end defopt
746
747@defopt idlwave-completion-fontify-classes (@code{t})
748Non-@code{nil} means, fontify the classes in completions buffer.
749@end defopt
750
751@defopt idlwave-query-class (@code{nil})
752Association list governing query for object classes during completion.@refill
753@end defopt
754
755@defopt idlwave-store-inquired-class (@code{nil})
756Non-@code{nil} means, store class of a method call as text property on
757@samp{->}.@refill
758@end defopt
759
760@defopt idlwave-class-arrow-face
761Face to highlight object operator arrows @samp{->} which carry a class
762property.@refill
763@end defopt
764
765@node Code Templates, Actions, Completion, The IDLWAVE Major Mode
766@section Code Templates
767@cindex Code templates
768@cindex Abbreviations
769@cindex Templates
770
771IDLWAVE can insert IDL code templates into the buffer. For a few
772templates, this is done with direct keybindings:
773
774@multitable @columnfractions .15 .85
775@item @kbd{C-c C-c}
776@tab @code{CASE} statement template
777@item @kbd{C-c C-f}
778@tab @code{FOR} loop template
779@item @kbd{C-c C-r}
780@tab @code{REPEAT} loop template
781@item @kbd{C-c C-w}
782@tab @code{WHILE} loop template
783@end multitable
784
785Otherwise, special abbreviations are used. Emacs abbreviations are
786expanded by typing text into the buffer and pressing @key{SPC} or
787@key{RET}. The special abbreviations used to insert code templates all
788start with a @samp{\} (the backslash). Here are a few examples of
789predefined abbreviations. For a full list, use @kbd{M-x
790idlwave-list-abbrevs}.
791
792@multitable @columnfractions .15 .85
793@item @code{\pr}
794@tab @code{PROCEDURE} template
795@item @code{\fu}
796@tab @code{FUNCTION} template
797@item @code{\c}
798@tab @code{CASE} statement template
799@item @code{\f}
800@tab @code{FOR} loop template
801@item @code{\r}
802@tab @code{REPEAT} loop template
803@item @code{\w}
804@tab @code{WHILE} loop template
805@item @code{\i}
806@tab @code{IF} statement template
807@item @code{\elif}
808@tab @code{IF-ELSE} statement template
809@item @code{\b}
810@tab @code{BEGIN}
811@end multitable
812
813@defopt idlwave-abbrev-start-char
814A single character string used to start abbreviations in abbrev
815mode.@refill
816@end defopt
817
818@defopt idlwave-abbrev-move (@code{t})
819Non-@code{nil} means the abbrev hook can move point, e.g. to end up
820between the parenthesis of a function call.
821@end defopt
822
823@node Actions, Doc Header, Code Templates, The IDLWAVE Major Mode
824@section Actions
825@cindex Actions
826@cindex Coding standards, enforcing
827
828@emph{Actions} are special commands which are executed automatically
829while you write code in order to check the structure of the program or
830to enforce coding standards. Most actions which have been implemented
831in IDLWAVE are turned off by default, assuming that the average user
832wants her code the way she writes it. But if you are a lazy typist and
833want your code to adhere to certain standards, they can be
834helpful.@refill
835
836Action can be applied in three ways:
837@itemize @bullet
838@item
839Some actions are applied directly while typing. For example, pressing
840@samp{=} can run a check to make sure that this operator is surrounded
841by spaces and insert these spaces if necessary. Pressing @key{SPC}
842after a reserved word can call a command to change the word to upper
843case.@refill
844@item
845When a line is re-indented with @key{TAB}, actions can be applied to the
846entire line. To enable this, the variable @code{idlwave-do-actions}
847must be non-@code{nil}.@refill
848@item
849@cindex Foreign code, adapting
850@cindex Actions, applied to foreign code
851Action can also be applied to a larger piece of code, e.g. in order to
852convert foreign code to your own style. To do this, mark the relevant
853part of the code and execute @kbd{M-x expand-region-abbrevs}. Useful
854marking commands are @kbd{C-x h} (the entire file) or @kbd{M-C-h} (the
855current subprogram). @xref{Code Indentation}, for information how to
856ajust the indentation of the code.@refill
857@end itemize
858
859@defopt idlwave-do-actions (@code{nil})
860Non-@code{nil} means performs actions when indenting.
861@end defopt
862
863@menu
864* Block Boundary Check:: Is the END correct
865* Padding Operators:: Enforcing space around `=' etc
866* Case Changes:: Enforcing upper case keywords
867@end menu
868
869@node Block Boundary Check, Padding Operators, Actions, Actions
870@subsection Block Boundary Check
871@cindex Block boundary check
872@cindex @code{END} type checking
873@cindex @code{END}, automatic insertion
874@cindex Block, closing
875@cindex Closing a block
876
877Whenever you type an @code{END} statement, IDLWAVE finds the
878corresponding start of the block and the cursor blinks back to that
879location for a second. If you have typed a specific @code{END}, like
880@code{ENDIF} or @code{ENDCASE}, you get a warning if that kind of END
881does not match the type of block it terminates.@refill
882
883Set the variable @code{idlwave-expand-generic-end} in order to have all
884generic @code{END} statements automatically expanded to a specific type.
885You can also type @kbd{C-c ]} to close the current block by inserting
886the appropriate @code{END} statement.@refill
887
888@defopt idlwave-show-block (@code{t})
889Non-@code{nil} means point blinks to block beginning for
890@code{idlwave-show-begin}.@refill
891@end defopt
892
893@defopt idlwave-expand-generic-end (@code{nil})
894Non-@code{nil} means expand generic END to ENDIF/ENDELSE/ENDWHILE etc.
895@end defopt
896
897@node Padding Operators, Case Changes, Block Boundary Check, Actions
898@subsection Padding Operators
899@cindex Padding operators with spaces
900@cindex Operators, padding with spaces
901
902Some operators can be automatically surrounded by spaces. This can
903happen when the operator is typed, or also later when the line is
904indented. IDLWAVE contains this setting for the operators @samp{&},
905@samp{<}, @samp{>}, @samp{,}, @samp{=}, but the feature is turned off by
906default. If you want to turn it on, customize the variable
907@code{idlwave-surround-by-blank}. You can also define similar actions
908for other operators by using the function
909@code{idlwave-action-and-binding} in the mode hook. For example, to
910enforce space padding of the @samp{+} and @samp{*} operators, try this
911in @file{.emacs}
912
913@lisp
914(add-hook 'idlwave-mode-hook
915 (lambda ()
916 (setq idlwave-surround-by-blank t) ; Turn this type of actions on
917 (idlwave-action-and-binding "*" '(idlwave-surround 1 1))
918 (idlwave-action-and-binding "+" '(idlwave-surround 1 1))))
919@end lisp
920
921@defopt idlwave-surround-by-blank (@code{nil})
922Non-@code{nil} means, enable @code{idlwave-surround}. If non-nil,
923@samp{=}, @samp{<}, @samp{>}, @samp{&}, @samp{,} are surrounded with
924spaces by @code{idlwave-surround}.
925@end defopt
926
927@defopt idlwave-pad-keyword (@code{t})
928Non-@code{nil} means pad @samp{=} for keywords like assignments.@refill
929@end defopt
930
931@node Case Changes, , Padding Operators, Actions
932@subsection Case Changes
933@cindex Case changes
934
935Actions can be used to change the case of reserved words or expanded
936abbreviations by customizing the variables
937@code{idlwave-abbrev-change-case} and
938@code{idlwave-reserved-word-upcase}. If you want to change the case of
939additional words automatically, put something like the following into
940your @file{.emacs} file:@refill
941
942@lisp
943(add-hook 'idlwave-mode-hook
944 (lambda ()
945 ;; Capitalize system vars
946 (idlwave-action-and-binding idlwave-sysvar '(capitalize-word 1) t)
947 ;; Capitalize procedure name
948 (idlwave-action-and-binding "\\<\\(pro\\|function\\)\\>[ \t]*\\<"
949 '(capitalize-word 1) t)
950 ;; Capitalize common block name
951 (idlwave-action-and-binding "\\<common\\>[ \t]+\\<"
952 '(capitalize-word 1) t)))
953@end lisp
954
955For more information, see the documentation string for the function
956@code{idlwave-action-and-binding}.
957
958@defopt idlwave-abbrev-change-case (@code{nil})
959Non-@code{nil} means all abbrevs will be forced to either upper or lower
960case. Legal values are @code{nil}, @code{t}, and @code{down}.
961@end defopt
962
963@defopt idlwave-reserved-word-upcase (@code{nil})
964Non-@code{nil} means, reserved words will be made upper case via abbrev
965expansion.
966@end defopt
967
968
969@node Doc Header, Motion Commands, Actions, The IDLWAVE Major Mode
970@section Documentation Header
971@cindex Documentation header
972@cindex Modification timestamp
973@cindex Header, for file documentation
974@cindex Timestamp, in doc header.
975@cindex Changelog, in doc header.
976
977The command @kbd{C-c C-h} inserts a standard routine header into the
978buffer, with the usual fields for documentation. One of the keywords is
979@samp{MODIFICATION HISTORY} under which the changes to a routine can be
980recorded. The command @kbd{C-c C-m} jumps to the @samp{MODIFICATION
981HISTORY} of the current routine or file and inserts the user
982name with a timestamp.
983
984@defopt idlwave-file-header
985The doc-header template or a path to a file containing it.
986@end defopt
987
988@defopt idlwave-timestamp-hook
989The hook function used to update the timestamp of a function.
990@end defopt
991
992@defopt idlwave-doc-modifications-keyword
993The modifications keyword to use with the log documentation commands.
994@end defopt
995
996@defopt idlwave-doclib-start
997Regexp matching the start of a document library header.
998@end defopt
999
1000@defopt idlwave-doclib-end
1001Regexp matching the start of a document library header.
1002@end defopt
1003
1004@node Motion Commands, Misc Options, Doc Header, The IDLWAVE Major Mode
1005@section Motion Commands
1006@cindex Motion commands
1007@cindex Program structure, moving through
1008@cindex Code structure, moving through
1009
1010Several commands allow to move quickly through the structure of an IDL
1011program. These are
1012
1013@multitable @columnfractions .15 .85
1014@item @kbd{C-M-a}
1015@tab Beginning of subprogram
1016@item @kbd{C-M-e}
1017@tab End of subprogram
1018@item @kbd{C-c @{}
1019@tab Beginning of block (stay inside the block)
1020@item @kbd{C-c @}}
1021@tab End of block (stay inside the block)
1022@item @kbd{M-C-n}
1023@tab Forward block (on same level)
1024@item @kbd{M-C-p}
1025@tab Backward block (on same level)
1026@item @kbd{M-C-d}
1027@tab Down block (enters a block)
1028@item @kbd{M-C-u}
1029@tab Backward up block (leaves a block)
1030@item @kbd{C-c C-n}
1031@tab Next Statement
1032@end multitable
1033
1034
1035@node Misc Options, , Motion Commands, The IDLWAVE Major Mode
1036@section Miscellaneous Options
1037
1038@defopt idlwave-help-application
1039The external application providing reference help for programming.
1040@end defopt
1041
1042@defopt idlwave-startup-message (@code{t})
1043Non-@code{nil} means display a startup message when @code{idlwave-mode}'
1044is first called.
1045@end defopt
1046
1047@defopt idlwave-mode-hook
1048Normal hook. Executed when a buffer is put into @code{idlwave-mode}.
1049@end defopt
1050
1051@defopt idlwave-load-hook
1052Normal hook. Executed when @file{idlwave.el} is loaded.
1053@end defopt
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070@node The IDLWAVE Shell, Installation, The IDLWAVE Major Mode, Top
1071@chapter The IDLWAVE Shell
1072@cindex IDLWAVE shell
1073@cindex Major mode, @code{idlwave-shell-mode}
1074
1075The IDLWAVE shell is an Emacs major mode which allows to run the IDL
1076program as an inferior process of Emacs. It can be used to work with
1077IDL interactively, to compile and run IDL programs in Emacs buffers and
1078to debug these programs. The IDLWAVE shell uses @file{comint}, an Emacs
1079packages which handles the communication with the IDL program.
1080Unfortunately IDL for Windows and MacOS does not allow the interaction
1081with Emacs@footnote{Please inform the maintainer if you come up with a way
1082to make the IDLWAVE shell work on these systems.} - so the IDLWAVE shell
1083only works under Unix.@refill
1084
1085@menu
1086* Starting the Shell:: How to launch IDL as a subprocess
1087* Using the Shell:: Interactively working with the Shell
1088* Debugging IDL Programs:: Compilation/Debugging
1089@end menu
1090
1091@node Starting the Shell, Using the Shell, The IDLWAVE Shell, The IDLWAVE Shell
1092@section Starting the Shell
1093@cindex Starting the shell
1094@cindex Shell, starting
1095@cindex Dedicated frame, for shell buffer
1096@cindex Frame, for shell buffer
1097
1098The IDLWAVE shell can be started with the command @kbd{M-x
1099idlwave-shell}. In @code{idlwave-mode} the function is bound to
1100@kbd{C-c C-s}. It creates a buffer @file{*idl*} which is used to
1101interact with the shell. If the shell is already running, @kbd{C-c C-s}
1102will simple switch to the shell buffer. The command @kbd{C-c C-l}
1103(@code{idlwave-shell-recenter-shell-window}) displays the
1104shell window without selecting it.@refill
1105
1106In order to create a separate frame for the IDLWAVE shell buffer, call
1107@code{idlwave-shell} with a prefix argument: @kbd{C-u C-c C-s} or
1108@kbd{C-u C-c C-l}. If you always want a dedicated frame for the shell
1109window, configure the variable
1110@code{idlwave-shell-use-dedicated-frame}.@refill
1111
1112The shell can also be started automatically when another command tries
1113to send a command to it. To enable auto start, set the variable
1114@code{idlwave-shell-automatic-start} to @code{t}.@refill
1115
1116@defopt idlwave-shell-explicit-file-name
1117This is the command to run IDL.
1118@end defopt
1119
1120@defopt idlwave-shell-command-line-options
1121A list of command line options for calling the IDL program.
1122@end defopt
1123
1124@defopt idlwave-shell-prompt-pattern
1125Regexp to match IDL prompt at beginning of a line.
1126@end defopt
1127
1128@defopt idlwave-shell-process-name
1129Name to be associated with the IDL process.
1130@end defopt
1131
1132@defopt idlwave-shell-automatic-start
1133Non-@code{nil} means attempt to invoke idlwave-shell if not already
1134running.
1135@end defopt
1136
1137@defopt idlwave-shell-initial-commands
1138Initial commands, separated by newlines, to send to IDL.
1139@end defopt
1140
1141@defopt idlwave-shell-use-dedicated-frame (@code{nil})
1142Non-@code{nil} means, IDLWAVE should use a special frame to display
1143shell buffer.
1144@end defopt
1145
1146@defopt idlwave-shell-frame-parameters
1147The frame parameters for a dedicated idlwave-shell frame.
1148@end defopt
1149
1150@defopt idlwave-shell-temp-pro-prefix
1151The prefix for temporary IDL files used when compiling regions.@refill
1152@end defopt
1153
1154@defopt idlwave-shell-mode-hook
1155Hook for customizing @code{idlwave-shell-mode}.
1156@end defopt
1157
1158@node Using the Shell, Debugging IDL Programs, Starting the Shell, The IDLWAVE Shell
1159@section Using the Shell
1160@cindex comint
1161@cindex Shell, basic commands
1162
1163The IDLWAVE shell works in the same fashion as other shell modes in
1164Emacs. It provides command history, command line editing and job
1165control. Here is a list of commonly used commands, see the Emacs
1166documentation on @file{comint} for additional information.@refill
1167
1168@multitable @columnfractions .12 .88
1169@item @kbd{M-p}
1170@tab Cycle backwards in input history matching input
1171@item @kbd{M-n}
1172@tab Cycle forwards
1173@item @kbd{M-r}
1174@tab Previous input matching a regexp
1175@item @kbd{M-s}
1176@tab Next input that matches a regexp
1177@item @kbd{return}
1178@tab Send input or copy line to current prompt
1179@item @kbd{C-c C-a}
1180@tab Beginning of line; skip prompt
1181@item @kbd{C-c C-u}
1182@tab Kill input to beginning of line
1183@item @kbd{C-c C-w}
1184@tab Kill word before cursor
1185@item @kbd{C-c C-c}
1186@tab Send ^C
1187@item @kbd{C-c C-z}
1188@tab Send ^Z
1189@item @kbd{C-c C-\}
1190@tab Send ^\
1191@item @kbd{C-c C-o}
1192@tab Delete last batch of process output
1193@item @kbd{C-c C-r}
1194@tab Show last batch of process output
1195@item @kbd{C-c C-l}
1196@tab List input history
1197@end multitable
1198
1199In addition to these standard @file{comint} commands,
1200@code{idlwave-shell-mode} has some bindings which correspond to similar
1201commands in @code{idlwave-mode}. See @ref{Routine Info} and
1202@ref{Completion} for more information on these commands.@refill
1203
1204@cindex Completion in the shell
1205@cindex Routine info in the shell
1206@multitable @columnfractions .12 .88
1207@item @kbd{@key{TAB}}
1208@tab Completion of file names, routine names and keywords
1209(@code{idlwave-shell-complete})@refill
1210@item @kbd{M-@key{TAB}}
1211@tab Same as @key{TAB}
1212@item @kbd{C-c ?}
1213@tab Routine Info display (@code{idlwave-routine-info})
1214@item @kbd{M-?}
1215@tab IDL online help on routine (@code{idlwave-routine-info-from-idlhelp})
1216@item @kbd{C-c C-i}
1217@tab Update routine info from buffers and shell
1218(@code{idlwave-update-routine-info})
1219@item @kbd{C-c C-v}
1220@tab Find the source file of a routine (@code{idlwave-find-module})
1221@item @kbd{C-c =}
1222@tab Compile a library routine (@code{idlwave-resolve})
1223@end multitable
1224
1225@defopt idlwave-shell-file-name-chars
1226The characters allowed in file names, as a string. Used for file name
1227completion.@refill
1228@end defopt
1229
1230@node Debugging IDL Programs, , Using the Shell, The IDLWAVE Shell
1231@section Debugging IDL Programs
1232@cindex Debugging
1233@cindex Keybindings for debugging
1234@cindex Toolbar
1235
1236Programs can be compiled, run, and debugged directly from the source
1237buffer in Emacs. The IDLWAVE shell installs keybindings both in the
1238shell buffer and in all IDL code buffers of the current Emacs session.
1239On Emacs versions which support this, it also installs a debugging
1240toolbar. The display of the toolbar can be toggled with @kbd{C-c C-d
1241C-t} (@code{idlwave-shell-toggle-toolbar}).@refill
1242
1243The debugging keybindings are by default on the prefix key @kbd{C-c
1244C-d}, so for example setting a breakpoint is done with @kbd{C-c C-d
1245C-b}. If you find this too much work and your ALT key is still
1246available, turn on the variable
1247@code{idlwave-shell-activate-alt-keybindings} in order to get breakpoint
1248setting on @kbd{A-b}. In the remainder of this chapter we will assume
1249that the @kbd{C-c C-d} bindings are active.
1250
1251@defopt idlwave-shell-prefix-key
1252The prefix key for the debugging map
1253@code{idlwave-shell-mode-prefix-map}.@refill
1254@end defopt
1255
1256@defopt idlwave-shell-activate-prefix-keybindings (@code{t})
1257Non-@code{nil} means, debug commands will be bound to the prefix
1258key, like @kbd{C-c C-d C-b}.
1259@end defopt
1260
1261@defopt idlwave-shell-activate-alt-keybindings (@code{nil})
1262Non-@code{nil} means, debug commands will be bound to alternate
1263keys, like @kbd{A-b}.
1264@end defopt
1265
1266@defopt idlwave-shell-use-toolbar (@code{t})
1267Non-@code{nil} means, use the debugging toolbar in all IDL related
1268buffers.@refill
1269@end defopt
1270
1271
1272@menu
1273* Compiling Programs:: Compiling buffers under the shell
1274* Breakpoints and Stepping:: Deciding where to stop and look
1275* Examining Variables:: What is the value now?
1276@end menu
1277
1278@node Compiling Programs, Breakpoints and Stepping, Debugging IDL Programs, Debugging IDL Programs
1279@subsection Compiling Programs
1280@cindex Compiling programs
1281@cindex Programs, compiling
1282@cindex Default command line, executing
1283@cindex Executing a default command line
1284
1285In order to compile the current buffer under the IDLWAVE shell, press
1286@kbd{C-c C-d C-c} (@code{idlwave-save-and-run}). This first saves the
1287current buffer and then send the command @samp{.run path/to/file} to the
1288shell. You can laso execute @kbd{C-c C-d C-c} from the shell buffer, in
1289which case the most recently compiled buffer will be saved and
1290re-compiled.
1291
1292When developing or debugging a program, it is often necessary to execute
1293the same command line many times. A convenient way to do this is
1294@kbd{C-c C-d C-y} (@code{idlwave-shell-execute-default-command-line}).
1295This command first resets IDL from a state of interrupted execution by
1296closing all files and returning to the main interpreter level. Then a
1297default command line is send to the shell. To edit the default command
1298line, call @code{idlwave-shell-execute-default-command-line} with a
1299prefix argument: @kbd{C-u C-c C-d C-y}.@refill
1300
1301@defopt idlwave-shell-mark-stop-line (@code{t})
1302Non-@code{nil} means, mark the source code line where IDL is currently
1303stopped. The value decides about the preferred method. Legal values
1304are @code{nil}, @code{t}, @code{arrow}, and @code{face}.@refill
1305@end defopt
1306
1307@defopt idlwave-shell-overlay-arrow
1308The overlay arrow to display at source lines where execution
1309halts.@refill
1310@end defopt
1311
1312@defopt idlwave-shell-stop-line-face
1313The face which highlights the source line where IDL is
1314stopped.@refill
1315@end defopt
1316
1317@node Breakpoints and Stepping, Examining Variables, Compiling Programs, Debugging IDL Programs
1318@subsection Breakpoints and Stepping
1319@cindex Breakpoints
1320@cindex Stepping
1321
1322You can set breakpoints and step through a program with IDLWAVE.
1323Setting a breakpoint in the current line of the source buffer is done
1324with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}). With a prefix
1325arg of 1, the breakpoint gets a @code{/ONCE} keyword, meaning that it
1326will be deleted after first use. With a numeric prefix greater than
1327one, the breakpoint will only be active the @code{nth} time it is hit.
1328To clear the breakpoint in the current line, use @kbd{C-c C-d C-d}
1329(@code{idlwave-clear-current-bp}). To clear all breakpoints, use
1330@kbd{C-c C-d C-a} (@code{idlwave-clear-all-bp}). Breakpoint lines are
1331highlighted in the source code.@refill
1332
1333Once the program has stopped somewhere, you can step through it. Here
1334is a summary of the breakpoint and stepping commands:
1335
1336@multitable @columnfractions .2 .8
1337@item @kbd{C-c C-d C-b}
1338@tab Set breakpoint (@code{idlwave-shell-break-here})
1339@item @kbd{C-c C-d C-i}
1340@tab Set breakpoint in function named here (@code{idlwave-shell-break-in})
1341@item @kbd{C-c C-d C-d}
1342@tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
1343@item @kbd{C-c C-d C-a}
1344@tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
1345@item @kbd{C-c C-d C-s}
1346@tab Step, into function calls (@code{idlwave-shell-step})
1347@item @kbd{C-c C-d C-n}
1348@tab Step, over function calls (@code{idlwave-shell-stepover})
1349@item @kbd{C-c C-d C-k}
1350@tab Skip one statement (@code{idlwave-shell-skip})
1351@item @kbd{C-c C-d C-u}
1352@tab Continue to end of block (@code{idlwave-shell-up})
1353@item @kbd{C-c C-d C-m}
1354@tab Continue to end of function (@code{idlwave-shell-return})
1355@item @kbd{C-c C-d C-o}
1356@tab Continue past end of function (@code{idlwave-shell-out})
1357@item @kbd{C-c C-d C-h}
1358@tab Continue to line at cursor position (@code{idlwave-shell-to-here})
1359@item @kbd{C-c C-d C-r}
1360@tab Continue execution to next breakpoint (@code{idlwave-shell-cont})
1361@item @kbd{C-c C-d C-up}
1362@tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
1363@item @kbd{C-c C-d C-down}
1364@tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
1365@end multitable
1366
1367@defopt idlwave-shell-mark-breakpoints (@code{t})
1368Non-@code{nil} means, mark breakpoints in the source file buffers. The
1369value indicates the preferred method. Legal values are @code{nil},
1370@code{t}, @code{face}, and @code{glyph}.
1371@end defopt
1372
1373@defopt idlwave-shell-breakpoint-face
1374The face for breakpoint lines in the source code if
1375@code{idlwave-shell-mark-breakpoints} has the value @code{face}.@refill
1376@end defopt
1377
1378@node Examining Variables, , Breakpoints and Stepping, Debugging IDL Programs
1379@subsection Examining Variables
1380@cindex @code{PRINT} expressions
1381@cindex @code{HELP}, on expressions
1382@cindex Expressions, printing
1383@cindex Expressions, help
1384@cindex Mouse binding to print expressions
1385
1386When execution is stopped you can examine the values of variables. The
1387command @kbd{C-c C-d C-p} prints the expression at point in the shell
1388buffer, while @kbd{C-c C-d ?} shows help on this expression. The
1389expression at point is an array expression or a function call, or the
1390contents of a pair of parenthesis. The selected expression becomes
1391highlighted in the source code for a short time.
1392
1393I find it very convenient to bind these functions to a mouse event, so
1394that simply clicking on an expression prints its value. Here is a way
1395to do this with XEmacs:
1396
1397@lisp
1398(add-hook 'idlwave-shell-mode-hook
1399 (lambda()
1400 (define-key idlwave-mode-map [(shift button1)]
1401 'idlwave-shell-mouse-print)
1402 (define-key idlwave-mode-map [(shift button2)]
1403 'idlwave-shell-mouse-help)))
1404@end lisp
1405
1406@defopt idlwave-shell-expression-face
1407The face for @code{idlwave-shell-expression-overlay}.
1408Allows you to choose the font, color and other properties for
1409the expression printed by IDL.
1410@end defopt
1411
1412
1413@node Installation, Acknowledgement, The IDLWAVE Shell, Top
1414@chapter Installation
1415@cindex Installation
1416@cindex FTP site
1417@cindex URL, homepage for IDLWAVE
1418@cindex Homepage for IDLWAVE
1419
1420@menu
1421* Installing IDLWAVE:: How to install the distribution
1422* Upgrading from idl.el:: Necessary configuration changes
1423@end menu
1424
1425@node Installing IDLWAVE, Upgrading from idl.el, Installation, Installation
1426@section Installing IDLWAVE
1427
1428IDLWAVE is part of Emacs 21.1 and later. It is also@footnote{or will be
1429soon} an XEmacs packages and can be installed from
1430@uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site}
1431with the normal package management system on XEmacs 21.@refill
1432
1433You can also download IDLWAVE and install it yourself from
1434@uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave, the maintainers
1435webpage}. Follow the instructions in the INSTALL file.@refill
1436
1437@node Upgrading from idl.el, , Installing IDLWAVE, Installation
1438@section Upgrading from the old @b{@file{idl.el}} file
1439@cindex Upgrading from old @b{@file{idl.el}}
1440@cindex Renaming old variables
1441@cindex Old variables, renaming
1442
1443If you have been using the old @file{idl.el} and @file{idl-shell.el}
1444files and would like to use IDLWAVE, you need to update your
1445customization in @file{.emacs}.
1446
1447@enumerate
1448@item
1449Change all variable and function prefixes from @samp{idl-} to @samp{idlwave-}.
1450@item
1451Remove the now invalid @code{autoload} and @code{auto-mode-alist} forms
1452pointing to the @file{idl.el} and @file{idl-shell.el} files.
1453@item
1454If you have been using the hook function recommended in earlier versions
1455to get a separate frame for the IDL shell, remove that command from your
1456@code{idlwave-shell-mode-hook}. Instead, set the variable
1457@code{idlwave-shell-use-dedicated-frame} with
1458@lisp
1459(setq idlwave-shell-use-dedicated-frame t)
1460@end lisp
1461@end enumerate
1462
1463@node Acknowledgement, Sources of Routine Info, Installation, Top
1464@chapter Acknowledgement
1465@cindex Acknowledgement
1466@cindex Thanks
1467
1468@file{idl.el} and @file{idl-shell.el} were written by
1469@uref{mailto:chase@@att.com, Chris Chase}. The package
1470was extended and renamed to IDLWAVE by the current maintainer
1471@uref{mailto:dominik@@strw.leidenuniv.nl, Carsten Dominik}.
1472
1473Thanks to the following people who have contributed to the development
1474of IDLWAVE with patches, ideas, bug reports and suggestions.
1475
1476@itemize @minus
1477@item
1478Ulrik Dickow <dickow@@nbi.dk>
1479@item
1480Eric E. Dors <edors@@lanl.gov>
1481@item
1482Stein Vidar H. Haugan <s.v.h.haugan@@astro.uio.no>
1483@item
1484David Huenemoerder <dph@@space.mit.edu>
1485@item
1486Kevin Ivory <Kevin.Ivory@@linmpi.mpg.de>
1487@item
1488Xuyong Liu <liu@@stsci.edu>
1489@item
1490Simon Marshall <Simon.Marshall@@esrin.esa.it>
1491@item
1492Laurent Mugnier <mugnier@@onera.fr>
1493@item
1494Lubos Pochman <lubos@@rsinc.com>
1495@item
1496Patrick M. Ryan <pat@@jaameri.gsfc.nasa.gov>
1497@item
1498Marty Ryba <ryba@@ll.mit.edu>
1499@item
1500Phil Williams <williams@@irc.chmcc.org>
1501@item
1502J.D. Smith <jdsmith@@astrosun.tn.cornell.edu>
1503@item
1504Phil Sterne <sterne@@dublin.llnl.gov>
1505@end itemize
1506
1507@node Sources of Routine Info, Configuration Examples, Acknowledgement, Top
1508@appendix Sources of Routine Info
1509
1510In @ref{Routine Info} and @ref{Completion} it was shown how IDLWAVE
1511displays the calling sequence and keywords of routines, and how it
1512completes routine names and keywords. For these features to work,
1513IDLWAVE must know about the accessible routines.
1514
1515@menu
1516* Routine Definitions:: Where IDL Routines are defined.
1517* Routine Information Sources:: So how does IDLWAVE know about...
1518* Library Scan:: Scanning the Libraries for Routine Info
1519* Updating idlwave-rinfo.el:: Scanning the IDL Manuals
1520@end menu
1521
1522@node Routine Definitions, Routine Information Sources, Sources of Routine Info, Sources of Routine Info
1523@section Routine Definitions
1524@cindex Routine definitions
1525
1526Routines which can be used in an IDL program can be defined in several
1527places:
1528
1529@enumerate
1530@item
1531@emph{System routines} are defined inside IDL itself. The source
1532code of such routines is not accessible to the user.@refill
1533@item
1534Routines @emph{part of the current program} are defined in a file which
1535is explicitly compiled by the user. This file may be located on the IDL
1536search path, but this is not certain.@refill
1537@item
1538@emph{Library routines} are defined in special files which are located
1539somewhere on IDL's search path. When a library routine is called for
1540the first time, IDL will find the source file and compile it
1541dynamically.@refill
1542@item
1543External routines written in other languages (like Fortran or C) can be
1544called with @code{CALL_EXTERNAL}, linked into IDL via @code{LINKIMAGE},
1545or included as dynamically loaded modules (DLMs). Currently IDLWAVE
1546cannot provide routine info and completion for external
1547routines.@refill
1548@end enumerate
1549
1550@node Routine Information Sources, Library Scan, Routine Definitions, Sources of Routine Info
1551@section Routine Information Sources
1552@cindex Routine info sources
1553
1554In oder to know about as many routines as possible, IDLWAVE will do the
1555following to collect information:@refill
1556
1557@enumerate
1558
1559@item
1560It has a @emph{builtin list} with the properties of the builtin IDL
1561routines. IDLWAVE @value{VERSION} is distributed with a list of
1562@value{NSYSROUTINES} routines and @value{NSYSKEYWORDS} keywords,
1563reflecting IDL version @value{IDLVERSION}. This list has been created
1564by scanning the IDL manuals and is stored in the file
1565@file{idlwave-rinfo.el}. @xref{Updating idlwave-rinfo.el}, for
1566information how to regenerate this file for new versions of IDL.@refill
1567
1568@item
1569It @emph{scans} all @emph{buffers} of the current Emacs session for
1570routine definitions. This is done automatically when routine
1571information or completion is first requested by the user. The command
1572@kbd{C-c C-i} (@code{idlwave-update-routine-info}) can be used at any
1573time to rescan all buffers.@refill
1574
1575@item
1576If you have an IDLWAVE-Shell running as inferior process of the current
1577Emacs session, IDLWAVE will @emph{query the shell} for compiled routines
1578and their arguments. This happens automatically when routine
1579information or completion is first requested by the user. The command
1580@kbd{C-c C-i} (@code{idlwave-update-routine-info}) can be used to ask
1581the shell again at any time.@refill
1582
1583@item
1584IDLWAVE can scan all or selected library files and store the result in a
1585file which will be automatically loaded just like
1586@file{idlwave-rinfo.el}. @xref{Library Scan}, for information how to
1587scan library files.@refill
1588@end enumerate
1589
1590@defopt idlwave-scan-all-buffers-for-routine-info (@code{t})
1591Non-@code{nil} means, scan all buffers for IDL programs when updating
1592info. When this variable is @code{nil}, it only parses the current
1593buffer.@refill
1594@end defopt
1595
1596@defopt idlwave-query-shell-for-routine-info (@code{t})
1597Non-@code{nil} means query the shell for info about compiled routines.
1598@end defopt
1599
1600
1601@node Library Scan, Updating idlwave-rinfo.el, Routine Information Sources, Sources of Routine Info
1602@section Library Scan
1603@cindex Library scan
1604@cindex IDL library routine info
1605
1606IDLWAVE can extract routine information from library modules and store
1607that information in a file. To do this, the variable
1608@code{idlwave-libinfo-file} needs to contain the path to a file in an
1609existing directory (e.g. @code{"~/idlwave_libinfo.el"}). Since the file
1610will contain lisp code, it should end in @file{.el}. Under Windows and
1611MacOS, you also need to specify the search path for IDL library files in
1612the variable @code{idlwave-library-path}. Under UNIX, this path will
1613be automatically inferred from an IDLWAVE shell.@refill
1614
1615The command @kbd{M-x idlwave-create-libinfo-file} can then be used to
1616scan library files. It brings up a widget in which you can select some
1617or all directories on the search path. Pressing the @w{@samp{[Scan & Save]}}
1618button in the widget will scan all files in the selected directories and
1619write the resulting routine information into the file
1620@code{idlwave-libinfo-file}. In order to update the library information
1621from the same directories, call the command
1622@code{idlwave-update-routine-info} with a double prefix argument:
1623@kbd{C-u C-u C-c C-i}. This will rescan files in the previously
1624selected directories, write an updated version of the libinfo file and
1625rebuild IDLWAVEs internal lists.@refill
1626
1627A note of caution: Depending on your local installation, the IDL
1628library can be very large. Parsing it for routine information will take
1629time and loading this information into Emacs can require a
1630significant amount of memory.@refill
1631
1632A routine which is both in the library listing and compiled under the
1633shell will show up twice in the @file{*Completions*} listing. This is
1634usually not a serious problem. However, if you have scanned the part of
1635the library relevant for you, and if you are not compiling files which
1636are not on the library search path, the information about compiled
1637routines is in fact unnecessary. In this case, you can turn of the
1638shell query for compiled routines with the variable
1639@code{idlwave-query-shell-for-routine-info}.@refill
1640
1641@defopt idlwave-libinfo-file
1642File for routine information of the IDL library.
1643@end defopt
1644
1645@defopt idlwave-library-path
1646IDL library path for Windows and MacOS. Not needed under Unix.
1647@end defopt
1648
1649
1650@node Updating idlwave-rinfo.el, , Library Scan, Sources of Routine Info
1651@section Updating @file{idlwave-rinfo.el}
1652@cindex @file{get_rinfo}
1653@cindex @file{idlwave.rinfo.el}
1654@cindex Perl program, to create @file{idlwave.rinfo.el}
1655
1656The file @file{idlwave-rinfo.el} contains the routine information for
1657the routines build into IDL. This constant depends upon the version of
1658IDL. If you are lucky, the maintainer of IDLWAVE will always have
1659access to the newest version of IDL and provide updates of
1660@file{idlwave-rinfo.el} reflecting the currently released version of
1661IDL. The IDLWAVE package also contains a Perl program @file{get_rinfo}
1662which constructs this file by scanning selected files from the IDL
1663documentation. The program needs @file{pdftotext} by Derek B. Noonburg.
1664Instructions on how to use @file{get_rinfo} are in the program
1665itself.@refill
1666
1667@node Configuration Examples, Index, Sources of Routine Info, Top
1668@appendix Configuration Examples
1669@cindex Configuration examples
1670@cindex Example configuration
1671
1672@noindent
1673@b{Question:} So now you have all these complicated configuration
1674options in your package, but which ones do @emph{you} as the maintainer
1675actually set in your own configuration?
1676
1677@noindent
1678@b{Answer:} Hardly any. As the maintainer, I set the default of all
1679options to what I think is best. However, I do not turn on features by
1680default which
1681@itemize @minus
1682@item
1683are not self-evident (i.e. too magic) when used by an unsuspecting user
1684@item
1685are too intrusive
1686@item
1687will not work properly on all Emacs installations out there
1688@item
1689break with what I think are widely used standards.
1690@end itemize
1691
1692@noindent To see what I mean, here is the entire configuration I have in
1693my @file{.emacs}:
1694
1695@lisp
1696(setq idlwave-shell-activate-alt-keybindings t
1697 idlwave-expand-generic-end t
1698 idlwave-store-inquired-class t
1699 idlwave-shell-automatic-start t
1700 idlwave-libinfo-file "~/lib/idl/libinfo.el"
1701 idlwave-main-block-indent 2)
1702(add-hook 'idlwave-shell-mode-hook
1703 (lambda()
1704 (define-key idlwave-mode-map [(shift button1)]
1705 'idlwave-shell-mouse-print)
1706 (define-key idlwave-mode-map [(shift button2)]
1707 'idlwave-shell-mouse-help)))
1708@end lisp
1709
1710However, if you are an Emacs power-user and want IDLWAVE to work
1711completely differently, the options allow you to change almost every
1712aspect of it. Here is an example of a much more extensive configuration
1713of IDLWAVE. To say it again - this is not what I recommend, but the
1714user is King!@refill
1715
1716@example
1717;;; Settings for IDLWAVE mode
1718
1719(setq idlwave-block-indent 3) ; Indentation settings
1720(setq idlwave-main-block-indent 3)
1721(setq idlwave-end-offset -3)
1722(setq idlwave-continuation-indent 1)
1723(setq idlwave-begin-line-comment "^;[^;]") ; Leave ";" but not ";;"
1724 ; anchored at start of line.
1725(setq idlwave-surround-by-blank t) ; Turn on padding ops =,<,>
1726(setq idlwave-pad-keyword nil) ; Remove spaces for keyword '='
1727(setq idlwave-expand-generic-end t) ; convert END to ENDIF etc...
1728(setq idlwave-reserved-word-upcase t) ; Make reserved words upper case
1729 ; (with abbrevs only)
1730(setq idlwave-abbrev-change-case nil) ; Don't force case of expansions
1731(setq idlwave-hang-indent-regexp ": ") ; Change from "- " for auto-fill
1732(setq idlwave-show-block nil) ; Turn off blinking to begin
1733(setq idlwave-abbrev-move t) ; Allow abbrevs to move point
1734
1735;; Some setting can only be done from a mode hook. Here is an example:
1736
1737(add-hook 'idlwave-mode-hook
1738 (lambda ()
1739 (setq abbrev-mode 1) ; Turn on abbrevs (-1 for off)
1740 (setq case-fold-search nil) ; Make searches case sensitive
1741 ;; Run other functions here
1742 (font-lock-mode 1) ; Turn on font-lock mode
1743 (idlwave-auto-fill-mode 0) ; Turn off auto filling
1744 ;;
1745 ;; Pad with with 1 space (if -n is used then make the
1746 ;; padding a minimum of n spaces.) The defaults use -1
1747 ;; instead of 1.
1748 (idlwave-action-and-binding "=" '(idlwave-expand-equal 1 1))
1749 (idlwave-action-and-binding "<" '(idlwave-surround 1 1))
1750 (idlwave-action-and-binding ">" '(idlwave-surround 1 1 '(?-)))
1751 (idlwave-action-and-binding "&" '(idlwave-surround 1 1))
1752 ;;
1753 ;; Only pad after comma and with exactly 1 space
1754 (idlwave-action-and-binding "," '(idlwave-surround nil 1))
1755 ;;
1756 ;; Set some personal bindings
1757 ;; (In this case, makes `,' have the normal self-insert behavior.)
1758 (local-set-key "," 'self-insert-command)
1759 ;; Create a newline, indenting the original and new line.
1760 ;; A similar function that does _not_ reindent the original
1761 ;; line is on "\C-j" (The default for emacs programming modes).
1762 (local-set-key "\n" 'idlwave-newline)
1763 ;; (local-set-key "\C-j" 'idlwave-newline) ; My preference.
1764 ))
1765
1766;;; Settings for IDLWAVE SHELL mode
1767
1768(setq idlwave-shell-overlay-arrow "=>") ; default is ">"
1769(setq idlwave-shell-use-dedicated-frame t) ; Make a dedicated frame
1770(setq idlwave-shell-prompt-pattern "^WAVE> ") ; default is "^IDL> "
1771(setq idlwave-shell-explicit-file-name "wave")
1772(setq idlwave-shell-process-name "wave")
1773(setq idlwave-shell-use-dedicated-frame t) ; Shell on separate frame
1774(setq idlwave-shell-use-toolbar nil) ; No toolbar
1775@end example
1776
1777@node Index, , Configuration Examples, Top
1778@unnumbered Index
1779@printindex cp
1780
1781@summarycontents
1782@contents
1783@bye
1784