1 \input texinfo @c -*-texinfo-*-
3 @setfilename ../info/idlwave
4 @settitle IDLWAVE User Manual
7 * IDLWAVE: (idlwave). Major mode and shell for IDL and WAVE/CL files.
15 @set NSYSROUTINES 1287
16 @set NSYSKEYWORDS 5724
17 @set DATE December 2000
18 @set AUTHOR Carsten Dominik
19 @set AUTHOR-EMAIL dominik@@astro.uva.nl
20 @set MAINTAINER Carsten Dominik
21 @set MAINTAINER-EMAIL dominik@@astro.uva.nl
22 @set IDLWAVE-HOMEPAGE http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave
27 This file documents IDLWAVE, a major mode for editing IDL and
28 WAVE/CL files with Emacs. It also implements a shell for running IDL as
31 This is edition @value{EDITION} of the IDLWAVE User Manual for
32 IDLWAVE @value{VERSION}
34 Copyright (c) 1999, 2000 Free Software Foundation, Inc.
36 Permission is granted to make and distribute verbatim
37 copies of this manual provided the copyright notice and
38 this permission notice are preserved on all copies.
41 Permission is granted to process this file through TeX
42 and print the results, provided the printed document
43 carries a copying permission notice identical to this
44 one except for the removal of this paragraph (this
45 paragraph not being relevant to the printed manual).
48 Permission is granted to copy and distribute modified
49 versions of this manual under the conditions for
50 verbatim copying, provided that the entire resulting
51 derived work is distributed under the terms of a permission
52 notice identical to this one.
54 Permission is granted to copy and distribute
55 translations of this manual into another language,
56 under the above conditions for modified versions,
57 except that this permission notice may be stated in a
58 translation approved by the Free Software Foundation.
62 @title IDLWAVE User Manual
63 @subtitle Major Emacs mode and shell for IDL and WAVE/CL files
64 @subtitle Edition @value{EDITION}, @value{DATE}
66 @author by Carsten Dominik
68 Copyright @copyright{} 1999, 2000 Free Software Foundation, Inc.
71 This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
72 IDLWAVE version @value{VERSION}, @value{DATE}.
76 @cindex Copyright, of IDLWAVE
77 Permission is granted to make and distribute verbatim
78 copies of this manual provided the copyright notice and
79 this permission notice are preserved on all copies.
81 Permission is granted to copy and distribute modified
82 versions of this manual under the conditions for
83 verbatim copying, provided that the entire resulting
84 derive work is distributed under the terms of a permission
85 notice identical to this one.
87 Permission is granted to copy and distribute
88 translations of this manual into another language,
89 under the above conditions for modified versions,
90 except that this permission notice may be stated in a
91 translation approved by the Free Software Foundation.
100 @node Top, Introduction, (dir), (dir)
102 IDLWAVE is a package to support editing command files for the
103 Interactive Data Language (IDL), and for running IDL as an inferior
109 * Introduction:: What IDLWAVE is and what not
110 * IDLWAVE in a Nutshell:: One page quick-start guide
111 * Getting Started:: Tutorial
112 * The IDLWAVE Major Mode:: The mode to edit IDL programs
113 * The IDLWAVE Shell:: The mode to run IDL as inferior program
114 * Installation:: How to Install or Upgrade
115 * Acknowledgement:: Who helped
116 * Sources of Routine Info:: How does IDLWAVE know about routine XYZ
117 * Configuration Examples:: The user is king...
118 * Index:: Fast access
120 @detailmenu --- The Detailed Node Listing ---
122 The IDLWAVE Major Mode
124 * Code Formatting:: Making code look nice
125 * Routine Info:: Calling Sequence and Keyword List
126 * Online Help:: One key press from source to help
127 * Completion:: Completing routine names and Keywords
128 * Routine Source:: How to visit the source file of routine XYZ
129 * Resolving Routines:: Force the Shell to compile a routine
130 * Code Templates:: Abbreviations for frequent constructs
131 * Actions:: Changing case, Padding, End checking
132 * Doc Header:: Inserting a standard header
133 * Motion Commands:: Moving through the structure of a program
134 * Misc Options:: Things that fit nowhere else
138 * Code Indentation:: Reflecting the logical structure
139 * Comment Indentation:: Special indentation for comment lines
140 * Continuation Lines:: Splitting statements over lines
141 * Syntax Highlighting:: Font-lock support
145 * Block Boundary Check:: Is the END correct
146 * Padding Operators:: Enforcing space around `=' etc
147 * Case Changes:: Enforcing upper case keywords
151 * Starting the Shell:: How to launch IDL as a subprocess
152 * Using the Shell:: Interactively working with the Shell
153 * Debugging IDL Programs:: Compilation/Debugging
155 Debugging IDL Programs
157 * Compiling Programs:: Compiling buffers under the shell
158 * Breakpoints and Stepping:: Deciding where to stop and look
159 * Examining Variables:: What is the value now?
163 * Installing IDLWAVE:: How to install the distribution
164 * Installing Online Help:: Where to get the additional files needed
165 * Upgrading from idl.el:: Necessary configuration changes
167 Sources of Routine Info
169 * Routine Definitions:: Where IDL Routines are defined.
170 * Routine Information Sources:: So how does IDLWAVE know about...
171 * Library Catalog:: Scanning the Libraries for Routine Info
172 * Load-Path Shadows:: Routines defined in several places
173 * Documentation Scan:: Scanning the IDL Manuals
178 @node Introduction, IDLWAVE in a Nutshell, Top, Top
179 @chapter Introduction
181 @cindex CORBA (Common Object Request Broker Architecture)
182 @cindex Interface Definition Language
183 @cindex Interactive Data Language
185 @cindex @file{idl.el}
186 @cindex @file{idl-shell.el}
187 @cindex Feature overview
189 IDLWAVE is a package to support editing command files for the
190 Interactive Data Language (IDL), and for running IDL as an inferior
191 shell. It also can be used for WAVE/CL command files, but the support
192 for these is limited. Note that this package has nothing to do with the
193 Interface Definition Language as part of the Common Object Request
194 Broker Architecture (CORBA).
196 IDLWAVE is the successor to the @file{idl.el} and @file{idl-shell.el}
197 files written by Chris Chase. The modes and files had to be renamed
198 because of a name space conflict with CORBAs @code{idl-mode}, defined in
199 Emacs in the file @file{cc-mode.el}. If you have been using the old
200 files, check @ref{Upgrading from idl.el} for information on how to
203 IDLWAVE consists of two parts: A major mode for editing command files
204 (@code{idlwave-mode}) and a mode to allow running the IDL program as an
205 inferior shell (@code{idlwave-shell-mode}). Both modes work closely
206 together and form a complete development environment.
208 Here is a brief summary of what IDLWAVE does.
212 Code indentation and formatting.
214 Font-lock support on three levels.
216 Display of calling sequence and keywords of more than 1000 IDL
217 routines routines and any routines in your local IDL library.
219 Name space conflict search.
221 Fast context-sensitive online help.
223 Context sensitive completion of routine names and keywords.
225 Insertion of code templates.
227 Actions to enforce coding standards during typing.
229 Block structure check.
231 Support for @file{imenu} (Emacs) and @file{func-menu} (XEmacs).
233 Documentation support.
235 Running IDL as inferior process.
237 Shell with history search, command line editing and completion.
239 Compilation, execution and debugging of programs directly from the source
242 Examining expressions with a mouse click.
247 Here are a number of screenshots showing IDLWAVE in action.
251 @uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/font-lock.gif,
252 XEmacs 21.1 with formatted and fontified code}
254 @uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/rinfo.gif,
255 XEmacs 21.1 displaying routine info}
257 @uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/complete.gif,
258 XEmacs 21.1 completing a keyword}
260 @uref{http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave/shell.gif,
261 XEmacs 21.1 with debugging toolbar; execution stopped at a breakpoint}
265 In this manual, each section contains a list of user options related to
266 the subject. Don't be confused by the shear number of options available
267 -- in most cases the default settings are just fine. The variables are
268 listed here to make sure you know where to look if you want to change
269 things. For a full description of what a particular variable does and
270 how to configure it, see the documentation string of that variable.
271 Some configuration examples are also given in the appendix.
273 @node IDLWAVE in a Nutshell, Getting Started, Introduction, Top
274 @chapter IDLWAVE in a Nutshell
275 @cindex Summary of important commands
276 @cindex IDLWAVE in a Nutshell
277 @cindex Nutshell, IDLWAVE in a
279 @subheading Editing IDL Programs
281 @multitable @columnfractions .15 .85
283 @tab Indent the current line relative to context.
285 @tab Re-indent all lines in the current region.
286 @item @kbd{M-@key{RET}}
287 @tab Start a continuation line. Or split the current line at point.
289 @tab Fill the current comment paragraph.
291 @tab Display calling sequence, keywords of the procedure/function call
294 @tab Context sensitive online help.
295 @item @kbd{M-@key{TAB}}
296 @tab Complete a procedure name, function name or keyword in the buffer.
298 @tab Update IDLWAVE's knowledge about functions and procedures.
300 @tab Find the source code of a procedure/function.
302 @tab Insert a standard documentation header.
304 @tab Insert a new timestamp and history item in the documentation header.
307 @subheading Running the IDLWAVE Shell, Debugging Programs
309 @multitable @columnfractions .15 .85
311 @tab Start IDL as a subprocess and/or switch to the interaction buffer.
313 @tab Cycle back through IDL command history matching command line input.
316 @item @kbd{M-@key{TAB}}
317 @tab Complete a procedure name, function name or keyword in the shell buffer.
318 @item @kbd{C-c C-d C-c}
319 @tab Save and compile the source file in the current buffer.
320 @item @kbd{C-c C-d C-x}
321 @tab Goto next syntax error.
322 @item @kbd{C-c C-d C-b}
323 @tab Set a breakpoint at the current source line.
324 @item @kbd{C-c C-d C-d}
325 @tab Clear the current breakpoint.
326 @item @kbd{C-c C-d C-p}
327 @tab Ask IDL to print the value of the expression near point.
330 @subheading Commonly used Settings in @file{.emacs}
332 ;; Change the indentation preferences
333 (setq idlwave-main-block-indent 2 ; default 0
334 idlwave-block-indent 2 ; default 4
335 idlwave-end-offset -2) ; default -4
336 ;; Pad some operators with spaces
337 (setq idlwave-do-actions t
338 idlwave-surround-by-blank t)
339 ;; Syntax Highlighting
340 (add-hook 'idlwave-mode-hook 'turn-on-font-lock)
341 ;; Automatically start the shell when needed
342 (setq idlwave-shell-automatic-start t)
343 ;; Bind debugging commands with CONTROL and SHIFT modifiers
344 (setq idlwave-shell-debug-modifiers '(control shift))
345 ;; Where are the online help files?
346 (setq idlwave-help-directory "~/.idlwave")
349 @node Getting Started, The IDLWAVE Major Mode, IDLWAVE in a Nutshell, Top
350 @chapter Getting Started (Tutorial)
353 @cindex Getting Started
355 @section Lession I: Development Cycle
357 The purpose of this tutorial is to guide you through a very basic
358 development cycle with IDLWAVE. We will type a simple program into a
359 buffer and use the shell to compile, debug and run this program. On the
360 way we will use the most important commands in IDLWAVE. Note
361 however that there is much more funtionality available in IDLWAVE than
362 we cover here, and it will pay off greatly if eventually you go further
363 and read the whole manual.
365 I assume that you have access to Emacs or XEmacs with the full IDLWAVE
366 package including online help (@pxref{Installation}). I also assume
367 that you are familiar with Emacs and can read the nomenclature of key
368 presses in Emacs (in particular, @kbd{C} stands for @key{CONTROL} and
369 @kbd{M} for @key{META} (often the @key{ALT} key carries this
372 Open a new source file by typing
375 @kbd{C-x C-f tutorial.pro @key{RET}}
378 A buffer for this file will pop up, and it should be in IDLWAVE mode.
379 You can see this by looking at the mode line, just below the editing
380 window. Also, the menu bar should contain entries @samp{IDLWAVE} and
383 Now cut-and-paste the following program, also available as
384 @file{tutorial.pro} in the IDLWAVE distribution.
388 ;; compute a sequence number for a date
390 if y lt 100 then y = y+1900
391 if m le 2 then delta = 1 else delta = 0
392 m1 = m + delta*12 + 1
394 return, d + floor(m1*30.6)+floor(y1*365.25)+5
397 function weekday,day,month,year
398 ;; compute weekday number for date
399 nr = daynr(day,month,year)
403 pro plot_wday,day,month
404 ;; Plot the weekday of a date in the first 10 years of this century.
405 years = 2000,+indgen(10)
407 for i=0,n_elements(wdays)-1 do begin
408 wdays[i] = weekday(day,month,years[i])
410 plot,years,wdays,YS=2,YT="Wday (0=sunday)"
414 The indentation probably looks funny, since it's different from the
415 settings you use, so use the @key{TAB} key in each line to automatically
416 line it up (or more quickly @emph{select} the entire buffer with
417 @kbd{C-x h} followed by @kbd{M-C-\}). Notice how different syntactical
418 elements are highlighted in different colors, if you have set up support
421 Let's check out two particular editing features of IDLWAVE. Place the
422 cursor after the @code{end} statement of the @code{for} loop and press
423 @key{SPC}. IDLWAVE blinks back to the beginning of the block and
424 changes the generic @code{end} to the specific @code{endfor}
425 automatically. Now place the cursor in any line you would like to split
426 into two and press @kbd{M-@key{RET}}. The line is split at the cursor
427 position, with the continuation @samp{$} and indentation all taken care
428 of. Use @kbd{C-/} to undo the last change.
430 The procedure @code{plot_wday} is supposed to plot the weekday of a given
431 date for the first 10 years of the 21st century. I have put in a few
432 bugs which we are going to fix now.
434 First, let's launch the IDLWAVE shell. You do this with the command
435 @kbd{C-c C-s}. The Emacs window will split and display IDL running in a
436 shell interaction buffer. Type a few commands like @code{print,!PI} to
437 convince yourself that you can work there like in an xterminal, or the
438 IDLDE. Use the arrow keys to cycle through your command history. Are
441 Now go back to the source window and type @kbd{C-c C-d C-c} to compile
442 the program. If you watch the shell buffer, you see that IDLWAVE types
443 @samp{.run tutorial.pro} for you. But the compilation fails because
444 there is a comma in the line @samp{years=...}. The line with the error
445 is highlighted and the cursor positioned at the error, so remove the
446 comma (you should only need to hit Delete!). Compile again, using the
447 same keystrokes as before. Notice that the file is saved for you. This
448 time everything should work fine, and you should see the three routines
451 Now we want to use the command to plot the weekdays for January 1st. We
452 could type the full command ourselves, but why do that? Go back to the
453 shell window, type @samp{plot_} and hit @key{TAB}. After a bit of a
454 delay (while IDLWAVE initializes its routine info database), the window
455 will split to show all procedures it knows starting with that string,
456 and @w{@code{plot_wday}} should be one of them. Saving the buffer was
457 enough to tell IDLWAVE about this new routine. Click with the middle
458 mouse button on @code{plot_wday} and it will be copied to the shell
459 buffer, or if you prefer, add @samp{w} to @samp{plot_} to make it
460 unambiguous, hit @key{TAB}, and the full routine name will be completed.
461 Now provide the two arguments:
468 and press @key{RET}. This fails with an error message telling you the
469 @code{YT} keyword to plot is ambiguous. What are the allowed keywords
470 again? Go back to the source window and put the cursor into the `plot'
471 line, and press @kbd{C-c ?}. This pops up the routine info window for
472 the plot routine, which contains a list of keywords, and the argument
473 list. Oh, we wanted @code{YTITLE}. Fix that up. Recompile with
474 @kbd{C-c C-d C-c}. Jump back into the shell with @kbd{C-c C-s}, press
475 the @key{UP} arrow to recall the previous command and execute again.
477 This time we get a plot, but it is pretty ugly -- the points are all
478 connected with a line. Hmm, isn't there a way for @code{plot} to use
479 symbols instead? What was that keyword? Position the cursor on the
480 plot line after a comma (where you'd normally type a keyword), and hit
481 @kbd{M-@key{Tab}}. A long list of plot's keywords appears. Aha, there
482 it is, @code{PSYM}. Middle click to insert it. An @samp{=} sign is
483 included for you too. Now what were the values of @code{PSYM} supposed
484 to be? With the cursor on or after the keyword, press @kbd{M-?} for
485 online help (alternatively, you could have right clicked on the colored
486 keyword itself in the completion list). The online help window will pop
487 up showing the documentation for the @code{PYSM} keyword. Ok, let's use
488 diamonds=4. Fix this, recompile (you know the command by now: @kbd{C-c
489 C-d C-c}, go back to the shell (if it's vanished, you know the command
490 to recall it by now: @kbd{C-c C-s}) and execute again. Now things look
493 Lets try a different day - how about April fool's day?
499 Oops, this looks very wrong. All April fool's days cannot be
500 Fridays! We've got a bug in the program, perhaps in the @code{daynr}
501 function. Lets put a breakpoint on the last line there. Position the
502 cursor on the @samp{return, d+...} line and press @kbd{C-c C-d C-b}.
503 IDL sets a breakpoint (as you see in the shell window), and the line is
504 highlighted in some way. Back to the shell buffer, re-execute the
505 previous command. IDL stops at the line with the breakpoint. Now hold
506 down the SHIFT key and click with the middle mouse button on a few
507 variables there: @samp{d}, @samp{y}, @samp{m}, @samp{y1}, etc. Maybe
508 @code{d} isn't the correct type. CONTROL-SHIFT middle-click on it for
509 help. Well, it's an integer, so that's not the problem. Aha, @samp{y1}
510 is zero, but it should be the year, depending on delta. Shift click
511 @samp{delta} to see that it's 0. Below, we see the offending line:
512 @samp{y1=y*delta...} the multiplication should have been a minus sign!
519 Now remove all breakpoints: @kbd{C-c C-d C-a}. Recompile and rerun the
520 command. Everything should now work fine. How about those leap years?
521 Change the code to plot 100 years and see that every 28 years, the
522 sequence of weekdays repeats.
524 @section Lession II: Customization
526 Emacs is probably the most customizable piece of software available, and
527 it would be a shame if you did not make use of this and adapt IDLWAVE to
528 your own preferences. Customizing Emacs or IDLWAVE means that you have
529 to set Lisp variables in the @file{.emacs} file in your home directory.
530 This looks scary to many people because of all the parenthesis.
531 However, you can just cut and paste the examples given here and work
534 Lets first use a boolean variable. These are variables which you turn
535 on or off, much like a checkbox. A value of @samp{t} means on, a
536 value of @samp{nil} means off. Copy the following line into your
537 @file{.emacs} file, exit and restart Emacs.
540 (setq idlwave-reserved-word-upcase t)
543 When this option is turned on, each reserved word you type into an IDL
544 source buffer will be converted to upper case when you press @key{SPC}
545 or @key{RET} right after the word. Try it out! @samp{if} changes to
546 @samp{IF}, @samp{begin} to @samp{BEGIN}. If you don't like this
547 behavior, remove the option again from your @file{.emacs} file.
549 Now I bet you have your own indentation preferences for IDL code. For
550 example, I like to indent the main block of an IDL program a bit,
551 different from the conventions used by RSI. Also, I'd like to use only
552 3 spaces as indentation between @code{BEGIN} and @code{END}. Try the
553 following lines in @file{.emacs}
556 (setq idlwave-main-block-indent 2)
557 (setq idlwave-block-indent 3)
558 (setq idlwave-end-offset -3)
561 Restart Emacs, take the program we developed in the first part of this
562 tutorial and re-indent it with @kbd{C-c h} and @kbd{M-C-\}. You
563 probably want to keep these lines in @file{.emacs}, with values adjusted
564 to your likings. If you want to get more information about any of these
565 variables, type, e.g., @kbd{C-h v idlwave-main-block-indent @key{RET}}.
566 To find which variables can be customized, look for items marked
567 @samp{User Option:} in the manual.
569 If you cannot wrap your head around this Lisp stuff, there is another,
570 more user-friendly way to customize all the IDLWAVE variables. You can
571 access it through the IDLWAVE menu in one of the @file{.pro} buffers,
572 option @code{Customize->Browse IDLWAVE Group}. Here you'll be presented
573 with all the various variables grouped into categories. You can
574 navigate the hierarchy (e.g. Idlwave Code Formatting->Idlwave Main Block
575 Indent), read about the variables, change them, and `Save for Future
576 Sessions'. Few of these variables need customization, but you can
577 exercise considerable control over IDLWAVE's functionality with them.
579 Many people I talk to find the key bindings used for the debugging
580 commands too long and complicated. Do I always have to type @kbd{C-c
581 C-d C-c} to get a single simple command? Due to Emacs rules and
582 conventions I cannot make better bindings by default, but you can.
583 First, there is a way to assign all debugging commands in a single sweep
584 to other combinations. The only problem is that we have to use
585 something which Emacs does not need for other important commands. A
586 good option is to execute debugging commands by holding down
587 @key{CONTROL} and @key{SHIFT} while pressing a single character:
588 @kbd{C-S-b} for setting a breakpoint, @kbd{C-S-c} for compiling the
589 current source file, @kbd{C-S-a} for deleting all breakpoints. You can
593 (setq idlwave-shell-debug-modifiers '(shift control))
596 If you have a special keyboard with for example a @key{HYPER} key, you
600 (setq idlwave-shell-debug-modifiers '(hyper))
603 instead to get compilation on @kbd{H-c}.
605 You can also assign specific commands to function keys. This you must
606 do in the @emph{mode-hook}, a special function which is run when a new
607 buffer gets set up. Keybindings can only be done when the buffer
608 exists. The possibilities for key customization are endless. Here we
609 set function keys f5-f8 to common debugging commands.
612 ;; First for the source buffer
613 (add-hook 'idlwave-mode-hook
615 (local-set-key [f5] 'idlwave-shell-break-here)
616 (local-set-key [f6] 'idlwave-shell-clear-current-bp)
617 (local-set-key [f7] 'idlwave-shell-cont)
618 (local-set-key [f8] 'idlwave-shell-clear-all-bp)))
619 ;; Then for the shell buffer
620 (add-hook 'idlwave-shell-mode-hook
622 (local-set-key [f5] 'idlwave-shell-break-here)
623 (local-set-key [f6] 'idlwave-shell-clear-current-bp)
624 (local-set-key [f7] 'idlwave-shell-cont)
625 (local-set-key [f8] 'idlwave-shell-clear-all-bp)))
628 @section Lession III: Library Catalog
630 We have already used the routine info display in the first part of this
631 tutorial. This was the key @kbd{C-c ?} which displays information about
632 the IDL routine near the cursor position. Wouldn't it be nice
633 to have the same available for your own library routines and for the
634 huge amount of code in major extension libraries like JHUPL or the
635 IDL-Astro library? To do this, you must give IDLWAVE a chance to study
636 these routines first. We call this @emph{Building the library catalog}.
638 From the IDLWAVE entry in the menu bar, select @code{Routine Info/Select
639 Catalog Directories}. If necessary, start the shell first with @kbd{C-c
640 C-s} (@pxref{Starting the Shell}). IDLWAVE will find out about the IDL
641 @code{!PATH} variable and offer a list of directories on the path.
642 Simply select them all (or whichever you want) and click on the
643 @samp{Scan&Save} button. Then go for a cup of coffee while IDLWAVE
644 collects information for each and every IDL routine on your search path.
645 All this information is written to the file @file{.idlcat} in your home
646 directory and will from now one be automatically loaded whenever you use
647 IDLWAVE. Try to use routine info (@kbd{C-c ?}) or completion
648 (@kbd{M-<TAB>}) while on any routine or partial routine name you know to
649 be located in the library. E.g., if you have scanned the IDL-Astro
657 expands to `readfits('. Then try
660 a=readfits(@key{C-c ?}
666 Usage: Result = READFITS(filename, header, heap)
670 I hope you made it until here. Now you are set to work with IDLWAVE.
671 On the way you will want to change other things, and to learn more about
672 the possibilities not discussed in this short tutorial. Read the
673 manual, look at the documentation strings of interesting variables (with
674 @kbd{C-h v idlwave<-variable-name> @key{RET}}) and ask the remaining
675 questions on @code{comp.lang.idl-pvwave}.
677 @node The IDLWAVE Major Mode, The IDLWAVE Shell, Getting Started, Top
678 @chapter The IDLWAVE Major Mode
679 @cindex IDLWAVE major mode
680 @cindex Major mode, @code{idlwave-mode}
682 The IDLWAVE major mode supports editing IDL and WAVE/CL command files.
683 In this chapter we describe the main features of the mode and how to
687 * Code Formatting:: Making code look nice
688 * Routine Info:: Calling Sequence and Keyword List
689 * Online Help:: One key press from source to help
690 * Completion:: Completing routine names and Keywords
691 * Routine Source:: How to visit the source file of routine XYZ
692 * Resolving Routines:: Force the Shell to compile a routine
693 * Code Templates:: Abbreviations for frequent constructs
694 * Actions:: Changing case, Padding, End checking
695 * Doc Header:: Inserting a standard header
696 * Motion Commands:: Moving through the structure of a program
697 * Misc Options:: Things that fit nowhere else
700 @node Code Formatting, Routine Info, The IDLWAVE Major Mode, The IDLWAVE Major Mode
701 @section Code Formatting
702 @cindex Code formatting
703 @cindex Formatting, of code
706 * Code Indentation:: Reflecting the logical structure
707 * Comment Indentation:: Special indentation for comment lines
708 * Continuation Lines:: Splitting statements over lines
709 * Syntax Highlighting:: Font-lock support
712 @node Code Indentation, Comment Indentation, Code Formatting, Code Formatting
713 @subsection Code Indentation
714 @cindex Code indentation
717 Like all Emacs programming modes, IDLWAVE performs code indentation.
718 The @key{TAB} key indents the current line relative to context.
719 @key{LFD} insert a newline and indents the new line. The indentation is
720 governed by a number of variables.
722 @cindex Foreign code, adapting
723 @cindex Indentation, of foreign code
725 To re-indent a larger portion of code (e.g. when working with foreign code
726 written with different conventions), use @kbd{M-C-\}
727 (@code{indent-region}) after marking the relevant code. Useful marking
728 commands are @kbd{C-x h} (the entire file) or @kbd{M-C-h} (the
729 current subprogram). @xref{Actions}, for information how to impose
730 additional formatting conventions on foreign code.
732 @defopt idlwave-main-block-indent (@code{0})
733 Extra indentation for the main block of code. That is the block between
734 the FUNCTION/PRO statement and the END statement for that program
738 @defopt idlwave-block-indent (@code{5})
739 Extra indentation applied to block lines. If you change this, you
740 probably also want to change @code{idlwave-end-offset}.
743 @defopt idlwave-end-offset (@code{-4})
744 Extra indentation applied to block END lines. A value equal to negative
745 @code{idlwave-block-indent} will make END lines line up with the block
749 @defopt idlwave-continuation-indent (@code{2})
750 Extra indentation applied to continuation lines and inside unbalanced
754 @node Comment Indentation, Continuation Lines, Code Indentation, Code Formatting
755 @subsection Comment Indentation
756 @cindex Comment indentation
757 @cindex Hanging paragraphs
758 @cindex Paragraphs, filling
759 @cindex Paragraphs, hanging
761 In IDL, lines starting with a @samp{;} are called @emph{comment lines}.
762 Comment lines are indented as follows:
764 @multitable @columnfractions .1 .90
766 @tab The indentation of lines starting with three semicolons remains
769 @tab Lines starting with two semicolons are indented like the surrounding code.
771 @tab Lines starting with a single semicolon are indent to a minimum column.
775 The indentation of comments starting in column 0 is never changed.
777 @defopt idlwave-no-change-comment
778 The indentation of a comment starting with this regexp will not be changed.
781 @defopt idlwave-begin-line-comment
782 A comment anchored at the beginning of line.
785 @defopt idlwave-code-comment
786 A comment that starts with this regexp is indented as if it is a part of
790 @node Continuation Lines, Syntax Highlighting, Comment Indentation, Code Formatting
791 @subsection Continuation Lines and Filling
792 @cindex Continuation lines
793 @cindex Line splitting
794 @cindex String splitting
795 @cindex Splitting, of lines
798 In IDL, a newline character terminates a statement unless preceded by a
799 @samp{$}. If you would like to start a continuation line, use
800 @kbd{M-@key{RET}} which calls the command @code{idlwave-split-line}. It
801 inserts a @samp{$} to indicate that the following line is a continuation
802 of the current line, terminates the line with a newline and indents the
803 new line. The command @kbd{M-@key{RET}} can also be used in the middle
804 of a line to split the line at that point. When used inside a long
805 string constant, the string is split with the @samp{+} concatenation
809 @cindex @code{auto-fill-mode}
810 @cindex Hanging paragraphs
811 When filling comment paragraphs, IDLWAVE overloads the normal filling
812 functions and uses a function which creates hanging paragraphs as they
813 are customary in the IDL routine headers. When @code{auto-fill-mode} is
814 turned on (toggle with @kbd{C-c C-a}), comments will be auto-filled. If
815 the first line of a paragraph is matched by
816 @code{idlwave-hang-indent-regexp}, subsequent lines are indented to
817 after the position of this match, as in the following example.
821 ; x - an array containing
822 ; lots of interesting numbers.
824 ; y - another variable where
825 ; a hanging paragraph is used
830 You also refill a comment paragraph with @kbd{M-q}.
832 @defopt idlwave-fill-comment-line-only (@code{t})
833 Non-@code{nil} means auto fill will only operate on comment lines.
836 @defopt idlwave-auto-fill-split-string (@code{t})
837 Non-@code{nil} means auto fill will split strings with the IDL @samp{+}
841 @defopt idlwave-split-line-string (@code{t})
842 Non-@code{nil} means @code{idlwave-split-line} will split strings with
846 @defopt idlwave-hanging-indent (@code{t})
847 Non-@code{nil} means comment paragraphs are indented under the hanging
848 indent given by @code{idlwave-hang-indent-regexp} match in the first
849 line of the paragraph.
852 @defopt idlwave-hang-indent-regexp
853 Regular expression matching the position of the hanging indent
854 in the first line of a comment paragraph.
857 @defopt idlwave-use-last-hang-indent (@code{nil})
858 Non-@code{nil} means use last match on line for
859 @code{idlwave-indent-regexp}.
862 @node Syntax Highlighting, , Continuation Lines, Code Formatting
863 @subsection Syntax Highlighting
864 @cindex Syntax highlighting
865 @cindex Highlighting of syntax
868 Highlighting of keywords, comments, strings etc. can be accomplished
869 with @code{font-lock}. If you are using @code{global-font-lock-mode}
870 (on Emacs), or have @code{font-lock} turned on in any other buffer in
871 XEmacs, it should also automatically work in IDLWAVE buffers. If not,
872 you can enforce it with the following line in your @file{.emacs}
875 (add-hook 'idlwave-mode-hook 'turn-on-font-lock)
878 IDLWAVE supports 3 levels of syntax highlighting. The variable
879 @code{font-lock-maximum-decoration} determines which level is selected.
881 @defopt idlwave-default-font-lock-items
882 Items which should be fontified on the default fontification level
886 @node Routine Info, Online Help, Code Formatting, The IDLWAVE Major Mode
887 @section Routine Info
889 @cindex Updating routine info
890 @cindex Scanning buffers for routine info
891 @cindex Buffers, scanning for routine info
892 @cindex Shell, querying for routine info
895 IDL defines more than one thousand procedures, functions and object
896 methods. This large command set makes it difficult to remember the
897 calling sequence and keywords of a command. IDLWAVE contains a list of
898 all builtin routines with calling sequences and keywords@footnote{This
899 list was created by scanning the IDL manual and might contain (very few)
900 errors. Please report any detected errors to the maintainer, so that
901 they can be fixed.}. It also scans Emacs buffers and library files for
902 routine definitions and queries the IDLWAVE-Shell for the properties of
903 modules currently compiled under the shell. This information is updated
904 automatically. If you think the information is not up-to-date, use
905 @kbd{C-c C-i} (@code{idlwave-update-routine-info}) to enforce a global
909 To display the information about a routine, press @kbd{C-c ?} which
910 calls the command @code{idlwave-routine-info}. When the current cursor
911 position is on the name or in the argument list of a procedure or
912 function, information will be displayed about the routine. For example,
913 consider the cursor positions in the following line
916 plot,x,alog(x+5*sin(x) + 2),
920 @cindex Default routine, for info and help
921 On positions 1,2 and 8, information about the @samp{plot} procedure will
922 be shown. On positions 3,4, and 7, the @samp{alog} function will be
923 described, while positions 5 and 6 will select the @samp{sin} function.
924 When you ask for routine information about an object method, and the
925 method exists in several classes, IDLWAVE queries for the class of the
928 @cindex Calling sequences
929 @cindex Keywords of a routine
930 @cindex Routine source information
931 The description displayed contains the calling sequence, the list of
932 keywords and the source location of this routine. It looks like this:
935 Usage: XMANAGER, NAME, ID
936 Keywords: BACKGROUND CATCH CLEANUP EVENT_HANDLER GROUP_LEADER
937 JUST_REG MODAL NO_BLOCK
938 Source: SystemLib [CSB] /soft1/idl53/lib/xmanager.pro
941 @cindex Categories, of routines
942 @cindex Load-path shadows
943 @cindex Shadows, load-path
944 @cindex IDL variable @code{!PATH}
945 @cindex @code{!PATH}, IDL variable
946 @cindex IDL variable @code{!DIR}
947 @cindex @code{!DIR}, IDL variable
949 If a definition of this routine exists in several files accessible to
950 IDLWAVE, several @samp{Source} lines will point to the different files.
951 This may indicate that your routine is shadowing a library routine,
952 which may or may not be what you want (@pxref{Load-Path Shadows}). The
953 information about the calling sequence and the keywords is derived from
954 the first source listed. Library routines can only be supported if you
955 have scanned the local IDL library (@pxref{Library Catalog}). The source
956 entry consists of a @emph{source category}, a set of @emph{flags} and
957 the path to the @emph{source file}. The following categories
960 @multitable @columnfractions .15 .85
962 @tab A system routine, but we do not know if it is @i{Builtin} or
963 @i{SystemLib}. When the system library has bee scanned
964 (@pxref{Library Catalog}), this category will automatically split into the
967 @tab A builtin routine with no source code available.
969 @tab A library routine in the official lib directory @file{!DIR/lib}.
971 @tab A library routine in the official lib directory @file{!DIR/lib/obsolete}.
973 @tab A file on IDL's search path @code{!PATH}.
975 @tab Any other file not known to be on the search path.
977 @tab The shell lists this routine as unresolved.
980 You can define additional categories based on the file name and path
981 with the variable @code{idlwave-special-lib-alist}.
983 @cindex Flags, in routine info
984 @cindex Duplicate routines
985 @cindex Multiply defined routines
986 @cindex Routine definitions, multiple
987 The flags @code{[CSB]} indicate if the file is known to IDLWAVE from the
988 library catalog (@w{@code{[C--]}}, @pxref{Library Catalog}), from the Shell
989 (@w{@code{[-S-]}}) or from an Emacs buffer (@w{@code{[--B]}}).
990 Combinations are possible. If a file contains multiple definitions of
991 the same routine, the file name will be prefixed with @samp{(Nx)} where
992 @samp{N} is the number of definitions.
994 @cindex Online Help from the routine info buffer
995 @cindex Active text, in routine info
996 @cindex Inserting keywords, from routine info
997 @cindex Source file, access from routine info
998 Some of the text in the @file{*Help*} buffer will be active (it
999 highlights when you move the mouse over it). Clicking on these items
1000 will have the following effects:
1002 @multitable @columnfractions 0.15 0.85
1004 @tab If online help is installed, a click with the @emph{right} mouse
1005 button on the @i{Usage:} line will access the help for the
1006 routine (@pxref{Online Help}).
1008 @tab Online help about keywords is also available with the
1009 @emph{right} mouse button. Clicking on a keyword with the @emph{middle}
1010 mouse button will insert this keyword in the buffer from where
1011 @code{idlwave-routine-info} was called. Holding down @key{SHIFT} while
1012 clicking also adds the initial @samp{/}.
1014 @tab Clicking with the @emph{middle} mouse button on a @samp{Source} line
1015 finds the source file of the routine and visits it in another window.
1016 Another click on the same line switches back to the buffer from which
1017 @kbd{C-c ?} was called. If you use the @emph{right} mouse button, the
1018 source will not be visited by a buffer, but displayed in the online help
1021 @tab The @i{Classes} line is only included in the routine info window if
1022 the current class inherits from other classes. You can click with the
1023 @emph{middle} mouse button to display routine info about the current
1024 method in other classes on the inheritance chain.
1027 @defopt idlwave-resize-routine-help-window (@code{t})
1028 Non-@code{nil} means, resize the Routine-info @file{*Help*} window to
1032 @defopt idlwave-special-lib-alist
1033 Alist of regular expressions matching special library directories.
1036 @defopt idlwave-rinfo-max-source-lines (@code{5})
1037 Maximum number of source files displayed in the Routine Info window.
1042 @node Online Help, Completion, Routine Info, The IDLWAVE Major Mode
1043 @section Online Help
1046 @cindex @file{idlw-help.txt}
1047 @cindex @file{idlw-help.el}
1048 @cindex IDL manual, ASCII version
1049 @cindex Installing online help
1050 @cindex Online Help, Installation
1051 @cindex Speed, of online help
1052 For IDL system routines, RSI provides extensive documentation. IDLWAVE
1053 can access an ASCII version of this documentation very quickly and
1054 accurately. This is @emph{much} faster than using the IDL online help
1055 application, also because usually IDLWAVE gets you to the right place in
1056 the docs directly, without additional browsing and scrolling. For this
1057 online help to work, you need an ASCII version of the IDL documentation
1058 which is not part of the standard IDLWAVE distribution. The required
1059 files can be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, the
1060 maintainers webpage}. As the text is extracted from PDF files, the
1061 formatting of the help text is good for normal text, but graphics and
1062 multiline equations will not be well represented. See also
1063 @ref{Documentation Scan}.
1065 @cindex Source code, as online help
1066 @cindex DocLib header, as online help
1067 For routines which are not documented in the IDL manual (for example
1068 your own routines), the source code is used as help text. If the
1069 requested information can be found in a (more or less) standard DocLib
1070 file header, IDLWAVE shows the header. Otherwise the routine definition
1071 statement (@code{pro}/@code{function}) is shown.
1074 In any IDL program, press @kbd{M-?} (@code{idlwave-context-help}) or
1075 click with @kbd{S-mouse-3} to access context sensitive online help. The
1076 following locations are recognized as context:
1078 @cindex Context, for online help
1079 @multitable @columnfractions .25 .75
1080 @item @i{Routine name}
1081 @tab The name of a routine (function, procedure, method).
1082 @item @i{Keyword Parameter}
1083 @tab Keyword parameter of a routine.
1084 @item @i{System Variable}
1085 @tab System variable like @code{!DPI}.
1086 @item @i{IDL Statement}
1087 @tab Like @code{PRO}, @code{REPEAT}, or @code{COMPILE_OPT}.
1088 @item @i{Class name}
1089 @tab Class name in @code{OBJ_NEW} call.
1090 @item @i{Executive Command}
1091 @tab Executive command like @code{.RUN}. Mostly useful in the shell.
1093 @tab The routine that would be selected for routine info display.
1096 @cindex @code{OBJ_NEW}, special online help
1097 Note that the @code{OBJ_NEW} function is special in that the help
1098 displayed depends on the cursor position: If the cursor is on the
1099 @samp{OBJ_NEW}, this function is described. If it is on the class name
1100 inside the quotes, the documentation for the class is pulled up. If the
1101 cursor is @emph{after} the class name, anywhere in the argument list,
1102 the documentation for the corresponding @code{Init} method and its
1103 keywords is targeted.
1105 @noindent Apart from source buffers, there are two more places from
1106 which online help can be accessed.
1110 Online help for routines and keywords can be accessed through the
1111 Routine Info display. Click with @kbd{mouse-3} on an item to see the
1112 corresponding help (@pxref{Routine Info}).
1114 When using completion and Emacs pops up a window with possible
1115 completions, clicking with @kbd{mouse-3} on a completion item invokes
1116 help on that item (@pxref{Completion}).
1119 In both cases, a blue face indicates that the item is documented in the
1124 @cindex Help application, keybindings
1125 @cindex Keybindings, in help application
1126 The help window is normally displayed in a separate frame. The
1127 following commands can be used to navigate inside the help system.
1129 @multitable @columnfractions .15 .85
1130 @item @kbd{@key{SPACE}}
1131 @tab Scroll forward one page.
1132 @item @kbd{@key{RET}}
1133 @tab Scroll forward one line.
1134 @item @kbd{@key{DEL}}
1135 @tab Scroll back one page.
1137 @tab Browse to the next or previous topic (in physical sequence).
1139 @tab Move back and forward through the help topic history.
1141 @tab Clear the history.
1143 @tab Follow a link. Active links are displayed in a different font.
1144 Items under @i{See Also} are active, and classes have links to their
1147 @tab Open a topic. The topic can be selected with completion.
1149 @tab Load the whole help file into Emacs, for global text searches.
1151 @tab Kill the help window.
1155 @noindent When the help text is a source file, the following commands
1157 @multitable @columnfractions .15 .85
1159 @tab Jump to DocLib Header of the routine whose source is displayed
1162 @tab Jump to the first DocLib Header in the file.
1163 @item @kbd{.} @r{(Dot)}
1164 @tab Jump back and forth between the routine definition (the
1165 @code{pro}/@code{function} statement) and the description of the help
1166 item in the DocLib header.
1168 @tab Fontify the buffer like source code. See the variable @code{idlwave-help-fontify-source-code}.
1171 @defopt idlwave-help-directory
1172 The directory where idlw-help.txt and idlw-help.el are stored.
1175 @defopt idlwave-help-use-dedicated-frame (@code{t})
1176 Non-nil means, use a separate frame for Online Help if possible.
1179 @defopt idlwave-help-frame-parameters
1180 The frame parameters for the special Online Help frame.
1183 @defopt idlwave-max-popup-menu-items (@code{20})
1184 Maximum number of items per pane in popup menus.
1187 @defopt idlwave-extra-help-function
1188 Function to call for help if the normal help fails.
1191 @defopt idlwave-help-fontify-source-code (@code{nil})
1192 Non-nil means, fontify source code displayed as help.
1195 @defopt idlwave-help-source-try-header (@code{t})
1196 Non-nil means, try to find help in routine header when displaying source
1200 @defopt idlwave-help-link-face
1201 The face for links to IDLWAVE online help.
1204 @defopt idlwave-help-activate-links-agressively (@code{t})
1205 Non-@code{nil} means, make all possible links in help window active.
1208 @node Completion, Routine Source, Online Help, The IDLWAVE Major Mode
1211 @cindex Keyword completion
1212 @cindex Method completion
1213 @cindex Object method completion
1214 @cindex Class name completion
1215 @cindex Function name completion
1216 @cindex Procedure name completion
1220 IDLWAVE offers completion for class names, routine names and keywords.
1221 As in many programming modes, completion is bound to @kbd{M-@key{TAB}}.
1222 Completion uses the same internal information as routine info, so when
1223 necessary it can be updated with @kbd{C-c C-i}
1224 (@code{idlwave-update-routine-info}).
1226 The completion function is context sensitive and figures out what to
1227 complete at point. Here are example lines and what @kbd{M-@key{TAB}}
1228 would try to complete when the cursor is on the position marked with a
1234 plot,xra* @r{Keyword of @code{plot} procedure}
1235 plot,x,y,/x* @r{Keyword of @code{plot} procedure}
1236 plot,min(* @r{Keyword of @code{min} function}
1237 obj -> a* @r{Object method (procedure)}
1238 a(2,3) = obj -> a* @r{Object method (function)}
1239 x = obj_new('IDL* @r{Class name}
1240 x = obj_new('MyCl',a* @r{Keyword to @code{Init} method in class @code{MyCl}}
1241 pro A* @r{Class name}
1242 pro * @r{Fill in @code{Class::} of first method in this file}
1243 !v* @r{System variable}
1244 !version.t* @r{Structure tag of system variable}
1245 self.g* @r{Class structure tag in methods}
1248 @cindex Scrolling the @file{*Completions*} window
1249 @cindex Completion, scrolling
1250 @cindex Completion, Online Help
1251 @cindex Online Help in @file{*Completions*} buffer
1252 If the list of completions is too long to fit in the
1253 @file{*Completions*} window, the window can be scrolled by pressing
1254 @kbd{M-@key{TAB}} repeatedly. Online help (if installed) for each
1255 possible completion is available by clicking with @kbd{mouse-3} on the
1256 item. Items for which system online help (from the IDL manual) is
1257 available will be displayed in a different font. For other items, the
1258 corresponding source code or DocLib header is available as help text.
1260 @cindex Case of completed words
1261 @cindex Mixed case completion
1262 The case of the completed words is determined by what is already in the
1263 buffer. When the partial word being completed is all lower case, the
1264 completion will be lower case as well. If at least one character is
1265 upper case, the string will be completed in upper case or mixed case.
1266 The default is to use upper case for procedures, functions and keywords,
1267 and mixed case for object class names and methods, similar to the
1268 conventions in the IDL manuals. These defaults can be changed with the
1269 variable @code{idlwave-completion-case}.
1271 @defopt idlwave-completion-case
1272 Association list setting the case (UPPER/lower/Capitalized/...) of completed
1276 @defopt idlwave-completion-force-default-case (@code{nil})
1277 Non-@code{nil} means, completion will always honor the settings in
1278 @code{idlwave-completion-case}. When nil (the default), lower case
1279 strings will be completed to lower case.
1282 @defopt idlwave-complete-empty-string-as-lower-case (@code{nil})
1283 Non-@code{nil} means, the empty string is considered lower case for
1287 @defopt idlwave-keyword-completion-adds-equal (@code{t})
1288 Non-@code{nil} means, completion automatically adds @samp{=} after
1292 @defopt idlwave-function-completion-adds-paren (@code{t})
1293 Non-@code{nil} means, completion automatically adds @samp{(} after
1294 completed function. A value of `2' means, also add the closing
1295 parenthesis and position cursor between the two.
1298 @defopt idlwave-completion-restore-window-configuration (@code{t})
1299 Non-@code{nil} means, restore window configuration after successful
1303 @defopt idlwave-highlight-help-links-in-completion (@code{t})
1304 Non-nil means, highlight completions for which system help is available.
1307 @subsubheading Object Method Completion and Class Ambiguity
1308 @cindex Object methods
1309 @cindex Class ambiguity
1310 @cindex @code{self} object, default class
1311 An object method is not uniquely determined without the object's class.
1312 Since the class part is usually omitted in the source code, IDLWAVE
1313 considers all available methods in all classes as possible completions
1314 of an object method name. For keywords, the combined keywords of the
1315 current method in all available classes will be considered. In the
1316 @file{*Completions*} buffer, the classes allowed for each completion
1317 will be shown next to the item (see option
1318 @code{idlwave-completion-show-classes}). As a special case, the class
1319 of an object called @samp{self} object is always the class of the
1320 current routine. All classes it inherits from are considered as well
1323 @cindex Forcing class query.
1324 @cindex Class query, forcing
1325 You can also call @code{idlwave-complete} with a prefix arg: @kbd{C-u
1326 M-@key{TAB}}. IDLWAVE will then prompt you for the class in order to
1327 narrow down the number of possible completions. The variable
1328 @code{idlwave-query-class} can be configured to make this behavior the
1329 default (not recommended). After you have specified the class
1330 for a particular statement (e.g. when completing the method), IDLWAVE
1331 can remember it for the rest of the editing session. Subsequent
1332 completions in the same statement (e.g. keywords) can then reuse this
1333 class information. Remembering the class works by placing a text
1334 property in the object operator @samp{->}. This is not enabled by
1335 default - the variable @code{idlwave-store-inquired-class} can be used
1338 @defopt idlwave-support-inheritance (@code{t})
1339 Non-@code{nil} means, treat inheritance with completion, online help etc.
1342 @defopt idlwave-completion-show-classes (@code{1})
1343 Non-@code{nil} means, show classes in @file{*Completions*} buffer when
1344 completing object methods and keywords.
1347 @defopt idlwave-completion-fontify-classes (@code{t})
1348 Non-@code{nil} means, fontify the classes in completions buffer.
1351 @defopt idlwave-query-class (@code{nil})
1352 Association list governing query for object classes during completion.
1355 @defopt idlwave-store-inquired-class (@code{nil})
1356 Non-@code{nil} means, store class of a method call as text property on
1360 @defopt idlwave-class-arrow-face
1361 Face to highlight object operator arrows @samp{->} which carry a class
1365 @node Routine Source, Resolving Routines, Completion, The IDLWAVE Major Mode
1367 @section Routine Source
1368 @cindex Routine source file
1369 @cindex Module source file
1370 @cindex Source file, of a routine
1372 Apart from clicking on a @i{Source:} line in the routine info window,
1373 there is also another way to find the source file of a routine. The
1374 command @kbd{C-c C-v} (@code{idlwave-find-module}) asks for a module
1375 name, offering the same default as @code{idlwave-routine-info} would
1376 have used. In the minibuffer, specify a complete routine name
1377 (including the class part). IDLWAVE will display the source file in
1380 @cindex Buffers, killing
1381 @cindex Killing autoloaded buffers
1382 Since getting the source of a routine into a buffer is so easy with
1383 IDLWAVE, too many buffers visiting different IDL source files are
1384 sometimes created. The special command @kbd{C-c C-k}
1385 (@code{idlwave-kill-autoloaded-buffers}) can be used to remove these
1388 @node Resolving Routines, Code Templates, Routine Source, The IDLWAVE Major Mode
1389 @section Resolving Routines
1390 @cindex @code{RESOLVE_ROUTINE}
1391 @cindex Compiling library modules
1392 @cindex Routines, resolving
1394 The key sequence @kbd{C-c =} calls the command @code{idlwave-resolve}
1395 and sends the line @samp{RESOLVE_ROUTINE, '@var{routine_name}'} to IDL
1396 in order to resolve (compile) it. The default routine to be resolved is
1397 taken from context, but you get a chance to edit it.
1399 @code{idlwave-resolve} is one way to get a library module within reach
1400 of IDLWAVE's routine info collecting functions. A better way is to
1401 scan (parts of) the library (@pxref{Library Catalog}). Routine info on
1402 library modules will then be available without the need to compile the
1403 modules first, and even without a running shell.
1405 @xref{Sources of Routine Info}, for in-depth information where IDLWAVE
1406 collects data about routines, and how to update this information.
1409 @node Code Templates, Actions, Resolving Routines, The IDLWAVE Major Mode
1410 @section Code Templates
1411 @cindex Code templates
1412 @cindex Abbreviations
1415 IDLWAVE can insert IDL code templates into the buffer. For a few
1416 templates, this is done with direct keybindings:
1418 @multitable @columnfractions .15 .85
1420 @tab @code{CASE} statement template
1422 @tab @code{FOR} loop template
1424 @tab @code{REPEAT} loop template
1426 @tab @code{WHILE} loop template
1429 Otherwise, special abbreviations are used. Emacs abbreviations are
1430 expanded by typing text into the buffer and pressing @key{SPC} or
1431 @key{RET}. The special abbreviations used to insert code templates all
1432 start with a @samp{\} (the backslash). Here are a few examples of
1433 predefined abbreviations. For a full list, use @kbd{M-x
1434 idlwave-list-abbrevs}.
1436 @multitable @columnfractions .15 .85
1438 @tab @code{PROCEDURE} template
1440 @tab @code{FUNCTION} template
1442 @tab @code{CASE} statement template
1444 @tab @code{FOR} loop template
1446 @tab @code{REPEAT} loop template
1448 @tab @code{WHILE} loop template
1450 @tab @code{IF} statement template
1452 @tab @code{IF-ELSE} statement template
1457 The templates are expanded in upper or lower case, depending upon the
1458 variables @code{idlwave-abbrev-change-case} and
1459 @code{idlwave-reserved-word-upcase}.
1461 @defopt idlwave-abbrev-start-char (@code{"\"})
1462 A single character string used to start abbreviations in abbrev
1466 @defopt idlwave-abbrev-move (@code{t})
1467 Non-@code{nil} means the abbrev hook can move point, e.g. to end up
1468 between the parenthesis of a function call.
1471 @node Actions, Doc Header, Code Templates, The IDLWAVE Major Mode
1474 @cindex Coding standards, enforcing
1476 @emph{Actions} are special commands which are executed automatically
1477 while you write code in order to check the structure of the program or
1478 to enforce coding standards. Most actions which have been implemented
1479 in IDLWAVE are turned off by default, assuming that the average user
1480 wants her code the way she writes it. But if you are a lazy typist and
1481 want your code to adhere to certain standards, they can be
1484 Action can be applied in three ways:
1488 Some actions are applied directly while typing. For example, pressing
1489 @samp{=} can run a check to make sure that this operator is surrounded
1490 by spaces and insert these spaces if necessary. Pressing @key{SPC}
1491 after a reserved word can call a command to change the word to upper
1494 When a line is re-indented with @key{TAB}, actions can be applied to the
1495 entire line. To enable this, the variable @code{idlwave-do-actions}
1496 must be non-@code{nil}.
1498 @cindex Foreign code, adapting
1499 @cindex Actions, applied to foreign code
1500 Action can also be applied to a larger piece of code, e.g. in order to
1501 convert foreign code to your own style. To do this, mark the relevant
1502 part of the code and execute @kbd{M-x expand-region-abbrevs}. Useful
1503 marking commands are @kbd{C-x h} (the entire file) or @kbd{M-C-h} (the
1504 current subprogram). @xref{Code Indentation}, for information how to
1505 adjust the indentation of the code.
1508 @defopt idlwave-do-actions (@code{nil})
1509 Non-@code{nil} means performs actions when indenting.
1513 * Block Boundary Check:: Is the END correct
1514 * Padding Operators:: Enforcing space around `=' etc
1515 * Case Changes:: Enforcing upper case keywords
1518 @node Block Boundary Check, Padding Operators, Actions, Actions
1519 @subsection Block Boundary Check
1520 @cindex Block boundary check
1521 @cindex @code{END} type checking
1522 @cindex @code{END}, automatic insertion
1523 @cindex @code{END}, expanding
1524 @cindex Block, closing
1525 @cindex Closing a block
1527 Whenever you type an @code{END} statement, IDLWAVE finds the
1528 corresponding start of the block and the cursor blinks back to that
1529 location for a second. If you have typed a specific @code{END}, like
1530 @code{ENDIF} or @code{ENDCASE}, you get a warning if that kind of END
1531 does not match the type of block it terminates.
1533 Set the variable @code{idlwave-expand-generic-end} in order to have all
1534 generic @code{END} statements automatically expanded to a specific type.
1535 You can also type @kbd{C-c ]} to close the current block by inserting
1536 the appropriate @code{END} statement.
1538 @defopt idlwave-show-block (@code{t})
1539 Non-@code{nil} means point blinks to block beginning for
1540 @code{idlwave-show-begin}.
1543 @defopt idlwave-expand-generic-end (@code{t})
1544 Non-@code{nil} means expand generic END to ENDIF/ENDELSE/ENDWHILE etc.
1547 @defopt idlwave-reindent-end (@code{t})
1548 Non-nil means re-indent line after END was typed.
1551 @node Padding Operators, Case Changes, Block Boundary Check, Actions
1552 @subsection Padding Operators
1553 @cindex Padding operators with spaces
1554 @cindex Operators, padding with spaces
1555 @cindex Space, around operators
1557 Some operators can be automatically surrounded by spaces. This can
1558 happen when the operator is typed, or also later when the line is
1559 indented. IDLWAVE contains this setting for the operators @samp{&},
1560 @samp{<}, @samp{>}, @samp{,}, @samp{=}, and @samp{->}@footnote{Operators
1561 longer than one character can only be padded during line indentation.},
1562 but the feature is turned off by default. If you want to turn it on,
1563 customize the variables @code{idlwave-surround-by-blank} and
1564 @code{idlwave-do-actions}. You can also define similar actions for
1565 other operators by using the function @code{idlwave-action-and-binding}
1566 in the mode hook. For example, to enforce space padding of the @samp{+}
1567 and @samp{*} operators, try this in @file{.emacs}
1570 (add-hook 'idlwave-mode-hook
1572 (setq idlwave-surround-by-blank t) ; Turn this type of actions on
1573 (idlwave-action-and-binding "*" '(idlwave-surround 1 1))
1574 (idlwave-action-and-binding "+" '(idlwave-surround 1 1))))
1577 @defopt idlwave-surround-by-blank (@code{nil})
1578 Non-@code{nil} means, enable @code{idlwave-surround}. If non-nil,
1579 @samp{=}, @samp{<}, @samp{>}, @samp{&}, @samp{,}, @samp{->} are
1580 surrounded with spaces by @code{idlwave-surround}.
1583 @defopt idlwave-pad-keyword (@code{t})
1584 Non-@code{nil} means pad @samp{=} for keywords like assignments.
1587 @node Case Changes, , Padding Operators, Actions
1588 @subsection Case Changes
1589 @cindex Case changes
1590 @cindex Upcase, enforcing for reserved words
1591 @cindex Downcase, enforcing for reserved words
1593 Actions can be used to change the case of reserved words or expanded
1594 abbreviations by customizing the variables
1595 @code{idlwave-abbrev-change-case} and
1596 @code{idlwave-reserved-word-upcase}. If you want to change the case of
1597 additional words automatically, put something like the following into
1598 your @file{.emacs} file:
1601 (add-hook 'idlwave-mode-hook
1603 ;; Capitalize system vars
1604 (idlwave-action-and-binding idlwave-sysvar '(capitalize-word 1) t)
1605 ;; Capitalize procedure name
1606 (idlwave-action-and-binding "\\<\\(pro\\|function\\)\\>[ \t]*\\<"
1607 '(capitalize-word 1) t)
1608 ;; Capitalize common block name
1609 (idlwave-action-and-binding "\\<common\\>[ \t]+\\<"
1610 '(capitalize-word 1) t)))
1613 For more information, see the documentation string for the function
1614 @code{idlwave-action-and-binding}.
1616 @defopt idlwave-abbrev-change-case (@code{nil})
1617 Non-@code{nil} means all abbrevs will be forced to either upper or lower
1618 case. Legal values are @code{nil}, @code{t}, and @code{down}.
1621 @defopt idlwave-reserved-word-upcase (@code{nil})
1622 Non-@code{nil} means, reserved words will be made upper case via abbrev
1627 @node Doc Header, Motion Commands, Actions, The IDLWAVE Major Mode
1628 @section Documentation Header
1629 @cindex Documentation header
1630 @cindex DocLib header
1631 @cindex Modification timestamp
1632 @cindex Header, for file documentation
1633 @cindex Timestamp, in doc header.
1634 @cindex Changelog, in doc header.
1638 The command @kbd{C-c C-h} inserts a standard routine header into the
1639 buffer, with the usual fields for documentation. One of the keywords is
1640 @samp{MODIFICATION HISTORY} under which the changes to a routine can be
1641 recorded. The command @kbd{C-c C-m} jumps to the @samp{MODIFICATION
1642 HISTORY} of the current routine or file and inserts the user
1643 name with a timestamp.
1645 @defopt idlwave-file-header
1646 The doc-header template or a path to a file containing it.
1649 @defopt idlwave-timestamp-hook
1650 The hook function used to update the timestamp of a function.
1653 @defopt idlwave-doc-modifications-keyword
1654 The modifications keyword to use with the log documentation commands.
1657 @defopt idlwave-doclib-start
1658 Regexp matching the start of a document library header.
1661 @defopt idlwave-doclib-end
1662 Regexp matching the start of a document library header.
1665 @node Motion Commands, Misc Options, Doc Header, The IDLWAVE Major Mode
1666 @section Motion Commands
1667 @cindex Motion commands
1668 @cindex Program structure, moving through
1669 @cindex Code structure, moving through
1670 @cindex @file{Func-menu}, XEmacs package
1671 @cindex @file{Imenu}, Emacs package
1672 @cindex Function definitions, jumping to
1673 @cindex Procedure definitions, jumping to
1675 IDLWAVE supports both @file{Imenu} and @file{Func-menu}, two packages
1676 which make it easy to jump to the definitions of functions and
1677 procedures in the current file.
1679 Several commands allow to move quickly through the structure of an IDL
1682 @multitable @columnfractions .15 .85
1684 @tab Beginning of subprogram
1686 @tab End of subprogram
1688 @tab Beginning of block (stay inside the block)
1690 @tab End of block (stay inside the block)
1692 @tab Forward block (on same level)
1694 @tab Backward block (on same level)
1696 @tab Down block (enters a block)
1698 @tab Backward up block (leaves a block)
1704 @node Misc Options, , Motion Commands, The IDLWAVE Major Mode
1705 @section Miscellaneous Options
1708 @defopt idlwave-help-application
1709 The external application providing reference help for programming.
1712 @defopt idlwave-startup-message (@code{t})
1713 Non-@code{nil} means display a startup message when @code{idlwave-mode}'
1717 @defopt idlwave-mode-hook
1718 Normal hook. Executed when a buffer is put into @code{idlwave-mode}.
1721 @defopt idlwave-load-hook
1722 Normal hook. Executed when @file{idlwave.el} is loaded.
1740 @node The IDLWAVE Shell, Installation, The IDLWAVE Major Mode, Top
1741 @chapter The IDLWAVE Shell
1742 @cindex IDLWAVE shell
1743 @cindex Major mode, @code{idlwave-shell-mode}
1744 @cindex IDL, as Emacs subprocess
1745 @cindex Subprocess of Emacs, IDL
1746 @cindex Comint, Emacs package
1751 The IDLWAVE shell is an Emacs major mode which allows to run the IDL
1752 program as an inferior process of Emacs. It can be used to work with
1753 IDL interactively, to compile and run IDL programs in Emacs buffers and
1754 to debug these programs. The IDLWAVE shell uses @file{comint}, an Emacs
1755 packages which handles the communication with the IDL program.
1756 Unfortunately IDL for Windows and MacOS does not allow the interaction
1757 with Emacs@footnote{Please inform the maintainer if you come up with a way
1758 to make the IDLWAVE shell work on these systems.} - so the IDLWAVE shell
1759 only works under Unix.
1762 * Starting the Shell:: How to launch IDL as a subprocess
1763 * Using the Shell:: Interactively working with the Shell
1764 * Debugging IDL Programs:: Compilation/Debugging
1767 @node Starting the Shell, Using the Shell, The IDLWAVE Shell, The IDLWAVE Shell
1768 @section Starting the Shell
1769 @cindex Starting the shell
1770 @cindex Shell, starting
1771 @cindex Dedicated frame, for shell buffer
1772 @cindex Frame, for shell buffer
1773 @cindex Subprocess of Emacs, IDL
1776 The IDLWAVE shell can be started with the command @kbd{M-x
1777 idlwave-shell}. In @code{idlwave-mode} the function is bound to
1778 @kbd{C-c C-s}. It creates a buffer @file{*idl*} which is used to
1779 interact with the shell. If the shell is already running, @kbd{C-c C-s}
1780 will simple switch to the shell buffer. The command @kbd{C-c C-l}
1781 (@code{idlwave-shell-recenter-shell-window}) displays the
1782 shell window without selecting it.
1784 In order to create a separate frame for the IDLWAVE shell buffer, call
1785 @code{idlwave-shell} with a prefix argument: @kbd{C-u C-c C-s} or
1786 @kbd{C-u C-c C-l}. If you always want a dedicated frame for the shell
1787 window, configure the variable
1788 @code{idlwave-shell-use-dedicated-frame}.
1790 The shell can also be started automatically when another command tries
1791 to send a command to it. To enable auto start, set the variable
1792 @code{idlwave-shell-automatic-start} to @code{t}.
1794 @defopt idlwave-shell-explicit-file-name
1795 This is the command to run IDL.
1798 @defopt idlwave-shell-command-line-options
1799 A list of command line options for calling the IDL program.
1802 @defopt idlwave-shell-prompt-pattern
1803 Regexp to match IDL prompt at beginning of a line.
1806 @defopt idlwave-shell-process-name
1807 Name to be associated with the IDL process.
1810 @defopt idlwave-shell-automatic-start
1811 Non-@code{nil} means attempt to invoke idlwave-shell if not already
1815 @defopt idlwave-shell-initial-commands
1816 Initial commands, separated by newlines, to send to IDL.
1819 @defopt idlwave-shell-use-dedicated-frame (@code{nil})
1820 Non-@code{nil} means, IDLWAVE should use a special frame to display
1824 @defopt idlwave-shell-frame-parameters
1825 The frame parameters for a dedicated idlwave-shell frame.
1828 @defopt idlwave-shell-temp-pro-prefix
1829 The prefix for temporary IDL files used when compiling regions.
1833 @defopt idlwave-shell-mode-hook
1834 Hook for customizing @code{idlwave-shell-mode}.
1837 @node Using the Shell, Debugging IDL Programs, Starting the Shell, The IDLWAVE Shell
1838 @section Using the Shell
1840 @cindex Shell, basic commands
1842 The IDLWAVE shell works in the same fashion as other shell modes in
1843 Emacs. It provides command history, command line editing and job
1844 control. The @key{UP} and @key{DOWN} arrows cycle through the input
1845 history just like in an X terminal@footnote{This is different from
1846 normal Emacs/Comint behavior, but more like an xterm. If you prefer the
1847 default comint functionality, check the variable
1848 @code{idlwave-shell-arrows-do-history}.}. Here is a list of
1849 commonly used commands.
1851 @multitable @columnfractions .12 .88
1853 @tab Cycle backwards in input history
1855 @tab Cycle forwards in input history
1857 @tab Cycle backwards in input history @emph{matching input}
1859 @tab Cycle forwards in input history @emph{matching input}
1861 @tab Previous input matching a regexp
1863 @tab Next input that matches a regexp
1865 @tab Send input or copy line to current prompt
1867 @tab Beginning of line; skip prompt
1869 @tab Kill input to beginning of line
1871 @tab Kill word before cursor
1879 @tab Delete last batch of process output
1881 @tab Show last batch of process output
1883 @tab List input history
1886 In addition to these standard @file{comint} commands,
1887 @code{idlwave-shell-mode} provides many of the commands which simplify
1888 writing IDL code, including abbreviations, online help, and completion.
1889 See @ref{Routine Info} and @ref{Online Help} and @ref{Completion} for more
1890 information on these commands.
1892 @cindex Completion, in the shell
1893 @cindex Routine info, in the shell
1894 @cindex Online Help, in the shell
1895 @multitable @columnfractions .12 .88
1896 @item @kbd{@key{TAB}}
1897 @tab Completion of file names, routine names and keywords
1898 (@code{idlwave-shell-complete})
1899 @item @kbd{M-@key{TAB}}
1900 @tab Same as @key{TAB}
1902 @tab Routine Info display (@code{idlwave-routine-info})
1904 @tab IDL online help on routine (@code{idlwave-routine-info-from-idlhelp})
1906 @tab Update routine info from buffers and shell
1907 (@code{idlwave-update-routine-info})
1909 @tab Find the source file of a routine (@code{idlwave-find-module})
1911 @tab Compile a library routine (@code{idlwave-resolve})
1914 @defopt idlwave-shell-arrows-do-history (@code{t})
1915 Non-@code{nil} means @key{UP} and @key{DOWN} arrows move through command
1919 @defopt idlwave-shell-file-name-chars
1920 The characters allowed in file names, as a string. Used for file name
1924 @defopt idlwave-shell-graphics-window-size
1925 Size of IDL graphics windows popped up by special IDLWAVE command.
1929 @cindex Character input mode (Shell)
1930 @cindex Line input mode (Shell)
1931 @cindex Magic spells, for input mode
1932 @cindex Spells, magic
1933 IDLWAVE works in line input mode: You compose a full command line, using
1934 all the power Emacs gives you to do this. When you press @key{RET}, the
1935 whole line is sent to IDL. Sometimes it is necessary to send single
1936 characters (without a newline), for example when an IDL program is
1937 waiting for single character input with the @code{GET_KBRD} function.
1938 You can send a single character to IDL with the command @kbd{C-c C-x}
1939 (@code{idlwave-shell-send-char}). When you press @kbd{C-c C-y}
1940 (@code{idlwave-shell-char-mode-loop}), IDLWAVE runs a blocking loop
1941 which accepts characters and immediately sends them to IDL. The loop
1942 can be exited with @kbd{C-g}. It terminates also automatically when the
1943 current IDL command is finished. Check the documentation of the two
1944 variables described below for a way to make IDL programs trigger
1945 automatic switches of the input mode.
1947 @defopt idlwave-shell-use-input-mode-magic (@code{nil})
1948 Non-nil means, IDLWAVE should check for input mode spells in output.
1951 @defopt idlwave-shell-input-mode-spells
1952 The three regular expressions which match the magic spells for input
1956 @node Debugging IDL Programs, , Using the Shell, The IDLWAVE Shell
1957 @section Debugging IDL Programs
1959 @cindex Keybindings for debugging
1963 Programs can be compiled, run, and debugged directly from the source
1964 buffer in Emacs. The IDLWAVE shell installs keybindings both in the
1965 shell buffer and in all IDL code buffers of the current Emacs session.
1966 On Emacs versions which support this, it also installs a debugging
1967 toolbar. The display of the toolbar can be toggled with @kbd{C-c C-d
1968 C-t} (@code{idlwave-shell-toggle-toolbar}).
1970 The debugging keybindings are by default on the prefix key @kbd{C-c
1971 C-d}, so for example setting a breakpoint is done with @kbd{C-c C-d
1972 C-b}, compiling a source file with @kbd{C-c C-d C-c}. If you find this
1973 too much work you can choose a combination of modifier keys which is not
1974 used by other commands. For example, if you write in @file{.emacs}
1977 (setq idlwave-shell-debug-modifiers '(control shift))
1980 a breakpoint can be set by pressing @kbd{b} while holding down
1981 @kbd{shift} and @kbd{control} keys, i.e. @kbd{C-S-b}. Compiling a
1982 source file will be on @kbd{C-S-c}, deleting a breakpoint @kbd{C-S-d}
1983 etc. In the remainder of this chapter we will assume that the @kbd{C-c
1984 C-d} bindings are active, but each of these bindings will have an
1985 equivalent single-keypress shortcut with the modifiers given in the
1986 @code{idlwave-shell-debug-modifiers} variable.
1988 @defopt idlwave-shell-prefix-key (@kbd{C-c C-d})
1989 The prefix key for the debugging map
1990 @code{idlwave-shell-mode-prefix-map}.
1993 @defopt idlwave-shell-activate-prefix-keybindings (@code{t})
1994 Non-@code{nil} means, debug commands will be bound to the prefix
1995 key, like @kbd{C-c C-d C-b}.
1998 @defopt idlwave-shell-debug-modifiers (@code{nil})
1999 List of modifier keys to use for binding debugging commands in the shell
2000 and in source buffers.
2003 @defopt idlwave-shell-use-toolbar (@code{t})
2004 Non-@code{nil} means, use the debugging toolbar in all IDL related
2010 * Compiling Programs:: Compiling buffers under the shell
2011 * Breakpoints and Stepping:: Deciding where to stop and look
2012 * Examining Variables:: What is the value now?
2015 @node Compiling Programs, Breakpoints and Stepping, Debugging IDL Programs, Debugging IDL Programs
2016 @subsection Compiling Programs
2017 @cindex Compiling programs
2018 @cindex Programs, compiling
2019 @cindex Default command line, executing
2020 @cindex Executing a default command line
2023 In order to compile the current buffer under the IDLWAVE shell, press
2024 @kbd{C-c C-d C-c} (@code{idlwave-save-and-run}). This first saves the
2025 current buffer and then send the command @samp{.run path/to/file} to the
2026 shell. You can also execute @kbd{C-c C-d C-c} from the shell buffer, in
2027 which case the most recently compiled buffer will be saved and
2030 When developing or debugging a program, it is often necessary to execute
2031 the same command line many times. A convenient way to do this is
2032 @kbd{C-c C-d C-y} (@code{idlwave-shell-execute-default-command-line}).
2033 This command first resets IDL from a state of interrupted execution by
2034 closing all files and returning to the main interpreter level. Then a
2035 default command line is send to the shell. To edit the default command
2036 line, call @code{idlwave-shell-execute-default-command-line} with a
2037 prefix argument: @kbd{C-u C-c C-d C-y}.
2039 @defopt idlwave-shell-mark-stop-line (@code{t})
2040 Non-@code{nil} means, mark the source code line where IDL is currently
2041 stopped. The value decides about the preferred method. Legal values
2042 are @code{nil}, @code{t}, @code{arrow}, and @code{face}.
2045 @defopt idlwave-shell-overlay-arrow (@code{">"})
2046 The overlay arrow to display at source lines where execution
2050 @defopt idlwave-shell-stop-line-face
2051 The face which highlights the source line where IDL is
2055 @node Breakpoints and Stepping, Examining Variables, Compiling Programs, Debugging IDL Programs
2056 @subsection Breakpoints and Stepping
2059 @cindex Execution, controlled
2063 You can set breakpoints and step through a program with IDLWAVE.
2064 Setting a breakpoint in the current line of the source buffer is done
2065 with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}). With a prefix
2066 arg of 1, the breakpoint gets a @code{/ONCE} keyword, meaning that it
2067 will be deleted after first use. With a numeric prefix greater than
2068 one, the breakpoint will only be active the @code{nth} time it is hit.
2069 To clear the breakpoint in the current line, use @kbd{C-c C-d C-d}
2070 (@code{idlwave-clear-current-bp}). To clear all breakpoints, use
2071 @kbd{C-c C-d C-a} (@code{idlwave-clear-all-bp}). Breakpoint lines are
2072 highlighted in the source code.
2074 Once the program has stopped somewhere, you can step through it. Here
2075 is a summary of the breakpoint and stepping commands:
2077 @multitable @columnfractions .23 .77
2078 @item @kbd{C-c C-d C-b}
2079 @tab Set breakpoint (@code{idlwave-shell-break-here})
2080 @item @kbd{C-c C-d C-i}
2081 @tab Set breakpoint in function named here (@code{idlwave-shell-break-in})
2082 @item @kbd{C-c C-d C-d}
2083 @tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
2084 @item @kbd{C-c C-d C-a}
2085 @tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
2086 @item @kbd{C-c C-d C-s}
2087 @tab Step, into function calls (@code{idlwave-shell-step})
2088 @item @kbd{C-c C-d C-n}
2089 @tab Step, over function calls (@code{idlwave-shell-stepover})
2090 @item @kbd{C-c C-d C-k}
2091 @tab Skip one statement (@code{idlwave-shell-skip})
2092 @item @kbd{C-c C-d C-u}
2093 @tab Continue to end of block (@code{idlwave-shell-up})
2094 @item @kbd{C-c C-d C-m}
2095 @tab Continue to end of function (@code{idlwave-shell-return})
2096 @item @kbd{C-c C-d C-o}
2097 @tab Continue past end of function (@code{idlwave-shell-out})
2098 @item @kbd{C-c C-d C-h}
2099 @tab Continue to line at cursor position (@code{idlwave-shell-to-here})
2100 @item @kbd{C-c C-d C-r}
2101 @tab Continue execution to next breakpoint (@code{idlwave-shell-cont})
2102 @item @kbd{C-c C-d C-up}
2103 @tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
2104 @item @kbd{C-c C-d C-down}
2105 @tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
2108 @defopt idlwave-shell-mark-breakpoints (@code{t})
2109 Non-@code{nil} means, mark breakpoints in the source file buffers. The
2110 value indicates the preferred method. Legal values are @code{nil},
2111 @code{t}, @code{face}, and @code{glyph}.
2114 @defopt idlwave-shell-breakpoint-face
2115 The face for breakpoint lines in the source code if
2116 @code{idlwave-shell-mark-breakpoints} has the value @code{face}.
2119 @node Examining Variables, , Breakpoints and Stepping, Debugging IDL Programs
2120 @subsection Examining Variables
2121 @cindex @code{PRINT} expressions
2122 @cindex @code{HELP}, on expressions
2123 @cindex Expressions, printing
2124 @cindex Expressions, help
2125 @cindex Mouse binding to print expressions
2128 When execution is stopped you can examine the values of variables. The
2129 command @kbd{C-c C-d C-p} prints the expression at point, while @kbd{C-c
2130 C-d ?} shows help on this expression. The expression at point is an
2131 array expression or a function call, or the contents of a pair of
2132 parenthesis. The selected expression becomes highlighted in the source
2133 code for a short time. Calling the above commands with a prefix
2134 argument will prompt for an expression instead of using the one at
2137 It is very convenient to click with the mouse on expressions to retrieve
2138 their value. Expression printing is also bound to @kbd{S-mouse-2} and
2139 expression help to @kbd{C-S-mouse-2}. I.e. you need to hold down
2140 @key{SHIFT} and @key{CONTROL} while clicking with the mouse.
2142 @cindex Calling stack, motion
2143 @cindex Printing expressions, on calling stack
2144 @cindex Restrictions for expression printing
2145 Printing of expressions also works on higher levels of the calling
2146 stack. This means that you can examine the values of variables and
2147 expressions inside the routine which called the current routine etc.
2148 Use the commands @kbd{C-c C-d C-@key{UP}}
2149 (@code{idlwave-shell-stack-up}) and @kbd{C-c C-d C-@key{DOWN}}
2150 (@code{idlwave-shell-stack-down}) or the corresponding toolbar buttons
2151 to move through the calling stack. The mode line of the shell window
2152 will indicate the routine and the calling stack level which define the
2153 context for printing expressions. The following restrictions apply for
2154 all levels except the current:
2158 Array expressions must use the @samp{[ ]} index delimiters. Identifiers
2159 with a @samp{( )} will be interpreted as function calls.
2161 @cindex ROUTINE_NAMES, IDL procedure
2162 Printing values of expressions on higher levels of the calling stack
2163 uses the @emph{unsupported} IDL routine @code{ROUTINE_NAMES}, which may
2164 or may not be available in future versions of IDL.
2167 @defopt idlwave-shell-expression-face
2168 The face for @code{idlwave-shell-expression-overlay}.
2169 Allows you to choose the font, color and other properties for
2170 the expression printed by IDL.
2173 @defopt idlwave-shell-print-expression-function (@code{nil})
2174 A function to handle special display of evaluated expressions.
2177 @node Installation, Acknowledgement, The IDLWAVE Shell, Top
2178 @chapter Installation
2179 @cindex Installation
2182 * Installing IDLWAVE:: How to install the distribution
2183 * Installing Online Help:: Where to get the additional files needed
2184 * Upgrading from idl.el:: Necessary configuration changes
2187 @node Installing IDLWAVE, Installing Online Help, Installation, Installation
2188 @section Installing IDLWAVE
2191 @cindex URL, homepage for IDLWAVE
2192 @cindex Homepage for IDLWAVE
2193 @cindex IDLWAVE, homepage
2194 @cindex XEmacs package IDLWAVE
2195 @cindex Emacs, distributed with IDLWAVE
2196 @cindex Copyright, of IDL manual
2197 IDLWAVE is part of Emacs 21.1 and later. It is also an XEmacs package
2198 and can be installed from
2199 @uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site}
2200 with the normal package management system on XEmacs 21. These
2201 pre-installed versions should work out-of-the-box. However, the files
2202 needed for online help are not distributed with XEmacs/Emacs and have to
2203 be installed separately@footnote{Due to copyright reasons, the ASCII
2204 version of the IDL manual cannot be distributed under the GPL.}
2205 (@pxref{Installing Online Help}).
2207 You can also download IDLWAVE and install it yourself from
2208 @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. Follow the
2209 instructions in the INSTALL file.
2211 @node Installing Online Help, Upgrading from idl.el , Installing IDLWAVE, Installation
2212 @section Installing Online Help
2213 @cindex Installing online help
2214 @cindex Online Help, Installation
2216 If you want to use the online help display, two additional files (an
2217 ASCII version of the IDL documentation and a topics/code file) must be
2218 installed. These files can also be downloaded from
2219 @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. You need to
2220 place the files somewhere on your system and tell IDLWAVE where they are
2224 (setq idlwave-help-directory "/path/to/help/files/")
2227 @node Upgrading from idl.el, , Installing Online Help, Installation
2228 @section Upgrading from the old @b{@file{idl.el}} file
2229 @cindex Upgrading from old @b{@file{idl.el}}
2230 @cindex Renaming old variables
2231 @cindex Old variables, renaming
2234 If you have been using the old @file{idl.el} and @file{idl-shell.el}
2235 files and would like to use IDLWAVE, you need to update your
2236 customization in @file{.emacs}.
2240 Change all variable and function prefixes from @samp{idl-} to @samp{idlwave-}.
2242 Remove the now invalid @code{autoload} and @code{auto-mode-alist} forms
2243 pointing to the @file{idl.el} and @file{idl-shell.el} files. Install
2244 the new autoload forms.
2246 If you have been using the hook function recommended in earlier versions
2247 to get a separate frame for the IDL shell, remove that command from your
2248 @code{idlwave-shell-mode-hook}. Instead, set the variable
2249 @code{idlwave-shell-use-dedicated-frame} with
2251 (setq idlwave-shell-use-dedicated-frame t)
2254 The key sequence @kbd{M-@key{TAB}} no longer inserts a TAB character.
2255 Like in in many other Emacs modes, @kbd{M-@key{TAB}} now does
2256 completion. Inserting a TAB has therefore been moved to
2257 @kbd{C-@key{TAB}}. On a character based terminal you can also use
2258 @kbd{C-c @key{SPC}}.
2261 @node Acknowledgement, Sources of Routine Info, Installation, Top
2262 @chapter Acknowledgement
2263 @cindex Acknowledgement
2264 @cindex Maintainer, of IDLWAVE
2265 @cindex Authors, of IDLWAVE
2266 @cindex Contributors, to IDLWAVE
2267 @cindex Email address, of Maintainer
2271 The main contributors to the IDLWAVE package have been:
2275 @uref{mailto:chase@@att.com, @b{Chris Chase}}, the original author.
2276 Chris wrote @file{idl.el} and @file{idl-shell.el} and maintained them
2280 @uref{mailto:dominik@@astro.uva.nl, @b{Carsten Dominik}}, current author
2281 and maintainer. I have been in charge of the package since version
2282 3.0. I am also responsible for the manual.
2285 @uref{mailto:jdsmith@@astrosun.tn.cornell.edu, @b{J.D. Smith}} has
2286 shaped Object method completion and most new features in version 4.0
2287 with his ideas, bug reports, and patient explanations of IDL internals.
2291 The following people have also contributed to the development of IDLWAVE
2292 with patches, ideas, bug reports and suggestions.
2296 Ulrik Dickow <dickow@@nbi.dk>
2298 Eric E. Dors <edors@@lanl.gov>
2300 Stein Vidar H. Haugan <s.v.h.haugan@@astro.uio.no>
2302 David Huenemoerder <dph@@space.mit.edu>
2304 Kevin Ivory <Kevin.Ivory@@linmpi.mpg.de>
2306 Xuyong Liu <liu@@stsci.edu>
2308 Simon Marshall <Simon.Marshall@@esrin.esa.it>
2310 Craig Markwardt <craigm@@cow.physics.wisc.edu>
2312 Laurent Mugnier <mugnier@@onera.fr>
2314 Lubos Pochman <lubos@@rsinc.com>
2316 Patrick M. Ryan <pat@@jaameri.gsfc.nasa.gov>
2318 Marty Ryba <ryba@@ll.mit.edu>
2320 Phil Williams <williams@@irc.chmcc.org>
2322 Phil Sterne <sterne@@dublin.llnl.gov>
2328 @node Sources of Routine Info, Configuration Examples, Acknowledgement, Top
2329 @appendix Sources of Routine Info
2331 @cindex Sources of routine information
2332 In @ref{Routine Info} and @ref{Completion} it was shown how IDLWAVE
2333 displays the calling sequence and keywords of routines, and how it
2334 completes routine names and keywords. For these features to work,
2335 IDLWAVE must know about the accessible routines.
2338 * Routine Definitions:: Where IDL Routines are defined.
2339 * Routine Information Sources:: So how does IDLWAVE know about...
2340 * Library Catalog:: Scanning the Libraries for Routine Info
2341 * Load-Path Shadows:: Routines defined in several places
2342 * Documentation Scan:: Scanning the IDL Manuals
2345 @node Routine Definitions, Routine Information Sources, Sources of Routine Info, Sources of Routine Info
2346 @section Routine Definitions
2347 @cindex Routine definitions
2348 @cindex IDL variable @code{!PATH}
2349 @cindex @code{!PATH}, IDL variable
2350 @cindex @code{CALL_EXTERNAL}, IDL routine
2351 @cindex @code{LINKIMAGE}, IDL routine
2352 @cindex External routines
2354 Routines which can be used in an IDL program can be defined in several
2359 @emph{Builtin routines} are defined inside IDL itself. The source
2360 code of such routines is not accessible to the user.
2362 Routines @emph{part of the current program} are defined in a file which
2363 is explicitly compiled by the user. This file may or may not be located
2364 on the IDL search path.
2366 @emph{Library routines} are defined in special files which are located
2367 somewhere on IDL's search path. When a library routine is called for
2368 the first time, IDL will find the source file and compile it
2371 External routines written in other languages (like Fortran or C) can be
2372 called with @code{CALL_EXTERNAL}, linked into IDL via @code{LINKIMAGE},
2373 or included as dynamically loaded modules (DLMs). Currently IDLWAVE
2374 cannot provide routine info and completion for external
2378 @node Routine Information Sources, Library Catalog, Routine Definitions, Sources of Routine Info
2379 @section Routine Information Sources
2380 @cindex Routine info sources
2381 @cindex Builtin list of routines
2382 @cindex Updating routine info
2383 @cindex Scanning buffers for routine info
2384 @cindex Buffers, scanning for routine info
2385 @cindex Shell, querying for routine info
2387 In oder to know about as many routines as possible, IDLWAVE will do the
2388 following to collect information:
2393 It has a @emph{builtin list} with the properties of the builtin IDL
2394 routines. IDLWAVE @value{VERSION} is distributed with a list of
2395 @value{NSYSROUTINES} routines and @value{NSYSKEYWORDS} keywords,
2396 reflecting IDL version @value{IDLVERSION}. This list has been created
2397 by scanning the IDL manuals and is stored in the file
2398 @file{idlw-rinfo.el}. @xref{Documentation Scan}, for
2399 information how to regenerate this file for new versions of IDL.
2402 It @emph{scans} all @emph{buffers} of the current Emacs session for
2403 routine definitions. This is done automatically when routine
2404 information or completion is first requested by the user. Each new
2405 buffer and each buffer which is saved after making changes is also
2406 scanned. The command @kbd{C-c C-i} (@code{idlwave-update-routine-info})
2407 can be used at any time to rescan all buffers.
2410 If you have an IDLWAVE-Shell running as inferior process of the current
2411 Emacs session, IDLWAVE will @emph{query the shell} for compiled routines
2412 and their arguments. This happens automatically when routine
2413 information or completion is first requested by the user, and each time
2414 an Emacs buffer is compiled with @kbd{C-c C-d C-c}. The command
2415 @kbd{C-c C-i} (@code{idlwave-update-routine-info}) can be used to ask
2416 the shell again at any time.
2419 IDLWAVE can scan all or selected library files and store the result in a
2420 file which will be automatically loaded just like
2421 @file{idlw-rinfo.el}. @xref{Library Catalog}, for information how to
2425 @defopt idlwave-scan-all-buffers-for-routine-info (@code{t})
2426 Non-@code{nil} means, scan all buffers for IDL programs when updating
2430 @defopt idlwave-query-shell-for-routine-info (@code{t})
2431 Non-@code{nil} means query the shell for info about compiled routines.
2434 @defopt idlwave-auto-routine-info-updates
2435 Controls under what circumstances routine info is updated automatically.
2438 @node Library Catalog, Load-Path Shadows, Routine Information Sources, Sources of Routine Info
2439 @section Library Catalog
2440 @cindex Library scan
2441 @cindex Library catalog
2442 @cindex IDL library routine info
2446 @cindex IDL variable @code{!DIR}
2447 @cindex @code{!DIR}, IDL variable
2450 IDLWAVE can extract routine information from library modules and store
2451 that information in a file. To do this, the variable
2452 @code{idlwave-libinfo-file} needs to contain the path to a file in an
2453 existing directory (the default is @code{"~/.idlcat.el"}). Since the
2454 file will contain lisp code, its name should end in @file{.el}. Under
2455 Windows and MacOS, you also need to specify the search path for IDL
2456 library files in the variable @code{idlwave-library-path}, and the
2457 location of the IDL directory (the value of the @code{!DIR} system
2458 variable) in the variable @code{idlwave-system-directory}. Under UNIX,
2459 these values will be automatically inferred from an IDLWAVE
2462 The command @kbd{M-x idlwave-create-libinfo-file} can then be used to
2463 scan library files. It brings up a widget in which you can select some
2464 or all directories on the search path. If you only want to have routine
2465 and completion info of some libraries, it is sufficient to scan those
2466 directories. However, if you want IDLWAVE to detect possible name
2467 conflicts with routines defined in other libraries, the whole pass
2470 After selecting directories, click on the @w{@samp{[Scan & Save]}}
2471 button in the widget to scan all files in the selected directories and
2472 write the resulting routine information into the file
2473 @code{idlwave-libinfo-file}. In order to update the library information
2474 from the same directories, call the command
2475 @code{idlwave-update-routine-info} with a double prefix argument:
2476 @w{@kbd{C-u C-u C-c C-i}}. This will rescan files in the previously
2477 selected directories, write an updated version of the libinfo file and
2478 rebuild IDLWAVEs internal lists.
2480 A note of caution: Depending on your local installation, the IDL
2481 library can be very large. Parsing it for routine information will take
2482 time and loading this information into Emacs can require a
2483 significant amount of memory. However, having this information
2484 available will be a great help.
2486 @defopt idlwave-libinfo-file
2487 File for routine information of the IDL library.
2490 @defopt idlwave-library-path
2491 IDL library path for Windows and MacOS. Not needed under Unix.
2494 @defopt idlwave-system-directory
2495 The IDL system directory for Windows and MacOS. Not needed under UNIX.
2498 @defopt idlwave-special-lib-alist
2499 Alist of regular expressions matching special library directories.
2502 @node Load-Path Shadows, Documentation Scan, Library Catalog, Sources of Routine Info
2503 @section Load-Path Shadows
2504 @cindex Load-path shadows
2505 @cindex Shadows, load-path
2506 @cindex Duplicate routines
2507 @cindex Multiply defined routines
2508 @cindex Routine definitions, multiple
2509 @cindex Application, testing for shadowing
2510 @cindex Buffer, testing for shadowing
2512 IDLWAVE can compile a list of routines which are defined in several
2513 different files. Since one definition will hide (shadow) the others
2514 depending on which file is compiled first, such multiple definitions are
2515 called "load-path shadows". IDLWAVE has several routines to scan for
2516 load path shadows. The output is placed into the special buffer
2517 @file{*Shadows*}. The format of the output is identical to the source
2518 section of the routine info buffer (@pxref{Routine Info}). The
2519 different definitions of a routine are listed in the sequence of
2520 @emph{likelyhood of use}. So the first entry will be most likely the
2521 one you'll get if an unsuspecting command uses that routine. Before
2522 listing shadows, you should make sure that routine info is up-to-date by
2523 pressing @kbd{C-c C-i}. Here are the different routines:
2526 @item @kbd{M-x idlwave-list-buffer-load-path-shadows}
2527 This commands checks the names of all routines defined in the current
2528 buffer for shadowing conflicts with other routines accessible to
2529 IDLWAVE. The command also has a key binding: @kbd{C-c C-b}
2530 @item @kbd{M-x idlwave-list-shell-load-path-shadows}.
2531 Checks all routines compiled under the shell for shadowing. This is
2532 very useful when you have written a complete application. Just compile
2533 the application, use @code{RESOLVE_ALL} to compile any routines used by
2534 your code, update the routine info inside IDLWAVE with @kbd{C-c C-i} and
2535 then check for shadowing.
2536 @item @kbd{M-x idlwave-list-all-load-path-shadows}
2537 This command checks all routines accessible to IDLWAVE for conflicts.
2540 For these commands to work properly you should have scanned the entire
2541 load path, not just selected directories. Also, IDLWAVE should be able to
2542 distinguish between the system library files (normally installed in
2543 @file{/usr/local/rsi/idl/lib}) and any site specific or user specific
2544 files. Therefore, such local files should not be installed
2545 inside the @file{lib} directory of the IDL directory. This is of course
2546 also advisable for many other reasons.
2550 @cindex IDL variable @code{!DIR}
2551 @cindex @code{!DIR}, IDL variable
2552 Users of Windows and MacOS also must set the variable
2553 @code{idlwave-system-directory} to the value of the @code{!DIR} system
2554 variable in IDL. IDLWAVE appends @file{lib} to the value of this
2555 variable and assumes that all files found on that path are system
2558 Another way to find out if a specific routine has multiple definitions
2559 on the load path is routine info display (@pxref{Routine Info}).
2561 @node Documentation Scan, , Load-Path Shadows, Sources of Routine Info
2562 @section Documentation Scan
2563 @cindex @file{get_rinfo}
2564 @cindex @file{idlw-rinfo.el}
2565 @cindex @file{idlw-help.txt}
2566 @cindex @file{idlw-help.el}
2567 @cindex Scanning the documentation
2568 @cindex Perl program, to create @file{idlw-rinfo.el}
2570 IDLWAVE derives it knowledge about system routines from the IDL
2571 manuals. The file @file{idlw-rinfo.el} contains the routine information
2572 for the IDL system routines. The Online Help feature of IDLWAVE
2573 requires ASCII versions of some IDL manuals to be available in a
2574 specific format (@file{idlw-help.txt}), along with an Emacs-Lisp file
2575 @file{idlw-help.el} with supporting code and pointers to the ASCII file.
2577 All 3 files can be derived from the IDL documentation. If you are
2578 lucky, the maintainer of IDLWAVE will always have access to the newest
2579 version of IDL and provide updates. The IDLWAVE distribution also
2580 contains the Perl program @file{get_rinfo} which constructs these files
2581 by scanning selected files from the IDL documentation. Instructions on
2582 how to use @file{get_rinfo} are in the program itself.
2584 @node Configuration Examples, Index, Sources of Routine Info, Top
2585 @appendix Configuration Examples
2586 @cindex Configuration examples
2587 @cindex Example configuration
2588 @cindex @file{.emacs}
2589 @cindex Default settings, of options
2590 @cindex Interview, with the maintainer
2593 @b{Question:} So now you have all these complicated configuration
2594 options in your package, but which ones do @emph{you} as the maintainer
2595 actually set in your own configuration?
2598 @b{Answer:} Hardly any. As the maintainer, I set the default of most
2599 options to what I think is best. However, the default settings do not
2600 turn on features which
2604 are not self-evident (i.e. too magic) when used by an unsuspecting user
2608 will not work properly on all Emacs installations out there
2610 break with widely used standards.
2613 @noindent To see what I mean, here is the @emph{entire} configuration I
2614 have in my @file{.emacs}:
2617 (setq idlwave-shell-debug-modifiers '(control shift)
2618 idlwave-store-inquired-class t
2619 idlwave-shell-automatic-start t
2620 idlwave-main-block-indent 2
2621 idlwave-help-dir "~/lib/emacs/idlwave"
2622 idlwave-special-lib-alist '(("/idl-astro/" . "AstroLib")
2623 ("/jhuapl/" . "JHUAPL-Lib")
2624 ("/dominik/lib/idl/" . "MyLib")))
2627 However, if you are an Emacs power-user and want IDLWAVE to work
2628 completely differently, the options allow you to change almost every
2629 aspect of it. Here is an example of a much more extensive configuration
2630 of IDLWAVE. To say it again - this is not what I recommend, but the
2634 ;;; Settings for IDLWAVE mode
2636 (setq idlwave-block-indent 3) ; Indentation settings
2637 (setq idlwave-main-block-indent 3)
2638 (setq idlwave-end-offset -3)
2639 (setq idlwave-continuation-indent 1)
2640 (setq idlwave-begin-line-comment "^;[^;]") ; Leave ";" but not ";;"
2641 ; anchored at start of line.
2642 (setq idlwave-surround-by-blank t) ; Turn on padding ops =,<,>
2643 (setq idlwave-pad-keyword nil) ; Remove spaces for keyword '='
2644 (setq idlwave-expand-generic-end t) ; convert END to ENDIF etc...
2645 (setq idlwave-reserved-word-upcase t) ; Make reserved words upper case
2646 ; (with abbrevs only)
2647 (setq idlwave-abbrev-change-case nil) ; Don't force case of expansions
2648 (setq idlwave-hang-indent-regexp ": ") ; Change from "- " for auto-fill
2649 (setq idlwave-show-block nil) ; Turn off blinking to begin
2650 (setq idlwave-abbrev-move t) ; Allow abbrevs to move point
2652 ;; Some setting can only be done from a mode hook. Here is an example:
2654 (add-hook 'idlwave-mode-hook
2656 (setq abbrev-mode 1) ; Turn on abbrevs (-1 for off)
2657 (setq case-fold-search nil) ; Make searches case sensitive
2658 ;; Run other functions here
2659 (font-lock-mode 1) ; Turn on font-lock mode
2660 (idlwave-auto-fill-mode 0) ; Turn off auto filling
2662 ;; Pad with with 1 space (if -n is used then make the
2663 ;; padding a minimum of n spaces.) The defaults use -1
2665 (idlwave-action-and-binding "=" '(idlwave-expand-equal 1 1))
2666 (idlwave-action-and-binding "<" '(idlwave-surround 1 1))
2667 (idlwave-action-and-binding ">" '(idlwave-surround 1 1 '(?-)))
2668 (idlwave-action-and-binding "&" '(idlwave-surround 1 1))
2670 ;; Only pad after comma and with exactly 1 space
2671 (idlwave-action-and-binding "," '(idlwave-surround nil 1))
2672 (idlwave-action-and-binding "&" '(idlwave-surround 1 1))
2674 ;; Pad only after `->', remove any space before the arrow
2675 (idlwave-action-and-binding "->" '(idlwave-surround 0 -1 nil 2))
2677 ;; Set some personal bindings
2678 ;; (In this case, makes `,' have the normal self-insert behavior.)
2679 (local-set-key "," 'self-insert-command)
2680 ;; Create a newline, indenting the original and new line.
2681 ;; A similar function that does _not_ reindent the original
2682 ;; line is on "\C-j" (The default for emacs programming modes).
2683 (local-set-key "\n" 'idlwave-newline)
2684 ;; (local-set-key "\C-j" 'idlwave-newline) ; My preference.
2687 ;;; Settings for IDLWAVE SHELL mode
2689 (setq idlwave-shell-overlay-arrow "=>") ; default is ">"
2690 (setq idlwave-shell-use-dedicated-frame t) ; Make a dedicated frame
2691 (setq idlwave-shell-prompt-pattern "^WAVE> ") ; default is "^IDL> "
2692 (setq idlwave-shell-explicit-file-name "wave")
2693 (setq idlwave-shell-process-name "wave")
2694 (setq idlwave-shell-use-toolbar nil) ; No toolbar
2697 @node Index, , Configuration Examples, Top