*** empty log message ***
[bpt/emacs.git] / man / idlwave.texi
CommitLineData
797c8ebc
CD
1\input texinfo @c -*-texinfo-*-
2@c %**start of header
746337e0 3@setfilename ../info/idlwave
797c8ebc 4@settitle IDLWAVE User Manual
12b86f0e
S
5@dircategory Emacs
6@direntry
7* IDLWAVE: (idlwave). Major mode and shell for IDL files.
8@end direntry
797c8ebc
CD
9@synindex ky cp
10@syncodeindex vr cp
11@syncodeindex fn cp
12b86f0e
S
12@set VERSION 5.5
13@set EDITION 5.5
14@set IDLVERSION 6.1
15@set NSYSROUTINES 1850
16@set NSYSKEYWORDS 7685
2cbd16b9 17@set DATE March, 2005
5af23035 18@set AUTHOR J.D. Smith & Carsten Dominik
12b86f0e 19@set AUTHOR-EMAIL jdsmith@@as.arizona.edu
5af23035
S
20@set MAINTAINER J.D. Smith
21@set MAINTAINER-EMAIL jdsmith@@as.arizona.edu
797c8ebc 22@c %**end of header
12b86f0e 23@finalout
797c8ebc 24
12b86f0e 25@ifinfo
5af23035
S
26This file documents IDLWAVE, a major mode for editing IDL files with
27Emacs, and interacting with an IDL shell run as a subprocess.
28
29This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
30@value{VERSION}
31
2cbd16b9 32Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
12b86f0e 33Foundation, Inc.
5af23035 34
32d4cddb
S
35Permission is granted to copy, distribute and/or modify this document
36under the terms of the GNU Free Documentation License, Version 1.1 or
37any later version published by the Free Software Foundation; with no
38Invariant Sections, with the Front-Cover texts being ``A GNU
39Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
40license is included in the section entitled ``GNU Free Documentation
41License'' in the Emacs manual.
42
43(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
44this GNU Manual, like GNU software. Copies published by the Free
45Software Foundation raise funds for GNU development.''
46
47This document is part of a collection distributed under the GNU Free
48Documentation License. If you want to distribute this document
49separately from the collection, you can do so by adding a copy of the
50license to the document, as described in section 6 of the license.
12b86f0e 51@end ifinfo
797c8ebc
CD
52
53@titlepage
54@title IDLWAVE User Manual
5af23035 55@subtitle Emacs major mode and shell for IDL
797c8ebc
CD
56@subtitle Edition @value{EDITION}, @value{DATE}
57
12b86f0e 58@author by J.D. Smith & Carsten Dominik
797c8ebc 59@page
797c8ebc 60This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
a8e833f3 61IDLWAVE version @value{VERSION}, @value{DATE}.
12b86f0e 62@sp 2
2cbd16b9 63Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
12b86f0e
S
64Foundation, Inc.
65@sp 2
a8e833f3 66@cindex Copyright, of IDLWAVE
12b86f0e
S
67Permission is granted to copy, distribute and/or modify this document
68under the terms of the GNU Free Documentation License, Version 1.1 or
69any later version published by the Free Software Foundation; with no
70Invariant Sections, with the Front-Cover texts being ``A GNU
71Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
72license is included in the section entitled ``GNU Free Documentation
73License'' in the Emacs manual.
74
75(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
76this GNU Manual, like GNU software. Copies published by the Free
77Software Foundation raise funds for GNU development.''
78
79This document is part of a collection distributed under the GNU Free
80Documentation License. If you want to distribute this document
81separately from the collection, you can do so by adding a copy of the
82license to the document, as described in section 6 of the license.
797c8ebc 83@end titlepage
a8e833f3
CD
84@contents
85
797c8ebc
CD
86@page
87
a8e833f3
CD
88@ifnottex
89
797c8ebc
CD
90@node Top, Introduction, (dir), (dir)
91
12b86f0e
S
92IDLWAVE is a package which supports editing source code written in the
93Interactive Data Language (IDL), and running IDL as an inferior shell.
797c8ebc 94
a8e833f3 95@end ifnottex
797c8ebc
CD
96
97@menu
12b86f0e 98* Introduction:: What IDLWAVE is, and what it is not
797c8ebc 99* IDLWAVE in a Nutshell:: One page quick-start guide
aea44e56 100* Getting Started:: Tutorial
12b86f0e
S
101* The IDLWAVE Major Mode:: The mode for editing IDL programs
102* The IDLWAVE Shell:: The mode for running IDL as an inferior program
5af23035 103* Acknowledgements:: Who did what
12b86f0e
S
104* Sources of Routine Info:: How does IDLWAVE know about routine XYZ
105* HTML Help Browser Tips::
106* Configuration Examples:: The user is king
5af23035 107* Windows and MacOS:: What still works, and how
12b86f0e 108* Troubleshooting:: When good computers turn bad
797c8ebc
CD
109* Index:: Fast access
110
5af23035
S
111@detailmenu
112 --- The Detailed Node Listing ---
113
114Getting Started (Tutorial)
115
12b86f0e
S
116* Lesson I -- Development Cycle::
117* Lesson II -- Customization::
118* Lesson III -- User Catalog::
797c8ebc
CD
119
120The IDLWAVE Major Mode
121
122* Code Formatting:: Making code look nice
a8e833f3
CD
123* Routine Info:: Calling Sequence and Keyword List
124* Online Help:: One key press from source to help
797c8ebc 125* Completion:: Completing routine names and Keywords
5af23035 126* Routine Source:: Finding routines, the easy way
a8e833f3 127* Resolving Routines:: Force the Shell to compile a routine
5af23035
S
128* Code Templates:: Frequent code constructs
129* Abbreviations:: Abbreviations for common commands
797c8ebc
CD
130* Actions:: Changing case, Padding, End checking
131* Doc Header:: Inserting a standard header
132* Motion Commands:: Moving through the structure of a program
133* Misc Options:: Things that fit nowhere else
134
135Code Formatting
136
137* Code Indentation:: Reflecting the logical structure
12b86f0e 138* Continued Statement Indentation::
797c8ebc
CD
139* Comment Indentation:: Special indentation for comment lines
140* Continuation Lines:: Splitting statements over lines
141* Syntax Highlighting:: Font-lock support
5af23035
S
142* Octals and Highlighting:: Why "123 causes problems
143
12b86f0e
S
144Online Help
145
146* Help with HTML Documentation::
147* Help with Source::
148
5af23035
S
149Completion
150
151* Case of Completed Words:: CaseOFcomPletedWords
152* Object Method Completion and Class Ambiguity:: obj->Method, what?
12b86f0e 153* Object Method Completion in the Shell::
5af23035
S
154* Class and Keyword Inheritance:: obj->Method, _EXTRA=e
155* Structure Tag Completion:: Completing state.Tag
797c8ebc
CD
156
157Actions
158
76959b77 159* Block Boundary Check:: Is the END statement correct?
797c8ebc
CD
160* Padding Operators:: Enforcing space around `=' etc
161* Case Changes:: Enforcing upper case keywords
162
163The IDLWAVE Shell
164
165* Starting the Shell:: How to launch IDL as a subprocess
166* Using the Shell:: Interactively working with the Shell
12b86f0e
S
167* Commands Sent to the Shell::
168* Debugging IDL Programs::
169* Examining Variables::
170* Custom Expression Examination::
797c8ebc
CD
171
172Debugging IDL Programs
173
12b86f0e
S
174* A Tale of Two Modes::
175* Debug Key Bindings::
176* Breakpoints and Stepping::
177* Compiling Programs::
178* Walking the Calling Stack::
179* Electric Debug Mode::
797c8ebc 180
797c8ebc
CD
181Sources of Routine Info
182
183* Routine Definitions:: Where IDL Routines are defined.
a8e833f3 184* Routine Information Sources:: So how does IDLWAVE know about...
12b86f0e 185* Catalogs::
a8e833f3
CD
186* Load-Path Shadows:: Routines defined in several places
187* Documentation Scan:: Scanning the IDL Manuals
188
12b86f0e
S
189Catalogs
190
191* Library Catalogs::
192* User Catalog::
193
797c8ebc
CD
194@end detailmenu
195@end menu
196
197@node Introduction, IDLWAVE in a Nutshell, Top, Top
198@chapter Introduction
199@cindex Introduction
a8e833f3 200@cindex Interactive Data Language
797c8ebc 201@cindex cc-mode.el
a8e833f3
CD
202@cindex @file{idl.el}
203@cindex @file{idl-shell.el}
797c8ebc
CD
204@cindex Feature overview
205
12b86f0e 206IDLWAVE is a package which supports editing source files written in
215a5cd0 207the Interactive Data Language, and running
12b86f0e
S
208IDL as an inferior shell@footnote{Note that this package has nothing
209to do with the Interface Definition Language, part of the Common
210Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also
211be used for editing source files for the related WAVE/CL language, but
212with only limited support.}. It is a feature-rich replacement for the
215a5cd0 213IDLDE development environment included with IDL, and uses the full
12b86f0e
S
214power of Emacs to make editing and running IDL programs easier,
215quicker, and more structured.
216
217IDLWAVE consists of two main parts: a major mode for editing IDL
218source files (@code{idlwave-mode}) and a mode for running the IDL
219program as an inferior shell (@code{idlwave-shell-mode}). Although
220one mode can be used without the other, both work together closely to
221form a complete development environment. Here is a brief summary of
222what IDLWAVE does:
797c8ebc
CD
223
224@itemize @bullet
12b86f0e
S
225@item
226Smart code indentation and automatic-formatting.
797c8ebc 227@item
5af23035 228Three level syntax highlighting support.
12b86f0e 229@item
5af23035 230Context-sensitive display of calling sequences and keywords for more
12b86f0e
S
231than 1000 native IDL routines, extendible to any additional number of
232local routines, and already available with many pre-scanned libraries.
a8e833f3 233@item
12b86f0e 234Routine name space conflict search with likelihood-of-use ranking.
a8e833f3 235@item
12b86f0e
S
236Fast, context-sensitive online HTML help, or source-header help for
237undocumented routines.
797c8ebc 238@item
12b86f0e
S
239Context sensitive completion of routine names, keywords, system
240variables, class names and much more.
797c8ebc 241@item
12b86f0e 242Easy insertion of code templates and abbreviations of common constructs.
797c8ebc 243@item
5af23035
S
244Automatic corrections to enforce a variety of customizable coding
245standards.
797c8ebc 246@item
5af23035 247Integrity checks and auto-termination of logical blocks.
797c8ebc 248@item
a8e833f3
CD
249Support for @file{imenu} (Emacs) and @file{func-menu} (XEmacs).
250@item
797c8ebc
CD
251Documentation support.
252@item
5af23035
S
253Running IDL as an inferior Shell with history search, command line
254editing and all the completion and routine info capabilities present in
255IDL source buffers.
256@item
12b86f0e
S
257Compilation, execution and interactive single-keystroke debugging of
258programs directly from the source buffer.
797c8ebc 259@item
5af23035
S
260Quick, source-guided navigation of the calling stack, with variable
261inspection, etc.
797c8ebc 262@item
5af23035 263Examining variables and expressions with a mouse click.
797c8ebc 264@item
5af23035 265And much, much more...
797c8ebc
CD
266@end itemize
267
268@ifnottex
269@cindex Screenshots
5af23035 270Here are a number of screenshots showing IDLWAVE in action:
a8e833f3 271
797c8ebc
CD
272@itemize @bullet
273@item
5af23035 274@uref{http://idlwave.org/screenshots/emacs_21_nav.gif,An IDLWAVE buffer}
797c8ebc 275@item
5af23035 276@uref{http://idlwave.org/screenshots/emacs_21_keys.gif,A keyword being completed}
797c8ebc 277@item
5af23035 278@uref{http://idlwave.org/screenshots/emacs_21_help.gif,Online help text.}
797c8ebc 279@item
5af23035
S
280@uref{http://idlwave.org/screenshots/emacs_21_ri.gif,Routine information displayed}
281@item
282@uref{http://idlwave.org/screenshots/emacs_21_bp.gif,Debugging code
283stopped at a breakpoint}
797c8ebc
CD
284@end itemize
285@end ifnottex
286
12b86f0e
S
287IDLWAVE is the distant successor to the @file{idl.el} and
288@file{idl-shell.el} files written by Chris Chase. The modes and files
289had to be renamed because of a name space conflict with CORBA's
290@code{idl-mode}, defined in Emacs in the file @file{cc-mode.el}.
5af23035
S
291
292In this manual, each section ends with a list of related user options.
293Don't be confused by the sheer number of options available --- in most
294cases the default settings are just fine. The variables are listed here
295to make sure you know where to look if you want to change anything. For
296a full description of what a particular variable does and how to
297configure it, see the documentation string of that variable (available
298with @kbd{C-h v}). Some configuration examples are also given in the
299appendix.
797c8ebc 300
aea44e56 301@node IDLWAVE in a Nutshell, Getting Started, Introduction, Top
797c8ebc 302@chapter IDLWAVE in a Nutshell
a8e833f3 303@cindex Summary of important commands
797c8ebc
CD
304@cindex IDLWAVE in a Nutshell
305@cindex Nutshell, IDLWAVE in a
306
797c8ebc
CD
307@subheading Editing IDL Programs
308
309@multitable @columnfractions .15 .85
310@item @key{TAB}
311@tab Indent the current line relative to context.
718fb8a1 312@item @kbd{C-M-\}
797c8ebc 313@tab Re-indent all lines in the current region.
5af23035
S
314@item @kbd{C-u @key{TAB}}
315@tab Re-indent all lines in the current statement.
797c8ebc 316@item @kbd{M-@key{RET}}
5af23035 317@tab Start a continuation line, or split the current line at point.
797c8ebc
CD
318@item @kbd{M-q}
319@tab Fill the current comment paragraph.
320@item @kbd{C-c ?}
5af23035 321@tab Display calling sequence and keywords for the procedure or function call
797c8ebc 322at point.
a8e833f3 323@item @kbd{M-?}
5af23035 324@tab Load context sensitive online help for nearby routine, keyword, etc.
797c8ebc
CD
325@item @kbd{M-@key{TAB}}
326@tab Complete a procedure name, function name or keyword in the buffer.
327@item @kbd{C-c C-i}
328@tab Update IDLWAVE's knowledge about functions and procedures.
329@item @kbd{C-c C-v}
5af23035 330@tab Visit the source code of a procedure/function.
12b86f0e
S
331@item @kbd{C-u C-c C-v}
332@tab Visit the source code of a procedure/function in this buffer.
797c8ebc
CD
333@item @kbd{C-c C-h}
334@tab Insert a standard documentation header.
5af23035 335@item @kbd{C-c @key{RET}}
797c8ebc
CD
336@tab Insert a new timestamp and history item in the documentation header.
337@end multitable
338
339@subheading Running the IDLWAVE Shell, Debugging Programs
340
341@multitable @columnfractions .15 .85
342@item @kbd{C-c C-s}
343@tab Start IDL as a subprocess and/or switch to the interaction buffer.
797c8ebc 344@item @kbd{M-p}
5af23035 345@tab Cycle back through IDL command history.
797c8ebc
CD
346@item @kbd{M-n}
347@tab Cycle forward.
12b86f0e 348@item @kbd{@key{TAB}}
797c8ebc
CD
349@tab Complete a procedure name, function name or keyword in the shell buffer.
350@item @kbd{C-c C-d C-c}
351@tab Save and compile the source file in the current buffer.
352@item @kbd{C-c C-d C-x}
12b86f0e
S
353@tab Go to next syntax error.
354@item @kbd{C-c C-d C-v}
355@tab Switch to electric debug mode.
797c8ebc 356@item @kbd{C-c C-d C-b}
5af23035 357@tab Set a breakpoint at the nearest viable source line.
797c8ebc 358@item @kbd{C-c C-d C-d}
5af23035 359@tab Clear the nearest breakpoint.
12b86f0e
S
360@item @kbd{C-c C-d [}
361@tab Go to the previous breakpoint.
362@item @kbd{C-c C-d ]}
363@tab Go to the next breakpoint.
797c8ebc 364@item @kbd{C-c C-d C-p}
5af23035 365@tab Print the value of the expression near point in IDL.
797c8ebc
CD
366@end multitable
367
368@subheading Commonly used Settings in @file{.emacs}
369@lisp
370;; Change the indentation preferences
5af23035
S
371(setq idlwave-main-block-indent 2 ; default 0
372 idlwave-block-indent 2 ; default 4
373 idlwave-end-offset -2) ; default -4
374;; Start autoloading routine info after 2 idle seconds
375(setq idlwave-init-rinfo-when-idle-after 2)
ea442c62
CD
376;; Pad some operators with spaces
377(setq idlwave-do-actions t
378 idlwave-surround-by-blank t)
ea442c62
CD
379;; Syntax Highlighting
380(add-hook 'idlwave-mode-hook 'turn-on-font-lock)
aea44e56
CD
381;; Automatically start the shell when needed
382(setq idlwave-shell-automatic-start t)
383;; Bind debugging commands with CONTROL and SHIFT modifiers
384(setq idlwave-shell-debug-modifiers '(control shift))
797c8ebc
CD
385@end lisp
386
76959b77
S
387@ifhtml
388<A NAME="TUTORIAL"></A>
389@end ifhtml
aea44e56
CD
390@node Getting Started, The IDLWAVE Major Mode, IDLWAVE in a Nutshell, Top
391@chapter Getting Started (Tutorial)
392@cindex Quick-Start
393@cindex Tutorial
394@cindex Getting Started
395
5af23035 396@menu
12b86f0e
S
397* Lesson I -- Development Cycle::
398* Lesson II -- Customization::
399* Lesson III -- User Catalog::
5af23035
S
400@end menu
401
402@node Lesson I -- Development Cycle, Lesson II -- Customization, Getting Started, Getting Started
403@section Lesson I: Development Cycle
aea44e56
CD
404
405The purpose of this tutorial is to guide you through a very basic
12b86f0e
S
406development cycle using IDLWAVE. We will paste a simple program into
407a buffer and use the shell to compile, debug and run it. On the way
408we will use many of the important IDLWAVE commands. Note, however,
409that IDLWAVE has many more capabilities than covered here, which can
410be discovered by reading the entire manual, or hovering over the
411shoulder of your nearest IDLWAVE guru for a few days.
5af23035
S
412
413It is assumed that you have access to Emacs or XEmacs with the full
215a5cd0
RS
414IDLWAVE package including online help. We also assume that you are
415familiar with Emacs and can read the nomenclature of key presses in
416Emacs (in particular, @kbd{C} stands for @key{CONTROL} and @kbd{M} for
417@key{META} (often the @key{ALT} key carries this functionality)).
aea44e56 418
5af23035 419Open a new source file by typing:
aea44e56
CD
420
421@example
422@kbd{C-x C-f tutorial.pro @key{RET}}
423@end example
424
12b86f0e
S
425A buffer for this file will pop up, and it should be in IDLWAVE mode,
426indicated in the mode line just below the editing window. Also, the
427menu bar should contain @samp{IDLWAVE}.
aea44e56 428
5af23035 429Now cut-and-paste the following code, also available as
aea44e56
CD
430@file{tutorial.pro} in the IDLWAVE distribution.
431
432@example
433function daynr,d,m,y
434 ;; compute a sequence number for a date
435 ;; works 1901-2099.
436 if y lt 100 then y = y+1900
437 if m le 2 then delta = 1 else delta = 0
438 m1 = m + delta*12 + 1
439 y1 = y * delta
440 return, d + floor(m1*30.6)+floor(y1*365.25)+5
441end
12b86f0e 442
aea44e56
CD
443function weekday,day,month,year
444 ;; compute weekday number for date
445 nr = daynr(day,month,year)
446 return, nr mod 7
447end
12b86f0e 448
aea44e56
CD
449pro plot_wday,day,month
450 ;; Plot the weekday of a date in the first 10 years of this century.
451 years = 2000,+indgen(10)
452 wdays = intarr(10)
453 for i=0,n_elements(wdays)-1 do begin
5af23035 454 wdays[i] = weekday(day,month,years[i])
aea44e56 455 end
5af23035 456 plot,years,wdays,YS=2,YT="Wday (0=Sunday)"
aea44e56
CD
457end
458@end example
459
460The indentation probably looks funny, since it's different from the
12b86f0e
S
461settings you use, so use the @key{TAB} key in each line to
462automatically line it up (or, more quickly, @emph{select} the entire
463buffer with @kbd{C-x h}, and indent the whole region with
464@kbd{C-M-\}). Notice how different syntactical elements are
465highlighted in different colors, if you have set up support for
466font-lock.
aea44e56
CD
467
468Let's check out two particular editing features of IDLWAVE. Place the
469cursor after the @code{end} statement of the @code{for} loop and press
470@key{SPC}. IDLWAVE blinks back to the beginning of the block and
471changes the generic @code{end} to the specific @code{endfor}
12b86f0e
S
472automatically (as long as the variable @code{idlwave-expand-generic-end}
473is turned on --- @pxref{Lesson II -- Customization}). Now place the
474cursor in any line you would like to split and press @kbd{M-@key{RET}}.
475The line is split at the cursor position, with the continuation @samp{$}
476and indentation all taken care of. Use @kbd{C-/} to undo the last
477change.
478
479The procedure @code{plot_wday} is supposed to plot the day of the week
480of a given date for the first 10 years of the 21st century. As in
481most code, there are a few bugs, which we are going to use IDLWAVE to
482help us fix.
aea44e56
CD
483
484First, let's launch the IDLWAVE shell. You do this with the command
12b86f0e
S
485@kbd{C-c C-s}. The Emacs window will split or another window will popup
486to display IDL running in a shell interaction buffer. Type a few
487commands like @code{print,!PI} to convince yourself that you can work
488there just as well as in a terminal, or the IDLDE. Use the arrow keys
489to cycle through your command history. Are we having fun now?
aea44e56
CD
490
491Now go back to the source window and type @kbd{C-c C-d C-c} to compile
492the program. If you watch the shell buffer, you see that IDLWAVE types
493@samp{.run tutorial.pro} for you. But the compilation fails because
494there is a comma in the line @samp{years=...}. The line with the error
495is highlighted and the cursor positioned at the error, so remove the
5af23035
S
496comma (you should only need to hit @kbd{Delete}!). Compile again, using
497the same keystrokes as before. Notice that the file is automatically
498saved for you. This time everything should work fine, and you should
499see the three routines compile.
500
501Now we want to use the command to plot the day of the week on January
5021st. We could type the full command ourselves, but why do that? Go
12b86f0e
S
503back to the shell window, type @samp{plot_} and hit @key{TAB}. After
504a bit of a delay (while IDLWAVE initializes its routine info database,
505if necessary), the window will split to show all procedures it knows
5af23035 506starting with that string, and @w{@code{plot_wday}} should be one of
12b86f0e
S
507them. Saving the buffer alerted IDLWAVE about this new routine.
508Click with the middle mouse button on @code{plot_wday} and it will be
509copied to the shell buffer, or if you prefer, add @samp{w} to
510@samp{plot_} to make it unambiguous (depending on what other routines
511starting with @samp{plot_} you have installed on your system), hit
512@key{TAB} again, and the full routine name will be completed. Now
513provide the two arguments:
aea44e56
CD
514
515@example
516plot_wday,1,1
517@end example
518
12b86f0e
S
519@noindent and press @key{RET}. This fails with an error message telling
520you the @code{YT} keyword to plot is ambiguous. What are the allowed
521keywords again? Go back to the source window and put the cursor into
522the `plot' line and press @kbd{C-c ?}. This shows the routine info
523window for the plot routine, which contains a list of keywords, along
524with the argument list. Oh, we wanted @code{YTITLE}. Fix that up.
525Recompile with @kbd{C-c C-d C-c}. Jump back into the shell with
526@kbd{C-c C-s}, press the @key{UP} arrow to recall the previous command
527and execute again.
aea44e56 528
5af23035 529This time we get a plot, but it is pretty ugly --- the points are all
aea44e56
CD
530connected with a line. Hmm, isn't there a way for @code{plot} to use
531symbols instead? What was that keyword? Position the cursor on the
532plot line after a comma (where you'd normally type a keyword), and hit
12b86f0e
S
533@kbd{M-@key{Tab}}. A long list of plot's keywords appears. Aha,
534there it is, @code{PSYM}. Middle click to insert it. An @samp{=}
535sign is included for you too. Now what were the values of @code{PSYM}
536supposed to be? With the cursor on or after the keyword, press
537@kbd{M-?} for online help (alternatively, you could have right clicked
538on the colored keyword itself in the completion list). A browser will
539pop up showing the HTML documentation for the @code{PYSM} keyword.
540OK, let's use diamonds=4. Fix this, recompile (you know the command
541by now: @kbd{C-c C-d C-c}), go back to the shell (if it's vanished,
542you know what to do: @kbd{C-c C-s}) and execute again. Now things
543look pretty good.
aea44e56 544
5af23035 545Let's try a different day --- how about April fool's day?
aea44e56
CD
546
547@example
548plot_wday,1,4
549@end example
550
5af23035
S
551Oops, this looks very wrong. All April fool's days cannot be Fridays!
552We've got a bug in the program, perhaps in the @code{daynr} function.
553Let's put a breakpoint on the last line there. Position the cursor on
554the @samp{return, d+...} line and press @kbd{C-c C-d C-b}. IDL sets a
12b86f0e
S
555breakpoint (as you see in the shell window), and the break line is
556indicated. Back to the shell buffer, re-execute the previous command.
557IDL stops at the line with the breakpoint. Now hold down the SHIFT
558key and click with the middle mouse button on a few variables there:
559@samp{d}, @samp{y}, @samp{m}, @samp{y1}, etc. Maybe @code{d} isn't
560the correct type. CONTROL-SHIFT middle-click on it for help. Well,
561it's an integer, so that's not the problem. Aha, @samp{y1} is zero,
562but it should be the year, depending on delta. Shift click
563@samp{delta} to see that it's 0. Below, we see the offending line:
564@samp{y1=y*delta...} the multiplication should have been a minus sign!
565Hit @kbd{q} to exit the debugging mode, and fix the line to read:
aea44e56
CD
566
567@example
568y1 = y - delta
569@end example
570
571Now remove all breakpoints: @kbd{C-c C-d C-a}. Recompile and rerun the
572command. Everything should now work fine. How about those leap years?
573Change the code to plot 100 years and see that every 28 years, the
574sequence of weekdays repeats.
575
12b86f0e 576@node Lesson II -- Customization, Lesson III -- User Catalog, Lesson I -- Development Cycle, Getting Started
5af23035 577@section Lesson II: Customization
aea44e56 578
12b86f0e
S
579Emacs is probably the most customizable piece of software ever
580written, and it would be a shame if you did not make use of this and
581adapt IDLWAVE to your own preferences. Customizing Emacs or IDLWAVE
582is accomplished by setting Lisp variables in the @file{.emacs} file in
583your home directory --- but do not be dismayed; for the most part, you
584can just copy and work from the examples given here.
5af23035
S
585
586Let's first use a boolean variable. These are variables which you turn
587on or off, much like a checkbox. A value of @samp{t} means on, a value
588of @samp{nil} means off. Copy the following line into your
aea44e56
CD
589@file{.emacs} file, exit and restart Emacs.
590
591@lisp
592(setq idlwave-reserved-word-upcase t)
593@end lisp
594
595When this option is turned on, each reserved word you type into an IDL
596source buffer will be converted to upper case when you press @key{SPC}
597or @key{RET} right after the word. Try it out! @samp{if} changes to
598@samp{IF}, @samp{begin} to @samp{BEGIN}. If you don't like this
12b86f0e
S
599behavior, remove the option again from your @file{.emacs} file and
600restart Emacs.
aea44e56 601
5af23035
S
602You likely have your own indentation preferences for IDL code. For
603example, some like to indent the main block of an IDL program from the
215a5cd0
RS
604margin and use only 3 spaces as indentation between @code{BEGIN} and
605@code{END}. Try the following lines in @file{.emacs}:
aea44e56
CD
606
607@lisp
608(setq idlwave-main-block-indent 2)
609(setq idlwave-block-indent 3)
610(setq idlwave-end-offset -3)
611@end lisp
612
5af23035
S
613Restart Emacs, and re-indent the program we developed in the first part
614of this tutorial with @kbd{C-c h} and @kbd{C-M-\}. You may want to keep
615these lines in @file{.emacs}, with values adjusted to your likings. If
616you want to get more information about any of these variables, type,
617e.g., @kbd{C-h v idlwave-main-block-indent @key{RET}}. To find which
618variables can be customized, look for items marked @samp{User Option:}
619throughout this manual.
620
621If you cannot seem to master this Lisp customization in @file{.emacs},
622there is another, more user-friendly way to customize all the IDLWAVE
623variables. You can access it through the IDLWAVE menu in one of the
624@file{.pro} buffers, menu item @code{Customize->Browse IDLWAVE
625Group}. Here you'll be presented with all the various variables grouped
12b86f0e
S
626into categories. You can navigate the hierarchy (e.g. @samp{IDLWAVE
627Code Formatting->Idlwave Abbrev And Indent Action->Idlwave Expand
628Generic End} to turn on @code{END} expansion), read about the variables,
629change them, and `Save for Future Sessions'. Few of these variables
630need customization, but you can exercise considerable control over
631IDLWAVE's functionality with them.
5af23035
S
632
633You may also find the key bindings used for the debugging commands too
12b86f0e
S
634long and complicated. Often we have heard complaints along the lines
635of, ``Do I really have to go through the finger gymnastics of @kbd{C-c
636C-d C-c} to run a simple command?'' Due to Emacs rules and
637conventions, shorter bindings cannot be set by default, but you can
638easily enable them. First, there is a way to assign all debugging
639commands in a single sweep to another simpler combination. The only
640problem is that we have to use something which Emacs does not need for
641other important commands. One good option is to execute debugging
642commands by holding down @key{CONTROL} and @key{SHIFT} while pressing
643a single character: @kbd{C-S-b} for setting a breakpoint, @kbd{C-S-c}
644for compiling the current source file, @kbd{C-S-a} for deleting all
645breakpoints (try it, it's easier). You can enable this with:
aea44e56
CD
646
647@lisp
648(setq idlwave-shell-debug-modifiers '(shift control))
649@end lisp
650
5af23035 651@noindent If you have a special keyboard with, for example, a
12b86f0e 652@key{SUPER} key, you could even shorten that:
aea44e56
CD
653
654@lisp
12b86f0e 655(setq idlwave-shell-debug-modifiers '(super))
aea44e56
CD
656@end lisp
657
12b86f0e
S
658@noindent to get compilation on @kbd{S-c}. Often, a modifier key like
659@key{SUPER} or @key{HYPER} is bound or can be bound to an otherwise
660unused key on your keyboard --- consult your system documentation.
aea44e56 661
5af23035 662You can also assign specific commands to keys. This you must do in the
12b86f0e
S
663@emph{mode-hook}, a special function which is run when a new IDLWAVE
664buffer gets set up. The possibilities for key customization are
665endless. Here we set function keys f4-f8 to common debugging commands.
aea44e56
CD
666
667@lisp
668;; First for the source buffer
669(add-hook 'idlwave-mode-hook
670 (lambda ()
12b86f0e 671 (local-set-key [f4] 'idlwave-shell-retall)
aea44e56
CD
672 (local-set-key [f5] 'idlwave-shell-break-here)
673 (local-set-key [f6] 'idlwave-shell-clear-current-bp)
674 (local-set-key [f7] 'idlwave-shell-cont)
675 (local-set-key [f8] 'idlwave-shell-clear-all-bp)))
676;; Then for the shell buffer
677(add-hook 'idlwave-shell-mode-hook
678 (lambda ()
12b86f0e 679 (local-set-key [f4] 'idlwave-shell-retall)
aea44e56
CD
680 (local-set-key [f5] 'idlwave-shell-break-here)
681 (local-set-key [f6] 'idlwave-shell-clear-current-bp)
682 (local-set-key [f7] 'idlwave-shell-cont)
683 (local-set-key [f8] 'idlwave-shell-clear-all-bp)))
684@end lisp
685
12b86f0e
S
686@node Lesson III -- User Catalog, , Lesson II -- Customization, Getting Started
687@section Lesson III: User and Library Catalogs
aea44e56
CD
688
689We have already used the routine info display in the first part of this
12b86f0e
S
690tutorial. This was the invoked using @kbd{C-c ?}, and displays
691information about the IDL routine near the cursor position. Wouldn't it
692be nice to have the same kind of information available for your own
693routines and for the huge amount of code in major libraries like JHUPL
694or the IDL-Astro library? In many cases, you may already have this
695information. Files named @file{.idlwave_catalog} in library directories
696contain scanned information on the routines in that directory; many
697popular libraries ship with these ``library catalogs'' pre-scanned.
698Users can scan their own routines in one of two ways: either using the
699supplied tool to scan directories and build their own
700@file{.idlwave_catalog} files, or using the built-in method to create a
701single ``user catalog'', which we'll show here. @xref{Catalogs}, for
702more information on choosing which method to use.
703
704To build a user catalog, select @code{Routine Info/Select Catalog
705Directories} from the IDLWAVE entry in the menu bar. If necessary,
706start the shell first with @kbd{C-c C-s} (@pxref{Starting the Shell}).
707IDLWAVE will find out about the IDL @code{!PATH} variable and offer a
708list of directories on the path. Simply select them all (or whichever
709you want --- directories with existing library catalogs will not be
710selected by default) and click on the @samp{Scan&Save} button. Then
711go for a cup of coffee while IDLWAVE collects information for each and
712every IDL routine on your search path. All this information is
713written to the file @file{.idlwave/idlusercat.el} in your home
714directory and will from now on automatically load whenever you use
5af23035 715IDLWAVE. You may find it necessary to rebuild the catalog on occasion
12b86f0e
S
716as your local libraries change, or build a library catalog for those
717directories instead. Invoke routine info (@kbd{C-c ?}) or completion
718(@kbd{M-@key{TAB}}) on any routine or partial routine name you know to
719be located in the library. E.g., if you have scanned the IDL-Astro
720library:
aea44e56
CD
721
722@example
12b86f0e 723 a=readf@key{M-@key{TAB}}
aea44e56
CD
724@end example
725
aea44e56
CD
726expands to `readfits('. Then try
727
728@example
729 a=readfits(@key{C-c ?}
730@end example
731
732and you get:
733
734@example
735Usage: Result = READFITS(filename, header, heap)
736...
737@end example
738
739I hope you made it until here. Now you are set to work with IDLWAVE.
12b86f0e
S
740On the way you will want to change other things, and to learn more
741about the possibilities not discussed in this short tutorial. Read
742the manual, look at the documentation strings of interesting variables
743(with @kbd{C-h v idlwave<-variable-name> @key{RET}}) and ask the
744remaining questions on the newsgroup @code{comp.lang.idl-pvwave}.
aea44e56
CD
745
746@node The IDLWAVE Major Mode, The IDLWAVE Shell, Getting Started, Top
797c8ebc
CD
747@chapter The IDLWAVE Major Mode
748@cindex IDLWAVE major mode
749@cindex Major mode, @code{idlwave-mode}
750
5af23035
S
751The IDLWAVE major mode supports editing IDL source files. In this
752chapter we describe the main features of the mode and how to customize
753them.
797c8ebc
CD
754
755@menu
756* Code Formatting:: Making code look nice
a8e833f3
CD
757* Routine Info:: Calling Sequence and Keyword List
758* Online Help:: One key press from source to help
797c8ebc 759* Completion:: Completing routine names and Keywords
5af23035 760* Routine Source:: Finding routines, the easy way
a8e833f3 761* Resolving Routines:: Force the Shell to compile a routine
5af23035
S
762* Code Templates:: Frequent code constructs
763* Abbreviations:: Abbreviations for common commands
797c8ebc
CD
764* Actions:: Changing case, Padding, End checking
765* Doc Header:: Inserting a standard header
766* Motion Commands:: Moving through the structure of a program
767* Misc Options:: Things that fit nowhere else
768@end menu
769
770@node Code Formatting, Routine Info, The IDLWAVE Major Mode, The IDLWAVE Major Mode
771@section Code Formatting
772@cindex Code formatting
773@cindex Formatting, of code
774
775@menu
776* Code Indentation:: Reflecting the logical structure
12b86f0e 777* Continued Statement Indentation::
797c8ebc
CD
778* Comment Indentation:: Special indentation for comment lines
779* Continuation Lines:: Splitting statements over lines
780* Syntax Highlighting:: Font-lock support
5af23035 781* Octals and Highlighting:: Why "123 causes problems
797c8ebc
CD
782@end menu
783
12b86f0e 784The IDL language, with its early roots in FORTRAN, modern
5af23035 785implementation in C, and liberal borrowing of features of many vector
12b86f0e
S
786and other languages along its 25+ year history, has inherited an
787unusual mix of syntax elements. Left to his or her own devices, a
788novice IDL programmer will often conjure code which is very difficult
789to read and impossible to adapt. Much can be gleaned from studying
790available IDL code libraries for coding style pointers, but, due to
791the variety of IDL syntax elements, replicating this style can be
792challenging at best. Luckily, IDLWAVE understands the structure of
793IDL code very well, and takes care of almost all formatting issues for
794you. After configuring it to match your coding standards, you can
795rely on it to help keep your code neat and organized.
797c8ebc 796
797c8ebc 797
5af23035
S
798@node Code Indentation, Continued Statement Indentation, Code Formatting, Code Formatting
799@subsection Code Indentation
800@cindex Code indentation
801@cindex Indentation
802
803Like all Emacs programming modes, IDLWAVE performs code indentation.
804The @key{TAB} key indents the current line relative to context.
805@key{LFD} insert a newline and indents the new line. The indentation is
806governed by a number of variables. IDLWAVE indents blocks (between
807@code{PRO}/@code{FUNCTION}/@code{BEGIN} and @code{END}), and
808continuation lines.
809
12b86f0e
S
810@cindex Foreign code, adapting
811@cindex Indentation, of foreign code
812@kindex C-M-\
813To re-indent a larger portion of code (e.g. when working with foreign code
814written with different conventions), use @kbd{C-M-\}
815(@code{indent-region}) after marking the relevant code. Useful marking
816commands are @kbd{C-x h} (the entire file) or @kbd{C-M-h} (the
817current subprogram). @xref{Actions}, for information how to impose
818additional formatting conventions on foreign code.
819
820@defopt idlwave-main-block-indent (@code{0})
797c8ebc
CD
821Extra indentation for the main block of code. That is the block between
822the FUNCTION/PRO statement and the END statement for that program
a8e833f3 823unit.
797c8ebc
CD
824@end defopt
825
5af23035 826@defopt idlwave-block-indent (@code{4})
797c8ebc 827Extra indentation applied to block lines. If you change this, you
a8e833f3 828probably also want to change @code{idlwave-end-offset}.
797c8ebc
CD
829@end defopt
830
831@defopt idlwave-end-offset (@code{-4})
832Extra indentation applied to block END lines. A value equal to negative
833@code{idlwave-block-indent} will make END lines line up with the block
a8e833f3 834BEGIN lines.
797c8ebc
CD
835@end defopt
836
5af23035
S
837@node Continued Statement Indentation, Comment Indentation, Code Indentation, Code Formatting
838@subsection Continued Statement Indentation
839@cindex Indentation, continued statement
840@cindex Continued statement indentation
841Continuation lines (following a line ending with @code{$}) can receive a
842fixed indentation offset from the main level, but in several situations
843IDLWAVE can use a special form of indentation which aligns continued
844statements more naturally. Special indentation is calculated for
845continued routine definition statements and calls, enclosing parentheses
846(like function calls, structure/class definitions, explicit structures
847or lists, etc.), and continued assignments. An attempt is made to line
848up with the first non-whitespace character after the relevant opening
849punctuation mark (@code{,},@code{(},@code{@{},@code{[},@code{=}). For
850lines without any non-comment characters on the line with the opening
851punctuation, the continued line(s) are aligned just past the
852punctuation. An example:
853
854@example
855function foo, a, b, $
856 c, d
857 bar = sin( a + b + $
858 c + d)
859end
860@end example
861@noindent
862
863The only drawback to this special continued statement indentation is
864that it consumes more space, e.g., for long function names or left hand
865sides of an assignment:
866
867@example
868function thisfunctionnameisverylongsoitwillleavelittleroom, a, b, $
869 c, d
870@end example
871
76959b77 872You can instruct IDLWAVE when to avoid using this special continuation
5af23035
S
873indentation by setting the variable
874@code{idlwave-max-extra-continuation-indent}, which specifies the
76959b77
S
875maximum additional indentation beyond the basic indent to be
876tolerated, otherwise defaulting to a fixed-offset from the enclosing
877indent (the size of which offset is set in
12b86f0e
S
878@code{idlwave-continuation-indent}). As a special case, continuations
879of routine calls without any arguments or keywords will @emph{not}
880align the continued line, under the assumption that you continued
881because you needed the space.
882
883Also, since the indentation level can be somewhat dynamic in continued
884statements with special continuation indentation, especially if
76959b77
S
885@code{idlwave-max-extra-continuation-indent} is small, the key
886@kbd{C-u @key{TAB}} will re-indent all lines in the current statement.
9d1852ac 887Note that @code{idlwave-indent-to-open-paren}, if non-@code{nil}, overrides
76959b77
S
888the @code{idlwave-max-extra-continuation-indent} limit, for
889parentheses only, forcing them always to line up.
5af23035
S
890
891
797c8ebc 892@defopt idlwave-continuation-indent (@code{2})
5af23035
S
893Extra indentation applied to normal continuation lines.
894@end defopt
895
896@defopt idlwave-max-extra-continuation-indent (@code{20})
897The maximum additional indentation (over the basic continuation-indent)
898that will be permitted for special continues. To effectively disable
899special continuation indentation, set to @code{0}. To enable it
900constantly, set to a large number (like @code{100}). Note that the
901indentation in a long continued statement never decreases from line to
902line, outside of nested parentheses statements.
903@end defopt
904
905@defopt idlwave-indent-to-open-paren (@code{t})
906Non-@code{nil} means indent continuation lines to innermost open
907parenthesis, regardless of whether the
908@code{idlwave-max-extra-continuation-indent} limit is satisfied.
797c8ebc
CD
909@end defopt
910
5af23035 911@node Comment Indentation, Continuation Lines, Continued Statement Indentation, Code Formatting
797c8ebc
CD
912@subsection Comment Indentation
913@cindex Comment indentation
914@cindex Hanging paragraphs
915@cindex Paragraphs, filling
916@cindex Paragraphs, hanging
917
918In IDL, lines starting with a @samp{;} are called @emph{comment lines}.
919Comment lines are indented as follows:
920
921@multitable @columnfractions .1 .90
922@item @code{;;;}
923@tab The indentation of lines starting with three semicolons remains
924unchanged.
925@item @code{;;}
926@tab Lines starting with two semicolons are indented like the surrounding code.
927@item @code{;}
76959b77 928@tab Lines starting with a single semicolon are indented to a minimum column.
797c8ebc
CD
929@end multitable
930
a8e833f3 931@noindent
797c8ebc
CD
932The indentation of comments starting in column 0 is never changed.
933
934@defopt idlwave-no-change-comment
5af23035
S
935The indentation of a comment starting with this regexp will not be
936changed.
797c8ebc
CD
937@end defopt
938
939@defopt idlwave-begin-line-comment
a8e833f3 940A comment anchored at the beginning of line.
797c8ebc
CD
941@end defopt
942
943@defopt idlwave-code-comment
a8e833f3
CD
944A comment that starts with this regexp is indented as if it is a part of
945IDL code.
797c8ebc
CD
946@end defopt
947
948@node Continuation Lines, Syntax Highlighting, Comment Indentation, Code Formatting
949@subsection Continuation Lines and Filling
950@cindex Continuation lines
951@cindex Line splitting
a8e833f3 952@cindex String splitting
797c8ebc 953@cindex Splitting, of lines
797c8ebc 954
a8e833f3 955@kindex M-@key{RET}
797c8ebc
CD
956In IDL, a newline character terminates a statement unless preceded by a
957@samp{$}. If you would like to start a continuation line, use
5af23035
S
958@kbd{M-@key{RET}}, which calls the command @code{idlwave-split-line}.
959It inserts the continuation character @samp{$}, terminates the line and
960indents the new line. The command @kbd{M-@key{RET}} can also be invoked
961inside a string to split it at that point, in which case the @samp{+}
962concatenation operator is used.
797c8ebc 963
a8e833f3
CD
964@cindex Filling
965@cindex @code{auto-fill-mode}
966@cindex Hanging paragraphs
797c8ebc 967When filling comment paragraphs, IDLWAVE overloads the normal filling
5af23035
S
968functions and uses a function which creates the hanging paragraphs
969customary in IDL routine headers. When @code{auto-fill-mode} is turned
970on (toggle with @kbd{C-c C-a}), comments will be auto-filled. If the
971first line of a paragraph contains a match for
972@code{idlwave-hang-indent-regexp} (a dash-space by default), subsequent
973lines are positioned to line up after it, as in the following example.
797c8ebc
CD
974
975@example
5af23035
S
976@group
977;=================================
797c8ebc
CD
978; x - an array containing
979; lots of interesting numbers.
980;
981; y - another variable where
982; a hanging paragraph is used
983; to describe it.
5af23035
S
984;=================================
985@end group
797c8ebc
CD
986@end example
987
a8e833f3 988@kindex M-q
5af23035
S
989You can also refill a comment at any time paragraph with @kbd{M-q}.
990Comment delimiting lines as in the above example, consisting of one or
991more @samp{;} followed by one or more of the characters @samp{+=-_*},
992are kept in place, as is.
797c8ebc
CD
993
994@defopt idlwave-fill-comment-line-only (@code{t})
995Non-@code{nil} means auto fill will only operate on comment lines.
996@end defopt
997
998@defopt idlwave-auto-fill-split-string (@code{t})
999Non-@code{nil} means auto fill will split strings with the IDL @samp{+}
1000operator.
1001@end defopt
1002
1003@defopt idlwave-split-line-string (@code{t})
1004Non-@code{nil} means @code{idlwave-split-line} will split strings with
1005@samp{+}.
1006@end defopt
1007
a8e833f3 1008@defopt idlwave-hanging-indent (@code{t})
797c8ebc
CD
1009Non-@code{nil} means comment paragraphs are indented under the hanging
1010indent given by @code{idlwave-hang-indent-regexp} match in the first
a8e833f3 1011line of the paragraph.
797c8ebc
CD
1012@end defopt
1013
5af23035 1014@defopt idlwave-hang-indent-regexp (@code{"- "})
797c8ebc 1015Regular expression matching the position of the hanging indent
a8e833f3 1016in the first line of a comment paragraph.
797c8ebc
CD
1017@end defopt
1018
1019@defopt idlwave-use-last-hang-indent (@code{nil})
1020Non-@code{nil} means use last match on line for
12b86f0e 1021@code{idlwave-indent-regexp}.
797c8ebc
CD
1022@end defopt
1023
5af23035 1024@node Syntax Highlighting, Octals and Highlighting, Continuation Lines, Code Formatting
797c8ebc
CD
1025@subsection Syntax Highlighting
1026@cindex Syntax highlighting
a8e833f3 1027@cindex Highlighting of syntax
797c8ebc
CD
1028@cindex Font lock
1029
1030Highlighting of keywords, comments, strings etc. can be accomplished
a8e833f3 1031with @code{font-lock}. If you are using @code{global-font-lock-mode}
5af23035
S
1032(in Emacs), or have @code{font-lock} turned on in any other buffer in
1033XEmacs, it should also automatically work in IDLWAVE buffers. If you'd
1034prefer invoking font-lock individually by mode, you can enforce it in
1035@code{idlwave-mode} with the following line in your @file{.emacs}:
797c8ebc
CD
1036
1037@lisp
1038(add-hook 'idlwave-mode-hook 'turn-on-font-lock)
1039@end lisp
1040
5af23035
S
1041@noindent IDLWAVE supports 3 increasing levels of syntax highlighting.
1042The variable @code{font-lock-maximum-decoration} determines which level
1043is selected. Individual categories of special tokens can be selected
1044for highlighting using the variable
1045@code{idlwave-default-font-lock-items}.
797c8ebc
CD
1046
1047@defopt idlwave-default-font-lock-items
1048Items which should be fontified on the default fontification level
12b86f0e 10492.
797c8ebc
CD
1050@end defopt
1051
5af23035
S
1052@node Octals and Highlighting, , Syntax Highlighting, Code Formatting
1053@subsection Octals and Highlighting
1054@cindex Syntax highlighting, Octals
1055@cindex Highlighting of syntax, Octals
1056
12b86f0e
S
1057A rare syntax highlighting problem results from an extremely unfortunate
1058notation for octal numbers in IDL: @code{"123}. This unpaired quotation
1059mark is very difficult to parse, given that it can be mixed on a single
1060line with any number of strings. Emacs will incorrectly identify this
1061as a string, and the highlighting of following lines of code can be
1062distorted, since the string is never terminated.
5af23035
S
1063
1064One solution to this involves terminating the mistakenly identified
1065string yourself by providing a closing quotation mark in a comment:
1066
1067@example
1068 string("305B) + $ ;" <--- for font-lock
1069 ' is an Angstrom.'
1070@end example
1071
1072@noindent A far better solution is to abandon this notation for octals
1073altogether, and use the more sensible alternative IDL provides:
1074
1075@example
1076 string('305'OB) + ' is an Angstrom.'
1077@end example
1078
1079@noindent This simultaneously solves the font-lock problem and is more
1080consistent with the notation for hexadecimal numbers, e.g. @code{'C5'XB}.
1081
a8e833f3 1082@node Routine Info, Online Help, Code Formatting, The IDLWAVE Major Mode
797c8ebc
CD
1083@section Routine Info
1084@cindex Routine info
a8e833f3
CD
1085@cindex Updating routine info
1086@cindex Scanning buffers for routine info
1087@cindex Buffers, scanning for routine info
1088@cindex Shell, querying for routine info
797c8ebc 1089
a8e833f3 1090@kindex C-c C-i
76959b77
S
1091IDL comes bundled with more than one thousand procedures, functions
1092and object methods, and large libraries typically contain hundreds or
1093even thousands more (each with a few to tens of keywords and
1094arguments). This large command set can make it difficult to remember
1095the calling sequence and keywords for the routines you use, but
12b86f0e
S
1096IDLWAVE can help. It builds up routine information from a wide
1097variety of sources; IDLWAVE in fact knows far more about the
1098@samp{.pro} routines on your system than IDL itself! It maintains a
1099list of all built-in routines, with calling sequences and
1100keywords@footnote{This list is created by scanning the IDL manuals and
1101might contain (very few) errors. Please report any errors to the
1102maintainer, so that they can be fixed.}. It also scans Emacs buffers
1103for routine definitions, queries the IDLWAVE-Shell for information
1104about routines currently compiled there, and automatically locates
1105library and user-created catalogs. This information is updated
76959b77
S
1106automatically, and so should usually be current. To force a global
1107update and refresh the routine information, use @kbd{C-c C-i}
1108(@code{idlwave-update-routine-info}).
797c8ebc 1109
a8e833f3 1110@kindex C-c ?
5af23035 1111To display the information about a routine, press @kbd{C-c ?}, which
797c8ebc
CD
1112calls the command @code{idlwave-routine-info}. When the current cursor
1113position is on the name or in the argument list of a procedure or
1114function, information will be displayed about the routine. For example,
5af23035 1115consider the indicated cursor positions in the following line:
797c8ebc
CD
1116
1117@example
1118plot,x,alog(x+5*sin(x) + 2),
5af23035 1119 | | | | | | | |
797c8ebc
CD
1120 1 2 3 4 5 6 7 8
1121@end example
1122
a8e833f3 1123@cindex Default routine, for info and help
797c8ebc
CD
1124On positions 1,2 and 8, information about the @samp{plot} procedure will
1125be shown. On positions 3,4, and 7, the @samp{alog} function will be
5af23035 1126described, while positions 5 and 6 will investigate the @samp{sin}
12b86f0e 1127function.
5af23035 1128
797c8ebc
CD
1129When you ask for routine information about an object method, and the
1130method exists in several classes, IDLWAVE queries for the class of the
5af23035
S
1131object, unless the class is already known through a text property on the
1132@samp{->} operator (@pxref{Object Method Completion and Class
12b86f0e 1133Ambiguity}), or by having been explicity included in the call
5af23035 1134(e.g. @code{a->myclass::Foo}).
797c8ebc
CD
1135
1136@cindex Calling sequences
1137@cindex Keywords of a routine
a8e833f3 1138@cindex Routine source information
797c8ebc 1139The description displayed contains the calling sequence, the list of
a8e833f3 1140keywords and the source location of this routine. It looks like this:
797c8ebc
CD
1141
1142@example
a8e833f3
CD
1143Usage: XMANAGER, NAME, ID
1144Keywords: BACKGROUND CATCH CLEANUP EVENT_HANDLER GROUP_LEADER
1145 JUST_REG MODAL NO_BLOCK
12b86f0e 1146Source: SystemLib [LCSB] /soft1/idl53/lib/xmanager.pro
797c8ebc
CD
1147@end example
1148
a8e833f3
CD
1149@cindex Categories, of routines
1150@cindex Load-path shadows
1151@cindex Shadows, load-path
1152@cindex IDL variable @code{!PATH}
1153@cindex @code{!PATH}, IDL variable
1154@cindex IDL variable @code{!DIR}
1155@cindex @code{!DIR}, IDL variable
1156
1157If a definition of this routine exists in several files accessible to
12b86f0e
S
1158IDLWAVE, several @samp{Source} lines will point to the different
1159files. This may indicate that your routine is shadowing a system
1160library routine, which may or may not be what you want
1161(@pxref{Load-Path Shadows}). The information about the calling
1162sequence and keywords is derived from the first source listed.
1163Library routines are available only if you have scanned your local IDL
1164directories or are using pre-scanned libraries (@pxref{Catalogs}).
1165The source entry consists of a @emph{source category}, a set of
1166@emph{flags} and the path to the @emph{source file}. The following
1167default categories exist:
a8e833f3
CD
1168
1169@multitable @columnfractions .15 .85
1170@item @i{System}
5af23035 1171@tab A system routine of unknown origin. When the system library has
12b86f0e
S
1172been scanned as part of a catalog (@pxref{Catalogs}), this category
1173will automatically split into the next two.
a8e833f3 1174@item @i{Builtin}
5af23035 1175@tab A builtin system routine with no source code available.
a8e833f3 1176@item @i{SystemLib}
5af23035 1177@tab A library system routine in the official lib directory @file{!DIR/lib}.
a8e833f3
CD
1178@item @i{Obsolete}
1179@tab A library routine in the official lib directory @file{!DIR/lib/obsolete}.
1180@item @i{Library}
5af23035 1181@tab A routine in a file on IDL's search path @code{!PATH}.
a8e833f3 1182@item @i{Other}
5af23035 1183@tab Any other routine with a file not known to be on the search path.
a8e833f3 1184@item @i{Unresolved}
12b86f0e 1185@tab An otherwise unkown routine the shell lists as unresolved
5af23035 1186(referenced, but not compiled).
a8e833f3
CD
1187@end multitable
1188
12b86f0e
S
1189Any routines discovered in library catalogs (@pxref{Library
1190Catalogs}), will display the category assigned during creation,
1191e.g. @samp{NasaLib}. For routines not discovered in this way, you can
1192create additional categories based on the routine's filename using the
1193variable @code{idlwave-special-lib-alist}.
a8e833f3
CD
1194
1195@cindex Flags, in routine info
1196@cindex Duplicate routines
1197@cindex Multiply defined routines
1198@cindex Routine definitions, multiple
12b86f0e
S
1199The flags @code{[LCSB]} indicate the source of the information IDLWAVE
1200has regarding the file: from a library catalog (@w{@code{[L---]}}),
1201from a user catalog (@w{@code{[-C--]}}, from the IDL Shell
1202(@w{@code{[--S-]}}) or from an Emacs buffer (@w{@code{[---B]}}).
1203Combinations are possible (a compiled library routine visited in a
1204buffer might read @w{@code{[L-SB]}}). If a file contains multiple
1205definitions of the same routine, the file name will be prefixed with
1206@samp{(Nx)} where @samp{N} is the number of definitions.
a8e833f3
CD
1207
1208@cindex Online Help from the routine info buffer
1209@cindex Active text, in routine info
1210@cindex Inserting keywords, from routine info
1211@cindex Source file, access from routine info
5af23035
S
1212Some of the text in the @file{*Help*} routine info buffer will be active
1213(it is highlighted when the mouse moves over it). Typically, clicking
1214with the right mouse button invokes online help lookup, and clicking
1215with the middle mouse button inserts keywords or visits files:
a8e833f3
CD
1216
1217@multitable @columnfractions 0.15 0.85
1218@item @i{Usage}
1219@tab If online help is installed, a click with the @emph{right} mouse
1220button on the @i{Usage:} line will access the help for the
12b86f0e 1221routine (@pxref{Online Help}).
a8e833f3
CD
1222@item @i{Keyword}
1223@tab Online help about keywords is also available with the
1224@emph{right} mouse button. Clicking on a keyword with the @emph{middle}
1225mouse button will insert this keyword in the buffer from where
1226@code{idlwave-routine-info} was called. Holding down @key{SHIFT} while
1227clicking also adds the initial @samp{/}.
1228@item @i{Source}
1229@tab Clicking with the @emph{middle} mouse button on a @samp{Source} line
1230finds the source file of the routine and visits it in another window.
1231Another click on the same line switches back to the buffer from which
1232@kbd{C-c ?} was called. If you use the @emph{right} mouse button, the
1233source will not be visited by a buffer, but displayed in the online help
1234window.
aea44e56
CD
1235@item @i{Classes}
1236@tab The @i{Classes} line is only included in the routine info window if
1237the current class inherits from other classes. You can click with the
1238@emph{middle} mouse button to display routine info about the current
5af23035
S
1239method in other classes on the inheritance chain, if such a method
1240exists there.
a8e833f3 1241@end multitable
797c8ebc 1242
a8e833f3 1243@defopt idlwave-resize-routine-help-window (@code{t})
5af23035 1244Non-@code{nil} means resize the Routine-info @file{*Help*} window to
a8e833f3
CD
1245fit the content.
1246@end defopt
797c8ebc 1247
a8e833f3
CD
1248@defopt idlwave-special-lib-alist
1249Alist of regular expressions matching special library directories.
1250@end defopt
797c8ebc 1251
a8e833f3
CD
1252@defopt idlwave-rinfo-max-source-lines (@code{5})
1253Maximum number of source files displayed in the Routine Info window.
1254@end defopt
797c8ebc 1255
797c8ebc 1256
12b86f0e
S
1257@ifhtml
1258<A NAME="ONLINE_HELP"></A>
1259@end ifhtml
a8e833f3
CD
1260@node Online Help, Completion, Routine Info, The IDLWAVE Major Mode
1261@section Online Help
1262
1263@cindex Online Help
1264@cindex @file{idlw-help.txt}
1265@cindex @file{idlw-help.el}
a8e833f3
CD
1266@cindex Installing online help
1267@cindex Online Help, Installation
1268@cindex Speed, of online help
a8e833f3 1269
215a5cd0
RS
1270IDLWAVE can display help from an HTML version of the IDL documentation
1271if it is available. This is @emph{much} faster than using the IDL
1272online help application, because IDLWAVE usually gets you to the right
1273place in the documentation directly --- e.g. a specific keyword of a
1274routine --- without any additional browsing and scrolling. There are
1275a variety of options for displaying the HTML help: see below. Help
1276for routines without HTML documentation is also available, using the
1277routine documentation header and/or source.
1278
1279To make this feature work, you should set
1280@code{idlwave-html-help-location} to the directory name of the
1281directory where the IDL help files are installed.
76959b77 1282
a8e833f3 1283@kindex M-?
5af23035
S
1284In any IDL program (or, as with most IDLWAVE commands, in the IDL
1285Shell), press @kbd{M-?} (@code{idlwave-context-help}), or click with
32d4cddb 1286@kbd{S-Mouse-3} to access context sensitive online help. The following
5af23035 1287locations are recognized context for help:
a8e833f3
CD
1288
1289@cindex Context, for online help
1290@multitable @columnfractions .25 .75
1291@item @i{Routine name}
1292@tab The name of a routine (function, procedure, method).
1293@item @i{Keyword Parameter}
5af23035 1294@tab A keyword parameter of a routine.
a8e833f3 1295@item @i{System Variable}
5af23035 1296@tab System variables like @code{!DPI}.
12b86f0e
S
1297@item @i{System Variable Tags}
1298@tab System variables tags like @code{!D.X_SIZE}.
a8e833f3 1299@item @i{IDL Statement}
5af23035 1300@tab Statements like @code{PRO}, @code{REPEAT}, @code{COMPILE_OPT}, etc.
a8e833f3 1301@item @i{Class name}
5af23035
S
1302@tab A class name in an @code{OBJ_NEW} call.
1303@item @i{Class Init}
1304@tab Beyond the class name in an @code{OBJ_NEW} call.
a8e833f3 1305@item @i{Executive Command}
5af23035 1306@tab An executive command like @code{.RUN}. Mostly useful in the shell.
76959b77 1307@item @i{Structure Tags}
12b86f0e
S
1308@tab Structure tags like @code{state.xsize}
1309@item @i{Class Tags}
1310@tab Class tags like @code{self.value}.
a8e833f3
CD
1311@item @i{Default}
1312@tab The routine that would be selected for routine info display.
1313@end multitable
1314
1315@cindex @code{OBJ_NEW}, special online help
1316Note that the @code{OBJ_NEW} function is special in that the help
12b86f0e
S
1317displayed depends on the cursor position. If the cursor is on the
1318@samp{OBJ_NEW}, this function is described. If it is on the class
1319name inside the quotes, the documentation for the class is pulled up.
1320If the cursor is @emph{after} the class name, anywhere in the argument
1321list, the documentation for the corresponding @code{Init} method and
1322its keywords is targeted.
1323
1324Apart from an IDLWAVE buffer or shell, there are two more places from
a8e833f3
CD
1325which online help can be accessed.
1326
1327@itemize @bullet
1328@item
1329Online help for routines and keywords can be accessed through the
32d4cddb 1330Routine Info display. Click with @kbd{Mouse-3} on an item to see the
a8e833f3
CD
1331corresponding help (@pxref{Routine Info}).
1332@item
76959b77
S
1333When using completion and Emacs pops up a @file{*Completions*} buffer
1334with possible completions, clicking with @kbd{Mouse-3} on a completion
1335item invokes help on that item (@pxref{Completion}). Items for which
1336help is available in the online system documentation (vs. just the
1337program source itself) will be emphasized (e.g. colored blue).
a8e833f3
CD
1338@end itemize
1339@noindent
12b86f0e
S
1340In both cases, a blue face indicates that the item is documented in
1341the IDL manual, but an attempt will be made to visit non-blue items
1342directly in the originating source file.
1343
1344
1345@menu
1346* Help with HTML Documentation::
1347* Help with Source::
1348@end menu
a8e833f3 1349
12b86f0e
S
1350@node Help with HTML Documentation, Help with Source, Online Help, Online Help
1351@subsection Help with HTML Documentation
1352@cindex HTML Help
1353@cindex Help using HTML manuals
1354@cindex IDL manual, HTML version
1355
1356Help using the HTML documentation is invoked with the built-in Emacs
1357command @code{browse-url}, which displays the relevant help topic in a
1358browser of your choosing. There are many possible browsers to choose
1359among, with differing advantages and disadvantages. The variable
1360@code{idlwave-help-browser-function} controls which browser help is
1361sent to. This function is used to set the variable
1362@code{browse-url-browser-function} locally for IDLWAVE help only.
1363Customize this variable to see what choices of browsers your system
1364offers.
1365
215a5cd0
RS
1366Certain browsers like @code{w3} and @code{w3m}
1367(@uref{http://emacs-w3m.namazu.org/}, the author's help browser of
1368choice) are run within Emacs, and use Emacs buffers to display the
1369HTML help. This can be convenient, especially on small displays, and
1370images can even be displayed in-line on new Emacs versions. However,
1371better formatting results are often achieved with external browsers,
1372like Mozilla. IDLWAVE assumes any browser function containing "w3" is
1373displayed in a local buffer. If you are using another Emacs-local
1374browser for which this is not true, set the variable
1375@code{idlwave-help-browser-is-local}.
1376
1377@emph{N.B. For Windows users}: IDLWAVE can bring up help directly
1378from the Microsoft HTMLHelp documentation supplied with IDL: no
12b86f0e
S
1379additional help files are needed. Be sure to set
1380@code{idlwave-system-directory} and the help file will be found
1381automatically (or, alternatively, specify its location directly with
1382@code{idlwave-html-help-location}). The variable
1383@code{idlwave-help-use-hh} controls whether HTMLHelp is used, and
1384which application is called to invoke it (@code{HH} is the default).
1385The free helper application @code{KEYHH}
1386(@uref{http://www.keyworks.net/keyhh.htm}) can be used instead, and is
1387preferrable, as it permits loading new help topics into the same help
1388window. @code{KEYHH} must be downloaded and installed separately.
1389
1390@xref{HTML Help Browser Tips}, for more information on selecting and
1391configuring a browser for use with IDL's HTML help system.
1392
1393@defopt idlwave-html-help-location @file{/usr/local/etc}
1394The directory where the @file{idl_html_help} dir or @file{idl.chm}
1395HTMLHelp files live.
1396@end defopt
1397
1398@defopt idlwave-help-use-hh @code{nil}
1399If set to @code{'hh} or @code{'keyhh}, use Windows native HTMLHelp
1400with the specified help application.
1401@end defopt
1402
1403@defopt idlwave-help-browser-function
1404The browser function to use to display IDLWAVE HTML help. Should be
1405one of the functions available for setting
1406@code{browse-url-browser-function}, which see.
1407@end defopt
1408
1409@defopt idlwave-help-browser-is-local
1410Is the browser selected in @code{idlwave-help-browser-function} run in a
1411local Emacs buffer? Defaults to @code{t} if the function contains
1412"-w3".
1413@end defopt
1414
1415@defopt idlwave-help-link-face
1416The face for links to IDLWAVE online help.
1417@end defopt
1418
1419@node Help with Source, , Help with HTML Documentation, Online Help
1420@subsection Help with Source
1421@cindex Help using routine source
1422
1423@cindex Source code, as online help
1424@cindex DocLib header, as online help
1425For routines which are not documented in an HTML manual (for example
1426personal or library routines), the source code itself is used as help
1427text. If the requested information can be found in a (more or less)
1428standard DocLib file header, IDLWAVE shows the header (scrolling down to
1429a keyword, if appropriate). Otherwise the routine definition statement
1430(@code{pro}/@code{function}) is shown. The doclib header sections which
1431are searched for include @samp{NAME} and @samp{KEYWORDS}. Localization
1432support can be added by customizing the @code{idlwave-help-doclib-name}
1433and @code{idlwave-help-doclib-keyword} variables.
1434
1435@cindex Structure tags, in online help
1436@cindex Class tags, in online help
1437Help is also available for class structure tags (@code{self.TAG}), and
1438generic structure tags, if structure tag completion is enabled
1439(@pxref{Structure Tag Completion}). This is implemented by visiting the
1440tag within the class or structure definition source itself. Help is not
1441available on built-in system class tags.
1442
1443The help window is normally displayed in the same frame, but can be
1444popped-up in a separate frame. The following commands can be used to
1445navigate inside the help system for source files:
a8e833f3
CD
1446
1447@multitable @columnfractions .15 .85
1448@item @kbd{@key{SPACE}}
1449@tab Scroll forward one page.
1450@item @kbd{@key{RET}}
1451@tab Scroll forward one line.
1452@item @kbd{@key{DEL}}
1453@tab Scroll back one page.
a8e833f3
CD
1454@item @kbd{h}
1455@tab Jump to DocLib Header of the routine whose source is displayed
1456as help.
1457@item @kbd{H}
1458@tab Jump to the first DocLib Header in the file.
1459@item @kbd{.} @r{(Dot)}
1460@tab Jump back and forth between the routine definition (the
1461@code{pro}/@code{function} statement) and the description of the help
1462item in the DocLib header.
1463@item @kbd{F}
1464@tab Fontify the buffer like source code. See the variable @code{idlwave-help-fontify-source-code}.
12b86f0e
S
1465@item @kbd{q}
1466@tab Kill the help window.
a8e833f3
CD
1467@end multitable
1468
797c8ebc 1469
12b86f0e 1470@defopt idlwave-help-use-dedicated-frame (@code{nil})
5af23035 1471Non-@code{nil} means use a separate frame for Online Help if possible.
797c8ebc
CD
1472@end defopt
1473
a8e833f3
CD
1474@defopt idlwave-help-frame-parameters
1475The frame parameters for the special Online Help frame.
1476@end defopt
1477
1478@defopt idlwave-max-popup-menu-items (@code{20})
32d4cddb 1479Maximum number of items per pane in pop-up menus.
a8e833f3
CD
1480@end defopt
1481
1482@defopt idlwave-extra-help-function
1483Function to call for help if the normal help fails.
797c8ebc
CD
1484@end defopt
1485
a8e833f3 1486@defopt idlwave-help-fontify-source-code (@code{nil})
5af23035 1487Non-@code{nil} means fontify source code displayed as help.
a8e833f3 1488@end defopt
797c8ebc 1489
a8e833f3 1490@defopt idlwave-help-source-try-header (@code{t})
12b86f0e
S
1491Non-@code{nil} means try to find help in routine header when
1492displaying source file.
a8e833f3
CD
1493@end defopt
1494
12b86f0e
S
1495@defopt idlwave-help-doclib-name (@code{"name"})
1496The case-insensitive heading word in doclib headers to locate the
1497@emph{name} section. Can be a regexp, e.g. @code{"\\(name\\|nom\\)"}.
a8e833f3
CD
1498@end defopt
1499
12b86f0e
S
1500@defopt idlwave-help-doclib-keyword (@code{"KEYWORD"})
1501The case-insensitive heading word in doclib headers to locate the
1502@emph{keywords} section. Can be a regexp.
aea44e56
CD
1503@end defopt
1504
12b86f0e 1505
a8e833f3 1506@node Completion, Routine Source, Online Help, The IDLWAVE Major Mode
797c8ebc
CD
1507@section Completion
1508@cindex Completion
a8e833f3
CD
1509@cindex Keyword completion
1510@cindex Method completion
1511@cindex Object method completion
1512@cindex Class name completion
1513@cindex Function name completion
1514@cindex Procedure name completion
1515
1516@kindex M-@key{TAB}
1517@kindex C-c C-i
5af23035 1518IDLWAVE offers completion for class names, routine names, keywords,
12b86f0e
S
1519system variables, system variable tags, class structure tags, regular
1520structure tags and file names. As in many programming modes,
1521completion is bound to @kbd{M-@key{TAB}} (or @kbd{@key{TAB}} in the
1522IDLWAVE Shell --- @pxref{Using the Shell}). Completion uses exactly
1523the same internal information as routine info, so when necessary
1524(rarely) it can be updated with @kbd{C-c C-i}
1525(@code{idlwave-update-routine-info}).
797c8ebc
CD
1526
1527The completion function is context sensitive and figures out what to
5af23035
S
1528complete based location of the point. Here are example lines and what
1529@kbd{M-@key{TAB}} would try to complete when the cursor is on the
1530position marked with a @samp{_}:
797c8ebc
CD
1531
1532@example
5af23035
S
1533plo_ @r{Procedure}
1534x = a_ @r{Function}
1535plot,xra_ @r{Keyword of @code{plot} procedure}
1536plot,x,y,/x_ @r{Keyword of @code{plot} procedure}
1537plot,min(_ @r{Keyword of @code{min} function}
1538obj -> a_ @r{Object method (procedure)}
1539a(2,3) = obj -> a_ @r{Object method (function)}
1540x = obj_new('IDL_ @r{Class name}
1541x = obj_new('MyCl',a_ @r{Keyword to @code{Init} method in class @code{MyCl}}
1542pro A_ @r{Class name}
1543pro _ @r{Fill in @code{Class::} of first method in this file}
1544!v_ @r{System variable}
1545!version.t_ @r{Structure tag of system variable}
1546self.g_ @r{Class structure tag in methods}
1547state.w_ @r{Structure tag, if tag completion enabled}
1548name = 'a_ @r{File name (default inside quotes)}
797c8ebc
CD
1549@end example
1550
5af23035
S
1551@cindex Completion, ambiguity
1552@cindex Completion, forcing function name
1553The only place where completion is ambiguous is procedure/function
76959b77
S
1554@emph{keywords} versus @emph{functions}. After @samp{plot,x,_}, IDLWAVE
1555will always assume a keyword to @samp{plot}. However, a function is
1556also a possible completion here. You can force completion of a function
1557name at such a location by using a prefix arg: @kbd{C-u M-@key{TAB}}.
5af23035 1558
12b86f0e
S
1559Giving two prefix arguments (@kbd{C-u C-u M-@key{TAB}}) prompts for a
1560regular expression to search among the commands to be completed. As
1561an example, completing a blank line in this way will allow you to
1562search for a procedure matching a regexp.
1563
797c8ebc
CD
1564@cindex Scrolling the @file{*Completions*} window
1565@cindex Completion, scrolling
a8e833f3
CD
1566@cindex Completion, Online Help
1567@cindex Online Help in @file{*Completions*} buffer
797c8ebc
CD
1568If the list of completions is too long to fit in the
1569@file{*Completions*} window, the window can be scrolled by pressing
a8e833f3 1570@kbd{M-@key{TAB}} repeatedly. Online help (if installed) for each
32d4cddb 1571possible completion is available by clicking with @kbd{Mouse-3} on the
a8e833f3 1572item. Items for which system online help (from the IDL manual) is
76959b77
S
1573available will be emphasized (e.g. colored blue). For other items, the
1574corresponding source code or DocLib header will be used as the help
1575text.
1576
1577@cindex Completion, cancelling
1578@cindex Cancelling completion
1579Completion is not a blocking operation --- you are free to continue
1580editing, enter commands, or simply ignore the @file{*Completions*}
1581buffer during a completion operation. If, however, the most recent
1582command was a completion, @kbd{C-g} will remove the buffer and restore
1583the window configuration. You can also remove the buffer at any time
1584with no negative consequences.
5af23035
S
1585
1586@defopt idlwave-keyword-completion-adds-equal (@code{t})
1587Non-@code{nil} means completion automatically adds @samp{=} after
1588completed keywords.
1589@end defopt
1590
1591@defopt idlwave-function-completion-adds-paren (@code{t})
1592Non-@code{nil} means completion automatically adds @samp{(} after
1593completed function. A value of `2' means also add the closing
1594parenthesis and position the cursor between the two.
1595@end defopt
1596
1597@defopt idlwave-completion-restore-window-configuration (@code{t})
1598Non-@code{nil} means restore window configuration after successful
1599completion.
1600@end defopt
797c8ebc 1601
5af23035
S
1602@defopt idlwave-highlight-help-links-in-completion (@code{t})
1603Non-@code{nil} means highlight completions for which system help is
1604available.
1605@end defopt
1606
1607@menu
1608* Case of Completed Words:: CaseOFcomPletedWords
1609* Object Method Completion and Class Ambiguity:: obj->Method, what?
12b86f0e 1610* Object Method Completion in the Shell::
5af23035
S
1611* Class and Keyword Inheritance:: obj->Method, _EXTRA=e
1612* Structure Tag Completion:: Completing state.Tag
1613@end menu
1614
1615@node Case of Completed Words, Object Method Completion and Class Ambiguity, Completion, Completion
1616@subsection Case of Completed Words
797c8ebc 1617@cindex Case of completed words
a8e833f3 1618@cindex Mixed case completion
12b86f0e
S
1619IDL is a case-insensitive language, so casing is a matter of style
1620only. IDLWAVE helps maintain a consistent casing style for completed
1621items. The case of the completed words is determined by what is
1622already in the buffer. As an exception, when the partial word being
1623completed is all lower case, the completion will be lower case as
1624well. If at least one character is upper case, the string will be
1625completed in upper case or mixed case, depending on the value of the
1626variable @code{idlwave-completion-case}. The default is to use upper
1627case for procedures, functions and keywords, and mixed case for object
1628class names and methods, similar to the conventions in the IDL
1629manuals. For instance, to enable mixed-case completion for routines
1630in addition to classes and methods, you need an entry such as
1631@code{(routine . preserve)} in that variable. To enable total control
1632over the case of completed items, independent of buffer context, set
1633@code{idlwave-completion-force-default-case} to non-@code{nil}.
797c8ebc
CD
1634
1635@defopt idlwave-completion-case
5af23035
S
1636Association list setting the case (UPPER/lower/Capitalized/MixedCase...)
1637of completed words.
797c8ebc
CD
1638@end defopt
1639
1640@defopt idlwave-completion-force-default-case (@code{nil})
5af23035
S
1641Non-@code{nil} means completion will always honor the settings in
1642@code{idlwave-completion-case}. When nil (the default), entirely lower
1643case strings will always be completed to lower case, no matter what the
1644settings in @code{idlwave-completion-case}.
797c8ebc
CD
1645@end defopt
1646
1647@defopt idlwave-complete-empty-string-as-lower-case (@code{nil})
5af23035 1648Non-@code{nil} means the empty string is considered lower case for
a8e833f3 1649completion.
797c8ebc
CD
1650@end defopt
1651
76959b77 1652@node Object Method Completion and Class Ambiguity, Object Method Completion in the Shell, Case of Completed Words, Completion
5af23035 1653@subsection Object Method Completion and Class Ambiguity
797c8ebc
CD
1654@cindex Object methods
1655@cindex Class ambiguity
a8e833f3 1656@cindex @code{self} object, default class
797c8ebc 1657An object method is not uniquely determined without the object's class.
5af23035
S
1658Since the class is almost always omitted in the calling source, IDLWAVE
1659considers all available methods in all classes as possible method name
1660completions. The combined list of keywords of the current method in
1661@emph{all} known classes which contain that method will be considered
1662for keyword completion. In the @file{*Completions*} buffer, the
1663matching classes will be shown next to each item (see option
a8e833f3 1664@code{idlwave-completion-show-classes}). As a special case, the class
5af23035 1665of an object called @samp{self} is always taken to be the class of the
aea44e56
CD
1666current routine. All classes it inherits from are considered as well
1667where appropriate.
797c8ebc 1668
a8e833f3
CD
1669@cindex Forcing class query.
1670@cindex Class query, forcing
797c8ebc
CD
1671You can also call @code{idlwave-complete} with a prefix arg: @kbd{C-u
1672M-@key{TAB}}. IDLWAVE will then prompt you for the class in order to
1673narrow down the number of possible completions. The variable
5af23035
S
1674@code{idlwave-query-class} can be configured to make such prompting the
1675default for all methods (not recommended), or selectively for very
1676common methods for which the number of completing keywords would be too
12b86f0e 1677large (e.g. @code{Init}).
76959b77
S
1678
1679@cindex Saving object class on @code{->}
1680@cindex @code{->}
1681After you have specified the class for a particular statement (e.g. when
1682completing the method), IDLWAVE can remember it for the rest of the
1683editing session. Subsequent completions in the same statement
1684(e.g. keywords) can then reuse this class information. This works by
1685placing a text property on the method invocation operator @samp{->},
1686after which the operator will be shown in a different face. This is not
1687enabled by default --- the variable @code{idlwave-store-inquired-class}
1688can be used to turn it on.
aea44e56 1689
ea442c62 1690@defopt idlwave-completion-show-classes (@code{1})
12b86f0e
S
1691Non-@code{nil} means show up to that many classes in
1692@file{*Completions*} buffer when completing object methods and
1693keywords.
797c8ebc
CD
1694@end defopt
1695
1696@defopt idlwave-completion-fontify-classes (@code{t})
5af23035 1697Non-@code{nil} means fontify the classes in completions buffer.
797c8ebc
CD
1698@end defopt
1699
1700@defopt idlwave-query-class (@code{nil})
a8e833f3 1701Association list governing query for object classes during completion.
797c8ebc
CD
1702@end defopt
1703
1704@defopt idlwave-store-inquired-class (@code{nil})
5af23035 1705Non-@code{nil} means store class of a method call as text property on
a8e833f3 1706@samp{->}.
797c8ebc
CD
1707@end defopt
1708
1709@defopt idlwave-class-arrow-face
1710Face to highlight object operator arrows @samp{->} which carry a class
a8e833f3 1711text property.
797c8ebc
CD
1712@end defopt
1713
76959b77
S
1714@node Object Method Completion in the Shell, Class and Keyword Inheritance, Object Method Completion and Class Ambiguity, Completion
1715@subsection Object Method Completion in the Shell
1716@cindex Method Completion in Shell
1717In the IDLWAVE Shell (@pxref{The IDLWAVE Shell}), objects on which
1718methods are being invoked have a special property: they must exist as
1719variables, and so their class can be determined (for instance, using the
1720@code{obj_class()} function). In the Shell, when attempting completion,
1721routine info, or online help within a method routine, a query is sent to
1722determine the class of the object. If this query is successful, the
1723class found will be used to select appropriate completions, routine
1724info, or help. If unsuccessful, information from all known classes will
1725be used (as in the buffer). Setting the variable
1726@code{idlwave-store-inquired-class} can eliminate unnecessary repetitive
1727queries for the object's class, and speed up completion.
1728
1729@node Class and Keyword Inheritance, Structure Tag Completion, Object Method Completion in the Shell, Completion
5af23035
S
1730@subsection Class and Keyword Inheritance
1731@cindex Inheritance, class
1732@cindex Keyword inheritance
1733@cindex Inheritance, keyword
1734
1735Class inheritance affects which methods are called in IDL. An object of
1736a class which inherits methods from one or more superclasses can
1737override that method by defining its own method of the same name, extend
1738the method by calling the method(s) of its superclass(es) in its
1739version, or inherit the method directly by making no modifications.
1740IDLWAVE examines class definitions during completion and routine
1741information display, and records all inheritance information it finds.
1742This information is displayed if appropriate with the calling sequence
1743for methods (@pxref{Routine Info}), as long as variable
1744@code{idlwave-support-inheritance} is non-@code{nil}.
1745
1746In many class methods, @emph{keyword} inheritance (@code{_EXTRA} and
1747@code{_REF_EXTRA}) is used hand-in-hand with class inheritance and
1748method overriding. E.g., in a @code{SetProperty} method, this technique
1749allows a single call @code{obj->SetProperty} to set properties up the
1750entire class inheritance chain. This is often referred to as
1751@emph{chaining}, and is characterized by chained method calls like
1752@w{@code{self->MySuperClass::SetProperty,_EXTRA=e}}.
1753
12b86f0e 1754IDLWAVE can accomodate this special synergy between class and keyword
76959b77 1755inheritance: if @code{_EXTRA} or @code{_REF_EXTRA} is detected among a
12b86f0e
S
1756method's keyword parameters, all keywords of superclass versions of
1757the method being considered can be included in completion. There is
1758of course no guarantee that this type of keyword chaining actually
1759occurrs, but for some methods it's a very convenient assumption. The
1760variable @code{idlwave-keyword-class-inheritance} can be used to
1761configure which methods have keyword inheritance treated in this
1762simple, class-driven way. By default, only @code{Init} and
1763@code{(Get|Set)Property} are. The completion buffer will label
1764keywords based on their originating class.
5af23035
S
1765
1766@defopt idlwave-support-inheritance (@code{t})
1767Non-@code{nil} means consider inheritance during completion, online help etc.
1768@end defopt
1769
12b86f0e 1770@defopt idlwave-keyword-class-inheritance
5af23035
S
1771A list of regular expressions to match methods for which simple
1772class-driven keyword inheritance will be used for Completion.
1773@end defopt
a8e833f3 1774
5af23035
S
1775@node Structure Tag Completion, , Class and Keyword Inheritance, Completion
1776@subsection Structure Tag Completion
1777@cindex Completion, structure tag
1778@cindex Structure tag completion
1779
1780In many programs, especially those involving widgets, large structures
1781(e.g. the @samp{state} structure) are used to communicate among
1782routines. It is very convenient to be able to complete structure tags,
76959b77
S
1783in the same way as for instance variables (tags) of the @samp{self}
1784object (@pxref{Object Method Completion and Class Ambiguity}). Add-in
1785code for structure tag completion is available in the form of a loadable
5af23035
S
1786completion module: @file{idlw-complete-structtag.el}. Tag completion in
1787structures is highly ambiguous (much more so than @samp{self}
76959b77 1788completion), so @code{idlw-complete-structtag} makes an unusual and very
5af23035 1789specific assumption: the exact same variable name is used to refer to
76959b77
S
1790the structure in all parts of the program. This is entirely unenforced
1791by the IDL language, but is a typical convention. If you consistently
5af23035
S
1792refer to the same structure with the same variable name
1793(e.g. @samp{state}), structure tags which are read from its definition
76959b77 1794in the same file can be used for completion.
5af23035
S
1795
1796Structure tag completion is not enabled by default. To enable it,
1797simply add the following to your @file{.emacs}:
1798
1799@lisp
12b86f0e 1800 (add-hook 'idlwave-load-hook
5af23035
S
1801 (lambda () (require 'idlw-complete-structtag)))
1802@end lisp
1803
76959b77
S
1804Once enabled, you'll also be able to access online help on the structure
1805tags, using the usual methods (@pxref{Online Help}).
1806
5af23035 1807@node Routine Source, Resolving Routines, Completion, The IDLWAVE Major Mode
a8e833f3
CD
1808@section Routine Source
1809@cindex Routine source file
1810@cindex Module source file
1811@cindex Source file, of a routine
1812@kindex C-c C-v
5af23035 1813In addition to clicking on a @i{Source:} line in the routine info
76959b77
S
1814window, there is another way to quickly visit the source file of a
1815routine. The command @kbd{C-c C-v} (@code{idlwave-find-module}) asks
1816for a module name, offering the same default as
1817@code{idlwave-routine-info} would have used, taken from nearby buffer
1818contents. In the minibuffer, specify a complete routine name (including
1819any class part). IDLWAVE will display the source file in another
12b86f0e
S
1820window, positioned at the routine in question. You can also visit a
1821routine in the current buffer, with completion, by using a single prefix
1822(@kbd{C-u C-c C-v}).
a8e833f3
CD
1823
1824@cindex Buffers, killing
1825@cindex Killing autoloaded buffers
1826Since getting the source of a routine into a buffer is so easy with
1827IDLWAVE, too many buffers visiting different IDL source files are
1828sometimes created. The special command @kbd{C-c C-k}
76959b77
S
1829(@code{idlwave-kill-autoloaded-buffers}) can be used to easily remove
1830these buffers.
a8e833f3
CD
1831
1832@node Resolving Routines, Code Templates, Routine Source, The IDLWAVE Major Mode
1833@section Resolving Routines
1834@cindex @code{RESOLVE_ROUTINE}
1835@cindex Compiling library modules
1836@cindex Routines, resolving
1837
1838The key sequence @kbd{C-c =} calls the command @code{idlwave-resolve}
1839and sends the line @samp{RESOLVE_ROUTINE, '@var{routine_name}'} to IDL
1840in order to resolve (compile) it. The default routine to be resolved is
1841taken from context, but you get a chance to edit it.
1842
1843@code{idlwave-resolve} is one way to get a library module within reach
1844of IDLWAVE's routine info collecting functions. A better way is to
12b86f0e
S
1845keep routine information available in catalogs (@pxref{Catalogs}).
1846Routine info on modules will then be available without the need to
1847compile the modules first, and even without a running shell.
a8e833f3 1848
5af23035 1849@xref{Sources of Routine Info}, for more information on the ways IDLWAVE
a8e833f3
CD
1850collects data about routines, and how to update this information.
1851
5af23035 1852@node Code Templates, Abbreviations, Resolving Routines, The IDLWAVE Major Mode
797c8ebc
CD
1853@section Code Templates
1854@cindex Code templates
797c8ebc
CD
1855@cindex Templates
1856
1857IDLWAVE can insert IDL code templates into the buffer. For a few
32d4cddb 1858templates, this is done with direct key bindings:
797c8ebc
CD
1859
1860@multitable @columnfractions .15 .85
1861@item @kbd{C-c C-c}
1862@tab @code{CASE} statement template
1863@item @kbd{C-c C-f}
1864@tab @code{FOR} loop template
1865@item @kbd{C-c C-r}
1866@tab @code{REPEAT} loop template
1867@item @kbd{C-c C-w}
1868@tab @code{WHILE} loop template
1869@end multitable
1870
5af23035
S
1871All code templates are also available as abbreviations
1872(@pxref{Abbreviations}).
1873
1874@node Abbreviations, Actions, Code Templates, The IDLWAVE Major Mode
1875@section Abbreviations
1876@cindex Abbreviations
1877
1878Special abbreviations exist to enable rapid entry of commonly used
1879commands. Emacs abbreviations are expanded by typing text into the
1880buffer and pressing @key{SPC} or @key{RET}. The special abbreviations
1881used to insert code templates all start with a @samp{\} (the backslash),
1882or, optionally, any other character set in
1883@code{idlwave-abbrev-start-char}. IDLWAVE ensures that abbreviations are
1884only expanded where they should be (i.e., not in a string or comment),
1885and permits the point to be moved after an abbreviation expansion ---
1886very useful for positioning the mark inside of parentheses, etc.
1887
1888Special abbreviations are pre-defined for code templates and other
1889useful items. To visit the full list of abbreviations, use @kbd{M-x
797c8ebc
CD
1890idlwave-list-abbrevs}.
1891
5af23035
S
1892Template abbreviations:
1893
797c8ebc
CD
1894@multitable @columnfractions .15 .85
1895@item @code{\pr}
1896@tab @code{PROCEDURE} template
1897@item @code{\fu}
1898@tab @code{FUNCTION} template
1899@item @code{\c}
1900@tab @code{CASE} statement template
1901@item @code{\f}
1902@tab @code{FOR} loop template
1903@item @code{\r}
1904@tab @code{REPEAT} loop template
1905@item @code{\w}
1906@tab @code{WHILE} loop template
1907@item @code{\i}
1908@tab @code{IF} statement template
1909@item @code{\elif}
1910@tab @code{IF-ELSE} statement template
5af23035
S
1911@end multitable
1912
1913String abbreviations:
1914
1915@multitable @columnfractions .15 .85
1916@item @code{\ap}
1917@tab @code{arg_present()}
797c8ebc 1918@item @code{\b}
5af23035
S
1919@tab @code{begin}
1920@item @code{\cb}
1921@tab @code{byte()}
1922@item @code{\cc}
1923@tab @code{complex()}
1924@item @code{\cd}
1925@tab @code{double()}
1926@item @code{\cf}
1927@tab @code{float()}
1928@item @code{\cl}
1929@tab @code{long()}
1930@item @code{\co}
1931@tab @code{common}
1932@item @code{\cs}
1933@tab @code{string()}
1934@item @code{\cx}
1935@tab @code{fix()}
1936@item @code{\e}
1937@tab @code{else}
1938@item @code{\ec}
1939@tab @code{endcase}
1940@item @code{\ee}
1941@tab @code{endelse}
1942@item @code{\ef}
1943@tab @code{endfor}
1944@item @code{\ei}
1945@tab @code{endif else if}
1946@item @code{\el}
1947@tab @code{endif else}
1948@item @code{\en}
1949@tab @code{endif}
1950@item @code{\er}
1951@tab @code{endrep}
1952@item @code{\es}
1953@tab @code{endswitch}
1954@item @code{\ew}
1955@tab @code{endwhile}
1956@item @code{\g}
1957@tab @code{goto,}
1958@item @code{\h}
1959@tab @code{help,}
1960@item @code{\ik}
1961@tab @code{if keyword_set() then}
1962@item @code{\iap}
1963@tab @code{if arg_present() then}
1964@item @code{\ine}
1965@tab @code{if n_elements() eq 0 then}
1966@item @code{\inn}
1967@tab @code{if n_elements() ne 0 then}
1968@item @code{\k}
1969@tab @code{keyword_set()}
1970@item @code{\n}
1971@tab @code{n_elements()}
1972@item @code{\np}
1973@tab @code{n_params()}
1974@item @code{\oi}
1975@tab @code{on_ioerror,}
1976@item @code{\or}
1977@tab @code{openr,}
1978@item @code{\ou}
1979@tab @code{openu,}
1980@item @code{\ow}
1981@tab @code{openw,}
1982@item @code{\p}
1983@tab @code{print,}
1984@item @code{\pt}
1985@tab @code{plot,}
1986@item @code{\re}
1987@tab @code{read,}
1988@item @code{\rf}
1989@tab @code{readf,}
1990@item @code{\rt}
1991@tab @code{return}
1992@item @code{\ru}
1993@tab @code{readu,}
1994@item @code{\s}
1995@tab @code{size()}
1996@item @code{\sc}
1997@tab @code{strcompress()}
1998@item @code{\sl}
1999@tab @code{strlowcase()}
2000@item @code{\sm}
2001@tab @code{strmid()}
2002@item @code{\sn}
2003@tab @code{strlen()}
2004@item @code{\sp}
2005@tab @code{strpos()}
2006@item @code{\sr}
2007@tab @code{strtrim()}
2008@item @code{\st}
2009@tab @code{strput()}
2010@item @code{\su}
2011@tab @code{strupcase()}
2012@item @code{\t}
2013@tab @code{then}
2014@item @code{\u}
2015@tab @code{until}
2016@item @code{\wc}
2017@tab @code{widget_control,}
2018@item @code{\wi}
2019@tab @code{widget_info()}
2020@item @code{\wu}
2021@tab @code{writeu,}
797c8ebc 2022@end multitable
ea442c62 2023
5af23035 2024@noindent You can easily add your own abbreviations or override existing
32d4cddb 2025abbrevs with @code{define-abbrev} in your mode hook, using the
5af23035
S
2026convenience function @code{idlwave-define-abbrev}:
2027
2028@lisp
2029(add-hook 'idlwave-mode-hook
2030 (lambda ()
2031 (idlwave-define-abbrev "wb" "widget_base()"
76959b77
S
2032 (idlwave-keyword-abbrev 1))
2033 (idlwave-define-abbrev "ine" "IF N_Elements() EQ 0 THEN"
2034 (idlwave-keyword-abbrev 11))))
5af23035
S
2035@end lisp
2036
2037Notice how the abbreviation (here @emph{wb}) and its expansion
76959b77 2038(@emph{widget_base()}) are given as arguments, and the single argument to
5af23035
S
2039@code{idlwave-keyword-abbrev} (here @emph{1}) specifies how far back to
2040move the point upon expansion (in this example, to put it between the
2041parentheses).
2042
2043The abbreviations are expanded in upper or lower case, depending upon
76959b77
S
2044the variables @code{idlwave-abbrev-change-case} and, for reserved word
2045templates, @code{idlwave-reserved-word-upcase} (@pxref{Case Changes}).
ea442c62 2046
aea44e56 2047@defopt idlwave-abbrev-start-char (@code{"\"})
76959b77
S
2048A single character string used to start abbreviations in abbrev mode.
2049Beware of common characters which might naturally occur in sequence with
2050abbreviation strings.
797c8ebc
CD
2051@end defopt
2052
2053@defopt idlwave-abbrev-move (@code{t})
2054Non-@code{nil} means the abbrev hook can move point, e.g. to end up
76959b77 2055between the parentheses of a function call.
797c8ebc
CD
2056@end defopt
2057
5af23035 2058@node Actions, Doc Header, Abbreviations, The IDLWAVE Major Mode
797c8ebc
CD
2059@section Actions
2060@cindex Actions
2061@cindex Coding standards, enforcing
2062
76959b77
S
2063@emph{Actions} are special formatting commands which are executed
2064automatically while you write code in order to check the structure of
2065the program or to enforce coding standards. Most actions which have
2066been implemented in IDLWAVE are turned off by default, assuming that the
2067average user wants her code the way she writes it. But if you are a
2068lazy typist and want your code to adhere to certain standards, actions
2069can be helpful.
797c8ebc 2070
5af23035 2071Actions can be applied in three ways:
a8e833f3 2072
797c8ebc
CD
2073@itemize @bullet
2074@item
2075Some actions are applied directly while typing. For example, pressing
2076@samp{=} can run a check to make sure that this operator is surrounded
2077by spaces and insert these spaces if necessary. Pressing @key{SPC}
2078after a reserved word can call a command to change the word to upper
a8e833f3 2079case.
797c8ebc
CD
2080@item
2081When a line is re-indented with @key{TAB}, actions can be applied to the
2082entire line. To enable this, the variable @code{idlwave-do-actions}
a8e833f3 2083must be non-@code{nil}.
797c8ebc
CD
2084@item
2085@cindex Foreign code, adapting
2086@cindex Actions, applied to foreign code
5af23035
S
2087Actions can also be applied to a larger piece of code, e.g. to convert
2088foreign code to your own style. To do this, mark the relevant part of
2089the code and execute @kbd{M-x expand-region-abbrevs}. Useful marking
2090commands are @kbd{C-x h} (the entire file) or @kbd{C-M-h} (the current
2091subprogram). @xref{Code Indentation}, for information how to adjust the
2092indentation of the code.
797c8ebc
CD
2093@end itemize
2094
2095@defopt idlwave-do-actions (@code{nil})
12b86f0e
S
2096Non-@code{nil} means performs actions when indenting. Individual action
2097settings are described below and set separately.
797c8ebc
CD
2098@end defopt
2099
2100@menu
76959b77 2101* Block Boundary Check:: Is the END statement correct?
797c8ebc
CD
2102* Padding Operators:: Enforcing space around `=' etc
2103* Case Changes:: Enforcing upper case keywords
2104@end menu
2105
2106@node Block Boundary Check, Padding Operators, Actions, Actions
2107@subsection Block Boundary Check
2108@cindex Block boundary check
2109@cindex @code{END} type checking
2110@cindex @code{END}, automatic insertion
a8e833f3 2111@cindex @code{END}, expanding
797c8ebc
CD
2112@cindex Block, closing
2113@cindex Closing a block
2114
2115Whenever you type an @code{END} statement, IDLWAVE finds the
2116corresponding start of the block and the cursor blinks back to that
2117location for a second. If you have typed a specific @code{END}, like
5af23035 2118@code{ENDIF} or @code{ENDCASE}, you get a warning if that terminator
a8e833f3 2119does not match the type of block it terminates.
797c8ebc
CD
2120
2121Set the variable @code{idlwave-expand-generic-end} in order to have all
5af23035
S
2122generic @code{END} statements automatically expanded to the appropriate
2123type. You can also type @kbd{C-c ]} to close the current block by
2124inserting the appropriate @code{END} statement.
797c8ebc
CD
2125
2126@defopt idlwave-show-block (@code{t})
2127Non-@code{nil} means point blinks to block beginning for
a8e833f3 2128@code{idlwave-show-begin}.
797c8ebc
CD
2129@end defopt
2130
aea44e56 2131@defopt idlwave-expand-generic-end (@code{t})
797c8ebc
CD
2132Non-@code{nil} means expand generic END to ENDIF/ENDELSE/ENDWHILE etc.
2133@end defopt
2134
a8e833f3 2135@defopt idlwave-reindent-end (@code{t})
5af23035 2136Non-@code{nil} means re-indent line after END was typed.
a8e833f3
CD
2137@end defopt
2138
797c8ebc
CD
2139@node Padding Operators, Case Changes, Block Boundary Check, Actions
2140@subsection Padding Operators
2141@cindex Padding operators with spaces
2142@cindex Operators, padding with spaces
a8e833f3 2143@cindex Space, around operators
797c8ebc
CD
2144
2145Some operators can be automatically surrounded by spaces. This can
5af23035
S
2146happen when the operator is typed, or later when the line is indented.
2147IDLWAVE can pad the operators @samp{&}, @samp{<}, @samp{>}, @samp{,},
2148@samp{=}, and @samp{->}, but this feature is turned off by default. If
2149you want to turn it on, customize the variables
2150@code{idlwave-surround-by-blank} and @code{idlwave-do-actions}. You can
2151also define similar actions for other operators by using the function
2152@code{idlwave-action-and-binding} in the mode hook. For example, to
2153enforce space padding of the @samp{+} and @samp{*} operators, try this
2154in @file{.emacs}
797c8ebc
CD
2155
2156@lisp
2157(add-hook 'idlwave-mode-hook
2158 (lambda ()
2159 (setq idlwave-surround-by-blank t) ; Turn this type of actions on
2160 (idlwave-action-and-binding "*" '(idlwave-surround 1 1))
2161 (idlwave-action-and-binding "+" '(idlwave-surround 1 1))))
2162@end lisp
2163
2164@defopt idlwave-surround-by-blank (@code{nil})
5af23035 2165Non-@code{nil} means enable @code{idlwave-surround}. If non-@code{nil},
ea442c62 2166@samp{=}, @samp{<}, @samp{>}, @samp{&}, @samp{,}, @samp{->} are
a8e833f3 2167surrounded with spaces by @code{idlwave-surround}.
797c8ebc
CD
2168@end defopt
2169
2170@defopt idlwave-pad-keyword (@code{t})
a8e833f3 2171Non-@code{nil} means pad @samp{=} for keywords like assignments.
797c8ebc
CD
2172@end defopt
2173
2174@node Case Changes, , Padding Operators, Actions
2175@subsection Case Changes
2176@cindex Case changes
a8e833f3
CD
2177@cindex Upcase, enforcing for reserved words
2178@cindex Downcase, enforcing for reserved words
797c8ebc
CD
2179
2180Actions can be used to change the case of reserved words or expanded
2181abbreviations by customizing the variables
2182@code{idlwave-abbrev-change-case} and
2183@code{idlwave-reserved-word-upcase}. If you want to change the case of
2184additional words automatically, put something like the following into
a8e833f3 2185your @file{.emacs} file:
797c8ebc
CD
2186
2187@lisp
2188(add-hook 'idlwave-mode-hook
2189 (lambda ()
2190 ;; Capitalize system vars
2191 (idlwave-action-and-binding idlwave-sysvar '(capitalize-word 1) t)
2192 ;; Capitalize procedure name
2193 (idlwave-action-and-binding "\\<\\(pro\\|function\\)\\>[ \t]*\\<"
2194 '(capitalize-word 1) t)
2195 ;; Capitalize common block name
12b86f0e 2196 (idlwave-action-and-binding "\\<common\\>[ \t]+\\<"
797c8ebc
CD
2197 '(capitalize-word 1) t)))
2198@end lisp
2199
2200For more information, see the documentation string for the function
5af23035
S
2201@code{idlwave-action-and-binding}. For information on controlling the
2202case of routines, keywords, classes, and methods as they are completed, see
2203@ref{Completion}.
797c8ebc
CD
2204
2205@defopt idlwave-abbrev-change-case (@code{nil})
2206Non-@code{nil} means all abbrevs will be forced to either upper or lower
2cbd16b9 2207case. Valid values are @code{nil}, @code{t}, and @code{down}.
797c8ebc
CD
2208@end defopt
2209
2210@defopt idlwave-reserved-word-upcase (@code{nil})
5af23035 2211Non-@code{nil} means reserved words will be made upper case via abbrev
797c8ebc
CD
2212expansion.
2213@end defopt
2214
2215
2216@node Doc Header, Motion Commands, Actions, The IDLWAVE Major Mode
2217@section Documentation Header
2218@cindex Documentation header
a8e833f3 2219@cindex DocLib header
797c8ebc
CD
2220@cindex Modification timestamp
2221@cindex Header, for file documentation
2222@cindex Timestamp, in doc header.
12b86f0e 2223@cindex Changelog, in doc header.
797c8ebc 2224
a8e833f3
CD
2225@kindex C-c C-h
2226@kindex C-c C-m
797c8ebc 2227The command @kbd{C-c C-h} inserts a standard routine header into the
5af23035
S
2228buffer, with the usual fields for documentation (a different header can
2229be specified with @code{idlwave-file-header}). One of the keywords is
797c8ebc
CD
2230@samp{MODIFICATION HISTORY} under which the changes to a routine can be
2231recorded. The command @kbd{C-c C-m} jumps to the @samp{MODIFICATION
5af23035
S
2232HISTORY} of the current routine or file and inserts the user name with a
2233timestamp.
797c8ebc
CD
2234
2235@defopt idlwave-file-header
2236The doc-header template or a path to a file containing it.
2237@end defopt
2238
5af23035
S
2239@defopt idlwave-header-to-beginning-of-file (@code{nil})
2240Non-@code{nil} means the documentation header will always be at start
2241of file.
2242@end defopt
2243
797c8ebc
CD
2244@defopt idlwave-timestamp-hook
2245The hook function used to update the timestamp of a function.
2246@end defopt
2247
2248@defopt idlwave-doc-modifications-keyword
2249The modifications keyword to use with the log documentation commands.
2250@end defopt
2251
2252@defopt idlwave-doclib-start
2253Regexp matching the start of a document library header.
2254@end defopt
2255
2256@defopt idlwave-doclib-end
2257Regexp matching the start of a document library header.
2258@end defopt
2259
2260@node Motion Commands, Misc Options, Doc Header, The IDLWAVE Major Mode
2261@section Motion Commands
2262@cindex Motion commands
2263@cindex Program structure, moving through
2264@cindex Code structure, moving through
a8e833f3
CD
2265@cindex @file{Func-menu}, XEmacs package
2266@cindex @file{Imenu}, Emacs package
2267@cindex Function definitions, jumping to
2268@cindex Procedure definitions, jumping to
2269
2270IDLWAVE supports both @file{Imenu} and @file{Func-menu}, two packages
2271which make it easy to jump to the definitions of functions and
5af23035
S
2272procedures in the current file with a pop-up selection. To bind
2273@file{Imenu} to a mouse-press, use in your @file{.emacs}:
2274
2275@lisp
2276(define-key global-map [S-down-mouse-3] 'imenu)
2277@end lisp
2278
2279@cindex @file{Speedbar}, Emacs package
797c8ebc 2280
5af23035
S
2281In addition, @file{Speedbar} support allows convenient navigation of a
2282source tree of IDL routine files, quickly stepping to routine
2283definitions. See @code{Tools->Display Speedbar}.
2284
2285Several commands allow you to move quickly through the structure of an
2286IDL program:
797c8ebc
CD
2287
2288@multitable @columnfractions .15 .85
2289@item @kbd{C-M-a}
2290@tab Beginning of subprogram
2291@item @kbd{C-M-e}
2292@tab End of subprogram
2293@item @kbd{C-c @{}
2294@tab Beginning of block (stay inside the block)
2295@item @kbd{C-c @}}
2296@tab End of block (stay inside the block)
718fb8a1 2297@item @kbd{C-M-n}
797c8ebc 2298@tab Forward block (on same level)
718fb8a1 2299@item @kbd{C-M-p}
797c8ebc 2300@tab Backward block (on same level)
718fb8a1 2301@item @kbd{C-M-d}
797c8ebc 2302@tab Down block (enters a block)
718fb8a1 2303@item @kbd{C-M-u}
797c8ebc
CD
2304@tab Backward up block (leaves a block)
2305@item @kbd{C-c C-n}
2306@tab Next Statement
2307@end multitable
2308
2309
2310@node Misc Options, , Motion Commands, The IDLWAVE Major Mode
2311@section Miscellaneous Options
a8e833f3 2312@cindex Hooks
797c8ebc
CD
2313
2314@defopt idlwave-help-application
2315The external application providing reference help for programming.
2316@end defopt
2317
2318@defopt idlwave-startup-message (@code{t})
2319Non-@code{nil} means display a startup message when @code{idlwave-mode}'
2320is first called.
2321@end defopt
2322
2323@defopt idlwave-mode-hook
2324Normal hook. Executed when a buffer is put into @code{idlwave-mode}.
2325@end defopt
2326
2327@defopt idlwave-load-hook
2328Normal hook. Executed when @file{idlwave.el} is loaded.
2329@end defopt
2330
2331
2332
215a5cd0 2333@node The IDLWAVE Shell, Acknowledgements, The IDLWAVE Major Mode, Top
797c8ebc
CD
2334@chapter The IDLWAVE Shell
2335@cindex IDLWAVE shell
2336@cindex Major mode, @code{idlwave-shell-mode}
a8e833f3
CD
2337@cindex IDL, as Emacs subprocess
2338@cindex Subprocess of Emacs, IDL
2339@cindex Comint, Emacs package
2340@cindex Windows
2341@cindex MacOS
5af23035
S
2342
2343The IDLWAVE shell is an Emacs major mode which permits running the IDL
2344program as an inferior process of Emacs, and works closely with the
2345IDLWAVE major mode in buffers. It can be used to work with IDL
2346interactively, to compile and run IDL programs in Emacs buffers and to
12b86f0e 2347debug these programs. The IDLWAVE shell is built on @file{comint}, an
5af23035 2348Emacs packages which handles the communication with the IDL program.
12b86f0e
S
2349Unfortunately IDL for Windows does not have command-prompt versions
2350and thus do not allow the interaction with Emacs@footnote{Please
2351inform the maintainer if you come up with a way to make the IDLWAVE
2352shell work on these systems.} --- so the IDLWAVE shell currently only
2353works under Unix and MacOSX.
797c8ebc
CD
2354
2355@menu
2356* Starting the Shell:: How to launch IDL as a subprocess
2357* Using the Shell:: Interactively working with the Shell
12b86f0e
S
2358* Commands Sent to the Shell::
2359* Debugging IDL Programs::
2360* Examining Variables::
2361* Custom Expression Examination::
797c8ebc
CD
2362@end menu
2363
2364@node Starting the Shell, Using the Shell, The IDLWAVE Shell, The IDLWAVE Shell
2365@section Starting the Shell
2366@cindex Starting the shell
2367@cindex Shell, starting
2368@cindex Dedicated frame, for shell buffer
2369@cindex Frame, for shell buffer
a8e833f3 2370@cindex Subprocess of Emacs, IDL
797c8ebc 2371
a8e833f3 2372@kindex C-c C-s
797c8ebc
CD
2373The IDLWAVE shell can be started with the command @kbd{M-x
2374idlwave-shell}. In @code{idlwave-mode} the function is bound to
2375@kbd{C-c C-s}. It creates a buffer @file{*idl*} which is used to
12b86f0e
S
2376interact with the shell. If the shell is already running, @kbd{C-c
2377C-s} will simply switch to the shell buffer. The command @kbd{C-c
2378C-l} (@code{idlwave-shell-recenter-shell-window}) displays the shell
2379window without selecting it. The shell can also be started
2380automatically when another command tries to send a command to it. To
2381enable auto start, set the variable
2382@code{idlwave-shell-automatic-start} to @code{t}.
797c8ebc
CD
2383
2384In order to create a separate frame for the IDLWAVE shell buffer, call
2385@code{idlwave-shell} with a prefix argument: @kbd{C-u C-c C-s} or
2386@kbd{C-u C-c C-l}. If you always want a dedicated frame for the shell
2387window, configure the variable
12b86f0e 2388@code{idlwave-shell-use-dedicated-frame}.
797c8ebc 2389
12b86f0e
S
2390To launch a quick IDLWAVE shell directly from a shell prompt without
2391an IDLWAVE buffer (e.g., as a replacement for running inside an
2392xterm), define a system alias with the following content:
5af23035
S
2393
2394@example
2395emacs -geometry 80x32 -eval "(idlwave-shell 'quick)"
2396@end example
797c8ebc 2397
5af23035
S
2398Replace the @samp{-geometry 80x32} option with @samp{-nw} if you prefer
2399the Emacs process to run directly inside the terminal window.
2400
12b86f0e
S
2401@cindex ENVI
2402@cindex IDL> Prompt
2403
2404To use IDLWAVE with ENVI or other custom packages which change the
2405@samp{IDL> } prompt, you must change the
2406@code{idlwave-shell-prompt-pattern}, which defaults to @samp{"^ ?IDL>
2407"}. Normally, you can just replace the @samp{IDL} in this expression
2408with the prompt you see. A suitable pattern which matches the prompt
2409for both ENVI and IDL simultaneously is @samp{"^ ?\\(ENVI\\|IDL\\)> "}.
2410
5af23035 2411@defopt idlwave-shell-explicit-file-name (@file{idl})
797c8ebc
CD
2412This is the command to run IDL.
2413@end defopt
2414
2415@defopt idlwave-shell-command-line-options
2416A list of command line options for calling the IDL program.
2417@end defopt
2418
2419@defopt idlwave-shell-prompt-pattern
2420Regexp to match IDL prompt at beginning of a line.
2421@end defopt
2422
2423@defopt idlwave-shell-process-name
2424Name to be associated with the IDL process.
2425@end defopt
2426
5af23035 2427@defopt idlwave-shell-automatic-start (@code{nil})
797c8ebc
CD
2428Non-@code{nil} means attempt to invoke idlwave-shell if not already
2429running.
2430@end defopt
2431
2432@defopt idlwave-shell-initial-commands
2433Initial commands, separated by newlines, to send to IDL.
2434@end defopt
2435
5af23035
S
2436@defopt idlwave-shell-save-command-history (@code{t})
2437Non-@code{nil} means preserve command history between sessions.
2438@end defopt
2439
12b86f0e 2440@defopt idlwave-shell-command-history-file (@file{~/.idlwave/.idlwhist})
5af23035 2441The file in which the command history of the idlwave shell is saved.
12b86f0e
S
2442Unless it's an absolute path, it goes in
2443@code{idlwave-config-directory}.
5af23035 2444@end defopt
12b86f0e 2445
797c8ebc 2446@defopt idlwave-shell-use-dedicated-frame (@code{nil})
12b86f0e 2447Non-@code{nil} means IDLWAVE should use a special frame to display the
177c0ea7 2448shell buffer.
797c8ebc
CD
2449@end defopt
2450
2451@defopt idlwave-shell-frame-parameters
2452The frame parameters for a dedicated idlwave-shell frame.
2453@end defopt
2454
5af23035
S
2455@defopt idlwave-shell-raise-frame (@code{t})
2456Non-@code{nil} means `idlwave-shell' raises the frame showing the shell
2457window.
2458@end defopt
2459
797c8ebc 2460@defopt idlwave-shell-temp-pro-prefix
a8e833f3 2461The prefix for temporary IDL files used when compiling regions.
797c8ebc
CD
2462@end defopt
2463
a8e833f3 2464@cindex Hooks
797c8ebc
CD
2465@defopt idlwave-shell-mode-hook
2466Hook for customizing @code{idlwave-shell-mode}.
2467@end defopt
2468
76959b77 2469@node Using the Shell, Commands Sent to the Shell, Starting the Shell, The IDLWAVE Shell
797c8ebc 2470@section Using the Shell
a8e833f3 2471@cindex Comint
797c8ebc
CD
2472@cindex Shell, basic commands
2473
2474The IDLWAVE shell works in the same fashion as other shell modes in
2475Emacs. It provides command history, command line editing and job
aea44e56
CD
2476control. The @key{UP} and @key{DOWN} arrows cycle through the input
2477history just like in an X terminal@footnote{This is different from
2478normal Emacs/Comint behavior, but more like an xterm. If you prefer the
2479default comint functionality, check the variable
5af23035
S
2480@code{idlwave-shell-arrows-do-history}.}. The history is preserved
2481between emacs and IDL sessions. Here is a list of commonly used
2482commands:
797c8ebc
CD
2483
2484@multitable @columnfractions .12 .88
76959b77 2485@item @key{UP}, @key{M-p}
aea44e56 2486@tab Cycle backwards in input history
76959b77 2487@item @key{DOWN}, @key{M-n}
aea44e56 2488@tab Cycle forwards in input history
797c8ebc
CD
2489@item @kbd{M-r}
2490@tab Previous input matching a regexp
2491@item @kbd{M-s}
76959b77 2492@tab Next input matching a regexp
797c8ebc
CD
2493@item @kbd{return}
2494@tab Send input or copy line to current prompt
2495@item @kbd{C-c C-a}
2496@tab Beginning of line; skip prompt
2497@item @kbd{C-c C-u}
2498@tab Kill input to beginning of line
2499@item @kbd{C-c C-w}
2500@tab Kill word before cursor
2501@item @kbd{C-c C-c}
2502@tab Send ^C
2503@item @kbd{C-c C-z}
2504@tab Send ^Z
2505@item @kbd{C-c C-\}
2506@tab Send ^\
2507@item @kbd{C-c C-o}
2508@tab Delete last batch of process output
2509@item @kbd{C-c C-r}
2510@tab Show last batch of process output
2511@item @kbd{C-c C-l}
2512@tab List input history
2513@end multitable
2514
2515In addition to these standard @file{comint} commands,
76959b77
S
2516@code{idlwave-shell-mode} provides many of the same commands which
2517simplify writing IDL code available in IDLWAVE buffers. This includes
2518abbreviations, online help, and completion. See @ref{Routine Info} and
2519@ref{Online Help} and @ref{Completion} for more information on these
2520commands.
a8e833f3
CD
2521
2522@cindex Completion, in the shell
2523@cindex Routine info, in the shell
2524@cindex Online Help, in the shell
797c8ebc
CD
2525@multitable @columnfractions .12 .88
2526@item @kbd{@key{TAB}}
5af23035
S
2527@tab Completion of file names (between quotes and after executive
2528commands @samp{.run} and @samp{.compile}), routine names, class names,
2529keywords, system variables, system variable tags etc.
2530(@code{idlwave-shell-complete}).
797c8ebc
CD
2531@item @kbd{M-@key{TAB}}
2532@tab Same as @key{TAB}
2533@item @kbd{C-c ?}
2534@tab Routine Info display (@code{idlwave-routine-info})
2535@item @kbd{M-?}
2536@tab IDL online help on routine (@code{idlwave-routine-info-from-idlhelp})
2537@item @kbd{C-c C-i}
2538@tab Update routine info from buffers and shell
2539(@code{idlwave-update-routine-info})
2540@item @kbd{C-c C-v}
2541@tab Find the source file of a routine (@code{idlwave-find-module})
2542@item @kbd{C-c =}
2543@tab Compile a library routine (@code{idlwave-resolve})
2544@end multitable
2545
aea44e56
CD
2546@defopt idlwave-shell-arrows-do-history (@code{t})
2547Non-@code{nil} means @key{UP} and @key{DOWN} arrows move through command
2548history like xterm.
2549@end defopt
2550
5af23035
S
2551@defopt idlwave-shell-comint-settings
2552Alist of special settings for the comint variables in the IDLWAVE Shell.
2553@end defopt
2554
797c8ebc
CD
2555@defopt idlwave-shell-file-name-chars
2556The characters allowed in file names, as a string. Used for file name
a8e833f3
CD
2557completion.
2558@end defopt
2559
aea44e56
CD
2560@defopt idlwave-shell-graphics-window-size
2561Size of IDL graphics windows popped up by special IDLWAVE command.
2562@end defopt
2563
a8e833f3
CD
2564@cindex Input mode
2565@cindex Character input mode (Shell)
2566@cindex Line input mode (Shell)
2567@cindex Magic spells, for input mode
2568@cindex Spells, magic
2569IDLWAVE works in line input mode: You compose a full command line, using
2570all the power Emacs gives you to do this. When you press @key{RET}, the
2571whole line is sent to IDL. Sometimes it is necessary to send single
2572characters (without a newline), for example when an IDL program is
2573waiting for single character input with the @code{GET_KBRD} function.
2574You can send a single character to IDL with the command @kbd{C-c C-x}
2575(@code{idlwave-shell-send-char}). When you press @kbd{C-c C-y}
2576(@code{idlwave-shell-char-mode-loop}), IDLWAVE runs a blocking loop
2577which accepts characters and immediately sends them to IDL. The loop
2578can be exited with @kbd{C-g}. It terminates also automatically when the
2579current IDL command is finished. Check the documentation of the two
2580variables described below for a way to make IDL programs trigger
2581automatic switches of the input mode.
2582
2583@defopt idlwave-shell-use-input-mode-magic (@code{nil})
5af23035
S
2584Non-@code{nil} means IDLWAVE should check for input mode spells in
2585output.
a8e833f3
CD
2586@end defopt
2587
2588@defopt idlwave-shell-input-mode-spells
2589The three regular expressions which match the magic spells for input
2590modes.
797c8ebc
CD
2591@end defopt
2592
76959b77
S
2593@node Commands Sent to the Shell, Debugging IDL Programs, Using the Shell, The IDLWAVE Shell
2594@section Commands Sent to the Shell
2595@cindex Commands in shell, showing
2596@cindex Showing commands in shell
2597
2598The IDLWAVE buffers and shell interact very closely. In addition to the
2599normal commands you enter at the @code{IDL>} prompt, many other special
2600commands are sent to the shell, sometimes as a direct result of invoking
2601a key command, menu item, or toolbar button, but also automatically, as
2602part of the normal flow of information updates between the buffer and
2603shell.
2604
2605The commands sent include @code{breakpoint}, @code{.step} and other
2606debug commands (@pxref{Debugging IDL Programs}), @code{.run} and other
2607compilation statements (@pxref{Compiling Programs}), examination
2608commands like @code{print} and @code{help} (@pxref{Examining
2609Variables}), and other special purpose commands designed to keep
2610information on the running shell current.
2611
2612By default, much of this background shell input and output is hidden
2613from the user, but this is configurable. The custom variable
2614@code{idlwave-abbrev-show-commands} allows you to configure which
2615commands sent to the shell are shown there. For a related customization
12b86f0e 2616for separating the output of @emph{examine} commands, see @ref{Examining
76959b77
S
2617Variables}.
2618
2619@defopt idlwave-shell-show-commands (@code{'(run misc breakpoint)})
2620A list of command types to echo in the shell when sent. Possible values
2621are @code{run} for @code{.run}, @code{.compile} and other run commands,
12b86f0e
S
2622@code{misc} for lesser used commands like @code{window},
2623@code{retall},@code{close}, etc., @code{breakpoint} for breakpoint
2624setting and clearing commands, and @code{debug} for other debug,
2625stepping, and continue commands. In addition, if the variable is set to
2626the single symbol @code{'everything}, all the copious shell input is
2627displayed (which is probably only useful for debugging purposes).
2628N.B. For hidden commands which produce output by side-effect, that
2629output remains hidden (e.g., stepping through a @code{print} command).
2630As a special case, any error message in the output will be displayed
2631(e.g., stepping to an error).
76959b77
S
2632@end defopt
2633
2634@node Debugging IDL Programs, Examining Variables, Commands Sent to the Shell, The IDLWAVE Shell
797c8ebc
CD
2635@section Debugging IDL Programs
2636@cindex Debugging
2637@cindex Keybindings for debugging
2638@cindex Toolbar
2639
2640Programs can be compiled, run, and debugged directly from the source
12b86f0e
S
2641buffer in Emacs, walking through arbitrarily deeply nested code,
2642printing expressions and skipping up and down the calling stack along
2643the way. IDLWAVE makes compiling and debugging IDL programs far less
2644cumbersome by providing a full-featured, key/menu/toolbar-driven
2645interface to commands like @code{breakpoint}, @code{.step},
2646@code{.run}, etc. It can even perform complex debug operations not
2647natively supported by IDL (like continuing to the line at the cursor).
2648
2649The IDLWAVE shell installs key bindings both in the shell buffer and
2650in all IDL code buffers of the current Emacs session, so debug
2651commands work in both places (in the shell, commands operate on the
2652last file compiled). On Emacs versions which support it, a debugging
2653toolbar is also installed. The toolbar display can be toggled with
2654@kbd{C-c C-d C-t} (@code{idlwave-shell-toggle-toolbar}).
2655
76959b77
S
2656
2657@defopt idlwave-shell-use-toolbar (@code{t})
2658Non-@code{nil} means use the debugging toolbar in all IDL related
2659buffers.
2660@end defopt
2661
2662@menu
12b86f0e
S
2663* A Tale of Two Modes::
2664* Debug Key Bindings::
2665* Breakpoints and Stepping::
2666* Compiling Programs::
2667* Walking the Calling Stack::
2668* Electric Debug Mode::
76959b77
S
2669@end menu
2670
12b86f0e
S
2671
2672@node A Tale of Two Modes, Debug Key Bindings, Debugging IDL Programs, Debugging IDL Programs
2673@subsection A Tale of Two Modes
2674@cindex Electric Debug Mode
2675@cindex Debugging Interface
2676
2677The many debugging, compiling, and examination commands provided in
2678IDLWAVE are available simultaneously through two different interfaces:
2679the original, multi-key command interface, and the new Electric Debug
2680Mode. The functionality they offer is similar, but the way you
2681interact with them is quite different. The main difference is that,
2682in Electric Debug Mode, the source buffers are made read-only, and
2683single key-strokes are used to step through, examine expressions, set
2684and remove breakpoints, etc. The same variables, prefix arguments,
2685and settings apply to both versions, and both can be used
2686interchangeably. By default, when breakpoints are hit, Electric Debug
2687Mode is enabled. The traditional interface is described first.
2688@xref{Electric Debug Mode}, for more on that mode.
2689
2690
2691@sp 1
2692@noindent @strong{Note that electric debug mode can be prevented from
2693activating automatically by customizing the variable
2694@code{idlwave-shell-automatic-electric-debug}.}
2695
2696@node Debug Key Bindings, Breakpoints and Stepping, A Tale of Two Modes, Debugging IDL Programs
76959b77
S
2697@subsection Debug Key Bindings
2698@kindex C-c C-d
2699@cindex Key bindings
797c8ebc 2700
12b86f0e
S
2701The standard debugging key bindings are always available by default on
2702the prefix key @kbd{C-c C-d}, so, for example, setting a breakpoint is
2703done with @kbd{C-c C-d C-b}, and compiling a source file with @kbd{C-c
2704C-d C-c}. You can also easily configure IDLWAVE to use one or more
76959b77
S
2705modifier keys not in use by other commands, in lieu of the prefix
2706@kbd{C-c C-d} (though these bindings will typically also be available
12b86f0e
S
2707--- see @code{idlwave-shell-activate-prefix-keybindings}). For
2708example, if you include in @file{.emacs}:
aea44e56
CD
2709
2710@lisp
2711(setq idlwave-shell-debug-modifiers '(control shift))
2712@end lisp
2713
12b86f0e 2714@noindent a breakpoint can then be set by pressing @kbd{b} while holding down
aea44e56 2715@kbd{shift} and @kbd{control} keys, i.e. @kbd{C-S-b}. Compiling a
5af23035 2716source file will be on @kbd{C-S-c}, deleting a breakpoint @kbd{C-S-d},
12b86f0e
S
2717etc. In the remainder of this chapter we will assume that the
2718@kbd{C-c C-d} bindings are active, but each of these bindings will
2719have an equivalent shortcut if modifiers are given in the
2720@code{idlwave-shell-debug-modifiers} variable (@pxref{Lesson II --
2721Customization}). A much simpler and faster form of debugging for
2722running code is also available by default --- see @ref{Electric Debug
2723Mode}.
797c8ebc 2724
a8e833f3 2725@defopt idlwave-shell-prefix-key (@kbd{C-c C-d})
797c8ebc 2726The prefix key for the debugging map
a8e833f3 2727@code{idlwave-shell-mode-prefix-map}.
797c8ebc
CD
2728@end defopt
2729
2730@defopt idlwave-shell-activate-prefix-keybindings (@code{t})
5af23035 2731Non-@code{nil} means debug commands will be bound to the prefix
797c8ebc
CD
2732key, like @kbd{C-c C-d C-b}.
2733@end defopt
2734
aea44e56 2735@defopt idlwave-shell-debug-modifiers (@code{nil})
12b86f0e
S
2736List of modifier keys to use for additional, alternative binding of
2737debugging commands in the shell and source buffers. Can be one or
2738more of @code{control}, @code{meta}, @code{super}, @code{hyper},
2739@code{alt}, and @code{shift}.
797c8ebc
CD
2740@end defopt
2741
12b86f0e 2742@node Breakpoints and Stepping, Compiling Programs, Debug Key Bindings, Debugging IDL Programs
797c8ebc
CD
2743@subsection Breakpoints and Stepping
2744@cindex Breakpoints
2745@cindex Stepping
a8e833f3 2746@cindex Execution, controlled
797c8ebc 2747
a8e833f3
CD
2748@kindex C-c C-d C-b
2749@kindex C-c C-d C-b
12b86f0e
S
2750IDLWAVE helps you set breakpoints and step through code. Setting a
2751breakpoint in the current line of the source buffer is accomplished
2752with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}). With a
2753prefix arg of 1 (i.e. @kbd{C-1 C-c C-d C-b}), the breakpoint gets a
76959b77 2754@code{/ONCE} keyword, meaning that it will be deleted after first use.
12b86f0e
S
2755With a numeric prefix greater than one (e.g. @kbd{C-4 C-c C-d C-b}),
2756the breakpoint will only be active the @code{nth} time it is hit.
2757With a single non-numeric prefix (i.e. @kbd{C-u C-c C-d C-b}), prompt
2758for a condition --- an IDL expression to be evaulated and trigger the
76959b77 2759breakpoint only if true. To clear the breakpoint in the current line,
12b86f0e
S
2760use @kbd{C-c C-d C-d} (@code{idlwave-clear-current-bp}). When
2761executed from the shell window, the breakpoint where IDL is currently
2762stopped will be deleted. To clear all breakpoints, use @kbd{C-c C-d
2763C-a} (@code{idlwave-clear-all-bp}). Breakpoints can also be disabled
2764and re-enabled: @kbd{C-c C-d C-\}
2765(@code{idlwave-shell-toggle-enable-current-bp}).
2766
2767
2768Breakpoint lines are highlighted or indicated with an icon in the
2769source code (different icons for conditional, after, and other break
2770types). Disabled breakpoints are @emph{grayed out} by default. Note
2771that IDL places breakpoints as close as possible on or after the line
2772you specify. IDLWAVE queries the shell for the actual breakpoint
2773location which was set, so the exact line you specify may not be
2774marked. You can re-sync the breakpoint list and display at any time
2775(e.g., if you add or remove some on the command line) using @kbd{C-c
2776C-d C-l}.
5af23035
S
2777
2778Once the program has stopped somewhere, you can step through it. The
2779most important stepping commands are @kbd{C-c C-d C-s} to execute one
2780line of IDL code ("step into"); @kbd{C-c C-d C-n} to step a single line,
2781treating procedure and function calls as a single step ("step over");
2782@kbd{C-c C-d C-h} to continue execution to the line at the cursor and
76959b77
S
2783@kbd{C-c C-d C-r} to continue execution. @xref{Commands Sent to the
2784Shell}, for information on displaying or hiding the breakpoint and
2785stepping commands the shell receives. Here is a summary of the
5af23035 2786breakpoint and stepping commands:
797c8ebc 2787
a8e833f3 2788@multitable @columnfractions .23 .77
797c8ebc
CD
2789@item @kbd{C-c C-d C-b}
2790@tab Set breakpoint (@code{idlwave-shell-break-here})
2791@item @kbd{C-c C-d C-i}
2792@tab Set breakpoint in function named here (@code{idlwave-shell-break-in})
2793@item @kbd{C-c C-d C-d}
2794@tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
2795@item @kbd{C-c C-d C-a}
2796@tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
12b86f0e
S
2797@item @kbd{C-c C-d [}
2798@tab Go to the previous breakpoint (@code{idlwave-shell-goto-previous-bp})
2799@item @kbd{C-c C-d ]}
2800@tab Go to the next breakpoint (@code{idlwave-shell-goto-next-bp})
2801@item @kbd{C-c C-d C-\}
2802@tab Disable/Enable current breakpoint (@code{idlwave-shell-toggle-enable-current-bp})
2803@item @kbd{C-c C-d C-j}
2804@tab Set a breakpoint at the beginning of the enclosing routine.
797c8ebc
CD
2805@item @kbd{C-c C-d C-s}
2806@tab Step, into function calls (@code{idlwave-shell-step})
2807@item @kbd{C-c C-d C-n}
2808@tab Step, over function calls (@code{idlwave-shell-stepover})
2809@item @kbd{C-c C-d C-k}
2810@tab Skip one statement (@code{idlwave-shell-skip})
2811@item @kbd{C-c C-d C-u}
2812@tab Continue to end of block (@code{idlwave-shell-up})
2813@item @kbd{C-c C-d C-m}
2814@tab Continue to end of function (@code{idlwave-shell-return})
2815@item @kbd{C-c C-d C-o}
2816@tab Continue past end of function (@code{idlwave-shell-out})
2817@item @kbd{C-c C-d C-h}
2818@tab Continue to line at cursor position (@code{idlwave-shell-to-here})
2819@item @kbd{C-c C-d C-r}
12b86f0e 2820@tab Continue execution to next breakpoint, if any (@code{idlwave-shell-cont})
797c8ebc
CD
2821@item @kbd{C-c C-d C-up}
2822@tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
2823@item @kbd{C-c C-d C-down}
2824@tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
2825@end multitable
2826
12b86f0e
S
2827All of these commands have equivalents in Electric Debug Mode, which
2828provides faster access (@pxref{Electric Debug Mode}).
2829
797c8ebc 2830@defopt idlwave-shell-mark-breakpoints (@code{t})
5af23035 2831Non-@code{nil} means mark breakpoints in the source file buffers. The
2cbd16b9 2832value indicates the preferred method. Valid values are @code{nil},
797c8ebc
CD
2833@code{t}, @code{face}, and @code{glyph}.
2834@end defopt
2835
2836@defopt idlwave-shell-breakpoint-face
2837The face for breakpoint lines in the source code if
a8e833f3 2838@code{idlwave-shell-mark-breakpoints} has the value @code{face}.
797c8ebc
CD
2839@end defopt
2840
12b86f0e
S
2841@node Compiling Programs, Walking the Calling Stack, Breakpoints and Stepping, Debugging IDL Programs
2842@subsection Compiling Programs
2843@cindex Compiling programs
2844@cindex Programs, compiling
2845@cindex Default command line, executing
2846@cindex Executing a default command line
2847
2848@kindex C-c C-d C-c
2849In order to compile the current buffer under the IDLWAVE shell, press
2850@kbd{C-c C-d C-c} (@code{idlwave-save-and-run}). This first saves the
2851current buffer and then sends the command @samp{.run path/to/file} to the
2852shell. You can also execute @kbd{C-c C-d C-c} from the shell buffer, in
2853which case the most recently compiled buffer will be saved and
2854re-compiled.
2855
2856When developing or debugging a program, it is often necessary to execute
2857the same command line many times. A convenient way to do this is
2858@kbd{C-c C-d C-y} (@code{idlwave-shell-execute-default-command-line}).
2859This command first resets IDL from a state of interrupted execution by
2860closing all files and returning to the main interpreter level. Then a
2861default command line is send to the shell. To edit the default command
2862line, call @code{idlwave-shell-execute-default-command-line} with a
2863prefix argument: @kbd{C-u C-c C-d C-y}. If no default command line has
2864been set (or you give two prefix arguments), the last command on the
2865@code{comint} input history is sent.
2866
2867@defopt idlwave-shell-mark-stop-line (@code{t})
2868Non-@code{nil} means mark the source code line where IDL is currently
2cbd16b9 2869stopped. The value specifies the preferred method. Valid values are
12b86f0e
S
2870@code{nil}, @code{t}, @code{arrow}, and @code{face}.
2871@end defopt
2872
2873@defopt idlwave-shell-overlay-arrow (@code{">"})
2874The overlay arrow to display at source lines where execution halts, if
2875configured in @code{idlwave-shell-mark-stop-line}.
2876@end defopt
2877
2878@defopt idlwave-shell-stop-line-face
2879The face which highlights the source line where IDL is stopped, if
2880configured in @code{idlwave-shell-mark-stop-line}.
2881@end defopt
2882
2883@node Walking the Calling Stack, Electric Debug Mode, Compiling Programs, Debugging IDL Programs
5af23035
S
2884@subsection Walking the Calling Stack
2885@cindex Calling stack, walking
2886
2887While debugging a program, it can be very useful to check the context in
2888which the current routine was called, for instance to help understand
2889the value of the arguments passed. To do so conveniently you need to
2890examine the calling stack. If execution is stopped somewhere deep in a
2891program, you can use the commands @kbd{C-c C-d C-@key{UP}}
2892(@code{idlwave-shell-stack-up}) and @kbd{C-c C-d C-@key{DOWN}}
2893(@code{idlwave-shell-stack-down}), or the corresponding toolbar buttons,
2894to move up or down through the calling stack. The mode line of the
2895shell window will indicate the position within the stack with a label
2896like @samp{[-3:MYPRO]}. The line of IDL code at that stack position
2897will be highlighted. If you continue execution, IDLWAVE will
2898automatically return to the current level. @xref{Examining Variables},
2899for information how to examine the value of variables and expressions on
2900higher calling stack levels.
2901
12b86f0e
S
2902@ifhtml
2903<A NAME="EDEBUG"></A>
2904@end ifhtml
2905@node Electric Debug Mode, , Walking the Calling Stack, Debugging IDL Programs
2906@subsection Electric Debug Mode
2907@cindex Electric Debug Mode
2908@cindex @samp{*Debugging*}
2909
2910Even with a convenient debug key prefix enabled, repetitive stepping,
2911variable examination (@pxref{Examining Variables}), and other
2912debugging activities can be awkward and slow using commands which
2913require multiple keystrokes. Luckily, there's a better way, inspired
2914by the lisp e-debug mode, and available through the @emph{Electric
2915Debug Mode}. By default, as soon as a breakpoint is hit, this minor
2916mode is enabled. The buffer showing the line where execution has
2917halted is switched to Electric Debug Mode. This mode is visible as
2918@samp{*Debugging*} in the mode line, and a different face (violet by
2919default, where color is available) for the line stopped at point. The
2920buffer is made read-only and single-character bindings for the most
2921commonly used debugging commands are enabled:
2922
2923@multitable @columnfractions .2 .8
2924@item @kbd{a}
2925@tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
2926@item @kbd{b}
2927@tab Set breakpoint, @kbd{C-u b} for a conditional break, @kbd{C-n b} for nth hit (@code{idlwave-shell-break-here})
2928@item @kbd{d}
2929@tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
2930@item @kbd{h}
2931@tab Continue to the line at cursor position (@code{idlwave-shell-to-here})
2932@item @kbd{i}
2933@tab Set breakpoint in function named here (@code{idlwave-shell-break-in})
2934@item @kbd{[}
2935@tab Go to the previous breakpoint in the file (@code{idlwave-shell-goto-previous-bp})
2936@item @kbd{]}
2937@tab Go to the next breakpoint in the file
2938(@code{idlwave-shell-goto-next-bp})
2939@item @kbd{\}
2940@tab Disable/Enable current breakpoint (@code{idlwave-shell-toggle-enable-current-bp})
2941@item @kbd{j}
2942@tab Set breakpoint at beginning of enclosing routine (@code{idlwave-shell-break-this-module})
2943@item @kbd{k}
2944@tab Skip one statement (@code{idlwave-shell-skip})
2945@item @kbd{m}
2946@tab Continue to end of function (@code{idlwave-shell-return})
2947@item @kbd{n}
2948@tab Step, over function calls (@code{idlwave-shell-stepover})
2949@item @kbd{o}
2950@tab Continue past end of function (@code{idlwave-shell-out})
2951@item @kbd{p}
2952@tab Print expression near point or in region with @kbd{C-u p} (@code{idlwave-shell-print})
2953@item @kbd{q}
2954@tab End the debugging session and return to the Shell's main level
2955(@code{idlwave-shell-retall})
2956@item @kbd{r}
2957@tab Continue execution to next breakpoint, if any (@code{idlwave-shell-cont})
2958@item @kbd{s} or @kbd{@key{SPACE}}
2959@tab Step, into function calls (@code{idlwave-shell-step})
2960@item @kbd{t}
2961@tab Print a calling-level traceback in the shell
2962@item @kbd{u}
2963@tab Continue to end of block (@code{idlwave-shell-up})
2964@item @kbd{v}
2965@tab Turn Electric Debug Mode off
2966(@code{idlwave-shell-electric-debug-mode})
2967@item @kbd{x}
2968@tab Examine expression near point (or in region with @kbd{C-u x})
2969with shortcut of examine type.
2970@item @kbd{z}
2971@tab Reset IDL (@code{idlwave-shell-reset})
2972@item @kbd{+} or @kbd{=}
2973@tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
2974@item @kbd{-} or @kbd{_}
2975@tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
2976@item @kbd{?}
2977@tab Help on expression near point or in region with @kbd{C-u ?}
2978(@code{idlwave-shell-help-expression})
2979@item @kbd{C-?}
2980@tab Show help on the commands available.
2981@end multitable
2982
2983Most single-character electric debug bindings use the final keystroke
2984of the equivalent multiple key commands (which are of course also
2985still available), but some differ (e.g. @kbd{t},@kbd{q},@kbd{x}).
2986Some have additional convenience bindings (like @kbd{@key{SPACE}} for
2987stepping). All prefix and other argument options described in this
2988section for the commands invoked by electric debug bindings are still
2989valid. For example, @kbd{C-u b} sets a conditional breakpoint, just
2990as it did with @kbd{C-u C-c C-d C-b}.
2991
2992You can toggle the electric debug mode at any time in a buffer using
2993@kbd{C-c C-d C-v} (@kbd{v} to turn it off while in the mode), or from
2994the Debug menu. Normally the mode will be enabled and disabled at the
2995appropriate times, but occassionally you might want to edit a file
2996while still debugging it, or switch to the mode for conveniently
2997setting lots of breakpoints.
2998
2999To quickly abandon a debugging session and return to normal editing at
3000the Shell's main level, use @kbd{q} (@code{idlwave-shell-retall}).
3001This disables electric debug mode in all IDLWAVE buffers@footnote{Note
3002that this binding is not symmetric: @kbd{C-c C-d C-q} is bound to
3003@code{idlwave-shell-quit}, which quits your IDL session.}. Help is
3004available for the command shortcuts with @kbd{C-?}. If you find this
3005mode gets in your way, you can keep it from automatically activating
3006by setting the variable @code{idlwave-shell-automatic-electric-debug}
3007to @code{nil}, or @code{'breakpoint}. If you'd like the convenient
3008electric debug shortcuts available also when run-time errors are
3009encountered, set to @code{t}.
3010
3011@defopt idlwave-shell-automatic-electric-debug (@code{'breakpoint})
3012Whether to enter electric debug mode automatically when a breakpoint
3013or run-time error is encountered, and then disable it in all buffers
3014when the $MAIN$ level is reached (either through normal program
3015execution, or retall). In addition to @code{nil} for never, and
3016@code{t} for both breakpoints and errors, this can be
3017@code{'breakpoint} (the default) to enable it only at breakpoint
3018halts.
3019@end defopt
3020
3021@defopt idlwave-shell-electric-zap-to-file (@code{t})
3022If set, when entering electric debug mode, select the window displaying
3023the file where point is stopped. This takes point away from the shell
3024window, but is useful for immediate stepping, etc.
3025@end defopt
3026
76959b77
S
3027@ifhtml
3028<A NAME="EXAMINE"></A>
3029@end ifhtml
5af23035
S
3030@node Examining Variables, Custom Expression Examination, Debugging IDL Programs, The IDLWAVE Shell
3031@section Examining Variables
797c8ebc
CD
3032@cindex @code{PRINT} expressions
3033@cindex @code{HELP}, on expressions
12b86f0e
S
3034@cindex Expressions, printing & help
3035@cindex Examining expressions
5af23035 3036@cindex Printing expressions
797c8ebc
CD
3037@cindex Mouse binding to print expressions
3038
a8e833f3 3039@kindex C-c C-d C-p
12b86f0e
S
3040Do you find yourself repeatedly typing,
3041e.g. @code{print,n_elements(x)}, and similar statements to remind
3042yourself of the type/size/structure/value/etc. of variables and
3043expressions in your code or at the command line? IDLWAVE has a suite
3044of special commands to automate these types of variable or expression
3045examinations. They work by sending statements to the shell formatted
3046to include the indicated expression.
5af23035
S
3047
3048These examination commands can be used in the shell or buffer at any
3049time (as long as the shell is running), and are very useful when
3050execution is stopped in a buffer due to a triggered breakpoint or error,
3051or while composing a long command in the IDLWAVE shell. In the latter
3052case, the command is sent to the shell and its output is visible, but
3053point remains unmoved in the command being composed --- you can inspect
12b86f0e 3054the contituents of a command you're building without interrupting the
5af23035
S
3055process of building it! You can even print arbitrary expressions from
3056older input or output further up in the shell window --- any expression,
3057variable, number, or function you see can be examined.
3058
3059If the variable @code{idlwave-shell-separate-examine-output} is
3060non-@code{nil} (the default), all examine output will be sent to a
3061special @file{*Examine*} buffer, rather than the shell. The output of
3062prior examine commands is saved. In this buffer @key{c} clears the
3063contents, and @key{q} hides the buffer.
3064
3065The two most basic examine commands are bound to @kbd{C-c C-d C-p}, to
3066print the expression at point, and @kbd{C-c C-d ?}, to invoke help on
12b86f0e
S
3067this expression@footnote{Available as @kbd{p} and @kbd{?} in Electric
3068Debug Mode (@pxref{Electric Debug Mode})}. The expression at point is
3069either an array expression or a function call, or the contents of a
3070pair of parentheses. The selected expression is highlighted, and
3071simultaneously the resulting output is highlighted in the shell.
3072Calling the above commands with a prefix argument will use the current
3073region as expression instead of using the one at point. Two prefix
3074arguments (@kbd{C-u C-u C-c C-d C-p}) will prompt for an expression.
5af23035
S
3075
3076For added speed and convenience, there are mouse bindings which allow
3077you to click on expressions and examine their values. Use
32d4cddb 3078@kbd{S-Mouse-2} to print an expression and @kbd{C-M-Mouse-2} to invoke
5af23035
S
3079help (i.e. you need to hold down @key{META} and @key{CONTROL} while
3080clicking with the middle mouse button). If you simply click, the
3081nearest expression will be selected in the same manner as described
12b86f0e
S
3082above. You can also @emph{drag} the mouse in order to highlight
3083exactly the specific expression or sub-expression you want to examine.
3084For custom expression examination, and the powerful customizable
3085pop-up examine selection, @xref{Custom Expression Examination}.
5af23035 3086
a8e833f3
CD
3087@cindex Printing expressions, on calling stack
3088@cindex Restrictions for expression printing
5af23035
S
3089The same variable inspection commands work both in the IDL Shell and
3090IDLWAVE buffers, and even for variables at higher levels of the calling
3091stack. For instance, if you're stopped at a breakpoint in a routine,
3092you can examine the values of variables and expressions inside its
3093calling routine, and so on, all the way up through the calling stack.
3094Simply step up the stack, and print variables as you see them
3095(@pxref{Walking the Calling Stack}, for information on stepping back
3096through the calling stack). The following restrictions apply for all
3097levels except the current:
ea442c62
CD
3098
3099@itemize @bullet
3100@item
3101Array expressions must use the @samp{[ ]} index delimiters. Identifiers
3102with a @samp{( )} will be interpreted as function calls.
3103@item
ea442c62 3104@cindex ROUTINE_NAMES, IDL procedure
5af23035
S
3105N.B.: printing values of expressions on higher levels of the calling
3106stack uses the @emph{unsupported} IDL routine @code{ROUTINE_NAMES},
12b86f0e
S
3107which may or may not be available in future versions of IDL. Caveat
3108Examinor.
ea442c62
CD
3109@end itemize
3110
797c8ebc
CD
3111@defopt idlwave-shell-expression-face
3112The face for @code{idlwave-shell-expression-overlay}.
3113Allows you to choose the font, color and other properties for
3114the expression printed by IDL.
3115@end defopt
3116
5af23035 3117@defopt idlwave-shell-output-face
12b86f0e 3118The face for @code{idlwave-shell-output-overlay}.
5af23035
S
3119Allows to choose the font, color and other properties for the most
3120recent output of IDL when examining an expression."
3121@end defopt
3122
3123@defopt idlwave-shell-separate-examine-output (@code{t})
3124If non-@code{nil}, re-direct the output of examine commands to a special
12b86f0e 3125@file{*Examine*} buffer, instead of in the shell itself.
5af23035
S
3126@end defopt
3127
3128@node Custom Expression Examination, , Examining Variables, The IDLWAVE Shell
3129@section Custom Expression Examination
3130@cindex Expressions, custom examination
3131@cindex Custom expression examination
3132
3133The variety of possible variable and expression examination commands is
3134endless (just look, for instance, at the keyword list to
3135@code{widget_info()}). Rather than attempt to include them all, IDLWAVE
3136provides two easy methods to customize your own commands, with a special
3137mouse examine command, and two macros for generating your own examine
12b86f0e
S
3138key and mouse bindings.
3139
3140The most powerful and flexible mouse examine command of all is
3141available on @kbd{C-S-Mouse-2}. Just as for all the other mouse
3142examine commands, it permits click or drag expression selection, but
3143instead of sending hard-coded commands to the shell, it pops-up a
3144customizable selection list of examine functions to choose among,
3145configured with the @code{idlwave-shell-examine-alist}
3146variable@footnote{In Electric Debug Mode (@pxref{Electric Debug
3147Mode}), the key @kbd{x} provides a single-character shortcut interface
3148to the same examine functions for the expression at point or marked by
3149the region.}. This variable is a list of key-value pairs (an
3150@emph{alist} in Emacs parlance), where the key gives a name to be
3151shown for the examine command, and the value is the command strings
3152itself, in which the text @code{___} (three underscores) will be
3153replaced by the selected expression before being sent to the shell.
3154An example might be key @code{Structure Help} with value
3155@code{help,___,/STRUCTURE}. In that case, you'd be prompted with
3156@emph{Structure Help}, which might send something like
3157@code{help,var,/STRUCTURE} to the shell for output.
3158@code{idlwave-shell-examine-alist} comes configured by default with a
3159large list of examine commands, but you can easily customize it to add
3160your own.
3161
3162In addition to configuring the functions available to the pop-up mouse
3163command, you can easily create your own customized bindings to inspect
3164expressions using the two convenience macros
3165@code{idlwave-shell-examine} and @code{idlwave-shell-mouse-examine}.
3166These create keyboard or mouse-based custom inspections of variables,
3167sharing all the same properties of the built-in examine commands.
3168Both functions take a single string argument sharing the syntax of the
5af23035 3169@code{idlwave-shell-examine-alist} values, e.g.:
797c8ebc 3170
5af23035
S
3171@lisp
3172(add-hook 'idlwave-shell-mode-hook
3173 (lambda ()
12b86f0e
S
3174 (idlwave-shell-define-key-both [s-down-mouse-2]
3175 (idlwave-shell-mouse-examine
5af23035
S
3176 "print, size(___,/DIMENSIONS)"))
3177 (idlwave-shell-define-key-both [f9] (idlwave-shell-examine
3178 "print, size(___,/DIMENSIONS)"))
12b86f0e 3179 (idlwave-shell-define-key-both [f10] (idlwave-shell-examine
5af23035
S
3180 "print,size(___,/TNAME)"))
3181 (idlwave-shell-define-key-both [f11] (idlwave-shell-examine
3182 "help,___,/STRUCTURE"))))
12b86f0e
S
3183@end lisp
3184
5af23035
S
3185@noindent Now pressing @key{f9}, or middle-mouse dragging with the
3186@key{SUPER} key depressed, will print the dimensions of the nearby or
3187highlighted expression. Pressing @key{f10} will give the type string,
3188and @key{f11} will show the contents of a nearby structure. As you can
3189see, the possibilities are only marginally finite.
3190
3191@defopt idlwave-shell-examine-alist
12b86f0e
S
3192An alist of examine commands in which the keys name the command and
3193are displayed in the selection pop-up, and the values are custom IDL
3194examine command strings to send, after all instances of @code{___}
3195(three underscores) are replaced by the indicated expression.
5af23035
S
3196@end defopt
3197
3198
215a5cd0 3199@node Acknowledgements, Sources of Routine Info, The IDLWAVE Shell, Top
5af23035
S
3200@chapter Acknowledgements
3201@cindex Acknowledgements
a8e833f3
CD
3202@cindex Maintainer, of IDLWAVE
3203@cindex Authors, of IDLWAVE
3204@cindex Contributors, to IDLWAVE
3205@cindex Email address, of Maintainer
797c8ebc
CD
3206@cindex Thanks
3207
a8e833f3
CD
3208@noindent
3209The main contributors to the IDLWAVE package have been:
797c8ebc 3210
a8e833f3
CD
3211@itemize @minus
3212@item
aea44e56
CD
3213@uref{mailto:chase@@att.com, @b{Chris Chase}}, the original author.
3214Chris wrote @file{idl.el} and @file{idl-shell.el} and maintained them
3215for several years.
a8e833f3
CD
3216
3217@item
5af23035
S
3218@uref{mailto:dominik@@astro.uva.nl, @b{Carsten Dominik}} was in charge
3219of the package from version 3.0, during which time he overhauled almost
3220everything, modernized IDLWAVE with many new features, and developed the
df59879c 3221manual.
a8e833f3 3222
12b86f0e 3223@item
5af23035
S
3224@uref{mailto:jdsmith@@as.arizona.edu, @b{J.D. Smith}}, the current
3225maintainer, as of version 4.10, helped shape object method completion
12b86f0e
S
3226and most new features introduced in versions 4.x, and added
3227significant new capabilities for versions 5.x.
a8e833f3
CD
3228@end itemize
3229
3230@noindent
3231The following people have also contributed to the development of IDLWAVE
3232with patches, ideas, bug reports and suggestions.
797c8ebc
CD
3233
3234@itemize @minus
3235@item
12b86f0e 3236Ulrik Dickow <dickow__at__nbi.dk>
797c8ebc 3237@item
12b86f0e 3238Eric E. Dors <edors__at__lanl.gov>
797c8ebc 3239@item
12b86f0e 3240Stein Vidar H. Haugan <s.v.h.haugan__at__astro.uio.no>
797c8ebc 3241@item
12b86f0e 3242David Huenemoerder <dph__at__space.mit.edu>
797c8ebc 3243@item
12b86f0e 3244Kevin Ivory <Kevin.Ivory__at__linmpi.mpg.de>
797c8ebc 3245@item
12b86f0e 3246Dick Jackson <dick__at__d-jackson.com>
5af23035 3247@item
12b86f0e 3248Xuyong Liu <liu__at__stsci.edu>
797c8ebc 3249@item
12b86f0e 3250Simon Marshall <Simon.Marshall__at__esrin.esa.it>
797c8ebc 3251@item
12b86f0e 3252Craig Markwardt <craigm__at__cow.physics.wisc.edu>
aea44e56 3253@item
12b86f0e 3254Laurent Mugnier <mugnier__at__onera.fr>
797c8ebc 3255@item
12b86f0e 3256Lubos Pochman <lubos__at__rsinc.com>
797c8ebc 3257@item
12b86f0e 3258Bob Portmann <portmann__at__al.noaa.gov>
76959b77 3259@item
12b86f0e 3260Patrick M. Ryan <pat__at__jaameri.gsfc.nasa.gov>
797c8ebc 3261@item
12b86f0e 3262Marty Ryba <ryba__at__ll.mit.edu>
797c8ebc 3263@item
12b86f0e 3264Phil Williams <williams__at__irc.chmcc.org>
797c8ebc 3265@item
12b86f0e
S
3266Phil Sterne <sterne__at__dublin.llnl.gov>
3267@item
3268Paul Sorenson <aardvark62__at__msn.com>
797c8ebc
CD
3269@end itemize
3270
a8e833f3
CD
3271@noindent
3272Thanks to everyone!
3273
12b86f0e 3274@node Sources of Routine Info, HTML Help Browser Tips, Acknowledgements, Top
797c8ebc
CD
3275@appendix Sources of Routine Info
3276
a8e833f3 3277@cindex Sources of routine information
5af23035
S
3278In @ref{Routine Info} and @ref{Completion} we showed how IDLWAVE
3279displays the calling sequence and keywords of routines, and completes
3280routine names and keywords. For these features to work, IDLWAVE must
3281know about the accessible routines.
797c8ebc
CD
3282
3283@menu
3284* Routine Definitions:: Where IDL Routines are defined.
a8e833f3 3285* Routine Information Sources:: So how does IDLWAVE know about...
12b86f0e 3286* Catalogs::
a8e833f3
CD
3287* Load-Path Shadows:: Routines defined in several places
3288* Documentation Scan:: Scanning the IDL Manuals
797c8ebc
CD
3289@end menu
3290
3291@node Routine Definitions, Routine Information Sources, Sources of Routine Info, Sources of Routine Info
5af23035 3292@appendixsec Routine Definitions
797c8ebc 3293@cindex Routine definitions
a8e833f3
CD
3294@cindex IDL variable @code{!PATH}
3295@cindex @code{!PATH}, IDL variable
3296@cindex @code{CALL_EXTERNAL}, IDL routine
3297@cindex @code{LINKIMAGE}, IDL routine
3298@cindex External routines
797c8ebc 3299
5af23035
S
3300@noindent Routines which can be used in an IDL program can be defined in
3301several places:
797c8ebc
CD
3302
3303@enumerate
12b86f0e 3304@item
a8e833f3 3305@emph{Builtin routines} are defined inside IDL itself. The source
5af23035 3306code of such routines is not available.
797c8ebc 3307@item
76959b77
S
3308Routines which are @emph{part of the current program}, are defined in a
3309file explicitly compiled by the user. This file may or may not be
3310located on the IDL search path.
12b86f0e 3311@item
5af23035 3312@emph{Library routines} are defined in files located on IDL's search
76959b77
S
3313path, and will not need to be manually compiled. When a library routine
3314is called for the first time, IDL will find the source file and compile
3315it dynamically. A special sub-category of library routines are the
5af23035
S
3316@emph{system routines} distributed with IDL, and usually available in
3317the @file{lib} subdirectory of the IDL distribution.
797c8ebc
CD
3318@item
3319External routines written in other languages (like Fortran or C) can be
3320called with @code{CALL_EXTERNAL}, linked into IDL via @code{LINKIMAGE},
3321or included as dynamically loaded modules (DLMs). Currently IDLWAVE
5af23035 3322cannot provide routine info and completion for such external routines.
797c8ebc
CD
3323@end enumerate
3324
12b86f0e 3325@node Routine Information Sources, Catalogs, Routine Definitions, Sources of Routine Info
5af23035 3326@appendixsec Routine Information Sources
797c8ebc 3327@cindex Routine info sources
a8e833f3
CD
3328@cindex Builtin list of routines
3329@cindex Updating routine info
3330@cindex Scanning buffers for routine info
3331@cindex Buffers, scanning for routine info
3332@cindex Shell, querying for routine info
797c8ebc 3333
5af23035
S
3334@noindent To maintain the most comprehensive information about all IDL
3335routines on a system, IDLWAVE collects data from many sources:
797c8ebc
CD
3336
3337@enumerate
3338
3339@item
12b86f0e
S
3340It has a @emph{builtin list} with information about the routines IDL
3341ships with. IDLWAVE @value{VERSION} is distributed with a list of
797c8ebc
CD
3342@value{NSYSROUTINES} routines and @value{NSYSKEYWORDS} keywords,
3343reflecting IDL version @value{IDLVERSION}. This list has been created
3344by scanning the IDL manuals and is stored in the file
12b86f0e
S
3345@file{idlw-rinfo.el}. @xref{Documentation Scan}, for information on
3346how to regenerate this file for new versions of IDL.
797c8ebc 3347
12b86f0e 3348@item
797c8ebc
CD
3349It @emph{scans} all @emph{buffers} of the current Emacs session for
3350routine definitions. This is done automatically when routine
a8e833f3 3351information or completion is first requested by the user. Each new
12b86f0e
S
3352buffer and each buffer saved after making changes is also scanned. The
3353command @kbd{C-c C-i} (@code{idlwave-update-routine-info}) can be used
3354at any time to rescan all buffers.
797c8ebc
CD
3355
3356@item
5af23035
S
3357If you have an IDLWAVE-Shell running in the Emacs session, IDLWAVE will
3358@emph{query the shell} for compiled routines and their arguments. This
3359happens automatically when routine information or completion is first
3360requested by the user, and each time an Emacs buffer is compiled with
3361@kbd{C-c C-d C-c}. Though rarely necessary, the command @kbd{C-c C-i}
3362(@code{idlwave-update-routine-info}) can be used to update the shell
3363routine data.
797c8ebc
CD
3364
3365@item
12b86f0e
S
3366Many popular libraries are distributed with routine information
3367already scanned into @emph{library catalogs} (@pxref{Library
3368Catalogs}). These per-directory catalog files can also be built by
3369the user with the supplied @file{idlwave_catalog} tool.
3370
3371@item
3372IDLWAVE can scan selected directories of source files and store the
3373result in a single @emph{user catalog} file which will be
3374automatically loaded just like @file{idlw-rinfo.el}. @xref{User
3375Catalog}, for information on how to scan files in this way.
797c8ebc
CD
3376@end enumerate
3377
12b86f0e
S
3378Loading routine and catalog information can be a time consuming process,
3379especially over slow networks. Depending on the system and network
3380configuration it could take up to 30 seconds. In order to minimize the
3381wait time upon your first completion or routine info command in a
3382session, IDLWAVE uses Emacs idle time to do the initialization in six
3383steps, yielding to user input in between. If this gets into your way,
3384set the variable @code{idlwave-init-rinfo-when-idle-after} to 0 (zero).
3385The more routines documented in library and user catalogs, the slower
3386the loading will be, so reducing this number can help alleviate any long
3387load times.
5af23035
S
3388
3389@defopt idlwave-init-rinfo-when-idle-after (@code{10})
3390Seconds of idle time before routine info is automatically initialized.
3391@end defopt
3392
797c8ebc 3393@defopt idlwave-scan-all-buffers-for-routine-info (@code{t})
5af23035 3394Non-@code{nil} means scan all buffers for IDL programs when updating
a8e833f3 3395info.
797c8ebc
CD
3396@end defopt
3397
3398@defopt idlwave-query-shell-for-routine-info (@code{t})
3399Non-@code{nil} means query the shell for info about compiled routines.
3400@end defopt
3401
a8e833f3
CD
3402@defopt idlwave-auto-routine-info-updates
3403Controls under what circumstances routine info is updated automatically.
3404@end defopt
797c8ebc 3405
12b86f0e
S
3406@ifhtml
3407<A NAME="CATALOGS"></A>
3408@end ifhtml
3409@node Catalogs, Load-Path Shadows, Routine Information Sources, Sources of Routine Info
3410@appendixsec Catalogs
3411@cindex Catalogs
3412
3413@emph{Catalogs} are files containing scanned information on individual
3414routines, including arguments and keywords, calling sequence, file path,
3415class and procedure vs. function type, etc. They represent a way of
3416extending the internal built-in information available for IDL system
3417routines (@pxref{Routine Info}) to other source collections.
3418
3419Starting with version 5.0, there are two types of catalogs available
3420with IDLWAVE. The traditional @emph{user catalog} and the newer
3421@emph{library catalogs}. Although they can be used interchangeably, the
3422library catalogs are more flexible, and preferred. There are few
3423occasions when a user catalog might be preferred --- read below. Both
3424types of catalogs can coexist without causing problems.
3425
3426To facilitate the catalog systems, IDLWAVE stores information it gathers
3427from the shell about the IDL search paths, and can write this
3428information out automatically, or on-demand (menu @code{Debug->Save Path
3429Info}). On systems with no shell from which to discover the path
3430information (e.g. Windows), a library path must be specified in
3431@code{idlwave-library-path} to allow library catalogs to be located, and
3432to setup directories for user catalog scan (@pxref{User Catalog} for
3433more on this variable).
3434
3435@defopt idlwave-auto-write-path (@code{t})
3436Write out information on the !PATH and !DIR paths from IDL automatically
3437when they change and when the Shell is closed. These paths are needed
3438to locate library catalogs.
3439@end defopt
3440
3441@defopt idlwave-library-path
3442IDL library path for Windows and MacOS. Not needed under Unix/MacOSX.
3443@end defopt
3444
3445@defopt idlwave-system-directory
3446The IDL system directory for Windows and MacOS. Not needed under
3447Unix/MacOSX (obtained from the Shell).
3448@end defopt
3449
3450@defopt idlwave-config-directory (@file{~/.idlwave})
3451Default path where IDLWAVE saves configuration information and any
3452user catalog.
3453@end defopt
3454
3455@menu
3456* Library Catalogs::
3457* User Catalog::
3458@end menu
3459
3460@ifhtml
3461<A NAME="LIBRARY_CATALOGS"></A>
3462@end ifhtml
3463@node Library Catalogs, User Catalog, Catalogs, Catalogs
3464@appendixsubsec Library Catalogs
3465@cindex @file{.idlwave_catalog}
3466@cindex Library catalogs
3467@cindex @code{idlwave_catalog}
3468
3469Library catalogs are files named @file{.idlwave_catalog} stored in
3470directories containing @code{.pro} routine files. They are discovered
3471on the IDL search path and loaded automatically when routine information
3472is read. Each catalog file documents the routines found in that
3473directory --- one catalog per directory. Every catalog has a library
3474name associated with it (e.g. @emph{AstroLib}). This name will be shown
3475briefly when the catalog is found, and in the routine info of routines
3476it documents.
3477
3478Many popular libraries of routines are shipped with IDLWAVE catalog
3479files by default, and so will be automatically discovered. Library
3480catalogs are scanned externally to Emacs using a tool provided with
3481IDLWAVE. Each catalog can be re-scanned independently of any other.
3482Catalogs can easily be made available system-wide with a common source
3483repository, providing uniform routine information, and lifting the
3484burden of scanning from the user (who may not even know they're using a
3485scanned catalog). Since all catalogs are independent, they can be
3486re-scanned automatically to gather updates, e.g. in a @file{cron} job.
3487Scanning is much faster than with the built-in user catalog method. One
3488minor disadvantage: the entire IDL search path is scanned for catalog
3489files every time IDLWAVE starts up, which might be slow over a network.
3490
3491A Perl tool to create library catalogs is distributed with IDLWAVE:
3492@code{idlwave_catalog}. It can be called quite simply:
3493@example
3494idlwave_catalog MyLib
3495@end example
3496
3497@noindent This would scan all directories recursively beneath the current and
3498populate them with @file{.idlwave_catalog} files, tagging the routines
3499found with the name library ``MyLib''. The full usage information:
3500
3501@example
3502Usage: idlwave_catalog [-l] [-v] [-d] [-s] [-f] [-h] libname
3503 libname - Unique name of the catalog (4 or more alphanumeric
3504 characters).
3505 -l - Scan local directory only, otherwise recursively
3506 catalog all directories at or beneath this one.
3507 -v - Print verbose information.
3508 -d - Instead of scanning, delete all .idlwave_catalog files
3509 here or below.
3510 -s - Be silent.
3511 -f - Force overwriting any catalogs found with a different
3512 library name.
3513 -h - Print this usage.
3514@end example
3515
3516To re-load the library catalogs on the IDL path, force a system routine
3517info update using a single prefix to @code{idlwave-update-routine-info}:
3518@kbd{C-u C-c C-i}.
3519
3520@defopt idlwave-use-library-catalogs (@code{t})
3521Whether to search for and load library catalogs. Only disable if
3522performance is a problem and the catalogs are not needed.
3523@end defopt
3524
3525@node User Catalog, , Library Catalogs, Catalogs
3526@appendixsubsec User Catalog
3527@cindex User catalog
797c8ebc 3528@cindex IDL library routine info
a8e833f3
CD
3529@cindex Windows
3530@cindex MacOS
a8e833f3
CD
3531@cindex IDL variable @code{!DIR}
3532@cindex @code{!DIR}, IDL variable
3533
12b86f0e
S
3534The user catalog is the old routine catalog system. It is produced
3535within Emacs, and stored in a single file in the user's home directory
3536(@file{.idlwave/idlusercat.el} by default). Although library catalogs
3537are more flexible, there may be reasons to prefer a user catalog
3538instead, including:
3539
3540@itemize @bullet
3541@item The scan is internal to Emacs, so you don't need a working Perl
3542installation, as you do for library catalogs.
3543@item Can be used to scan directories for which the user has no write
3544privileges.
3545@item Easy widget-based path selection.
3546@end itemize
3547
3548However, no routine info is available in the user catalog by default;
3549the user must actively complete a scan. In addition, this type of
3550catalog is all or nothing: if a single routine changes, the entire
3551catalog must be rescanned to update it. Creating the user catalog is
3552also much slower than scanning library catalogs.
797c8ebc 3553
12b86f0e
S
3554You can scan any of the directories on the currently known path. Under
3555Windows and MacOS (not OSX), you need to specify the IDL search path in
3556the variable @code{idlwave-library-path}, and the location of the IDL
3557directory (the value of the @code{!DIR} system variable) in the variable
3558@code{idlwave-system-directory}, like this@footnote{The initial @samp{+}
3559leads to recursive expansion of the path, just like in IDL}:
5af23035
S
3560
3561@lisp
3562(setq idlwave-library-path
12b86f0e
S
3563 '("+c:/RSI/IDL56/lib/" "+c:/user/me/idllibs"))
3564(setq idlwave-system-directory "c:/RSI/IDL56/")
5af23035
S
3565@end lisp
3566
12b86f0e
S
3567@noindent Under GNU and UNIX, these values will be automatically gathered from
3568the IDLWAVE shell.
797c8ebc 3569
12b86f0e
S
3570The command @kbd{M-x idlwave-create-user-catalog-file} (or the menu item
3571@samp{IDLWAVE->Routine Info->Select Catalog Directories} can then be
3572used to create a user catalog. It brings up a widget in which you can
3573select some or all directories on the search path. Directories which
3574already contain a library catalog are marked with @samp{[LIB]}, and need
3575not be scanned (although there is no harm if you do so, other than the
3576additional memory used for the duplication).
a8e833f3
CD
3577
3578After selecting directories, click on the @w{@samp{[Scan & Save]}}
3579button in the widget to scan all files in the selected directories and
12b86f0e
S
3580write out the resulting routine information. In order to update the
3581library information using the directory selection, call the command
797c8ebc 3582@code{idlwave-update-routine-info} with a double prefix argument:
a8e833f3 3583@w{@kbd{C-u C-u C-c C-i}}. This will rescan files in the previously
12b86f0e
S
3584selected directories, write an updated version of the user catalog file
3585and rebuild IDLWAVE's internal lists. If you give three prefix
3586arguments @w{@kbd{C-u C-u C-u C-c C-i}}, updating will be done with a
3587background job@footnote{Unix systems only, I think.}. You can continue
3588to work, and the library catalog will be re-read when it is ready. If
3589you find you need to update the user catalog often, you should consider
3590building a library catalog for your routines instead (@pxref{Library
3591Catalogs}).
a8e833f3
CD
3592
3593@defopt idlwave-special-lib-alist
12b86f0e
S
3594Alist of regular expressions matching special library directories for
3595labeling in routine-info display.
a8e833f3
CD
3596@end defopt
3597
12b86f0e 3598@node Load-Path Shadows, Documentation Scan, Catalogs, Sources of Routine Info
5af23035 3599@appendixsec Load-Path Shadows
a8e833f3
CD
3600@cindex Load-path shadows
3601@cindex Shadows, load-path
3602@cindex Duplicate routines
3603@cindex Multiply defined routines
3604@cindex Routine definitions, multiple
3605@cindex Application, testing for shadowing
3606@cindex Buffer, testing for shadowing
3607
12b86f0e
S
3608IDLWAVE can compile a list of routines which are (re-)defined in more
3609than one file. Since one definition will hide (shadow) the others
a8e833f3
CD
3610depending on which file is compiled first, such multiple definitions are
3611called "load-path shadows". IDLWAVE has several routines to scan for
aea44e56 3612load path shadows. The output is placed into the special buffer
a8e833f3 3613@file{*Shadows*}. The format of the output is identical to the source
aea44e56 3614section of the routine info buffer (@pxref{Routine Info}). The
12b86f0e
S
3615different definitions of a routine are ordered by @emph{likelihood of
3616use}. So the first entry will be most likely the one you'll get if an
3617unsuspecting command uses that routine. Before listing shadows, you
3618should make sure that routine info is up-to-date by pressing @kbd{C-c
3619C-i}. Here are the different routines (also available in the Menu
3620@samp{IDLWAVE->Routine Info}):
a8e833f3
CD
3621
3622@table @asis
3623@item @kbd{M-x idlwave-list-buffer-load-path-shadows}
3624This commands checks the names of all routines defined in the current
3625buffer for shadowing conflicts with other routines accessible to
3626IDLWAVE. The command also has a key binding: @kbd{C-c C-b}
3627@item @kbd{M-x idlwave-list-shell-load-path-shadows}.
3628Checks all routines compiled under the shell for shadowing. This is
3629very useful when you have written a complete application. Just compile
3630the application, use @code{RESOLVE_ALL} to compile any routines used by
3631your code, update the routine info inside IDLWAVE with @kbd{C-c C-i} and
3632then check for shadowing.
3633@item @kbd{M-x idlwave-list-all-load-path-shadows}
aea44e56 3634This command checks all routines accessible to IDLWAVE for conflicts.
a8e833f3
CD
3635@end table
3636
12b86f0e
S
3637For these commands to work fully you need to scan the entire load path
3638in either a user or library catalog. Also, IDLWAVE should be able to
3639distinguish between the system library files (normally installed in
a8e833f3 3640@file{/usr/local/rsi/idl/lib}) and any site specific or user specific
5af23035
S
3641files. Therefore, such local files should not be installed inside the
3642@file{lib} directory of the IDL directory. This is also advisable for
3643many other reasons.
a8e833f3
CD
3644
3645@cindex Windows
3646@cindex MacOS
3647@cindex IDL variable @code{!DIR}
3648@cindex @code{!DIR}, IDL variable
3649Users of Windows and MacOS also must set the variable
3650@code{idlwave-system-directory} to the value of the @code{!DIR} system
3651variable in IDL. IDLWAVE appends @file{lib} to the value of this
3652variable and assumes that all files found on that path are system
3653routines.
3654
3655Another way to find out if a specific routine has multiple definitions
3656on the load path is routine info display (@pxref{Routine Info}).
3657
3658@node Documentation Scan, , Load-Path Shadows, Sources of Routine Info
12b86f0e
S
3659@appendixsec Documentation Scan
3660@cindex @file{get_html_rinfo}
c142ce81 3661@cindex @file{idlw-rinfo.el}
a8e833f3 3662@cindex Scanning the documentation
c142ce81 3663@cindex Perl program, to create @file{idlw-rinfo.el}
797c8ebc 3664
12b86f0e 3665IDLWAVE derives its knowledge about system routines from the IDL
a8e833f3 3666manuals. The file @file{idlw-rinfo.el} contains the routine information
12b86f0e
S
3667for the IDL system routines, and links to relevant sections of the HTML
3668documentation. The Online Help feature of IDLWAVE requires HTML
215a5cd0 3669versions of the IDL manuals to be available.
12b86f0e
S
3670
3671The HTML files and related images can be produced from the
3672@file{idl.chm} HTMLHelp file distributed with IDL using the free
3673Microsoft HTML Help Workshop. If you are lucky, the maintainer of
3674IDLWAVE will always have access to the newest version of IDL and
3675provide updates. The IDLWAVE distribution also contains the Perl
3676program @file{get_html_rinfo} which constructs the
3677@file{idlw-rinfo.el} file by scanning the HTML documents produced from
3678the IDL documentation. Instructions on how to use
3679@file{get_html_rinfo} are in the program itself.
3680
3681@node HTML Help Browser Tips, Configuration Examples, Sources of Routine Info, Top
3682@appendix HTML Help Browser Tips
3683@cindex Browser Tips
3684
3685There are a wide variety of possible browsers to use for displaying
3686the online HTML help available with IDLWAVE (starting with version
36875.0). Since IDLWAVE runs on a many different system types, a single
3688browser configuration is not possible, but choices abound.
3689
215a5cd0
RS
3690Unfortunately, the HTML manuals decompiled from the original
3691source contain formatting structures which Netscape 4.x does not
3692handle well, though they are still readable. A much better choice is
3693Mozilla, or one of the Mozilla-derived browsers such as
3694@uref{http://galeon.sourceforge.net/,Galeon} (GNU/Linux),
12b86f0e
S
3695@uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or
3696@uref{http://www.mozilla.org/projects/firebird/,Firebird} (all
3697platforms). Newer versions of Emacs provide a browser-function choice
3698@code{browse-url-gnome-moz} which uses the Gnome-configured browser.
3699
215a5cd0 3700Note that the HTML files decompiled from Microsoft Help sources
12b86f0e 3701contain specific references to the @samp{Symbol} font, which by default
215a5cd0 3702is not permitted in normal encodings (it's invalid, technically). Though
12b86f0e
S
3703it only impacts a few symbols, you can trick Mozilla-based browsers into
3704recognizing @samp{Symbol} by following the directions
3705@uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}. With this
3706fix in place, HTML help pages look almost identical to their PDF
3707equivalents (yet can be bookmarked, browsed as history, searched, etc.).
3708
3709@noindent Individual platform recommendations:
3710
3711@itemize @bullet
3712@item Windows: The native Microsoft HTMLHelp browser is preferred,
3713with even better results using the free
3714@uref{http://www.keyworks.net/keyhh.htm,@code{KEYHH}} program to
3715permit IDL help to be targetted to a single window. To use HTMLHelp,
3716specify @code{idlwave-help-use-hh} as @code{'hh} or @code{'keyhh}.
3717One bonus: since IDL is shipped with the @file{idl.chm} help file, you
3718don't need to download the HTML help package. @xref{Help with HTML
3719Documentation}.
3720@item Unix/MacOSX: The @uref{http://www.w3m.org,@code{w3m}} browser
3721and its associated
3722@uref{http://emacs-w3m.namazu.org/,@code{emacs-w3m}} emacs mode
3723provide in-buffer browsing with image display, and excellent speed and
3724formatting. Both the Emacs mode and the browser itself must be
3725downloaded separately. To use this browser, include
3726
3727@lisp
3728(setq idlwave-help-browser-function 'w3m-browse-url)
3729@end lisp
3730
3731in your @file{.emacs}. Setting a few other nice @code{w3m} options
3732cuts down on screen clutter:
3733
3734@lisp
3735(setq w3m-use-tab nil
3736 w3m-use-header-line nil
3737 w3m-use-toolbar nil)
3738@end lisp
3739
3740If you use a dedicated frame for help, you might want to add the
3741following, to get consistent behavior with the @kbd{q} key:
3742
3743@lisp
3744;; Close my help window when w3m closes.
3745(defadvice w3m-close-window (after idlwave-close activate)
3746 (if (boundp 'idlwave-help-frame)
3747 (idlwave-help-quit)))
3748@end lisp
3749
3750Note that you can open the file in an external browser from within
3751@code{w3m} using @kbd{M}.
3752@end itemize
3753
3754@node Configuration Examples, Windows and MacOS, HTML Help Browser Tips, Top
797c8ebc
CD
3755@appendix Configuration Examples
3756@cindex Configuration examples
3757@cindex Example configuration
a8e833f3
CD
3758@cindex @file{.emacs}
3759@cindex Default settings, of options
3760@cindex Interview, with the maintainer
797c8ebc
CD
3761
3762@noindent
5af23035
S
3763@b{Question:} You have all these complicated configuration options in
3764your package, but which ones do @emph{you} as the maintainer actually
3765set in your own configuration?
797c8ebc
CD
3766
3767@noindent
5af23035
S
3768@b{Answer:} Not many, beyond custom key bindings. I set most defaults
3769the way that seems best. However, the default settings do not turn on
3770features which:
a8e833f3 3771
797c8ebc
CD
3772@itemize @minus
3773@item
5af23035 3774are not self-evident (i.e. too magic) when used by an unsuspecting user.
797c8ebc 3775@item
5af23035 3776are too intrusive.
797c8ebc 3777@item
5af23035 3778will not work properly on all Emacs installations.
797c8ebc 3779@item
a8e833f3 3780break with widely used standards.
5af23035
S
3781@item
3782use function or other non-standard keys.
3783@item
3784are purely personal customizations, like additional key bindings, and
3785library names.
797c8ebc
CD
3786@end itemize
3787
5af23035
S
3788@noindent To see what I mean, here is the @emph{entire} configuration
3789the old maintainer had in his @file{.emacs}:
797c8ebc
CD
3790
3791@lisp
aea44e56 3792(setq idlwave-shell-debug-modifiers '(control shift)
797c8ebc
CD
3793 idlwave-store-inquired-class t
3794 idlwave-shell-automatic-start t
a8e833f3 3795 idlwave-main-block-indent 2
5af23035 3796 idlwave-init-rinfo-when-idle-after 2
a8e833f3
CD
3797 idlwave-help-dir "~/lib/emacs/idlwave"
3798 idlwave-special-lib-alist '(("/idl-astro/" . "AstroLib")
3799 ("/jhuapl/" . "JHUAPL-Lib")
3800 ("/dominik/lib/idl/" . "MyLib")))
797c8ebc
CD
3801@end lisp
3802
3803However, if you are an Emacs power-user and want IDLWAVE to work
5af23035
S
3804completely differently, you can change almost every aspect of it. Here
3805is an example of a much more extensive configuration of IDLWAVE. The
a8e833f3 3806user is King!
797c8ebc
CD
3807
3808@example
3809;;; Settings for IDLWAVE mode
3810
3811(setq idlwave-block-indent 3) ; Indentation settings
3812(setq idlwave-main-block-indent 3)
3813(setq idlwave-end-offset -3)
3814(setq idlwave-continuation-indent 1)
12b86f0e 3815(setq idlwave-begin-line-comment "^;[^;]") ; Leave ";" but not ";;"
797c8ebc
CD
3816 ; anchored at start of line.
3817(setq idlwave-surround-by-blank t) ; Turn on padding ops =,<,>
3818(setq idlwave-pad-keyword nil) ; Remove spaces for keyword '='
3819(setq idlwave-expand-generic-end t) ; convert END to ENDIF etc...
3820(setq idlwave-reserved-word-upcase t) ; Make reserved words upper case
3821 ; (with abbrevs only)
3822(setq idlwave-abbrev-change-case nil) ; Don't force case of expansions
3823(setq idlwave-hang-indent-regexp ": ") ; Change from "- " for auto-fill
3824(setq idlwave-show-block nil) ; Turn off blinking to begin
3825(setq idlwave-abbrev-move t) ; Allow abbrevs to move point
5af23035
S
3826(setq idlwave-query-class '((method-default . nil) ; No query for method
3827 (keyword-default . nil); or keyword completion
3828 ("INIT" . t) ; except for these
3829 ("CLEANUP" . t)
3830 ("SETPROPERTY" .t)
3831 ("GETPROPERTY" .t)))
797c8ebc 3832
12b86f0e
S
3833;; Using w3m for help (must install w3m and emacs-w3m)
3834(autoload 'w3m-browse-url "w3m" "Interface for w3m on Emacs." t)
3835(setq idlwave-help-browser-function 'w3m-browse-url
3836 w3m-use-tab nil ; no tabs, location line, or toolbar
3837 w3m-use-header-line nil
3838 w3m-use-toolbar nil)
3839
3840;; Close my help window or frame when w3m closes with `q'
3841(defadvice w3m-close-window (after idlwave-close activate)
3842 (if (boundp 'idlwave-help-frame)
3843 (idlwave-help-quit)))
3844
797c8ebc 3845;; Some setting can only be done from a mode hook. Here is an example:
797c8ebc
CD
3846(add-hook 'idlwave-mode-hook
3847 (lambda ()
797c8ebc
CD
3848 (setq case-fold-search nil) ; Make searches case sensitive
3849 ;; Run other functions here
3850 (font-lock-mode 1) ; Turn on font-lock mode
3851 (idlwave-auto-fill-mode 0) ; Turn off auto filling
12b86f0e 3852 (setq idlwave-help-browser-function 'browse-url-w3)
5af23035 3853
32d4cddb 3854 ;; Pad with 1 space (if -n is used then make the
797c8ebc
CD
3855 ;; padding a minimum of n spaces.) The defaults use -1
3856 ;; instead of 1.
3857 (idlwave-action-and-binding "=" '(idlwave-expand-equal 1 1))
3858 (idlwave-action-and-binding "<" '(idlwave-surround 1 1))
3859 (idlwave-action-and-binding ">" '(idlwave-surround 1 1 '(?-)))
3860 (idlwave-action-and-binding "&" '(idlwave-surround 1 1))
5af23035 3861
797c8ebc
CD
3862 ;; Only pad after comma and with exactly 1 space
3863 (idlwave-action-and-binding "," '(idlwave-surround nil 1))
ea442c62 3864 (idlwave-action-and-binding "&" '(idlwave-surround 1 1))
5af23035 3865
ea442c62
CD
3866 ;; Pad only after `->', remove any space before the arrow
3867 (idlwave-action-and-binding "->" '(idlwave-surround 0 -1 nil 2))
5af23035 3868
797c8ebc
CD
3869 ;; Set some personal bindings
3870 ;; (In this case, makes `,' have the normal self-insert behavior.)
3871 (local-set-key "," 'self-insert-command)
5af23035
S
3872 (local-set-key [f5] 'idlwave-shell-break-here)
3873 (local-set-key [f6] 'idlwave-shell-clear-current-bp)
3874
797c8ebc
CD
3875 ;; Create a newline, indenting the original and new line.
3876 ;; A similar function that does _not_ reindent the original
3877 ;; line is on "\C-j" (The default for emacs programming modes).
3878 (local-set-key "\n" 'idlwave-newline)
3879 ;; (local-set-key "\C-j" 'idlwave-newline) ; My preference.
5af23035
S
3880
3881 ;; Some personal abbreviations
12b86f0e 3882 (define-abbrev idlwave-mode-abbrev-table
5af23035
S
3883 (concat idlwave-abbrev-start-char "wb") "widget_base()"
3884 (idlwave-keyword-abbrev 1))
12b86f0e 3885 (define-abbrev idlwave-mode-abbrev-table
5af23035
S
3886 (concat idlwave-abbrev-start-char "on") "obj_new()"
3887 (idlwave-keyword-abbrev 1))
797c8ebc
CD
3888 ))
3889
3890;;; Settings for IDLWAVE SHELL mode
3891
3892(setq idlwave-shell-overlay-arrow "=>") ; default is ">"
3893(setq idlwave-shell-use-dedicated-frame t) ; Make a dedicated frame
3894(setq idlwave-shell-prompt-pattern "^WAVE> ") ; default is "^IDL> "
3895(setq idlwave-shell-explicit-file-name "wave")
3896(setq idlwave-shell-process-name "wave")
797c8ebc 3897(setq idlwave-shell-use-toolbar nil) ; No toolbar
5af23035
S
3898
3899;; Most shell interaction settings can be done from the shell-mode-hook.
3900(add-hook 'idlwave-shell-mode-hook
3901 (lambda ()
3902 ;; Set up some custom key and mouse examine commands
12b86f0e
S
3903 (idlwave-shell-define-key-both [s-down-mouse-2]
3904 (idlwave-shell-mouse-examine
5af23035
S
3905 "print, size(___,/DIMENSIONS)"))
3906 (idlwave-shell-define-key-both [f9] (idlwave-shell-examine
3907 "print, size(___,/DIMENSIONS)"))
12b86f0e 3908 (idlwave-shell-define-key-both [f10] (idlwave-shell-examine
5af23035
S
3909 "print,size(___,/TNAME)"))
3910 (idlwave-shell-define-key-both [f11] (idlwave-shell-examine
3911 "help,___,/STRUCTURE"))))
797c8ebc
CD
3912@end example
3913
76959b77
S
3914@ifhtml
3915<A NAME="WIN_MAC"></A>
3916@end ifhtml
12b86f0e 3917@node Windows and MacOS, Troubleshooting, Configuration Examples, Top
5af23035
S
3918@appendix Windows and MacOS
3919@cindex Windows
3920@cindex MacOS
12b86f0e 3921@cindex MacOSX
5af23035 3922
12b86f0e
S
3923IDLWAVE was developed on a UNIX system. However, thanks to the
3924portability of Emacs, much of IDLWAVE does also work under different
3925operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS.
5af23035 3926
215a5cd0 3927The only real problem is that there is no command-line
12b86f0e 3928version of IDL for Windows or MacOS(<=9) with which IDLWAVE can
215a5cd0 3929interact. As a result, the IDLWAVE Shell
12b86f0e
S
3930does not work and you have to rely on IDLDE to run and debug your
3931programs. However, editing IDL source files with Emacs/IDLWAVE works
3932with all bells and whistles, including routine info, completion and fast
3933online help. Only a small amount of additional information must be
3934specified in your @file{.emacs} file: the path names which, on a UNIX
3935system, are automatically gathered by talking to the IDL program.
5af23035
S
3936
3937Here is an example of the additional configuration needed for a Windows
3938system. I am assuming that IDLWAVE has been installed in
3939@w{@samp{C:\Program Files\IDLWAVE}} and that IDL is installed in
3940@w{@samp{C:\RSI\IDL55}}.
3941
3942@lisp
12b86f0e 3943;; location of the lisp files (needed if IDLWAVE is not part of
5af23035
S
3944;; the X/Emacs installation)
3945(setq load-path (cons "c:/program files/IDLWAVE" load-path))
3946
215a5cd0 3947;; The location of the IDL library files, both standard and your own.
5af23035
S
3948;; note that the initial "+" expands the path recursively
3949(setq idlwave-library-path
3950 '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" ))
3951
3952;; location of the IDL system directory (try "print,!DIR")
3953(setq idlwave-system-directory "c:/RSI/IDL55/")
3954
12b86f0e
S
3955;; specify using the HTMLHelp documentation for online help, with the
3956;; KEYHH helper routine (Windows only)
3957(setq idlwave-use-hh 'keyhh)
5af23035
S
3958
3959;; file in which to store the user catalog info
12b86f0e 3960(setq idlwave-user-catalog-file "c:/IDLWAVE/idlcat.el")
5af23035
S
3961@end lisp
3962
3963@noindent Furthermore, Windows sometimes tries to outsmart you --- make
3964sure you check the following things:
3965
3966@itemize @bullet
12b86f0e
S
3967@item When you download the IDLWAVE distribution, make sure you save the
3968file under the names @file{idlwave.tar.gz}.
5af23035
S
3969@item M-TAB switches among running programs --- use Esc-TAB
3970instead.
3971@item Other issues as yet unnamed...
3972@end itemize
3973
12b86f0e
S
3974Windows users who'd like to make use of IDLWAVE's context-aware HTML
3975help can skip the browser and use the HTMLHelp functionality directly.
3976@xref{Help with HTML Documentation}.
3977
3978@ifhtml
3979<A NAME="TROUBLE"></A>
3980@end ifhtml
3981@node Troubleshooting, Index, Windows and MacOS, Top
3982@appendix Troubleshooting
3983@cindex Troubleshooting
3984
3985Although IDLWAVE usually installs and works without difficulty, a few
3986common problems and their solutions are documented below.
3987
3988@enumerate
3989
3990@item @strong{Whenever an IDL error occurs or a breakpoint is hit, I get
3991errors or strange behavior when I try to type anything into some of my
3992IDLWAVE buffers.}
3993
3994This is a @emph{feature}, not an error. You're in @emph{Electric
3995Debug Mode} (@pxref{Electric Debug Mode}). You should see
3996@code{*Debugging*} in the mode-line. The buffer is read-only and all
3997debugging and examination commands are available as single keystrokes;
3998@kbd{C-?} lists these shortcuts. Use @kbd{q} to quit the mode, and
3999customize the variable @code{idlwave-shell-automatic-electric-debug}
4000if you prefer not to enter electric debug on breakpoints@dots{} but
4001you really should try it before you disable it! You can also
4002customize this variable to enter debug mode when errors are
4003encountered too.
4004
4005@item @strong{I get errors like @samp{Searching for program: no such
4006file or directory, idl} when attempting to start the IDL shell.}
4007
4008IDLWAVE needs to know where IDL is in order to run it as a process.
4009By default, it attempts to invoke it simply as @samp{idl}, which
4010presumes such an executable is on your search path. You need to
4011ensure @samp{idl} is on your @samp{$PATH}, or specify the full
4012pathname to the idl program with the variable
4013@code{idlwave-shell-explicit-file-name}. Note that you may need to
4014set your shell search path in two places when running Emacs as an Aqua
4015application with MacOSX; see the next topic.
4016
4017@item @strong{IDLWAVE is disregarding my @samp{IDL_PATH} which I set
4018under MacOSX}
4019
4020If you run Emacs directly as an Aqua application, rather than from the
4021console shell, the environment is set not from your usual shell
4022configuration files (e.g. @file{.cshrc}), but from the file
4023@file{~/.MacOSX/environment.plist}. Either include your path settings
4024there, or start Emacs and IDLWAVE from the shell.
4025
4026@item @strong{I get errors like @samp{Symbol's function is void:
4027overlayp} when trying to start the shell in XEmacs}
4028
4029You don't have the @samp{fsf-compat} package installed, which IDLWAVE
4030needs to run under XEmacs. Install it and, if necessary, insert
4031@code{(require 'overlay)} in your @file{.emacs}.
4032
4033@item @strong{I'm getting errors like @samp{Symbol's value as variable is void:
4034cl-builtin-gethash} on completion or routine info.}
4035
4036This error arises if you upgraded Emacs from 20.x to 21.x without
4037re-installing IDLWAVE. Old Emacs and new Emacs are not byte-compatible
4038in compiled lisp files. Presumably, you kept the original .elc files in
4039place, and this is the source of the error. If you recompile (or just
4040"make; make install") from source, it should resolve this problem.
4041Another option is to recompile the @file{idlw*.el} files by hand using
215a5cd0 4042@kbd{M-x byte-compile-file}.
12b86f0e
S
4043
4044@item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
4045windows on my desktop.}
4046
4047Your system is trapping @kbd{M-@key{TAB}} and using it for its own
4048nefarious purposes: Emacs never sees the keystrokes. On many Unix
4049systems, you can reconfigure your window manager to use another key
4050sequence for switching among windows. Another option is to use the
4051equivalent sequence @kbd{@key{ESC}-@key{TAB}}.
4052
4053@item @strong{When stopping at breakpoints or errors, IDLWAVE does not
4054seem to highlight the relevant line in the source.}
4055
4056IDLWAVE scans for error and halt messages and highlights the stop
4057location in the correct file. However, if you've changed the system
4058variable @samp{!ERROR_STATE.MSG_PREFIX}, it is unable to parse these
4059message correctly. Don't do that.
4060
4061@item @strong{IDLWAVE doesn't work correctly when using ENVI.}
4062
4063Though IDLWAVE was not written with ENVI in mind, it works just fine
4064with it, as long as you update the prompt it's looking for (@samp{IDL>
4065} by default). You can do this with the variable
4066@code{idlwave-shell-prompt-pattern} (@pxref{Starting the Shell}), e.g.,
4067in your @file{.emacs}:
4068
4069@lisp
4070(setq idlwave-shell-prompt-pattern "^\\(ENVI\\|IDL\\)> ")
4071@end lisp
4072
4073@item @strong{Attempts to set breakpoints fail: no breakpoint is
4074indicated in the IDLWAVE buffer.}
4075
4076IDL changed its breakpoint reporting format starting with IDLv5.5. The
4077first version of IDLWAVE to support the new format is IDLWAVE v4.10. If
4078you have an older version and are using IDL >v5.5, you need to upgrade,
4079and/or make sure your recent version of IDLWAVE is being found on the
4080Emacs load-path (see the next entry). You can list the version being
4081used with @kbd{C-h v idlwave-mode-version @key{RET}}.
4082
4083@item @strong{I installed a new version of IDLWAVE, but the old
4084version is still being used} or @strong{IDLWAVE works, but when I
4085tried to install the optional modules @file{idlw-roprompt.el} or
4086@file{idlw-complete-structtag}, I get errors like @samp{Cannot open
4087load file}}.
4088
4089The problem is that your Emacs is not finding the version of IDLWAVE you
4090installed. Many Emacsen come with an older bundled copy of IDLWAVE
4091(e.g. v4.7 for Emacs 21.x), which is likely what's being used instead.
4092You need to make sure your Emacs @emph{load-path} contains the directory
4093where IDLWAVE is installed (@file{/usr/local/share/emacs/site-lisp}, by
4094default), @emph{before} Emacs' default search directories. You can
4095accomplish this by putting the following in your @file{.emacs}:
4096
4097@lisp
4098(setq load-path (cons "/usr/local/share/emacs/site-lisp" load-path))
4099@end lisp
4100
4101@noindent You can check on your load-path value using @kbd{C-h v
4102load-path @key{RET}}.
5af23035 4103
12b86f0e
S
4104@item @strong{IDLWAVE is screwing up the formatting of my @file{.idl} files.}
4105
4106Actually, this isn't IDLWAVE at all, but @samp{idl-mode}, an unrelated
4107programming mode for CORBA's Interface Definition Language (you should
4108see @samp{(IDL)}, not @samp{(IDLWAVE)} in the mode-line). One
4109solution: don't name your file @file{.idl}, but rather @file{.pro}.
4110Another solution: make sure @file{.idl} files load IDLWAVE instead of
4111@samp{idl-mode} by adding the following to your @file{.emacs}:
4112
4113@lisp
4114(setcdr (rassoc 'idl-mode auto-mode-alist) 'idlwave-mode)
4115@end lisp
4116
4117@item @strong{The routine info for my local routines is out of date!}
4118
4119IDLWAVE collects routine info from various locations (@pxref{Routine
4120Information Sources}). Routines in files visited in a buffer or
4121compiled in the shell should be up to date. For other routines, the
4122information is only as current as the most recent scan. If you have a
4123rapidly changing set of routines, and you'd like the latest routine
4124information to be available for it, one powerful technique makes use of
4125the library catalog tool, @samp{idlwave_catalog}. Simply add a line to
4126your @samp{cron} file (@samp{crontab -e} will let you edit this on some
4127systems), like this:
4128
4129@example
413045 3 * * 1-5 (cd /path/to/myidllib; /path/to/idlwave_catalog MyLib)
4131@end example
4132
4133@noindent where @samp{MyLib} is the name of your library. This will
4134rescan all @file{.pro} files at or below @file{/path/to/myidllib} every
4135week night at 3:45am. You can even scan site-wide libraries with this
4136method, and the most recent information will be available to all users.
4137
4138@item @strong{All the Greek-font characters in the HTML help are
4139displayed as Latin characters!}
4140
215a5cd0 4141Unfortunately, the HTMLHelp files attempt to switch to
12b86f0e
S
4142@samp{Symbol} font to display Greek characters, which is not really an
4143permitted method for doing this in HTML. There is a "workaround" for
4144many browsers: @xref{HTML Help Browser Tips}.
4145
4146@item @strong{In the shell, my long commands are truncated at 256 characters!}
4147
4148This actually happens when running IDL in an XTerm as well. There are
4149a couple of work arounds: @code{define_key,/control,'^d'} (e.g. in
4150your @file{$IDL_STARTUP} file) will disable the @samp{EOF} character
4151and give you a 512 character limit. You won't be able to use
4152@key{C-d} to quit the shell, however. Another possibility is
4153@code{!EDIT_INPUT=0}, which gives you an @emph{infinite} limit (OK, a
4154memory-bounded limit), but disables the processing of background
4155widget events (those with @code{/NO_BLOCK} passed to @code{XManager}).
4156
4157@end enumerate
4158
4159@node Index, , Troubleshooting, Top
797c8ebc
CD
4160@unnumbered Index
4161@printindex cp
4162
797c8ebc 4163@bye
8df608c1
MB
4164
4165@ignore
4166 arch-tag: f1d73958-1423-4127-b8aa-f7b953d64492
4167@end ignore