;ELC
;;; Compiled by cyd@localhost on Mon Apr 23 22:25:05 2007
;;; from file /home/cyd/emacs/lisp/progmodes/idlw-shell.el
;;; in Emacs version 22.0.99
;;; with all optimizations.
;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
(< (aref emacs-version (1- (length emacs-version))) ?A)
(or (and (boundp 'epoch::version) epoch::version)
(string-lessp emacs-version "19.29")))
(error "`idlw-shell.el' was compiled for Emacs 19.29 or later"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(byte-code "\302\303!\210\302\304!\210\301B\305\301!\204 \306\301\307\"\210\307\310\311\217\210\312\313!\2033 \314\315!\2033 \314\316!\2033 \317\202; \320\321M\210\322\323M\210\324\325\307\326\327\330\331\304&\207" [current-load-list idlwave-shell-have-new-custom require comint idlwave default-boundp set-default nil (byte-code "\300\301!\207" [require custom] 2) ((error)) featurep custom fboundp custom-declare-variable defface t defgroup (macro . #[(&rest args) "\300\207" [nil] 1]) defcustom (macro . #[(var value doc &rest args) "\303 \nF\207" [var value doc defvar] 4]) custom-declare-group idlwave-shell-general-setup "General setup of the Shell interaction for IDLWAVE/Shell." :prefix "idlwave-shell" :group] 8)
#@359 *Regexp to match IDL prompt at beginning of a line.
For example, "^
?IDL> " or "^
?WAVE> ".
The "^
?" is needed, to indicate the beginning of the line, with
optional return character (which IDL seems to output randomly).
This variable is used to initialize `comint-prompt-regexp' in the
process buffer.
This is a fine thing to set in your `.emacs' file.
(custom-declare-variable 'idlwave-shell-prompt-pattern '"^
? ?IDL> " '(#$ . -1305) :group 'idlwave-shell-general-setup :type 'regexp)
#@125 *Name to be associated with the IDL process. The buffer for the
process output is made by surrounding this name with `*'s.
(custom-declare-variable 'idlwave-shell-process-name '"idl" '(#$ . -1804) :group 'idlwave-shell-general-setup :type 'string)
#@68 *Non-nil means, never replace the shell frame with another buffer.
(custom-declare-variable 'idlwave-shell-use-dedicated-window 'nil '(#$ . -2059) :group 'idlwave-shell-general-setup :type 'boolean)
#@77 *Non-nil means, IDLWAVE should use a special frame to display shell buffer.
(custom-declare-variable 'idlwave-shell-use-dedicated-frame 'nil '(#$ . -2264) :group 'idlwave-shell-general-setup :type 'boolean)
#@181 The frame parameters for a dedicated idlwave-shell frame.
See also `idlwave-shell-use-dedicated-frame'.
The default makes the frame splittable, so that completion works correctly.
(custom-declare-variable 'idlwave-shell-frame-parameters ''((height . 30) (unsplittable)) '(#$ . 2478) :group 'idlwave-shell-general-setup :type '(repeat (cons symbol sexp)))
#@76 *Non-nil means, `idlwave-shell' raises the frame showing the shell window.
(custom-declare-variable 'idlwave-shell-raise-frame 't '(#$ . -2839) :group 'idlwave-shell-general-setup :type 'boolean)
#@388 *Non-nil means UP and DOWN arrows move through command history.
This variable can have 3 values:
nil Arrows just move the cursor
t Arrows force the cursor back to the current command line and
walk the history
'cmdline When the cursor is in the current command line, arrows walk the
history. Everywhere else in the buffer, arrows move the cursor.
(custom-declare-variable 'idlwave-shell-arrows-do-history 't '(#$ . -3042) :group 'idlwave-shell-general-setup :type '(choice (const :tag "never" nil) (const :tag "everywhere" t) (const :tag "in command line only" cmdline)))
#@343 *Non-nil means, use the debugging toolbar in all IDL related buffers.
Starting the shell will then add the toolbar to all idlwave-mode buffers.
Exiting the shell will removed everywhere.
Available on XEmacs and on Emacs 21.x or later.
At any time you can toggle the display of the toolbar with
`C-c C-d C-t' (`idlwave-shell-toggle-toolbar').
(custom-declare-variable 'idlwave-shell-use-toolbar 't '(#$ . -3661) :group 'idlwave-shell-general-setup :type 'boolean)
#@232 *The prefix for temporary IDL files used when compiling regions.
It should be an absolute pathname.
The full temporary file name is obtained by using `make-temp-file'
so that the name will be unique among multiple Emacs processes.
(custom-declare-variable 'idlwave-shell-temp-pro-prefix '"/tmp/idltemp" '(#$ . -4131) :group 'idlwave-shell-general-setup :type 'string)
#@164 *OBSOLETE VARIABLE, is no longer used.
The documentation of this variable used to be:
If non-nil then run `idlwave-shell-remove-breaks' to clean up IDL messages.
(defvar idlwave-shell-fix-inserted-breaks nil (#$ . -4506))
#@180 *The prefix key for the debugging map `idlwave-shell-mode-prefix-map'.
This variable must already be set when idlwave-shell.el is loaded.
Setting it in the mode-hook is too late.
(custom-declare-variable 'idlwave-shell-prefix-key '"" '(#$ . -4736) :group 'idlwave-shell-general-setup :type 'string)
#@200 Non-nil means, the debug commands will be bound to the prefix key.
The prefix key itself is given in the option `idlwave-shell-prefix-key'.
So by default setting a breakpoint will be on C-c C-d C-b.
(custom-declare-variable 'idlwave-shell-activate-prefix-keybindings 't '(#$ . 5044) :group 'idlwave-shell-general-setup :type 'boolean)
#@243 Enter the electric-debug minor mode automatically.
This occurs at a breakpoint or any other halt. The mode is exited
upon return to the main level. Can be set to 'breakpoint to enter
electric debug mode only when breakpoints are tripped.
(custom-declare-variable 'idlwave-shell-automatic-electric-debug ''breakpoint '(#$ . 5386) :group 'idlwave-shell-general-setup :type '(choice (const :tag "never" nil) (const :tag "always" t) (const :tag "for breakpoints only" breakpoint)))
#@180 When entering electric debug mode, select the window displaying the
file at which point is stopped. This takes point away from the shell
window, but is useful for stepping, etc.
(custom-declare-variable 'idlwave-shell-electric-zap-to-file 't '(#$ . 5875) :group 'idlwave-shell-general-setup :type 'boolean)
#@58 Obsolete variable. See `idlwave-shell-debug-modifiers'.
(defvar idlwave-shell-activate-alt-keybindings nil (#$ . 6189))
#@557 *Non-nil means, use use `file-truename' when looking for buffers.
If this variable is non-nil, Emacs will use the function `file-truename' to
resolve symbolic links in the file paths printed by e.g., STOP commands.
This means, unvisited files will be loaded under their truename.
However, when a file is already visited under a different name, IDLWAVE will
reuse that buffer.
This option was once introduced in order to avoid multiple buffers visiting
the same file. However, IDLWAVE no longer makes this mistake, so it is safe
to set this option to nil.
(custom-declare-variable 'idlwave-shell-use-truename 'nil '(#$ . -6317) :group 'idlwave-shell-general-setup :type 'boolean)
#@162 The characters allowed in file names, as a string.
Used for file name completion. Must not contain `'', `,' and `"'
because these are used as separators by IDL.
(custom-declare-variable 'idlwave-shell-file-name-chars '"~/A-Za-z0-9+:_.$#%={}\\- " '(#$ . 7004) :group 'idlwave-shell-general-setup :type 'string)
#@45 *Hook for customising `idlwave-shell-mode'.
(custom-declare-variable 'idlwave-shell-mode-hook ''nil '(#$ . -7320) :group 'idlwave-shell-general-setup :type 'hook)
#@196 Size of IDL graphics windows popped up by special IDLWAVE command.
The command is `C-c C-d C-f' and accepts as a prefix the window nr.
A command like `WINDOW,N,xsize=XX,ysize=YY' is sent to IDL.
(custom-declare-variable 'idlwave-shell-graphics-window-size ''(500 400) '(#$ . 7490) :group 'idlwave-shell-general-setup :type '(list (integer :tag "x size") (integer :tag "y size")))
(custom-declare-group 'idlwave-shell-command-setup nil "Setup for command parameters of the Shell interaction for IDLWAVE." :prefix "idlwave-shell" :group 'idlwave)
#@158 Initial commands, separated by newlines, to send to IDL.
This string is sent to the IDL process by `idlwave-shell-mode' which is
invoked by `idlwave-shell'.
(custom-declare-variable 'idlwave-shell-initial-commands '"!more=0 & defsysv,'!ERROR_STATE',EXISTS=__e & if __e then begin & !ERROR_STATE.MSG_PREFIX=\"% \" & delvar,__e & endif" '(#$ . 8042) :group 'idlwave-shell-command-setup :type 'string)
#@145 Non-nil means preserve command history between sessions.
The file `idlwave-shell-command-history-file' is used to save and restore
the history.
(custom-declare-variable 'idlwave-shell-save-command-history 't '(#$ . 8448) :group 'idlwave-shell-command-setup :type 'boolean)
#@248 The file in which the command history of the idlwave shell is saved.
In order to change the size of the history, see the variable
`comint-input-ring-size'.
The history is only saved if the variable `idlwave-shell-save-command-history'
is non-nil.
(custom-declare-variable 'idlwave-shell-command-history-file '"idlwhist" '(#$ . 8728) :group 'idlwave-shell-command-setup :type 'file)
#@242 *A list of command types to show output from in the shell.
Possibilities are 'run, 'debug, 'breakpoint, and 'misc. Unselected
types are not displayed in the shell. The type 'everything causes all
the copious shell traffic to be displayed.
(custom-declare-variable 'idlwave-shell-show-commands ''(run misc breakpoint) '(#$ . -9117) :group 'idlwave-shell-command-setup :type '(choice (const everything) (set :tag "Checklist" :greedy t (const :tag "All .run and .compile commands" run) (const :tag "All breakpoint commands" breakpoint) (const :tag "All debug and stepping commands" debug) (const :tag "Close, window, retall, etc. commands" misc))))
#@59 Maximum number of array elements to print when examining.
(custom-declare-variable 'idlwave-shell-max-print-length '200 '(#$ . 9771) :group 'idlwave-shell-command-setup :type 'integer)
#@276 Alist of special examine commands for popup selection.
The keys are used in the selection popup created by
`idlwave-shell-examine-select', and the corresponding value is sent as
a command to the shell, with special sequence `___' replaced by the
expression being examined.
(custom-declare-variable 'idlwave-shell-examine-alist '`(("Print" \, (concat "idlwave_print_safe,___," (number-to-string idlwave-shell-max-print-length))) ("Help" . "help,___") ("Structure Help" . "help,___,/STRUCTURE") ("Dimensions" . "print,size(___,/DIMENSIONS)") ("Type" . "print,size(___,/TNAME)") ("N_Elements" . "print,n_elements(___)") ("All Size Info" . "help,(__IWsz__=size(___,/STRUCTURE)),/STRUCTURE & print,__IWsz__.DIMENSIONS") ("Ptr Valid" . "print,ptr_valid(___)") ("Arg Present" . "print,arg_present(___)") ("Widget Valid" . "print,widget_info(___,/VALID)") ("Widget Geometry" . "help,widget_info(___,/GEOMETRY)")) '(#$ . 9963) :group 'idlwave-shell-command-setup :type '(repeat (cons (string :tag "Label ") (string :tag "Command"))))
#@40 *OBSOLETE VARIABLE, is no longer used.
(defvar idlwave-shell-print-expression-function nil (#$ . -10997))
#@68 *Non-nil mean, put output of examine commands in their own buffer.
(custom-declare-variable 'idlwave-shell-separate-examine-output 't '(#$ . -11109) :group 'idlwave-shell-command-setup :type 'boolean)
#@305 Alist of special settings for the comint variables in the IDLWAVE Shell.
Each entry is a cons cell with the name of a variable and a value.
The function `idlwave-shell-mode' will make local variables out of each entry.
Changes to this variable will only be active when the shell buffer is
newly created.
(custom-declare-variable 'idlwave-shell-comint-settings ''((comint-scroll-to-bottom-on-input . t) (comint-scroll-to-bottom-on-output . t) (comint-scroll-show-maximum-output) (comint-prompt-read-only . t)) '(#$ . 11317) :group 'idlwave-shell-command-setup :type '(repeat (cons variable sexp)))
#@72 *Non-nil means query the shell for object class on object completions.
(custom-declare-variable 'idlwave-shell-query-for-class 't '(#$ . -11920) :group 'idlwave-shell-command-setup :type 'boolean)
#@346 *Non-nil means, IDLWAVE should check for input mode spells in output.
The spells are strings printed by your IDL program and matched
by the regular expressions in `idlwave-shell-input-mode-spells'.
When these expressions match, IDLWAVE switches to character input mode and
back, respectively. See `idlwave-shell-input-mode-spells' for details.
(custom-declare-variable 'idlwave-shell-use-input-mode-magic 'nil '(#$ . -12124) :group 'idlwave-shell-command-setup :type 'boolean)
#@2075 The three regular expressions which match the magic spells for input modes.
When the first regexp matches in the output stream of IDL, IDLWAVE
prompts for a single character and sends it immediately to IDL, similar
to the command \[idlwave-shell-send-char].
When the second regexp matches, IDLWAVE switches to a blocking
single-character input mode. This is the same mode which can be entered
manually with \[idlwave-shell-char-mode-loop].
This input mode exits when the third regexp matches in the output,
or when the IDL prompt is encountered.
The variable `idlwave-shell-use-input-mode-magic' must be non-nil to enable
scanning for these expressions. If the IDL program produces lots of
output, shell operation may be slowed down.
This mechanism is useful for correct interaction with the IDL function
GET_KBRD, because in normal operation IDLWAVE only sends \n terminated
strings. Here is some example code which makes use of the default spells.
print,'' ; Make IDLWAVE switch to character mode
REPEAT BEGIN
A = GET_KBRD(1)
PRINT, BYTE(A)
ENDREP UNTIL A EQ 'q'
print,'' ; Make IDLWAVE switch back to line mode
print,'Quit the program, y or n?'
print,'' ; Ask IDLWAVE to send one character
answer = GET_KBRD(1)
Since the IDLWAVE shell defines the system variable `!IDLWAVE_VERSION',
you could actually check if you are running under Emacs before printing
the magic strings. Here is a procedure which uses this.
Usage:
======
idlwave_char_input ; Make IDLWAVE send one character
idlwave_char_input,/on ; Start the loop to send characters
idlwave_char_input,/off ; End the loop to send characters
pro idlwave_char_input,on=on,off=off
;; Test if we are running under Emacs
defsysv,'!idlwave_version',exists=running_emacs
if running_emacs then begin
if keyword_set(on) then print,'' $
else if keyword_set(off) then print,'' $
else print,''
endif
end
(custom-declare-variable 'idlwave-shell-input-mode-spells ''("^$" "^$" "^$") '(#$ . 12610) :group 'idlwave-shell-command-setup :type '(list (regexp :tag "One-char regexp") (regexp :tag "Char-mode regexp") (regexp :tag "Line-mode regexp")))
#@94 *If non-nil, provide a menu on mouse-3 on breakpoint lines, and
popup help text on the line.
(custom-declare-variable 'idlwave-shell-breakpoint-popup-menu 't '(#$ . -14955) :group 'idlwave-shell-command-setup :type 'boolean)
#@68 If non-nil, skip the yes/no prompt when resetting the IDL session.
(custom-declare-variable 'idlwave-shell-reset-no-prompt 'nil '(#$ . 15186) :group 'idlwave-shell-command-setup :type 'boolean)
(custom-declare-group 'idlwave-shell-highlighting-and-faces nil "Highlighting and Faces used by the IDLWAVE Shell mode." :prefix "idlwave-shell" :group 'idlwave)
#@734 *Non-nil means, mark the source code line where IDL is currently stopped.
Value decides about the method which is used to mark the line. Valid values
are:
nil Do not mark the line
'arrow Use the overlay arrow
'face Use `idlwave-shell-stop-line-face' to highlight the line.
t Use what IDLWAVE thinks is best. Will be a face where possible,
otherwise the overlay arrow.
The overlay-arrow has the disadvantage to hide the first chars of a line.
Since many people do not have the main block of IDL programs indented,
a face highlighting may be better.
In Emacs 21, the overlay arrow is displayed in a special area and never
hides any code, so setting this to 'arrow on Emacs 21 sounds like a good idea.
(custom-declare-variable 'idlwave-shell-mark-stop-line 't '(#$ . -15549) :group 'idlwave-shell-highlighting-and-faces :type '(choice (const :tag "No marking" nil) (const :tag "Use overlay arrow" arrow) (const :tag "Highlight with face" face) (const :tag "Face or arrow." t)))
#@341 *The overlay arrow to display at source lines where execution halts.
We use a single character by default, since the main block of IDL procedures
often has no indentation. Where possible, IDLWAVE will use overlays to
display the stop-lines. The arrow is only used on character-based terminals.
See also `idlwave-shell-use-overlay-arrow'.
(custom-declare-variable 'idlwave-shell-overlay-arrow '">" '(#$ . -16565) :group 'idlwave-shell-highlighting-and-faces :type 'string)
#@181 *The face for `idlwave-shell-stop-line-overlay'.
Allows you to choose the font, color and other properties for
line where IDL is stopped. See also `idlwave-shell-mark-stop-line'.
(custom-declare-variable 'idlwave-shell-stop-line-face ''highlight '(#$ . -17046) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
#@64 *The color for the default face or overlay arrow when stopped.
(custom-declare-variable 'idlwave-shell-electric-stop-color '"Violet" '(#$ . -17374) :group 'idlwave-shell-highlighting-and-faces :type 'string)
#@200 *The face for `idlwave-shell-stop-line-overlay' when in electric debug mode.
Allows you to choose the font, color and other properties for the line
where IDL is stopped, when in Electric Debug Mode.
(custom-declare-variable 'idlwave-shell-electric-stop-line-face '(prog1 (copy-face 'modeline 'idlwave-shell-electric-stop-line) (set-face-background 'idlwave-shell-electric-stop-line idlwave-shell-electric-stop-color) (condition-case nil (set-face-foreground 'idlwave-shell-electric-stop-line nil) (error nil))) '(#$ . -17589) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
#@366 *Non-nil means, mark breakpoints in the source files.
Valid values are:
nil Do not mark breakpoints.
'face Highlight line with `idlwave-shell-breakpoint-face'.
'glyph Red dot at the beginning of line. If the display does not
support glyphs, will use 'face instead.
t Glyph when possible, otherwise face (same effect as 'glyph).
(custom-declare-variable 'idlwave-shell-mark-breakpoints 't '(#$ . -18182) :group 'idlwave-shell-highlighting-and-faces :type '(choice (const :tag "No marking" nil) (const :tag "Highlight with face" face) (const :tag "Display glyph (red dot)" glyph) (const :tag "Glyph or face." t)))
#@58 Obsolete variable. See `idlwave-shell-mark-breakpoints.
(defvar idlwave-shell-use-breakpoint-glyph t (#$ . 18837))
#@189 *The face for breakpoint lines in the source code.
Allows you to choose the font, color and other properties for
lines which have a breakpoint. See also `idlwave-shell-mark-breakpoints'.
(custom-declare-variable 'idlwave-shell-breakpoint-face ''idlwave-shell-bp '(#$ . -18960) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
(byte-code "\204\f \301\302\303\"\210\202 \304\303\305\306\307\310%\210\301\207" [idlwave-shell-have-new-custom copy-face underline idlwave-shell-bp custom-declare-face ((((class color)) (:foreground "Black" :background "Pink")) (t (:underline t))) "Face for highlighting lines with breakpoints." :group idlwave-shell-highlighting-and-faces] 6)
#@198 *The face for disabled breakpoint lines in the source code.
Allows you to choose the font, color and other properties for
lines which have a breakpoint. See also `idlwave-shell-mark-breakpoints'.
(custom-declare-variable 'idlwave-shell-disabled-breakpoint-face ''idlwave-shell-disabled-bp '(#$ . -19652) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
(byte-code "\204\f \301\302\303\"\210\202 \304\303\305\306\307\310%\210\301\207" [idlwave-shell-have-new-custom copy-face underline idlwave-shell-disabled-bp custom-declare-face ((((class color)) (:foreground "Black" :background "gray")) (t (:underline t))) "Face for highlighting lines with breakpoints." :group idlwave-shell-highlighting-and-faces] 6)
#@144 *The face for `idlwave-shell-expression-overlay'.
Allows you to choose the font, color and other properties for
the expression printed by IDL.
(custom-declare-variable 'idlwave-shell-expression-face ''secondary-selection '(#$ . -20380) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
#@139 *The face for `idlwave-shell-output-overlay'.
Allows you to choose the font, color and other properties for
the expression output by IDL.
(custom-declare-variable 'idlwave-shell-output-face ''secondary-selection '(#$ . -20683) :group 'idlwave-shell-highlighting-and-faces :type 'symbol)
#@64 Absolute pathname for temporary IDL file for compiling regions
(defvar idlwave-shell-temp-pro-file nil (#$ . 20976))
#@164 Absolute pathname for temporary IDL file save file for routine_info.
This is used to speed up the reloading of the routine info procedure
before use by the shell.
(defvar idlwave-shell-temp-rinfo-save-file nil (#$ . 21100))
#@178 Return a temp file, creating it if necessary.
TYPE is either 'pro' or 'rinfo', and `idlwave-shell-temp-pro-file' or
`idlwave-shell-temp-rinfo-save-file' is set (respectively).
(defalias 'idlwave-shell-temp-file #[(type) "\304=\203 \206&