branch: externals/idlwave
commit 2ce3023fe9caa5ffcf8873eb0906f14b0962d17e
Author: jdsmith <jdsmith>
Commit: jdsmith <jdsmith>

    - Moved all help code to idlw-help, and topics to idlw-help-topics,
      which it loads.  This allows the full help code to be bundled with
      Emacs, to provide source-level
      documentation/structure/class/etc. help, even in the absence of the
      RSI system help.
    
    - Fix padding assignments in for loops, e.g. for i = 0,9
    
    - Fix C-u M-Tab for Emacs 21, which now traps and does not send along
      prefix args to `indent-line-function'.
    
    - If the user continues an empty or comment-only line, assume he did it
      to gain more room, and revert to the basic indent (diregarding
      parenthesis placement).
    
    - Bug fix for self.foo->Method, $ continuation indents (added ".").
    
    - Comment/Uncomment using newcomment.el for Emacs 21, if available
      (otherwise was inserting spurious spaces).
    
    - One key select code from Carsten... currently used in Electric Debug
      Mode's "x" examine command.
    
    - Cleaned up tag generation for structures, to catch comment-only lines
      between INHERITs.
    
    - Don't get sysvars unless the routine_info is compiled
    
    - Keep string properties from propogating in finding modules, etc.
---
 idlwave.el | 367 +++++++++++++++++++++++++++++--------------------------------
 1 file changed, 173 insertions(+), 194 deletions(-)

diff --git a/idlwave.el b/idlwave.el
index a0ba5e3b0f..2aab24c64b 100644
--- a/idlwave.el
+++ b/idlwave.el
@@ -5,7 +5,7 @@
 ;;         Chris Chase <ch...@att.com>
 ;; Maintainer: J.D. Smith <jdsm...@as.arizona.edu>
 ;; Version: VERSIONTAG
-;; Date: $Date: 2002/10/30 23:40:53 $
+;; Date: $Date: 2003/01/06 22:45:44 $
 ;; Keywords: languages
 
 ;; This file is part of GNU Emacs.
@@ -145,6 +145,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(require 'idlw-help)
 
 ;; For XEmacs
 (unless (fboundp 'line-beginning-position)
@@ -174,6 +175,7 @@
   :prefix "idlwave"
   :group 'languages)
 
+
 ;;; Variables for indentation behavior ---------------------------------------
 
 (defgroup idlwave-code-formatting nil
@@ -315,7 +317,6 @@ the comment is not preceded by whitespace it is unchanged."
 ;; Comments not matching any of the above will be indented as a
 ;; right-margin comment, i.e., to a minimum of `comment-column'.
 
-
 ;;; Routine Info and Completion ---------------------------------------
 
 (defgroup idlwave-routine-info nil
@@ -435,91 +436,6 @@ chars are allowed."
   :type '(repeat
          (cons regexp string)))
 
-(defgroup idlwave-online-help nil
-  "Online Help options for IDLWAVE mode."
-  :group 'idlwave)
-
-(defcustom idlwave-help-directory ""
-  "The directory where idlw-help.txt and idlw-help.el are stored."
-  :group 'idlwave-online-help
-  :type 'file)
-
-(defcustom idlwave-help-use-dedicated-frame t
-  "*Non-nil means, use a separate frame for Online Help if possible."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-(defcustom idlwave-help-frame-parameters
-  '((height . 20) (unsplittable . t))
-  "The frame parameters for the special Online Help frame.
-See also `idlwave-help-use-dedicated-frame'.
-If you do not set the frame width here, the value specified in
-`idlw-help.el' will be used."
-  :group 'idlwave-online-help
-  :type '(repeat
-         (cons symbol sexp)))
-
-(defcustom idlwave-max-popup-menu-items 20
-  "Maximum number of items per pane in popup menus.
-Currently only used for class selection during completion help."
-  :group 'idlwave-online-help
-  :type 'integer)
-
-(defcustom idlwave-extra-help-function 'idlwave-help-with-source
-  "The function to call for online help if the normal help fails.
-Online help works only for system routines which are described in the
-IDL manuals.  A function may be specified to access help from other sources.
-
-The function must accept four arguments: NAME, TYPE, CLASS, KEYWORD.
-The Help buffer is current when this function is called, and the help
-text should be loaded into this buffer.  If help is found, the function
-should return the buffer position which should be used as `window-start'
-in the help window.  Also, the variable `idlwave-help-mode-line-indicator'
-should be set to a useful string, which will be displayed in the mode line
-of the help window.  If should also set the variable `idlwave-min-frame-width'
-to a positive integer.  IDLWAVE will ensure that the help frame is at
-least that many columns wide.
-Failure to find help should be indicated by throwing an error.
-
-When this variable is non-nil, IDLWAVE will allow the mouse-3 help click
-for every routine and keyword, even though the item may not be highlighted
-in blue (indicating the availability of system documentation).
-
-The default value for this function is `idlwave-help-with-source' which
-loads the routine source file into the help buffer.  If you try to write
-a different function which accesses a special help file or so, it is
-probably a good idea to still call this function as a fallback."
-  :group 'idlwave-online-help
-  :type 'symbol)
-
-(defcustom idlwave-help-fontify-source-code nil
-  "*Non-nil means, fontify source code displayed as help like normal code."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-(defcustom idlwave-help-source-try-header t
-  "*Non-nil means, try to find help in routine header when displaying source.
-Routines which are not documented in the system manual use their source as
-help text.  When this variable is non-nil, we try to find a description of
-the help item in the first routine doclib header above the routine definition.
-If the variable is nil, or if we cannot find/parse the header, the routine
-definition is displayed instead."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-(defface idlwave-help-link-face
-  '((((class color)) (:foreground "Blue"))
-    (t (:weight bold)))
-  "Face for highlighting links into IDLWAVE online help."
-  :group 'idlwave-online-help)
-
-(defcustom idlwave-help-activate-links-aggressively t
-  "*Non-nil means, make all possible links in help active.
-This just activates all words which are also a help topic - some links may
-be misleading."
-  :group 'idlwave-online-help
-  :type 'boolean)
-  
 
 (defgroup idlwave-completion nil
   "Completion options for IDLWAVE mode."
@@ -1413,7 +1329,7 @@ Normally a space.")
   "Character which is inserted as a last character on previous line by
    \\[idlwave-split-line] to begin a continuation line.  Normally $.")
 
-(defconst idlwave-mode-version " 4.16")
+(defconst idlwave-mode-version " VERSIONTAG")
 
 (defmacro idlwave-keyword-abbrev (&rest args)
   "Creates a function for abbrev hooks to call `idlwave-check-abbrev' with 
args."
@@ -1974,6 +1890,13 @@ The main features of this mode are
   (add-hook 'after-save-hook 'idlwave-save-buffer-update nil 'local)
   (add-hook 'after-save-hook 'idlwave-revoke-license-to-kill nil 'local)
 
+  ;; Try to load online help, but catch any errors.
+  (condition-case nil
+      ;; Load the system topics, if available, warning the user if no
+      ;; help package found.
+      (idlwave-help-require-system-text 'warn)
+    (error nil))
+  
   ;; Update the routine info with info about current buffer?
   (idlwave-new-buffer-update)
 
@@ -1981,9 +1904,8 @@ The main features of this mode are
   (run-hooks 'idlwave-mode-hook))
 
 ;;
-;;  Done with start up and initialization code.
-;;  The remaining routines are the code formatting functions.
-;;
+;; Code Formatting ----------------------------------------------------
+;; 
 
 (defun idlwave-push-mark (&rest rest)
   "Push mark for compatibility with Emacs 18/19."
@@ -2075,7 +1997,7 @@ Returns point if comment found and nil otherwise."
 (defvar zmacs-regions)
 (defvar mark-active)
 (defun idlwave-region-active-p ()
-  "Is transien-mark-mode on an the region active?
+  "Is transient-mark-mode on and the region active?
 Works on both Emacs and XEmacs."
   (if (featurep 'xemacs)
       (and zmacs-regions (region-active-p))
@@ -2684,15 +2606,14 @@ See `idlwave-surround'. "
                   (idlwave-start-of-substatement t)
                   (idlwave-statement-type))))
 
-        (cond ((or (and (equal (car (car st)) 'assign)
-                       (equal (cdr st) (point)))
+        (cond ((or (not (memq (car (car st)) '(pdef call)))
                   (eq t idlwave-pad-keyword))
-              ;; An assignment statement or keywor and we need padding
+              ;; An assignment statement or keyword and we need padding
               (idlwave-surround before after))
              ((null idlwave-pad-keyword)
               ;; Spaces should be removed at a keyword
               (idlwave-surround 0 0))
-             (t)))))          
+             (t)))))
 
 (defun idlwave-indent-and-action (&optional arg)
   "Call `idlwave-indent-line' and do expand actions.
@@ -2707,6 +2628,9 @@ With prefix ARG non-nil, indent the entire sub-statement."
               ;;Expand the END abbreviation, just as RET or Space would have.
               (if abbrev-mode (expand-abbrev)
                 (idlwave-show-begin)))))
+  (when (and (not arg) current-prefix-arg)
+    (setq arg current-prefix-arg)
+    (setq current-prefix-arg nil))
   (if arg 
       (idlwave-indent-statement)
     (idlwave-indent-line t)))
@@ -2875,16 +2799,18 @@ location of the open paren"
       ;; Line up with next word unless this is a closing paren.
       (cons open
            (cond
-            ;; This is a closed paren - line up under open paren.
-            (close-exp
-             (current-column))
-            ;; Empty (or just comment) - just line up next to paren
+            ;; Empty (or just comment) - just revert to basic indent
             ((progn
                ;; Skip paren
                (forward-char 1)
                (looking-at "[ \t$]*\\(;.*\\)?$"))
+             nil)
+
+            ;; This is a closed paren - line up under open paren.
+            (close-exp
              (current-column))
-            ;; Line up with first word after blank space
+
+            ;; Line up with first word after any blank space
             ((progn
                (skip-chars-forward " \t")
                (current-column))))))))
@@ -2921,25 +2847,22 @@ statement if this statement is a continuation of the 
previous line."
               ;; A continued Procedure call or definition
               ((progn
                  (idlwave-look-at "^[ \t]*\\(pro\\|function\\)") ;skip over
-                 (looking-at "[ \t]*\\([a-zA-Z0-9$_]+[ \t]*->[ 
\t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*"))
+                 (looking-at "[ \t]*\\([a-zA-Z0-9.$_]+[ \t]*->[ 
\t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*"))
                (goto-char (match-end 0))
-               ;; Comment only, or blank line with "$"?  Align with ,
+
+               ;; Comment only, or blank line with "$"?  Basic indent.
                (if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
-                   (goto-char (match-end 2)))
-               (current-column))
+                   nil
+                 (current-column)))
 
               ;; Continued assignment (with =), 
               ((looking-at "[ \t]*[][().a-zA-Z0-9$_]+[ \t]*\\(=\\)[ \t]*")
                (goto-char (match-end 0))
-               ;; Comment only?  Align with =
+               ;; Comment only?  Revert to using basic indent
                (if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
-                   (progn 
-                     (goto-char (match-end 1))
-                     (if idlwave-surround-by-blank 
-                         (1+ (current-column))
-                       (current-column)))
+                   nil
                  (current-column))))))
-          (fancy-nonparen-indent-allowed
+          (fancy-nonparen-indent-allowed ;is it permitted?
            (and fancy-nonparen-indent
                 (< (- fancy-nonparen-indent basic-indent)
                    idlwave-max-extra-continuation-indent)))
@@ -2948,7 +2871,7 @@ statement if this statement is a continuation of the 
previous line."
            (idlwave-calculate-paren-indent beg-reg end-reg close-exp))
           (fancy-paren-open (car fancy-paren-indent-cons))
           (fancy-paren-indent (cdr fancy-paren-indent-cons))
-          (fancy-paren-indent-allowed
+          (fancy-paren-indent-allowed   ; is it permitted
            (and fancy-paren-indent
                 (or idlwave-indent-to-open-paren ;; override
                     (< (- fancy-paren-indent basic-indent)
@@ -2960,12 +2883,12 @@ statement if this statement is a continuation of the 
previous line."
        (or else-indent cur-indent))
 
        ;; an allowed parenthesis-indent
-       (fancy-paren-indent-allowed 
+       ((and fancy-paren-indent fancy-paren-indent-allowed)
        fancy-paren-indent)
 
        ;; a disallowed paren indent nested inside one or more other
        ;; parens: indent relative to the first allowed enclosing paren
-       ;; set, if any... if it's actually a greater indent, just use
+       ;; set, if any... if it's actually a larger indent, just use
        ;; the fancy-paren-indent anyway.
        ((and fancy-paren-indent
             (not fancy-paren-indent-allowed)
@@ -2993,7 +2916,7 @@ statement if this statement is a continuation of the 
previous line."
        (+ fancy-nonparen-indent idlwave-continuation-indent))
 
        ;; an allowed nonparen-only indent
-       (fancy-nonparen-indent-allowed
+       ((and fancy-nonparen-indent fancy-nonparen-indent-allowed)
        fancy-nonparen-indent)
 
        ;; everything else
@@ -3949,11 +3872,13 @@ blank lines."
       ;; skip blank lines
       (skip-chars-forward " \t\n")
       (if (looking-at (concat "[ \t]*\\(" comment-start "+\\)"))
-          (comment-region beg end
-                          (- (length (buffer-substring
-                                      (match-beginning 1)
-                                      (match-end 1)))))
-        (comment-region beg end)))))
+         (if (fboundp 'uncomment-region)
+             (uncomment-region beg end)
+           (comment-region beg end
+                           (- (length (buffer-substring
+                                       (match-beginning 1)
+                                       (match-end 1))))))
+       (comment-region beg end)))))
 
 
 ;; ----------------------------------------------------------------------------
@@ -4325,7 +4250,7 @@ With three prefix args, dispatch asynchronous process to 
do the update."
            ;;    causes the concatenation *delayed*, so not in time for
            ;;    the current command.  Therefore, we do a concatenation
            ;;    now, even though the shell might do it again.
-           (idlwave-concatenate-rinfo-lists nil t))
+           (idlwave-concatenate-rinfo-lists nil 'run-hooks))
       
        (when ask-shell
          ;; Ask the shell about the routines it knows.
@@ -4354,8 +4279,6 @@ With three prefix args, dispatch asynchronous process to 
do the update."
                   nil 'idlwave-load-rinfo-next-step)))
        (error nil))))
 
-
-
 (defun idlwave-load-rinfo-next-step ()
   (let ((inhibit-quit t)
        (arr idlwave-load-rinfo-steps-done))
@@ -4502,7 +4425,7 @@ With three prefix args, dispatch asynchronous process to 
do the update."
   (idlwave-update-current-buffer-info 'find-file))
 
 (defun idlwave-update-current-buffer-info (why)
-  "Undate idlwave-routines for current buffer.  Can run from after-save-hook."
+  "Update idlwave-routines for current buffer.  Can run from after-save-hook."
   (when (and (eq major-mode 'idlwave-mode)
             (or (eq t idlwave-auto-routine-info-updates)
                 (memq why idlwave-auto-routine-info-updates))
@@ -6239,6 +6162,92 @@ sort the list before displaying"
        idlwave-before-completion-wconf
        (set-window-configuration idlwave-before-completion-wconf)))
 
+(defun idlwave-one-key-select (sym prompt delay)
+  "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
+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.
+First, the strings are checked for preselected keys, like in \"[P]rint\".
+If these don't exist, a letter in the string is automatically selected."
+  (let* ((alist (symbol-value sym))
+         (temp-buffer-show-hook '(fit-window-to-buffer))
+         keys-alist char)
+    ;; First check the cache
+    (if (and (eq (symbol-value sym) (get sym :one-key-alist-last)))
+        (setq keys-alist (get sym :one-key-alist-cache))
+      ;; Need to make new list
+      (setq keys-alist (idlwave-make-one-key-alist alist))
+      (put sym :one-key-alist-cache keys-alist)
+      (put sym :one-key-alist-last alist))
+    ;; Display prompt and wait for quick reply
+    (message "%s[%s]" prompt
+             (mapconcat (lambda(x) (char-to-string (car x)))
+                        keys-alist ""))
+    (if (sit-for delay)
+        ;; No quick reply: Show help
+        (save-window-excursion
+          (with-output-to-temp-buffer "*Completions*"
+            (mapcar (lambda(x)
+                      (princ (nth 1 x))
+                      (princ "\n"))
+                    keys-alist))            
+          (setq char (read-char)))
+      (setq char (read-char)))
+    (message nil)
+    ;; Return the selected result
+    (nth 2 (assoc char keys-alist))))
+
+(defun idlwave-make-one-key-alist (alist)
+  "Make an alist for single key selection."
+  (let ((l alist) keys-alist name start char help
+        (cnt 0)
+        (case-fold-search nil))
+    (while l
+      (setq name (car (car l))
+            l (cdr l))
+      (catch 'exit
+        ;; First check if the configuration predetermined a key
+        (if (string-match "\\[\\(.\\)\\]" name)
+            (progn
+              (setq char (string-to-char (downcase (match-string 1 name)))
+                    help (format "%c:  %s" char name)
+                    keys-alist (cons (list char help name) keys-alist))
+              (throw 'exit t)))
+        ;; Then check for capital letters
+        (setq start 0)
+        (while (string-match "[A-Z]" name start)
+          (setq start (match-end 0)
+                char (string-to-char (downcase (match-string 0 name))))
+          (if (not (assoc char keys-alist))
+              (progn
+                (setq help (format "%c:  %s" char
+                                   (replace-match
+                                    (concat "[" (match-string 0 name) "]")
+                                          t t name))
+                      keys-alist (cons (list char help name) keys-alist))
+                (throw 'exit t))))
+        ;; Now check for lowercase letters
+        (setq start 0)
+        (while (string-match "[a-z]" name start)
+          (setq start (match-end 0)
+                char (string-to-char (match-string 0 name)))
+          (if (not (assoc char keys-alist))
+              (progn
+                (setq help (format "%c:  %s" char
+                                   (replace-match
+                                    (concat "[" (match-string 0 name) "]")
+                                    t t name))
+                      keys-alist (cons (list char help name) keys-alist))
+                (throw 'exit t))))
+        ;; Bummer, nothing found!  Use a stupid number
+        (setq char (string-to-char (int-to-string (setq cnt (1+ cnt))))
+              help (format "%c:  %s" char name)
+              keys-alist (cons (list char help name) keys-alist))))
+    (nreverse keys-alist)))
+
 (defun idlwave-set-local (var value &optional buffer)
   "Set the buffer-local value of VAR in BUFFER to VALUE."
   (save-excursion
@@ -6324,7 +6333,7 @@ sort the list before displaying"
 ;;----------------------------------------------------------------------
 
 ;;; ------------------------------------------------------------------------
-;;; Sturucture parsing code, and code to manage class info
+;;; Stucture parsing code, and code to manage class info
 
 ;;
 ;; - Go again over the documentation how to write a completion
@@ -6332,6 +6341,11 @@ sort the list before displaying"
 ;;   This could be in a separate file in the distribution, or 
 ;;   in an appendix for the manual.  
 
+(defvar idlwave-struct-skip
+  "[ \t]*\\(\\$.*\n\\(^[ \t]*\\(\\$[ \t]*\\)?\\(;.*\\)?\n\\)*\\)?[ \t]*"
+  "Regexp for skipping continued blank or comment-only lines in
+structures")
+
 (defun idlwave-struct-tags ()
   "Return a list of all tags in the structure defined at point.
 Point is expected just before the opening `{' of the struct definition."
@@ -6341,11 +6355,16 @@ Point is expected just before the opening `{' of the 
struct definition."
           (end (cdr borders))
           tags)
       (goto-char beg)
-      (while (re-search-forward "[{,][ \t]*\\(\\$.*\n\\(^[ \t]*\\(\\$[ 
\t]*\\)?\\(;.*\\)?\n\\)*[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)[ \t]*:" end t)
+      (while (re-search-forward 
+             (concat "[{,]" ;leading comma/brace
+                     idlwave-struct-skip ; 4 groups
+                     "\\([a-zA-Z][a-zA-Z0-9_]*\\)" ;the tag itself, group 5
+                     "[ \t]*:")   ; the final colon
+             end t)
        ;; Check if we are still on the top level of the structure.
        (if (and (condition-case nil (progn (up-list -1) t) (error nil))
                 (= (point) beg))
-           (push (match-string 5) tags))
+           (push (match-string-no-properties 5) tags))
        (goto-char (match-end 0)))
       (nreverse tags))))
 
@@ -6368,11 +6387,17 @@ Point is expected just before the opening `{' of the 
struct definition."
           (case-fold-search t)
           names)
       (goto-char beg)
-      (while (re-search-forward "[{,][ \t]*\\(\\$.*\n[ \t]*\\)?inherits[ 
\t]*\\(\\$.*\n[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)" end t)
+      (while (re-search-forward 
+             (concat "[{,]"  ;leading comma/brace
+                     idlwave-struct-skip ; 4 groups
+                     "inherits"    ; The INHERITS tag
+                     idlwave-struct-skip ; 4 more
+                     "\\([a-zA-Z][a-zA-Z0-9_]*\\)") ; The super-group, #9
+             end t)
        ;; Check if we are still on the top level of the structure.
        (if (and (condition-case nil (progn (up-list -1) t) (error nil))
                 (= (point) beg))
-           (push (match-string 3) names))
+           (push (match-string-no-properties 9) names))
        (goto-char (match-end 0)))
       (nreverse names))))
 
@@ -6710,7 +6735,8 @@ associated TAG, if any."
 
 (defun idlwave-sysvars-reset ()
   (if (and (fboundp 'idlwave-shell-is-running)
-          (idlwave-shell-is-running))
+          (idlwave-shell-is-running)
+          idlwave-idlwave_routine_info-compiled)
       (idlwave-shell-send-command "idlwave_get_sysvars"
                                  'idlwave-process-sysvars 'hide)))
 
@@ -6825,62 +6851,23 @@ visits the source file, finding help in the header (if
 `idlwave-help-source-try-header' is non-nil) or the routine definition
 itself."
   (interactive "P")
-  (idlwave-require-online-help)
+;  (idlwave-require-online-help)
   (idlwave-do-context-help arg))
 
 (defun idlwave-mouse-completion-help (ev)
   "Display online help about the completion at point."
   (interactive "eP")
-  (idlwave-require-online-help)
+;  (idlwave-require-online-help)
   ;; Restore last-command for next command, to make scrolling of completions
   ;; work.
   (setq this-command last-command)
   (idlwave-do-mouse-completion-help ev))
 
-(defvar idlwave-help-is-loaded nil
-  "Is online help avaiable?")
-;; The following variables will be defined by `idlw-help.el'.
-(defvar idlwave-help-frame-width nil)
-(defvar idlwave-help-file nil)
-(defvar idlwave-help-topics nil)
-
-(defun idlwave-help-directory ()
-  "Return the help directory, or nil if that is not known."
-  (or (and (stringp idlwave-help-directory)
-          (> (length idlwave-help-directory) 0)
-          idlwave-help-directory)
-      (getenv "IDLWAVE_HELP_DIRECTORY")))
-
-(defun idlwave-require-online-help ()
-  (if idlwave-help-is-loaded
-      t  ;; everything is OK.
-    (let* ((dir (or (idlwave-help-directory)
-                   (error "Online Help not installed (help directory unknown) 
- download at idlwave.org")))
-          (lfile1 (expand-file-name "idlw-help.elc" dir))
-          (lfile2 (expand-file-name "idlw-help.el" dir))
-          (hfile (expand-file-name "idlw-help.txt" dir)))
-      (if (or (and (file-regular-p lfile1) (load-file lfile1))
-             (and (file-regular-p lfile2) (load-file lfile2)))
-         (progn 
-           (if (and idlwave-help-frame-parameters
-                    (not (assoc 'width idlwave-help-frame-parameters)))
-               (push (cons 'width idlwave-help-frame-width)
-                     idlwave-help-frame-parameters))
-           (or idlwave-help-topics
-               (error "File `%s' in help dir `%s' does not define 
`idlwave-help-topics'" 
-                        "idlw-help.el" dir)))
-       (error "No such file `%s' in help dir `%s'" "idlw-help.el" dir))
-      (if (file-regular-p hfile)
-         (setq idlwave-help-is-loaded t
-               idlwave-help-file hfile)
-       (error "No such file `%s' in dir `%s'" "idlw-help.txt" dir)))))
-
 (defun idlwave-routine-info (&optional arg external)
-  "Display a routines calling sequence and list of keywords.
-When point is on the name a function or procedure, or in the argument
-list of a function or procedure, this command displays a help buffer
-with the information.  When called with prefix arg, enforce class
-query.
+  "Display a routines calling sequence and list of keywords.  When
+point is on the name a function or procedure, or in the argument list
+of a function or procedure, this command displays a help buffer with
+the information.  When called with prefix arg, enforce class query.
 
 When point is on an object operator `->', display the class stored in
 this arrow, if any (see `idlwave-store-inquired-class').  With a
@@ -7060,8 +7047,8 @@ Used by `idlwave-routine-info' and `idlwave-find-module'."
       ;; This is a function or procedure definition statement
       ;; We return the defined routine as module.
       (list
-       (idlwave-sintern-routine-or-method (match-string 4)
-                                         (match-string 2))
+       (idlwave-sintern-routine-or-method (match-string-no-properties 4)
+                                         (match-string-no-properties 2))
        (if (equal (downcase (match-string 1)) "pro") 'pro 'fun)
        (idlwave-sintern-class (match-string 3)))
 
@@ -7289,10 +7276,9 @@ If we do not know about MODULE, just return KEYWORD 
literally."
         (all dtwins)
         (system (idlwave-rinfo-assq
                  name type class idlwave-system-routines))
-        (have-sysdoc (and system (idlwave-help-directory)))
+        (have-sysdoc (and system idlwave-help-topics))
         ;; (source (nth 3 entry))
-        (have-olh (and (or system idlwave-extra-help-function)
-                       (idlwave-help-directory)))
+        (have-olh (or system idlwave-extra-help-function))
         (calling-seq (nth 4 entry))
         (keywords (nth 5 entry))
         (olh (nth 6 entry))
@@ -7305,9 +7291,7 @@ If we do not know about MODULE, just return KEYWORD 
literally."
              "Button2/3: Online Help"
            nil))
         (help-echo-src
-         (if (idlwave-help-directory)
-             "Button2: Pop to source and back.             Button3: Source in 
Help window."
-           "Button2: Pop to source and back."))
+         "Button2: Pop to source and back.             Button3: Source in Help 
window.")
         (help-echo-class
          "Button2: Display info about same method in superclass")
         (col 0)
@@ -7529,16 +7513,16 @@ was pressed."
            type (idlwave-sintern-class word) 
            initial-class))
          ((eq id 'usage)
-          (idlwave-require-online-help)
+;         (idlwave-require-online-help)
           (idlwave-online-help nil name type class))
          ((eq id 'source)
-          (if (and right (idlwave-help-directory))
+          (if right
               (let ((idlwave-extra-help-function 'idlwave-help-with-source)
                     (idlwave-help-source-try-header nil)
                     ;; Fake idlwave-routines, to make help find the right entry
                     (idlwave-routines
                      (list (list (nth 1 data) (nth 2 data) (nth 3 data) source 
""))))
-                (idlwave-require-online-help)
+;               (idlwave-require-online-help)
                 (idlwave-help-get-special-help name type class nil))
             (setq idlwave-popup-source (not idlwave-popup-source))
             (if idlwave-popup-source
@@ -7555,7 +7539,7 @@ was pressed."
          ((eq id 'keyword)
           (if right
               (progn
-                (idlwave-require-online-help)
+;               (idlwave-require-online-help)
                 (idlwave-online-help nil name type class keyword))
             (idlwave-rinfo-insert-keyword keyword buf shift))))))
 
@@ -8080,7 +8064,7 @@ Assumes that point is at the beginning of the unit as 
found by
       ["9 Class Name"  idlwave-complete-class t]))
     ("Routine Info"
      ["Show Routine Info" idlwave-routine-info t]
-     ["Online Context Help" idlwave-context-help (idlwave-help-directory)]
+     ["Online Context Help" idlwave-context-help t]
      "--"
      ["Find Routine Source" idlwave-find-module t]
      ["Resolve Routine" idlwave-resolve (featurep 'idlw-shell)]
@@ -8256,11 +8240,6 @@ This function was written since `list-abbrevs' looks 
terrible for IDLWAVE mode."
 ;; Add .pro files to speedbar for support, if it's loaded
 (eval-after-load "speedbar" '(speedbar-add-supported-extension ".pro"))
 
-;; Try to load online help, but catch any errors.
-(condition-case nil
-    (idlwave-require-online-help)
-  (error nil))
-
 ;; Set an idle timer to load the routine info.
 ;; Will only work on systems which support this.
 (or idlwave-routines (idlwave-start-load-rinfo-timer))

Reply via email to