]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/idlwave.el
Merge from emacs--rel--22
[gnu-emacs] / lisp / progmodes / idlwave.el
index 3a7d39c5db77b721fc467d7634e2e426a638b940..4c58919ec1fc04ff4b22491d00437957d44faa3c 100644 (file)
@@ -1,6 +1,7 @@
 ;; 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>
@@ -427,11 +428,11 @@ t means to show all source files."
   :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
@@ -1595,7 +1596,7 @@ Capitalize system variables - action only
 (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)
@@ -1942,7 +1943,7 @@ The main features of this mode are
   (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.
@@ -2410,16 +2411,18 @@ non-nil."
     ;; 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."
@@ -2534,7 +2537,7 @@ The marks are pushed."
   "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))
@@ -3486,7 +3489,6 @@ if `idlwave-auto-fill-split-string' is non-nil."
          (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)
@@ -3498,8 +3500,7 @@ if `idlwave-auto-fill-split-string' is non-nil."
          (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))
@@ -4341,7 +4342,7 @@ catalog \('lib).")
 (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
@@ -4653,7 +4654,11 @@ Gets set in cached XML rinfo, or `idlw-rinfo.el'.")
              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)))
@@ -4840,7 +4845,9 @@ Gets set in cached XML rinfo, or `idlw-rinfo.el'.")
 (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)
@@ -7088,7 +7095,7 @@ sort the list before displaying"
   "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.
@@ -9234,7 +9241,7 @@ Assumes that point is at the beginning of the unit as found by
      "--"
      ["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])))