;; idlwave.el --- IDL editing mode for GNU Emacs
-;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-;; Free Software Foundation
+
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Free Software Foundation, Inc.
;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
;; Carsten Dominik <dominik@science.uva.nl>
:type 'integer)
(defcustom idlwave-library-path nil
- "Library path for Windows and MacOS (OS9). Not needed under Unix.
+ "Library path for Windows and MacOS (OS9). Not needed under UNIX.
When selecting the directories to scan for IDL user catalog routine
info, IDLWAVE can, under UNIX, query the shell for the exact search
path \(the value of !PATH). However, under Windows and MacOS
-(pre-OSX), the IDLWAVE shell does not work. In this case, this
+\(pre-OSX), the IDLWAVE shell does not work. In this case, this
variable can be set to specify the paths where IDLWAVE can find PRO
files. The shell will only be asked for a list of paths when this
variable is nil. The value is a list of directories. A directory
(define-key idlwave-mode-map "\C-c\C-t" 'idlwave-find-module-this-file)
(define-key idlwave-mode-map "\C-c?" 'idlwave-routine-info)
(define-key idlwave-mode-map "\M-?" 'idlwave-context-help)
-(define-key idlwave-mode-map [(control meta ?\?)]
+(define-key idlwave-mode-map [(control meta ?\?)]
'idlwave-help-assistant-help-with-topic)
;; Pickup both forms of Esc/Meta binding
(define-key idlwave-mode-map [(meta tab)] 'idlwave-complete)
(set (make-local-variable 'parse-sexp-ignore-comments) t)
;; ChangeLog
- (set (make-local-variable 'add-log-current-defun-function)
+ (set (make-local-variable 'add-log-current-defun-function)
'idlwave-current-routine-fullname)
;; Set tag table list to use IDLTAGS as file name.
;; Reindent new line
(idlwave-indent-line)))
-(defun idlwave-beginning-of-subprogram ()
- "Moves point to the beginning of the current program unit."
+(defun idlwave-beginning-of-subprogram (&optional nomark)
+ "Moves point to the beginning of the current program unit.
+If NOMARK is non-nil, do not push mark."
(interactive)
- (idlwave-find-key idlwave-begin-unit-reg -1))
+ (idlwave-find-key idlwave-begin-unit-reg -1 nomark))
-(defun idlwave-end-of-subprogram ()
- "Moves point to the start of the next program unit."
+(defun idlwave-end-of-subprogram (&optional nomark)
+ "Moves point to the start of the next program unit.
+If NOMARK is non-nil, do not push mark."
(interactive)
(idlwave-end-of-statement)
- (idlwave-find-key idlwave-end-unit-reg 1))
+ (idlwave-find-key idlwave-end-unit-reg 1 nomark))
(defun idlwave-mark-statement ()
"Mark current IDL statement."
"Return (NAME TYPE CLASS) of current routine."
(idlwave-routines)
(save-excursion
- (idlwave-beginning-of-subprogram)
+ (idlwave-beginning-of-subprogram 'nomark)
(if (looking-at "[ \t]*\\<\\(pro\\|function\\)\\>\\s-+\\(\\([a-zA-Z0-9$_]+\\)::\\)?\\([a-zA-Z0-9$_]+\\)")
(let* ((type (if (string= (downcase (match-string 1)) "pro")
'pro 'function))
(idlwave-indent-line)
;; Prevent actions do-auto-fill which calls indent-line-function.
(let (idlwave-do-actions
- (paragraph-start ".")
(paragraph-separate ".")
(fill-nobreak-predicate
(if (and (idlwave-in-quote)
(save-excursion
(end-of-line 0)
;; Indent the split line
- (idlwave-indent-line)
- )
+ (idlwave-indent-line))
(if (save-excursion
(beginning-of-line)
(looking-at idlwave-comment-line-start-skip))
(defvar idlwave-true-path-alist nil
"Like `idlwave-path-alist', but with true filenames.")
(defvar idlwave-routines nil
- "Holds the combinded procedure/function/method routine-info.")
+ "Holds the combined procedure/function/method routine-info.")
(defvar idlwave-class-alist nil
"Holds the class names known to IDLWAVE.")
(defvar idlwave-class-history nil
props (car (cdr pelem)))
(cond
((eq ptype 'SUPERCLASS)
- (push (cdr (assq 'name props)) inherits))
+ (let ((pname (cdr (assq 'name props)))
+ (plink (cdr (assq 'link props))))
+ (unless (and (string= pname "None")
+ (string= plink "None"))
+ (push pname inherits))))
((eq ptype 'PROPERTY)
(let ((pname (cdr (assq 'name props)))
(defun idlwave-xml-create-sysvar-alist (xml-entry)
;; Create a sysvar list entry from the xml parsed list.
(let* ((nameblock (nth 1 xml-entry))
- (sysvar (substring (cdr (assq 'name nameblock)) 1))
+ (name (cdr (assq 'name nameblock)))
+ (sysvar (substring name (progn (string-match "^ *!" name)
+ (match-end 0))))
(link (cdr (assq 'link nameblock)))
(params (cddr xml-entry))
(case-fold-search t)
"Make the user select an element from the alist in the variable SYM.
The keys of the alist are expected to be strings. The function returns the
car of the selected association.
-To do this, PROMPT is displayed and and the user must hit a letter key to
+To do this, PROMPT is displayed and the user must hit a letter key to
select an entry. If the user does not reply within DELAY seconds, a help
window with the options is displayed automatically.
The key which is associated with each option is generated automatically.
"--"
["Info" idlwave-info t]
"--"
- ["Help with Topic" idlwave-help-assistant-help-with-topic
+ ["Help with Topic" idlwave-help-assistant-help-with-topic
idlwave-help-use-assistant]
["Launch IDL Help" idlwave-launch-idlhelp t])))