branch: externals/idlwave
commit bf0448c03fff0cb5266e75536404003781ae011e
Author: jdsmith <jdsmith>
Commit: jdsmith <jdsmith>

    - Fixed line-beginning-position for XEmacs.
    
    - In continuing expressions, go to the beginning of the statement of the
      substatement-beginning is on the same line.
    
    - Line up else's with the corresponding if's line.
    
    - Fix skip-char-backwards not to use character classes.
---
 idlwave.el | 66 ++++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 38 insertions(+), 28 deletions(-)

diff --git a/idlwave.el b/idlwave.el
index 2e2b9dd061..77d9a50ecd 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/09/13 22:12:03 $
+;; Date: $Date: 2002/10/11 23:20:21 $
 ;; Keywords: languages
 
 ;; This file is part of GNU Emacs.
@@ -146,6 +146,12 @@
 
 (eval-when-compile (require 'cl))
 
+;; For XEmacs
+(unless (fboundp 'line-beginning-position)
+  (defalias 'line-beginning-position 'point-at-bol))
+(unless (fboundp 'line-end-position)
+  (defalias 'line-end-position 'point-at-eol))
+
 (eval-and-compile
   ;; Kludge to allow `defcustom' for Emacs 19.
   (condition-case () (require 'custom) (error nil))
@@ -383,16 +389,16 @@ t means to show all source files."
   :type 'integer)
 
 (defcustom idlwave-library-path nil
-  "Library path for Windows and MacOS.  Not needed under Unix.
-When selecting the directories to scan for IDL library routine info,
-IDLWAVE can under UNIX query the shell for the exact search path.
-However, under Windows and MacOS, the IDLWAVE shell does not work.  In this
-case, this variable specifies the path where IDLWAVE can find library files.
-The shell will only be asked when this variable is nil.
-The value is a list of directories.  A directory preceeded by a `+' will
-be searched recursively.  If you set this variable on a UNIX system, the shell
-will not be asked.
-See also `idlwave-system-directory'."
+  "Library path for Windows and MacOS.  Not needed under Unix.  When
+selecting the directories to scan for IDL library routine info,
+IDLWAVE can, under UNIX, query the shell for the exact search path.
+However, under Windows and MacOS, the IDLWAVE shell does not work.  In
+this case, this variable specifies the path where IDLWAVE can find
+library files.  The shell will only be asked when this variable is
+nil.  The value is a list of directories.  A directory preceeded by a
+`+' will be searched recursively.  If you set this variable on a UNIX
+system, the shell will not be asked.  See also
+`idlwave-system-directory'."
   :group 'idlwave-routine-info
   :type '(repeat (directory)))
 
@@ -1565,8 +1571,6 @@ Capitalize system variables - action only
 (define-key idlwave-mode-map "\C-c\C-m" 'idlwave-doc-modification)
 (define-key idlwave-mode-map "\C-c\C-c" 'idlwave-case)
 (define-key idlwave-mode-map "\C-c\C-d" 'idlwave-debug-map)
-(define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run)
-(define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here)
 (when (and (boundp 'idlwave-shell-debug-modifiers)
         (listp idlwave-shell-debug-modifiers)
         (not (equal idlwave-shell-debug-modifiers '())))
@@ -1580,6 +1584,8 @@ Capitalize system variables - action only
     (define-key idlwave-mode-map 
       (vector (append mods-noshift (list (if shift ?B ?b))))
       'idlwave-shell-break-here)))
+(define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run)
+(define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here)
 (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-for)
 ;;  (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-function)
 ;;  (define-key idlwave-mode-map "\C-c\C-p" 'idlwave-procedure)
@@ -1937,7 +1943,7 @@ The main features of this mode are
       (add-to-list 'tag-table-alist '("\\.pro$" . "IDLTAGS")))
   
   ;; Font-lock additions - originally Phil Williams, then Ulrik Dickow
-  ;; Following line is for Emacs - XEmacs uses the corresponding porperty
+  ;; Following line is for Emacs - XEmacs uses the corresponding property
   ;; on the `idlwave-mode' symbol.
   (set (make-local-variable 'font-lock-defaults) idlwave-font-lock-defaults)
 
@@ -2886,14 +2892,18 @@ statement if this statement is a continuation of the 
previous line."
            (case-fold-search t)
            (end-reg (progn (beginning-of-line) (point)))
            (close-exp (progn (skip-chars-forward " \t") (looking-at "\\s)")))
-;           (beg-reg (progn (idlwave-previous-statement) (point)))
-           (beg-reg (progn ;; Use substatement indent unless it's this line
-                     (idlwave-start-of-substatement 'pre) 
-                     (if (eq (line-beginning-position) end-reg)
-                         (idlwave-previous-statement))
-                     (point)))
+          (beg-last-statement (save-excursion (idlwave-previous-statement)
+                                              (point)))
+           (beg-reg (progn (idlwave-start-of-substatement 'pre) 
+                          (if (eq (line-beginning-position) end-reg)
+                              (goto-char beg-last-statement)
+                            (point))))
           (cur-indent (idlwave-current-indent))
           (else-cont (and (goto-char end-reg) (looking-at "[ \t]*else")))
+          (else-indent 
+           (when else-cont
+             (idlwave-find-key "\\<if\\>" -1 'nomark beg-last-statement)
+             (current-column)))
           (basic-indent           ;; The basic, non-fancy indent
            (+ cur-indent idlwave-continuation-indent))
           (fancy-nonparen-indent  ;; A smarter indent for routine/assignments
@@ -2939,9 +2949,9 @@ statement if this statement is a continuation of the 
previous line."
                        idlwave-max-extra-continuation-indent))))
            fancy-enclosing-paren-indent)
       (cond 
-       ;; else continuations are always standard
+       ;; else continuations are always tied to their "if" line
        (else-cont 
-       cur-indent)
+       (or else-indent cur-indent))
 
        ;; an allowed parenthesis-indent
        (fancy-paren-indent-allowed 
@@ -5024,7 +5034,7 @@ end
 
 (defvar idlwave-shell-temp-pro-file)
 (defvar idlwave-shell-temp-rinfo-save-file)
-(defun idlwave-shell-update-routine-info (&optional quiet run-hooks preempt)
+(defun idlwave-shell-update-routine-info (&optional quiet run-hooks wait)
   "Query the shell for routine_info of compiled modules and update the lists."
   ;; Save and compile the procedure.  The compiled procedure is then
   ;; saved into an IDL SAVE file, to allow for fast RESTORE.
@@ -5041,12 +5051,12 @@ end
       (save-buffer 0))
     (idlwave-shell-send-command 
      (concat ".run " idlwave-shell-temp-pro-file)
-     nil 'hide)
+     nil 'hide wait)
 ;    (message "SENDING SAVE") ; ????????????????????????
     (idlwave-shell-send-command
      (format 
"save,'idlwave_routine_info','idlwave_print_info_entry',FILE='%s',/ROUTINES" 
             (idlwave-shell-temp-file 'rinfo))
-     nil 'hide))
+     nil 'hide wait))
 
   ;; Restore and execute the procedure, analyze the output
 ;  (message "SENDING RESTORE & EXECUTE") ; ????????????????????????
@@ -5056,7 +5066,7 @@ end
    `(progn
       (idlwave-shell-routine-info-filter)
       (idlwave-concatenate-rinfo-lists ,quiet ,run-hooks))
-   'hide preempt))
+   'hide wait))
 
 ;; ---------------------------------------------------------------------------
 ;;
@@ -6535,7 +6545,7 @@ The list is cached in `idlwave-class-info' for faster 
access."
        (case-fold-search t))
     (if (save-excursion
          ;; Check if the context is right
-         (skip-chars-backward "[a-zA-Z0-9._$]")
+         (skip-chars-backward "a-zA-Z0-9._$")
          (and (< (point) (- pos 4))
               (looking-at "self\\.")))
        (let* ((class-selector (nth 2 (idlwave-current-routine)))
@@ -6613,7 +6623,7 @@ Gets set in `idlw-rinfo.el'.")
           t)  ; return t to skip other completions
          ((save-excursion
             ;; Check if the context is right for sysvar tag
-            (skip-chars-backward "[a-zA-Z0-9_$.]")
+            (skip-chars-backward "a-zA-Z0-9_$.")
             (and (equal (char-before) ?!)
                  (looking-at "\\([a-zA-Z][a-zA-Z0-9_$]*\\)\\.")
                  (<= (match-end 0) pos)))

Reply via email to