diff options
| author | Miles Bader | 2005-05-20 04:22:05 +0000 |
|---|---|---|
| committer | Miles Bader | 2005-05-20 04:22:05 +0000 |
| commit | 64e9342958694825be1664890dcd22fffcd50d3a (patch) | |
| tree | a43e1796f5a49ae7eeec671447d10ac3731a1834 /lisp/progmodes | |
| parent | 5447510256e5a1b371407b751ddcc461044da5df (diff) | |
| parent | a18ff9886771c41186eebf8d7984fee2120dbe36 (diff) | |
| download | emacs-64e9342958694825be1664890dcd22fffcd50d3a.tar.gz emacs-64e9342958694825be1664890dcd22fffcd50d3a.zip | |
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-53
Merge from emacs--cvs-trunk--0
Patches applied:
* emacs--cvs-trunk--0 (patch 302-319)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 69)
- Update from CVS
Diffstat (limited to 'lisp/progmodes')
| -rw-r--r-- | lisp/progmodes/ada-xref.el | 6 | ||||
| -rw-r--r-- | lisp/progmodes/antlr-mode.el | 1 | ||||
| -rw-r--r-- | lisp/progmodes/cc-engine.el | 3 | ||||
| -rw-r--r-- | lisp/progmodes/cc-fonts.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/compile.el | 31 | ||||
| -rw-r--r-- | lisp/progmodes/cperl-mode.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/delphi.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebrowse.el | 12 | ||||
| -rw-r--r-- | lisp/progmodes/etags.el | 16 | ||||
| -rw-r--r-- | lisp/progmodes/flymake.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/gud.el | 8 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-shell.el | 612 | ||||
| -rw-r--r-- | lisp/progmodes/inf-lisp.el | 12 | ||||
| -rw-r--r-- | lisp/progmodes/make-mode.el | 557 | ||||
| -rw-r--r-- | lisp/progmodes/perl-mode.el | 30 | ||||
| -rw-r--r-- | lisp/progmodes/prolog.el | 14 | ||||
| -rw-r--r-- | lisp/progmodes/ps-mode.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/sh-script.el | 60 | ||||
| -rw-r--r-- | lisp/progmodes/tcl.el | 33 | ||||
| -rw-r--r-- | lisp/progmodes/vhdl-mode.el | 8 |
20 files changed, 848 insertions, 565 deletions
diff --git a/lisp/progmodes/ada-xref.el b/lisp/progmodes/ada-xref.el index e7eb0657eac..8dba21afe9b 100644 --- a/lisp/progmodes/ada-xref.el +++ b/lisp/progmodes/ada-xref.el | |||
| @@ -672,7 +672,7 @@ file. If none is set, return nil." | |||
| 672 | (not (integerp choice)) | 672 | (not (integerp choice)) |
| 673 | (< choice 1) | 673 | (< choice 1) |
| 674 | (> choice (length prj-files))) | 674 | (> choice (length prj-files))) |
| 675 | (setq choice (string-to-int | 675 | (setq choice (string-to-number |
| 676 | (read-from-minibuffer "Enter No. of your choice: ")))) | 676 | (read-from-minibuffer "Enter No. of your choice: ")))) |
| 677 | (set 'selected (nth (1- choice) prj-files)))) | 677 | (set 'selected (nth (1- choice) prj-files)))) |
| 678 | 678 | ||
| @@ -1800,7 +1800,7 @@ This function is disabled for operators, and only works for identifiers." | |||
| 1800 | (< choice 1) | 1800 | (< choice 1) |
| 1801 | (> choice len)) | 1801 | (> choice len)) |
| 1802 | (setq choice | 1802 | (setq choice |
| 1803 | (string-to-int | 1803 | (string-to-number |
| 1804 | (read-from-minibuffer "Enter No. of your choice: ")))) | 1804 | (read-from-minibuffer "Enter No. of your choice: ")))) |
| 1805 | ) | 1805 | ) |
| 1806 | (set-buffer ali-buffer) | 1806 | (set-buffer ali-buffer) |
| @@ -1988,7 +1988,7 @@ is using." | |||
| 1988 | (< choice 1) | 1988 | (< choice 1) |
| 1989 | (> choice (length list))) | 1989 | (> choice (length list))) |
| 1990 | (setq choice | 1990 | (setq choice |
| 1991 | (string-to-int | 1991 | (string-to-number |
| 1992 | (read-from-minibuffer "Enter No. of your choice: ")))) | 1992 | (read-from-minibuffer "Enter No. of your choice: ")))) |
| 1993 | ) | 1993 | ) |
| 1994 | (set 'choice (1- choice)) | 1994 | (set 'choice (1- choice)) |
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el index 1a35fe41860..03587577f59 100644 --- a/lisp/progmodes/antlr-mode.el +++ b/lisp/progmodes/antlr-mode.el | |||
| @@ -785,6 +785,7 @@ bound to `antlr-language'. For example, with value | |||
| 785 | \((java-mode \. 2) (c++-mode \. 0)) | 785 | \((java-mode \. 2) (c++-mode \. 0)) |
| 786 | Java actions are fontified with level 2 and C++ actions are not | 786 | Java actions are fontified with level 2 and C++ actions are not |
| 787 | fontified at all." | 787 | fontified at all." |
| 788 | :group 'antlr | ||
| 788 | :type '(choice (const :tag "None" none) | 789 | :type '(choice (const :tag "None" none) |
| 789 | (const :tag "Inherit" inherit) | 790 | (const :tag "Inherit" inherit) |
| 790 | (const :tag "Default" nil) | 791 | (const :tag "Default" nil) |
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index ea36064412f..0a4cb6c8cd6 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el | |||
| @@ -335,7 +335,8 @@ This function does not do any hidden buffer changes." | |||
| 335 | ;; locking is in use. This variable is extended with the face in | 335 | ;; locking is in use. This variable is extended with the face in |
| 336 | ;; `c-doc-face-name' when fontification is activated in cc-fonts.el. | 336 | ;; `c-doc-face-name' when fontification is activated in cc-fonts.el. |
| 337 | (defvar c-literal-faces | 337 | (defvar c-literal-faces |
| 338 | '(font-lock-comment-face font-lock-string-face)) | 338 | '(font-lock-comment-face font-lock-string-face |
| 339 | font-lock-comment-delimiter-face)) | ||
| 339 | 340 | ||
| 340 | (defun c-shift-line-indentation (shift-amt) | 341 | (defun c-shift-line-indentation (shift-amt) |
| 341 | ;; This function does not do any hidden buffer changes. | 342 | ;; This function does not do any hidden buffer changes. |
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 74efef4133f..26c0bdaf60f 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el | |||
| @@ -673,7 +673,7 @@ casts and declarations are fontified. Used on level 2 and higher." | |||
| 673 | (c-font-lock-objc-iip-decl))) | 673 | (c-font-lock-objc-iip-decl))) |
| 674 | nil)))))) | 674 | nil)))))) |
| 675 | 675 | ||
| 676 | ("!" . font-lock-negation-char-face) | 676 | ("\\(!\\)[^=]" 1 font-lock-negation-char-face) |
| 677 | )) | 677 | )) |
| 678 | 678 | ||
| 679 | (defun c-font-lock-complex-decl-prepare (limit) | 679 | (defun c-font-lock-complex-decl-prepare (limit) |
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index f5180b1fb48..ad43228a100 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el | |||
| @@ -119,6 +119,10 @@ nil means compute the name with `(concat \"*\" (downcase major-mode) \"*\")'.") | |||
| 119 | It is called with two arguments: the compilation buffer, and a string | 119 | It is called with two arguments: the compilation buffer, and a string |
| 120 | describing how the process finished.") | 120 | describing how the process finished.") |
| 121 | 121 | ||
| 122 | (make-obsolete-variable 'compilation-finish-function | ||
| 123 | "Use `compilation-finish-functions', but it works a little differently." | ||
| 124 | "22.1") | ||
| 125 | |||
| 122 | ;;;###autoload | 126 | ;;;###autoload |
| 123 | (defvar compilation-finish-functions nil | 127 | (defvar compilation-finish-functions nil |
| 124 | "Functions to call when a compilation process finishes. | 128 | "Functions to call when a compilation process finishes. |
| @@ -1247,8 +1251,7 @@ Optional argument MINOR indicates this is called from | |||
| 1247 | (make-local-variable 'compilation-messages-start) | 1251 | (make-local-variable 'compilation-messages-start) |
| 1248 | (make-local-variable 'compilation-error-screen-columns) | 1252 | (make-local-variable 'compilation-error-screen-columns) |
| 1249 | (make-local-variable 'overlay-arrow-position) | 1253 | (make-local-variable 'overlay-arrow-position) |
| 1250 | (set (make-local-variable 'overlay-arrow-string) | 1254 | (set (make-local-variable 'overlay-arrow-string) "") |
| 1251 | (if (display-graphic-p) "=>" "")) | ||
| 1252 | (setq next-error-overlay-arrow-position nil) | 1255 | (setq next-error-overlay-arrow-position nil) |
| 1253 | (add-hook 'kill-buffer-hook | 1256 | (add-hook 'kill-buffer-hook |
| 1254 | (lambda () (setq next-error-overlay-arrow-position nil)) nil t) | 1257 | (lambda () (setq next-error-overlay-arrow-position nil)) nil t) |
| @@ -1575,9 +1578,12 @@ region and the first line of the next region." | |||
| 1575 | (setcdr loc (list line file marker))) | 1578 | (setcdr loc (list line file marker))) |
| 1576 | loc)) | 1579 | loc)) |
| 1577 | 1580 | ||
| 1578 | (defcustom compilation-context-lines 0 | 1581 | (defcustom compilation-context-lines nil |
| 1579 | "*Display this many lines of leading context before message. | 1582 | "Display this many lines of leading context before the current message. |
| 1580 | If nil, don't scroll the compilation output window." | 1583 | If nil and the left fringe is displayed, don't scroll the |
| 1584 | compilation output window; an arrow in the left fringe points to | ||
| 1585 | the current message. If nil and there is no left fringe, the message | ||
| 1586 | displays at the top of the window; there is no arrow." | ||
| 1581 | :type '(choice integer (const :tag "No window scrolling" nil)) | 1587 | :type '(choice integer (const :tag "No window scrolling" nil)) |
| 1582 | :group 'compilation | 1588 | :group 'compilation |
| 1583 | :version "22.1") | 1589 | :version "22.1") |
| @@ -1586,10 +1592,17 @@ If nil, don't scroll the compilation output window." | |||
| 1586 | "Align the compilation output window W with marker MK near top." | 1592 | "Align the compilation output window W with marker MK near top." |
| 1587 | (if (integerp compilation-context-lines) | 1593 | (if (integerp compilation-context-lines) |
| 1588 | (set-window-start w (save-excursion | 1594 | (set-window-start w (save-excursion |
| 1589 | (goto-char mk) | 1595 | (goto-char mk) |
| 1590 | (beginning-of-line (- 1 compilation-context-lines)) | 1596 | (beginning-of-line |
| 1591 | (point)))) | 1597 | (- 1 compilation-context-lines)) |
| 1592 | (set-window-point w mk)) | 1598 | (point))) |
| 1599 | ;; If there is no left fringe. | ||
| 1600 | (if (equal (car (window-fringes)) 0) | ||
| 1601 | (set-window-start w (save-excursion | ||
| 1602 | (goto-char mk) | ||
| 1603 | (beginning-of-line 1) | ||
| 1604 | (point))))) | ||
| 1605 | (set-window-point w mk)) | ||
| 1593 | 1606 | ||
| 1594 | (defvar next-error-highlight-timer) | 1607 | (defvar next-error-highlight-timer) |
| 1595 | 1608 | ||
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index e32a43ede9e..436bc04d044 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el | |||
| @@ -120,7 +120,7 @@ | |||
| 120 | ;; Probably will not work due to some save-excursion??? | 120 | ;; Probably will not work due to some save-excursion??? |
| 121 | ;; Or save-file-position? | 121 | ;; Or save-file-position? |
| 122 | ;; (message "Did I get to line %s?" (elt (, elt) 1)) | 122 | ;; (message "Did I get to line %s?" (elt (, elt) 1)) |
| 123 | `(goto-line (string-to-int (elt ,elt 1)))) | 123 | `(goto-line (string-to-number (elt ,elt 1)))) |
| 124 | ;;) | 124 | ;;) |
| 125 | (defmacro cperl-etags-goto-tag-location (elt) | 125 | (defmacro cperl-etags-goto-tag-location (elt) |
| 126 | `(etags-goto-tag-location ,elt)))) | 126 | `(etags-goto-tag-location ,elt)))) |
diff --git a/lisp/progmodes/delphi.el b/lisp/progmodes/delphi.el index 4ebbc549697..8d3ee554026 100644 --- a/lisp/progmodes/delphi.el +++ b/lisp/progmodes/delphi.el | |||
| @@ -1530,7 +1530,7 @@ before the indent, the point is moved to the indent." | |||
| 1530 | (save-selected-window | 1530 | (save-selected-window |
| 1531 | (switch-to-buffer-other-window to-buffer) | 1531 | (switch-to-buffer-other-window to-buffer) |
| 1532 | (goto-char (point-max)) | 1532 | (goto-char (point-max)) |
| 1533 | (set-window-dot (get-buffer-window to-buffer) (point)) | 1533 | (set-window-point (get-buffer-window to-buffer) (point)) |
| 1534 | (insert the-msg)))) | 1534 | (insert the-msg)))) |
| 1535 | 1535 | ||
| 1536 | ;; Debugging helpers: | 1536 | ;; Debugging helpers: |
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el index 457c00d9008..6dd15897e7b 100644 --- a/lisp/progmodes/ebrowse.el +++ b/lisp/progmodes/ebrowse.el | |||
| @@ -1448,10 +1448,10 @@ Pop to member buffer if no prefix ARG, to tree buffer otherwise." | |||
| 1448 | (defun ebrowse-set-tree-indentation () | 1448 | (defun ebrowse-set-tree-indentation () |
| 1449 | "Set the indentation width of the tree display." | 1449 | "Set the indentation width of the tree display." |
| 1450 | (interactive) | 1450 | (interactive) |
| 1451 | (let ((width (string-to-int (read-from-minibuffer | 1451 | (let ((width (string-to-number (read-from-minibuffer |
| 1452 | (concat "Indentation (" | 1452 | (concat "Indentation (" |
| 1453 | (int-to-string ebrowse--indentation) | 1453 | (int-to-string ebrowse--indentation) |
| 1454 | "): "))))) | 1454 | "): "))))) |
| 1455 | (when (plusp width) | 1455 | (when (plusp width) |
| 1456 | (setf ebrowse--indentation width) | 1456 | (setf ebrowse--indentation width) |
| 1457 | (ebrowse-redraw-tree)))) | 1457 | (ebrowse-redraw-tree)))) |
| @@ -2329,7 +2329,7 @@ With prefix ARG, switch to the tree buffer else pop to it." | |||
| 2329 | "Set the column width of the member display. | 2329 | "Set the column width of the member display. |
| 2330 | The new width is read from the minibuffer." | 2330 | The new width is read from the minibuffer." |
| 2331 | (interactive) | 2331 | (interactive) |
| 2332 | (let ((width (string-to-int | 2332 | (let ((width (string-to-number |
| 2333 | (read-from-minibuffer | 2333 | (read-from-minibuffer |
| 2334 | (concat "Column width (" | 2334 | (concat "Column width (" |
| 2335 | (int-to-string (if ebrowse--long-display-flag | 2335 | (int-to-string (if ebrowse--long-display-flag |
| @@ -4313,7 +4313,7 @@ NUMBER-OF-STATIC-VARIABLES:" | |||
| 4313 | "Select the nth entry in the list by the keys 1..9." | 4313 | "Select the nth entry in the list by the keys 1..9." |
| 4314 | (interactive) | 4314 | (interactive) |
| 4315 | (let* ((maxlin (count-lines (point-min) (point-max))) | 4315 | (let* ((maxlin (count-lines (point-min) (point-max))) |
| 4316 | (n (min maxlin (+ 2 (string-to-int (this-command-keys)))))) | 4316 | (n (min maxlin (+ 2 (string-to-number (this-command-keys)))))) |
| 4317 | (goto-line n) | 4317 | (goto-line n) |
| 4318 | (throw 'electric-buffer-menu-select (point)))) | 4318 | (throw 'electric-buffer-menu-select (point)))) |
| 4319 | 4319 | ||
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index 0569d26db61..32ede0e1474 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el | |||
| @@ -1283,16 +1283,16 @@ where they were found." | |||
| 1283 | 1283 | ||
| 1284 | 1284 | ||
| 1285 | (if (looking-at "[0-9]") | 1285 | (if (looking-at "[0-9]") |
| 1286 | (setq line (string-to-int (buffer-substring | 1286 | (setq line (string-to-number (buffer-substring |
| 1287 | (point) | 1287 | (point) |
| 1288 | (progn (skip-chars-forward "0-9") | 1288 | (progn (skip-chars-forward "0-9") |
| 1289 | (point)))))) | 1289 | (point)))))) |
| 1290 | (search-forward ",") | 1290 | (search-forward ",") |
| 1291 | (if (looking-at "[0-9]") | 1291 | (if (looking-at "[0-9]") |
| 1292 | (setq startpos (string-to-int (buffer-substring | 1292 | (setq startpos (string-to-number (buffer-substring |
| 1293 | (point) | 1293 | (point) |
| 1294 | (progn (skip-chars-forward "0-9") | 1294 | (progn (skip-chars-forward "0-9") |
| 1295 | (point))))))) | 1295 | (point))))))) |
| 1296 | ;; Leave point on the next line of the tags file. | 1296 | ;; Leave point on the next line of the tags file. |
| 1297 | (forward-line 1) | 1297 | (forward-line 1) |
| 1298 | (cons tag-text (cons line startpos)))) | 1298 | (cons tag-text (cons line startpos)))) |
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index a2fa660bff0..5463ee3ffa9 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el | |||
| @@ -1004,7 +1004,7 @@ Return its components if so, nil if no." | |||
| 1004 | (line-idx (nth 2 (car patterns)))) | 1004 | (line-idx (nth 2 (car patterns)))) |
| 1005 | 1005 | ||
| 1006 | (setq raw-file-name (if file-idx (match-string file-idx line) nil)) | 1006 | (setq raw-file-name (if file-idx (match-string file-idx line) nil)) |
| 1007 | (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0)) | 1007 | (setq line-no (if line-idx (string-to-number (match-string line-idx line)) 0)) |
| 1008 | (setq err-text (if (> (length (car patterns)) 4) | 1008 | (setq err-text (if (> (length (car patterns)) 4) |
| 1009 | (match-string (nth 4 (car patterns)) line) | 1009 | (match-string (nth 4 (car patterns)) line) |
| 1010 | (flymake-patch-err-text (substring line (match-end 0))))) | 1010 | (flymake-patch-err-text (substring line (match-end 0))))) |
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 5c81ba7f6f9..4c95fc65d58 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el | |||
| @@ -3215,7 +3215,7 @@ This event can be examined by forms in GUD-TOOLTIP-DISPLAY.") | |||
| 3215 | (add-hook 'tooltip-hook 'gud-tooltip-tips) | 3215 | (add-hook 'tooltip-hook 'gud-tooltip-tips) |
| 3216 | (define-key global-map [mouse-movement] 'gud-tooltip-mouse-motion)) | 3216 | (define-key global-map [mouse-movement] 'gud-tooltip-mouse-motion)) |
| 3217 | (unless tooltip-mode (remove-hook 'pre-command-hook 'tooltip-hide) | 3217 | (unless tooltip-mode (remove-hook 'pre-command-hook 'tooltip-hide) |
| 3218 | (remove-hook 'change-major-mode-hook 'tooltip-change-major-mode) | 3218 | (remove-hook 'change-major-mode-hook 'gud-tooltip-change-major-mode) |
| 3219 | (remove-hook 'tooltip-hook 'gud-tooltip-tips) | 3219 | (remove-hook 'tooltip-hook 'gud-tooltip-tips) |
| 3220 | (define-key global-map [mouse-movement] 'ignore))) | 3220 | (define-key global-map [mouse-movement] 'ignore))) |
| 3221 | (gud-tooltip-activate-mouse-motions-if-enabled) | 3221 | (gud-tooltip-activate-mouse-motions-if-enabled) |
| @@ -3253,7 +3253,7 @@ If GUD-TOOLTIP-DEREFERENCE is t, also prepend a `*' to EXPR." | |||
| 3253 | (when gud-tooltip-dereference | 3253 | (when gud-tooltip-dereference |
| 3254 | (setq expr (concat "*" expr))) | 3254 | (setq expr (concat "*" expr))) |
| 3255 | (case gud-minor-mode | 3255 | (case gud-minor-mode |
| 3256 | ((gdb gdba) (concat "server print " expr)) | 3256 | (gdba (concat "server print " expr)) |
| 3257 | ((dbx gdbmi) (concat "print " expr)) | 3257 | ((dbx gdbmi) (concat "print " expr)) |
| 3258 | (xdb (concat "p " expr)) | 3258 | (xdb (concat "p " expr)) |
| 3259 | (sdb (concat expr "/")) | 3259 | (sdb (concat expr "/")) |
| @@ -3293,6 +3293,10 @@ This function must return nil if it doesn't handle EVENT." | |||
| 3293 | (tooltip-show (cdr define-elt)) | 3293 | (tooltip-show (cdr define-elt)) |
| 3294 | expr)))) | 3294 | expr)))) |
| 3295 | (let ((cmd (gud-tooltip-print-command expr))) | 3295 | (let ((cmd (gud-tooltip-print-command expr))) |
| 3296 | (when (and gud-tooltip-mode (eq gud-minor-mode 'gdb)) | ||
| 3297 | (gud-tooltip-mode -1) | ||
| 3298 | (message-box "Using GUD tooltips in this mode is unsafe\n\ | ||
| 3299 | so they have been disabled.")) | ||
| 3296 | (unless (null cmd) ; CMD can be nil if unknown debugger | 3300 | (unless (null cmd) ; CMD can be nil if unknown debugger |
| 3297 | (if (memq gud-minor-mode '(gdba gdbmi)) | 3301 | (if (memq gud-minor-mode '(gdba gdbmi)) |
| 3298 | (if gdb-macro-info | 3302 | (if gdb-macro-info |
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index 221a6f4aebb..77244819f1b 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el | |||
| @@ -45,7 +45,7 @@ | |||
| 45 | ;; | 45 | ;; |
| 46 | ;; INSTALLATION: | 46 | ;; INSTALLATION: |
| 47 | ;; ============= | 47 | ;; ============= |
| 48 | ;; | 48 | ;; |
| 49 | ;; Follow the instructions in the INSTALL file of the distribution. | 49 | ;; Follow the instructions in the INSTALL file of the distribution. |
| 50 | ;; In short, put this file on your load path and add the following | 50 | ;; In short, put this file on your load path and add the following |
| 51 | ;; lines to your .emacs file: | 51 | ;; lines to your .emacs file: |
| @@ -58,9 +58,9 @@ | |||
| 58 | ;; | 58 | ;; |
| 59 | ;; The newest version of this file can be found on the maintainers | 59 | ;; The newest version of this file can be found on the maintainers |
| 60 | ;; web site. | 60 | ;; web site. |
| 61 | ;; | 61 | ;; |
| 62 | ;; http://idlwave.org | 62 | ;; http://idlwave.org |
| 63 | ;; | 63 | ;; |
| 64 | ;; DOCUMENTATION | 64 | ;; DOCUMENTATION |
| 65 | ;; ============= | 65 | ;; ============= |
| 66 | ;; | 66 | ;; |
| @@ -77,7 +77,7 @@ | |||
| 77 | ;; it is a bug in XEmacs. | 77 | ;; it is a bug in XEmacs. |
| 78 | ;; The Debug menu in source buffers *does* display the bindings correctly. | 78 | ;; The Debug menu in source buffers *does* display the bindings correctly. |
| 79 | ;; | 79 | ;; |
| 80 | ;; | 80 | ;; |
| 81 | ;; CUSTOMIZATION VARIABLES | 81 | ;; CUSTOMIZATION VARIABLES |
| 82 | ;; ======================= | 82 | ;; ======================= |
| 83 | ;; | 83 | ;; |
| @@ -101,12 +101,12 @@ | |||
| 101 | (condition-case () (require 'custom) (error nil)) | 101 | (condition-case () (require 'custom) (error nil)) |
| 102 | (if (and (featurep 'custom) | 102 | (if (and (featurep 'custom) |
| 103 | (fboundp 'custom-declare-variable) | 103 | (fboundp 'custom-declare-variable) |
| 104 | (fboundp 'defface)) | 104 | (fboundp 'defface)) |
| 105 | ;; We've got what we needed | 105 | ;; We've got what we needed |
| 106 | (setq idlwave-shell-have-new-custom t) | 106 | (setq idlwave-shell-have-new-custom t) |
| 107 | ;; We have the old or no custom-library, hack around it! | 107 | ;; We have the old or no custom-library, hack around it! |
| 108 | (defmacro defgroup (&rest args) nil) | 108 | (defmacro defgroup (&rest args) nil) |
| 109 | (defmacro defcustom (var value doc &rest args) | 109 | (defmacro defcustom (var value doc &rest args) |
| 110 | `(defvar ,var ,value ,doc)))) | 110 | `(defvar ,var ,value ,doc)))) |
| 111 | 111 | ||
| 112 | ;;; Customizations: idlwave-shell group | 112 | ;;; Customizations: idlwave-shell group |
| @@ -118,10 +118,10 @@ | |||
| 118 | :group 'idlwave) | 118 | :group 'idlwave) |
| 119 | 119 | ||
| 120 | (defcustom idlwave-shell-prompt-pattern "^ ?IDL> " | 120 | (defcustom idlwave-shell-prompt-pattern "^ ?IDL> " |
| 121 | "*Regexp to match IDL prompt at beginning of a line. | 121 | "*Regexp to match IDL prompt at beginning of a line. |
| 122 | For example, \"^IDL> \" or \"^WAVE> \". | 122 | For example, \"^IDL> \" or \"^WAVE> \". |
| 123 | The \"^\" means beginning of line, and is required. | 123 | The \"^\" means beginning of line, and is required. |
| 124 | This variable is used to initialize `comint-prompt-regexp' in the | 124 | This variable is used to initialize `comint-prompt-regexp' in the |
| 125 | process buffer. | 125 | process buffer. |
| 126 | 126 | ||
| 127 | This is a fine thing to set in your `.emacs' file." | 127 | This is a fine thing to set in your `.emacs' file." |
| @@ -210,7 +210,7 @@ So by default setting a breakpoint will be on C-c C-d C-b." | |||
| 210 | :type 'boolean) | 210 | :type 'boolean) |
| 211 | 211 | ||
| 212 | (defcustom idlwave-shell-automatic-electric-debug 'breakpoint | 212 | (defcustom idlwave-shell-automatic-electric-debug 'breakpoint |
| 213 | "Enter the electric-debug minor mode automatically. | 213 | "Enter the electric-debug minor mode automatically. |
| 214 | This occurs at a breakpoint or any other halt. The mode is exited | 214 | This occurs at a breakpoint or any other halt. The mode is exited |
| 215 | upon return to the main level. Can be set to 'breakpoint to enter | 215 | upon return to the main level. Can be set to 'breakpoint to enter |
| 216 | electric debug mode only when breakpoints are tripped." | 216 | electric debug mode only when breakpoints are tripped." |
| @@ -295,7 +295,7 @@ The history is only saved if the variable `idlwave-shell-save-command-history' | |||
| 295 | is non-nil." | 295 | is non-nil." |
| 296 | :group 'idlwave-shell-command-setup | 296 | :group 'idlwave-shell-command-setup |
| 297 | :type 'file) | 297 | :type 'file) |
| 298 | 298 | ||
| 299 | (defcustom idlwave-shell-show-commands | 299 | (defcustom idlwave-shell-show-commands |
| 300 | '(run misc breakpoint) | 300 | '(run misc breakpoint) |
| 301 | "*A list of command types to show output from in the shell. | 301 | "*A list of command types to show output from in the shell. |
| @@ -306,12 +306,12 @@ the copious shell traffic to be displayed." | |||
| 306 | :type '(choice | 306 | :type '(choice |
| 307 | (const everything) | 307 | (const everything) |
| 308 | (set :tag "Checklist" :greedy t | 308 | (set :tag "Checklist" :greedy t |
| 309 | (const :tag "All .run and .compile commands" run) | 309 | (const :tag "All .run and .compile commands" run) |
| 310 | (const :tag "All breakpoint commands" breakpoint) | 310 | (const :tag "All breakpoint commands" breakpoint) |
| 311 | (const :tag "All debug and stepping commands" debug) | 311 | (const :tag "All debug and stepping commands" debug) |
| 312 | (const :tag "Close, window, retall, etc. commands" misc)))) | 312 | (const :tag "Close, window, retall, etc. commands" misc)))) |
| 313 | 313 | ||
| 314 | (defcustom idlwave-shell-examine-alist | 314 | (defcustom idlwave-shell-examine-alist |
| 315 | '(("Print" . "print,___") | 315 | '(("Print" . "print,___") |
| 316 | ("Help" . "help,___") | 316 | ("Help" . "help,___") |
| 317 | ("Structure Help" . "help,___,/STRUCTURE") | 317 | ("Structure Help" . "help,___,/STRUCTURE") |
| @@ -322,14 +322,14 @@ the copious shell traffic to be displayed." | |||
| 322 | ("Ptr Valid" . "print,ptr_valid(___)") | 322 | ("Ptr Valid" . "print,ptr_valid(___)") |
| 323 | ("Widget Valid" . "print,widget_info(___,/VALID)") | 323 | ("Widget Valid" . "print,widget_info(___,/VALID)") |
| 324 | ("Widget Geometry" . "help,widget_info(___,/GEOMETRY)")) | 324 | ("Widget Geometry" . "help,widget_info(___,/GEOMETRY)")) |
| 325 | "Alist of special examine commands for popup selection. | 325 | "Alist of special examine commands for popup selection. |
| 326 | The keys are used in the selection popup created by | 326 | The keys are used in the selection popup created by |
| 327 | `idlwave-shell-examine-select', and the corresponding value is sent as | 327 | `idlwave-shell-examine-select', and the corresponding value is sent as |
| 328 | a command to the shell, with special sequence `___' replaced by the | 328 | a command to the shell, with special sequence `___' replaced by the |
| 329 | expression being examined." | 329 | expression being examined." |
| 330 | :group 'idlwave-shell-command-setup | 330 | :group 'idlwave-shell-command-setup |
| 331 | :type '(repeat | 331 | :type '(repeat |
| 332 | (cons | 332 | (cons |
| 333 | (string :tag "Label ") | 333 | (string :tag "Label ") |
| 334 | (string :tag "Command")))) | 334 | (string :tag "Command")))) |
| 335 | 335 | ||
| @@ -340,7 +340,7 @@ expression being examined." | |||
| 340 | "*Non-nil mean, put output of examine commands in their own buffer." | 340 | "*Non-nil mean, put output of examine commands in their own buffer." |
| 341 | :group 'idlwave-shell-command-setup | 341 | :group 'idlwave-shell-command-setup |
| 342 | :type 'boolean) | 342 | :type 'boolean) |
| 343 | 343 | ||
| 344 | (defcustom idlwave-shell-comint-settings | 344 | (defcustom idlwave-shell-comint-settings |
| 345 | '((comint-scroll-to-bottom-on-input . t) | 345 | '((comint-scroll-to-bottom-on-input . t) |
| 346 | (comint-scroll-to-bottom-on-output . t) | 346 | (comint-scroll-to-bottom-on-output . t) |
| @@ -403,7 +403,7 @@ strings. Here is some example code which makes use of the default spells. | |||
| 403 | answer = GET_KBRD(1) | 403 | answer = GET_KBRD(1) |
| 404 | 404 | ||
| 405 | Since the IDLWAVE shell defines the system variable `!IDLWAVE_VERSION', | 405 | Since the IDLWAVE shell defines the system variable `!IDLWAVE_VERSION', |
| 406 | you could actually check if you are running under Emacs before printing | 406 | you could actually check if you are running under Emacs before printing |
| 407 | the magic strings. Here is a procedure which uses this. | 407 | the magic strings. Here is a procedure which uses this. |
| 408 | 408 | ||
| 409 | Usage: | 409 | Usage: |
| @@ -420,7 +420,7 @@ pro idlwave_char_input,on=on,off=off | |||
| 420 | if keyword_set(on) then print,'<chars>' $ | 420 | if keyword_set(on) then print,'<chars>' $ |
| 421 | else if keyword_set(off) then print,'</chars>' $ | 421 | else if keyword_set(off) then print,'</chars>' $ |
| 422 | else print,'<onechar>' | 422 | else print,'<onechar>' |
| 423 | endif | 423 | endif |
| 424 | end" | 424 | end" |
| 425 | :group 'idlwave-shell-command-setup | 425 | :group 'idlwave-shell-command-setup |
| 426 | :type '(list | 426 | :type '(list |
| @@ -478,10 +478,10 @@ line where IDL is stopped. See also `idlwave-shell-mark-stop-line'." | |||
| 478 | :group 'idlwave-shell-highlighting-and-faces | 478 | :group 'idlwave-shell-highlighting-and-faces |
| 479 | :type 'string) | 479 | :type 'string) |
| 480 | 480 | ||
| 481 | (defcustom idlwave-shell-electric-stop-line-face | 481 | (defcustom idlwave-shell-electric-stop-line-face |
| 482 | (prog1 | 482 | (prog1 |
| 483 | (copy-face 'modeline 'idlwave-shell-electric-stop-line-face) | 483 | (copy-face 'modeline 'idlwave-shell-electric-stop-line-face) |
| 484 | (set-face-background 'idlwave-shell-electric-stop-line-face | 484 | (set-face-background 'idlwave-shell-electric-stop-line-face |
| 485 | idlwave-shell-electric-stop-color) | 485 | idlwave-shell-electric-stop-color) |
| 486 | (condition-case nil | 486 | (condition-case nil |
| 487 | (set-face-foreground 'idlwave-shell-electric-stop-line-face nil) | 487 | (set-face-foreground 'idlwave-shell-electric-stop-line-face nil) |
| @@ -527,7 +527,7 @@ lines which have a breakpoint. See also `idlwave-shell-mark-breakpoints'." | |||
| 527 | ;; Just copy the underline face to be on the safe side. | 527 | ;; Just copy the underline face to be on the safe side. |
| 528 | (copy-face 'underline 'idlwave-shell-bp-face)) | 528 | (copy-face 'underline 'idlwave-shell-bp-face)) |
| 529 | 529 | ||
| 530 | (defcustom idlwave-shell-disabled-breakpoint-face | 530 | (defcustom idlwave-shell-disabled-breakpoint-face |
| 531 | 'idlwave-shell-disabled-bp-face | 531 | 'idlwave-shell-disabled-bp-face |
| 532 | "*The face for disabled breakpoint lines in the source code. | 532 | "*The face for disabled breakpoint lines in the source code. |
| 533 | Allows you to choose the font, color and other properties for | 533 | Allows you to choose the font, color and other properties for |
| @@ -580,18 +580,18 @@ before use by the shell.") | |||
| 580 | 580 | ||
| 581 | TYPE is either 'pro' or 'rinfo', and `idlwave-shell-temp-pro-file' or | 581 | TYPE is either 'pro' or 'rinfo', and `idlwave-shell-temp-pro-file' or |
| 582 | `idlwave-shell-temp-rinfo-save-file' is set (respectively)." | 582 | `idlwave-shell-temp-rinfo-save-file' is set (respectively)." |
| 583 | (cond | 583 | (cond |
| 584 | ((eq type 'rinfo) | 584 | ((eq type 'rinfo) |
| 585 | (or idlwave-shell-temp-rinfo-save-file | 585 | (or idlwave-shell-temp-rinfo-save-file |
| 586 | (setq idlwave-shell-temp-rinfo-save-file | 586 | (setq idlwave-shell-temp-rinfo-save-file |
| 587 | (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix)))) | 587 | (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix)))) |
| 588 | ((eq type 'pro) | 588 | ((eq type 'pro) |
| 589 | (or idlwave-shell-temp-pro-file | 589 | (or idlwave-shell-temp-pro-file |
| 590 | (setq idlwave-shell-temp-pro-file | 590 | (setq idlwave-shell-temp-pro-file |
| 591 | (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix)))) | 591 | (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix)))) |
| 592 | (t (error "Wrong argument (idlwave-shell-temp-file): %s" | 592 | (t (error "Wrong argument (idlwave-shell-temp-file): %s" |
| 593 | (symbol-name type))))) | 593 | (symbol-name type))))) |
| 594 | 594 | ||
| 595 | 595 | ||
| 596 | (defun idlwave-shell-make-temp-file (prefix) | 596 | (defun idlwave-shell-make-temp-file (prefix) |
| 597 | "Create a temporary file." | 597 | "Create a temporary file." |
| @@ -619,7 +619,7 @@ TYPE is either 'pro' or 'rinfo', and `idlwave-shell-temp-pro-file' or | |||
| 619 | 619 | ||
| 620 | 620 | ||
| 621 | (defvar idlwave-shell-dirstack-query "cd,current=___cur & print,___cur" | 621 | (defvar idlwave-shell-dirstack-query "cd,current=___cur & print,___cur" |
| 622 | "Command used by `idlwave-shell-resync-dirs' to query IDL for | 622 | "Command used by `idlwave-shell-resync-dirs' to query IDL for |
| 623 | the directory stack.") | 623 | the directory stack.") |
| 624 | 624 | ||
| 625 | (defvar idlwave-shell-path-query "print,'PATH:<'+transpose(expand_path(!PATH,/ARRAY))+'>' & print,'SYSDIR:<'+!dir+'>'" | 625 | (defvar idlwave-shell-path-query "print,'PATH:<'+transpose(expand_path(!PATH,/ARRAY))+'>' & print,'SYSDIR:<'+!dir+'>'" |
| @@ -627,7 +627,7 @@ the directory stack.") | |||
| 627 | "The command which gets !PATH and !DIR info from the shell.") | 627 | "The command which gets !PATH and !DIR info from the shell.") |
| 628 | 628 | ||
| 629 | (defvar idlwave-shell-mode-line-info nil | 629 | (defvar idlwave-shell-mode-line-info nil |
| 630 | "Additional info displayed in the mode line") | 630 | "Additional info displayed in the mode line") |
| 631 | 631 | ||
| 632 | (defvar idlwave-shell-default-directory nil | 632 | (defvar idlwave-shell-default-directory nil |
| 633 | "The default directory in the idlwave-shell buffer, of outside use.") | 633 | "The default directory in the idlwave-shell buffer, of outside use.") |
| @@ -678,7 +678,7 @@ the directory stack.") | |||
| 678 | window-system) ; Window systems always | 678 | window-system) ; Window systems always |
| 679 | (progn | 679 | (progn |
| 680 | (setq idlwave-shell-stop-line-overlay (make-overlay 1 1)) | 680 | (setq idlwave-shell-stop-line-overlay (make-overlay 1 1)) |
| 681 | (overlay-put idlwave-shell-stop-line-overlay | 681 | (overlay-put idlwave-shell-stop-line-overlay |
| 682 | 'face idlwave-shell-stop-line-face)))) | 682 | 'face idlwave-shell-stop-line-face)))) |
| 683 | 683 | ||
| 684 | (t | 684 | (t |
| @@ -686,7 +686,7 @@ the directory stack.") | |||
| 686 | (if window-system | 686 | (if window-system |
| 687 | (progn | 687 | (progn |
| 688 | (setq idlwave-shell-stop-line-overlay (make-overlay 1 1)) | 688 | (setq idlwave-shell-stop-line-overlay (make-overlay 1 1)) |
| 689 | (overlay-put idlwave-shell-stop-line-overlay | 689 | (overlay-put idlwave-shell-stop-line-overlay |
| 690 | 'face idlwave-shell-stop-line-face))))) | 690 | 'face idlwave-shell-stop-line-face))))) |
| 691 | 691 | ||
| 692 | ;; Now the expression and output overlays | 692 | ;; Now the expression and output overlays |
| @@ -747,7 +747,7 @@ with `*'s." | |||
| 747 | 747 | ||
| 748 | ;;; The following are the types of messages we attempt to catch to | 748 | ;;; The following are the types of messages we attempt to catch to |
| 749 | ;;; resync our idea of where IDL execution currently is. | 749 | ;;; resync our idea of where IDL execution currently is. |
| 750 | ;;; | 750 | ;;; |
| 751 | 751 | ||
| 752 | (defvar idlwave-shell-halt-frame nil | 752 | (defvar idlwave-shell-halt-frame nil |
| 753 | "The frame associated with halt/breakpoint messages.") | 753 | "The frame associated with halt/breakpoint messages.") |
| @@ -791,7 +791,7 @@ IDL has currently stepped.") | |||
| 791 | 791 | ||
| 792 | (defconst idlwave-shell-electric-debug-help | 792 | (defconst idlwave-shell-electric-debug-help |
| 793 | " ==> IDLWAVE Electric Debug Mode Help <== | 793 | " ==> IDLWAVE Electric Debug Mode Help <== |
| 794 | 794 | ||
| 795 | Break Point Setting and Clearing: | 795 | Break Point Setting and Clearing: |
| 796 | b Set breakpoint ([C-u b] for conditional, [C-n b] nth hit, etc.). | 796 | b Set breakpoint ([C-u b] for conditional, [C-n b] nth hit, etc.). |
| 797 | d Clear nearby breakpoint. | 797 | d Clear nearby breakpoint. |
| @@ -817,7 +817,7 @@ IDL has currently stepped.") | |||
| 817 | Examining Expressions (with prefix for examining the region): | 817 | Examining Expressions (with prefix for examining the region): |
| 818 | p Print expression near point or in region ([C-u p]). | 818 | p Print expression near point or in region ([C-u p]). |
| 819 | ? Help on expression near point or in region ([C-u ?]). | 819 | ? Help on expression near point or in region ([C-u ?]). |
| 820 | x Examine expression near point or in region ([C-u x]) with | 820 | x Examine expression near point or in region ([C-u x]) with |
| 821 | letter completion of the examine type. | 821 | letter completion of the examine type. |
| 822 | 822 | ||
| 823 | Miscellaneous: | 823 | Miscellaneous: |
| @@ -871,18 +871,18 @@ IDL has currently stepped.") | |||
| 871 | `\\[idlwave-routine-info]' displays information about an IDL routine near point, | 871 | `\\[idlwave-routine-info]' displays information about an IDL routine near point, |
| 872 | just like in `idlwave-mode'. The module used is the one at point or | 872 | just like in `idlwave-mode'. The module used is the one at point or |
| 873 | the one whose argument list is being edited. | 873 | the one whose argument list is being edited. |
| 874 | To update IDLWAVE's knowledge about compiled or edited modules, use | 874 | To update IDLWAVE's knowledge about compiled or edited modules, use |
| 875 | \\[idlwave-update-routine-info]. | 875 | \\[idlwave-update-routine-info]. |
| 876 | \\[idlwave-find-module] find the source of a module. | 876 | \\[idlwave-find-module] find the source of a module. |
| 877 | \\[idlwave-resolve] tells IDL to compile an unresolved module. | 877 | \\[idlwave-resolve] tells IDL to compile an unresolved module. |
| 878 | \\[idlwave-context-help] shows the online help on the item at | 878 | \\[idlwave-context-help] shows the online help on the item at |
| 879 | point, if online help has been installed. | 879 | point, if online help has been installed. |
| 880 | 880 | ||
| 881 | 881 | ||
| 882 | 4. Debugging | 882 | 4. Debugging |
| 883 | --------- | 883 | --------- |
| 884 | A complete set of commands for compiling and debugging IDL programs | 884 | A complete set of commands for compiling and debugging IDL programs |
| 885 | is available from the menu. Also keybindings starting with a | 885 | is available from the menu. Also keybindings starting with a |
| 886 | `C-c C-d' prefix are available for most commands in the *idl* buffer | 886 | `C-c C-d' prefix are available for most commands in the *idl* buffer |
| 887 | and also in source buffers. The best place to learn about the | 887 | and also in source buffers. The best place to learn about the |
| 888 | keybindings is again the menu. | 888 | keybindings is again the menu. |
| @@ -974,8 +974,8 @@ IDL has currently stepped.") | |||
| 974 | (idlwave-shell-display-line nil) | 974 | (idlwave-shell-display-line nil) |
| 975 | (setq idlwave-shell-calling-stack-index 0) | 975 | (setq idlwave-shell-calling-stack-index 0) |
| 976 | (setq idlwave-shell-only-prompt-pattern | 976 | (setq idlwave-shell-only-prompt-pattern |
| 977 | (concat "\\`[ \t\n]*" | 977 | (concat "\\`[ \t\n]*" |
| 978 | (substring idlwave-shell-prompt-pattern 1) | 978 | (substring idlwave-shell-prompt-pattern 1) |
| 979 | "[ \t\n]*\\'")) | 979 | "[ \t\n]*\\'")) |
| 980 | 980 | ||
| 981 | (when idlwave-shell-query-for-class | 981 | (when idlwave-shell-query-for-class |
| @@ -1010,14 +1010,14 @@ IDL has currently stepped.") | |||
| 1010 | (while (setq entry (pop list)) | 1010 | (while (setq entry (pop list)) |
| 1011 | (set (make-local-variable (car entry)) (cdr entry))))) | 1011 | (set (make-local-variable (car entry)) (cdr entry))))) |
| 1012 | 1012 | ||
| 1013 | 1013 | ||
| 1014 | (unless (memq 'comint-carriage-motion | 1014 | (unless (memq 'comint-carriage-motion |
| 1015 | (default-value 'comint-output-filter-functions)) | 1015 | (default-value 'comint-output-filter-functions)) |
| 1016 | ;; Strip those pesky ctrl-m's. | 1016 | ;; Strip those pesky ctrl-m's. |
| 1017 | (add-hook 'comint-output-filter-functions | 1017 | (add-hook 'comint-output-filter-functions |
| 1018 | (lambda (string) | 1018 | (lambda (string) |
| 1019 | (when (string-match "\r" string) | 1019 | (when (string-match "\r" string) |
| 1020 | (let ((pmark (process-mark (get-buffer-process | 1020 | (let ((pmark (process-mark (get-buffer-process |
| 1021 | (current-buffer))))) | 1021 | (current-buffer))))) |
| 1022 | (save-excursion | 1022 | (save-excursion |
| 1023 | ;; bare CR -> delete preceding line | 1023 | ;; bare CR -> delete preceding line |
| @@ -1059,8 +1059,8 @@ IDL has currently stepped.") | |||
| 1059 | (idlwave-shell-send-command idlwave-shell-initial-commands nil 'hide) | 1059 | (idlwave-shell-send-command idlwave-shell-initial-commands nil 'hide) |
| 1060 | ;; Turn off IDL's ^d interpreting, and define a system | 1060 | ;; Turn off IDL's ^d interpreting, and define a system |
| 1061 | ;; variable which knows the version of IDLWAVE | 1061 | ;; variable which knows the version of IDLWAVE |
| 1062 | (idlwave-shell-send-command | 1062 | (idlwave-shell-send-command |
| 1063 | (format "defsysv,'!idlwave_version','%s',1" | 1063 | (format "defsysv,'!idlwave_version','%s',1" |
| 1064 | idlwave-mode-version) | 1064 | idlwave-mode-version) |
| 1065 | nil 'hide) | 1065 | nil 'hide) |
| 1066 | ;; Get the paths if they weren't read in from file | 1066 | ;; Get the paths if they weren't read in from file |
| @@ -1081,7 +1081,7 @@ IDL has currently stepped.") | |||
| 1081 | (setq idlwave-system-directory sysdir) | 1081 | (setq idlwave-system-directory sysdir) |
| 1082 | (put 'idlwave-system-directory 'from-shell t)) | 1082 | (put 'idlwave-system-directory 'from-shell t)) |
| 1083 | ;; Preserve any existing flags | 1083 | ;; Preserve any existing flags |
| 1084 | (setq idlwave-path-alist | 1084 | (setq idlwave-path-alist |
| 1085 | (mapcar (lambda (x) | 1085 | (mapcar (lambda (x) |
| 1086 | (let ((old-entry (assoc x old-path-alist))) | 1086 | (let ((old-entry (assoc x old-path-alist))) |
| 1087 | (if old-entry | 1087 | (if old-entry |
| @@ -1089,7 +1089,7 @@ IDL has currently stepped.") | |||
| 1089 | (list x)))) | 1089 | (list x)))) |
| 1090 | dirs)) | 1090 | dirs)) |
| 1091 | (put 'idlwave-path-alist 'from-shell t) | 1091 | (put 'idlwave-path-alist 'from-shell t) |
| 1092 | (if idlwave-path-alist | 1092 | (if idlwave-path-alist |
| 1093 | (if (and idlwave-auto-write-paths | 1093 | (if (and idlwave-auto-write-paths |
| 1094 | (not idlwave-library-path) | 1094 | (not idlwave-library-path) |
| 1095 | (not no-write) ) | 1095 | (not no-write) ) |
| @@ -1125,8 +1125,8 @@ IDL has currently stepped.") | |||
| 1125 | (frame (selected-frame))) | 1125 | (frame (selected-frame))) |
| 1126 | (catch 'exit | 1126 | (catch 'exit |
| 1127 | (while flist | 1127 | (while flist |
| 1128 | (if (not (eq (car flist) | 1128 | (if (not (eq (car flist) |
| 1129 | idlwave-shell-idl-wframe)) | 1129 | idlwave-shell-idl-wframe)) |
| 1130 | (throw 'exit (car flist)) | 1130 | (throw 'exit (car flist)) |
| 1131 | (setq flist (cdr flist)))))) | 1131 | (setq flist (cdr flist)))))) |
| 1132 | (make-frame)) | 1132 | (make-frame)) |
| @@ -1144,9 +1144,9 @@ IDL has currently stepped.") | |||
| 1144 | ;; We do not have a source frame, so we use this one. | 1144 | ;; We do not have a source frame, so we use this one. |
| 1145 | (setq idlwave-shell-display-wframe (selected-frame))) | 1145 | (setq idlwave-shell-display-wframe (selected-frame))) |
| 1146 | ;; Return a new frame | 1146 | ;; Return a new frame |
| 1147 | (setq idlwave-shell-idl-wframe | 1147 | (setq idlwave-shell-idl-wframe |
| 1148 | (make-frame idlwave-shell-frame-parameters))))) | 1148 | (make-frame idlwave-shell-frame-parameters))))) |
| 1149 | 1149 | ||
| 1150 | ;;;###autoload | 1150 | ;;;###autoload |
| 1151 | (defun idlwave-shell (&optional arg quick) | 1151 | (defun idlwave-shell (&optional arg quick) |
| 1152 | "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'. | 1152 | "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'. |
| @@ -1173,14 +1173,14 @@ See also the variable `idlwave-shell-prompt-pattern'. | |||
| 1173 | (delete-other-windows)) | 1173 | (delete-other-windows)) |
| 1174 | (and idlwave-shell-use-dedicated-frame | 1174 | (and idlwave-shell-use-dedicated-frame |
| 1175 | (setq idlwave-shell-idl-wframe (selected-frame))) | 1175 | (setq idlwave-shell-idl-wframe (selected-frame))) |
| 1176 | (add-hook 'idlwave-shell-sentinel-hook | 1176 | (add-hook 'idlwave-shell-sentinel-hook |
| 1177 | 'save-buffers-kill-emacs t)) | 1177 | 'save-buffers-kill-emacs t)) |
| 1178 | 1178 | ||
| 1179 | ;; A non-nil arg means, we want a dedicated frame. This will last | 1179 | ;; A non-nil arg means, we want a dedicated frame. This will last |
| 1180 | ;; for the current editing session. | 1180 | ;; for the current editing session. |
| 1181 | (if arg (setq idlwave-shell-use-dedicated-frame t)) | 1181 | (if arg (setq idlwave-shell-use-dedicated-frame t)) |
| 1182 | (if (equal arg '(16)) (setq idlwave-shell-use-dedicated-frame nil)) | 1182 | (if (equal arg '(16)) (setq idlwave-shell-use-dedicated-frame nil)) |
| 1183 | 1183 | ||
| 1184 | ;; Check if the process still exists. If not, create it. | 1184 | ;; Check if the process still exists. If not, create it. |
| 1185 | (unless (comint-check-proc (idlwave-shell-buffer)) | 1185 | (unless (comint-check-proc (idlwave-shell-buffer)) |
| 1186 | (let* ((prg (or idlwave-shell-explicit-file-name "idl")) | 1186 | (let* ((prg (or idlwave-shell-explicit-file-name "idl")) |
| @@ -1207,9 +1207,9 @@ See also the variable `idlwave-shell-prompt-pattern'. | |||
| 1207 | (if (eq (selected-frame) (window-frame window)) | 1207 | (if (eq (selected-frame) (window-frame window)) |
| 1208 | (select-window window)))) | 1208 | (select-window window)))) |
| 1209 | ;; Save the paths at the end | 1209 | ;; Save the paths at the end |
| 1210 | (add-hook 'idlwave-shell-sentinel-hook | 1210 | (add-hook 'idlwave-shell-sentinel-hook |
| 1211 | (lambda () | 1211 | (lambda () |
| 1212 | (if (and | 1212 | (if (and |
| 1213 | idlwave-auto-write-paths | 1213 | idlwave-auto-write-paths |
| 1214 | idlwave-path-alist | 1214 | idlwave-path-alist |
| 1215 | (not idlwave-library-path) | 1215 | (not idlwave-library-path) |
| @@ -1240,7 +1240,7 @@ Return either nil or 'hide." | |||
| 1240 | (setq idlwave-shell-show-commands (list type)))) | 1240 | (setq idlwave-shell-show-commands (list type)))) |
| 1241 | 1241 | ||
| 1242 | 1242 | ||
| 1243 | (defun idlwave-shell-send-command (&optional cmd pcmd hide preempt | 1243 | (defun idlwave-shell-send-command (&optional cmd pcmd hide preempt |
| 1244 | show-if-error) | 1244 | show-if-error) |
| 1245 | "Send a command to IDL process. | 1245 | "Send a command to IDL process. |
| 1246 | 1246 | ||
| @@ -1261,18 +1261,18 @@ If optional fourth argument PREEMPT is non-nil CMD is put at front of | |||
| 1261 | `idlwave-shell-pending-commands'. If PREEMPT is 'wait, wait for all | 1261 | `idlwave-shell-pending-commands'. If PREEMPT is 'wait, wait for all |
| 1262 | output to complete and the next prompt to arrive before returning | 1262 | output to complete and the next prompt to arrive before returning |
| 1263 | \(useful if you need an answer now\). IDL is considered ready if the | 1263 | \(useful if you need an answer now\). IDL is considered ready if the |
| 1264 | prompt is present and if `idlwave-shell-ready' is non-nil. | 1264 | prompt is present and if `idlwave-shell-ready' is non-nil. |
| 1265 | 1265 | ||
| 1266 | If SHOW-IF-ERROR is non-nil, show the output it it contains an error | 1266 | If SHOW-IF-ERROR is non-nil, show the output it it contains an error |
| 1267 | message, independent of what HIDE is set to." | 1267 | message, independent of what HIDE is set to." |
| 1268 | 1268 | ||
| 1269 | ; (setq hide nil) ; FIXME: turn this on for debugging only | 1269 | ; (setq hide nil) ; FIXME: turn this on for debugging only |
| 1270 | ; (if (null cmd) | 1270 | ; (if (null cmd) |
| 1271 | ; (progn | 1271 | ; (progn |
| 1272 | ; (message "SENDING Pending commands: %s" | 1272 | ; (message "SENDING Pending commands: %s" |
| 1273 | ; (prin1-to-string idlwave-shell-pending-commands))) | 1273 | ; (prin1-to-string idlwave-shell-pending-commands))) |
| 1274 | ; (message "SENDING %s|||%s" cmd pcmd)) | 1274 | ; (message "SENDING %s|||%s" cmd pcmd)) |
| 1275 | (if (and (symbolp idlwave-shell-show-commands) | 1275 | (if (and (symbolp idlwave-shell-show-commands) |
| 1276 | (eq idlwave-shell-show-commands 'everything)) | 1276 | (eq idlwave-shell-show-commands 'everything)) |
| 1277 | (setq hide nil)) | 1277 | (setq hide nil)) |
| 1278 | (let ((save-buffer (current-buffer)) | 1278 | (let ((save-buffer (current-buffer)) |
| @@ -1300,7 +1300,7 @@ message, independent of what HIDE is set to." | |||
| 1300 | (append (list (list cmd pcmd hide show-if-error)) | 1300 | (append (list (list cmd pcmd hide show-if-error)) |
| 1301 | idlwave-shell-pending-commands) | 1301 | idlwave-shell-pending-commands) |
| 1302 | ;; Put at end. | 1302 | ;; Put at end. |
| 1303 | (append idlwave-shell-pending-commands | 1303 | (append idlwave-shell-pending-commands |
| 1304 | (list (list cmd pcmd hide show-if-error)))))) | 1304 | (list (list cmd pcmd hide show-if-error)))))) |
| 1305 | ;; Check if IDL ready | 1305 | ;; Check if IDL ready |
| 1306 | (let ((save-point (point-marker))) | 1306 | (let ((save-point (point-marker))) |
| @@ -1349,7 +1349,7 @@ message, independent of what HIDE is set to." | |||
| 1349 | (if (or (not (setq buf (get-buffer (idlwave-shell-buffer)))) | 1349 | (if (or (not (setq buf (get-buffer (idlwave-shell-buffer)))) |
| 1350 | (not (setq proc (get-buffer-process buf)))) | 1350 | (not (setq proc (get-buffer-process buf)))) |
| 1351 | (funcall errf "Shell is not running")) | 1351 | (funcall errf "Shell is not running")) |
| 1352 | (if (equal c ?\C-g) | 1352 | (if (equal c ?\C-g) |
| 1353 | (funcall errf "Abort") | 1353 | (funcall errf "Abort") |
| 1354 | (comint-send-string proc (char-to-string c))))) | 1354 | (comint-send-string proc (char-to-string c))))) |
| 1355 | 1355 | ||
| @@ -1390,7 +1390,7 @@ when the IDL prompt gets displayed again after the current IDL command." | |||
| 1390 | (if idlwave-shell-ready | 1390 | (if idlwave-shell-ready |
| 1391 | (funcall errf "No IDL program seems to be waiting for input")) | 1391 | (funcall errf "No IDL program seems to be waiting for input")) |
| 1392 | 1392 | ||
| 1393 | ;; OK, start the loop | 1393 | ;; OK, start the loop |
| 1394 | (message "Character mode on: Sending single chars (`C-g' to exit)") | 1394 | (message "Character mode on: Sending single chars (`C-g' to exit)") |
| 1395 | (message | 1395 | (message |
| 1396 | (catch 'exit | 1396 | (catch 'exit |
| @@ -1470,14 +1470,14 @@ error messages, etc." | |||
| 1470 | (setq output (substring output (string-match "\n" output))) | 1470 | (setq output (substring output (string-match "\n" output))) |
| 1471 | (while (string-match "\\(\n\\|\\`\\)%.*\\(\n .*\\)*" output) | 1471 | (while (string-match "\\(\n\\|\\`\\)%.*\\(\n .*\\)*" output) |
| 1472 | (setq output (replace-match "" nil t output))) | 1472 | (setq output (replace-match "" nil t output))) |
| 1473 | (unless | 1473 | (unless |
| 1474 | (string-match idlwave-shell-only-prompt-pattern output) | 1474 | (string-match idlwave-shell-only-prompt-pattern output) |
| 1475 | output)) | 1475 | output)) |
| 1476 | 1476 | ||
| 1477 | (defvar idlwave-shell-hidden-output-buffer " *idlwave-shell-hidden-output*" | 1477 | (defvar idlwave-shell-hidden-output-buffer " *idlwave-shell-hidden-output*" |
| 1478 | "Buffer containing hidden output from IDL commands.") | 1478 | "Buffer containing hidden output from IDL commands.") |
| 1479 | (defvar idlwave-shell-current-state nil) | 1479 | (defvar idlwave-shell-current-state nil) |
| 1480 | 1480 | ||
| 1481 | (defun idlwave-shell-filter (proc string) | 1481 | (defun idlwave-shell-filter (proc string) |
| 1482 | "Watch for IDL prompt and filter incoming text. | 1482 | "Watch for IDL prompt and filter incoming text. |
| 1483 | When the IDL prompt is received executes `idlwave-shell-post-command-hook' | 1483 | When the IDL prompt is received executes `idlwave-shell-post-command-hook' |
| @@ -1509,20 +1509,20 @@ and then calls `idlwave-shell-send-command' for any pending commands." | |||
| 1509 | (idlwave-shell-input-mode-magic | 1509 | (idlwave-shell-input-mode-magic |
| 1510 | (concat idlwave-shell-accumulation string))) | 1510 | (concat idlwave-shell-accumulation string))) |
| 1511 | (setq idlwave-shell-accumulation | 1511 | (setq idlwave-shell-accumulation |
| 1512 | (substring string | 1512 | (substring string |
| 1513 | (progn (string-match "\\(.*[\n\r]+\\)*" | 1513 | (progn (string-match "\\(.*[\n\r]+\\)*" |
| 1514 | string) | 1514 | string) |
| 1515 | (match-end 0))))) | 1515 | (match-end 0))))) |
| 1516 | (setq idlwave-shell-accumulation | 1516 | (setq idlwave-shell-accumulation |
| 1517 | (concat idlwave-shell-accumulation string))) | 1517 | (concat idlwave-shell-accumulation string))) |
| 1518 | 1518 | ||
| 1519 | 1519 | ||
| 1520 | ;;; Test/Debug code | 1520 | ;;; Test/Debug code |
| 1521 | ; (save-excursion (set-buffer | 1521 | ; (save-excursion (set-buffer |
| 1522 | ; (get-buffer-create "*idlwave-shell-output*")) | 1522 | ; (get-buffer-create "*idlwave-shell-output*")) |
| 1523 | ; (goto-char (point-max)) | 1523 | ; (goto-char (point-max)) |
| 1524 | ; (insert "\nSTRING===>\n" string "\n<====\n")) | 1524 | ; (insert "\nSTRING===>\n" string "\n<====\n")) |
| 1525 | 1525 | ||
| 1526 | ;; Check for prompt in current accumulating output | 1526 | ;; Check for prompt in current accumulating output |
| 1527 | (if (setq idlwave-shell-ready | 1527 | (if (setq idlwave-shell-ready |
| 1528 | (string-match idlwave-shell-prompt-pattern | 1528 | (string-match idlwave-shell-prompt-pattern |
| @@ -1558,16 +1558,16 @@ and then calls `idlwave-shell-send-command' for any pending commands." | |||
| 1558 | (if (and idlwave-shell-show-if-error | 1558 | (if (and idlwave-shell-show-if-error |
| 1559 | (eq idlwave-shell-current-state 'error)) | 1559 | (eq idlwave-shell-current-state 'error)) |
| 1560 | (idlwave-shell-comint-filter proc full-output) | 1560 | (idlwave-shell-comint-filter proc full-output) |
| 1561 | ;; If it's only *mostly* hidden, filter % lines, | 1561 | ;; If it's only *mostly* hidden, filter % lines, |
| 1562 | ;; and show anything that remains | 1562 | ;; and show anything that remains |
| 1563 | (if (eq idlwave-shell-hide-output 'mostly) | 1563 | (if (eq idlwave-shell-hide-output 'mostly) |
| 1564 | (let ((filtered | 1564 | (let ((filtered |
| 1565 | (idlwave-shell-filter-hidden-output | 1565 | (idlwave-shell-filter-hidden-output |
| 1566 | full-output))) | 1566 | full-output))) |
| 1567 | (if filtered | 1567 | (if filtered |
| 1568 | (idlwave-shell-comint-filter | 1568 | (idlwave-shell-comint-filter |
| 1569 | proc filtered)))))) | 1569 | proc filtered)))))) |
| 1570 | 1570 | ||
| 1571 | ;; Call the post-command hook | 1571 | ;; Call the post-command hook |
| 1572 | (if (listp idlwave-shell-post-command-hook) | 1572 | (if (listp idlwave-shell-post-command-hook) |
| 1573 | (progn | 1573 | (progn |
| @@ -1612,7 +1612,7 @@ and then calls `idlwave-shell-send-command' for any pending commands." | |||
| 1612 | (condition-case nil | 1612 | (condition-case nil |
| 1613 | (comint-write-input-ring) | 1613 | (comint-write-input-ring) |
| 1614 | (error nil))))) | 1614 | (error nil))))) |
| 1615 | 1615 | ||
| 1616 | (when (and (> (length (frame-list)) 1) | 1616 | (when (and (> (length (frame-list)) 1) |
| 1617 | (frame-live-p idlwave-shell-idl-wframe)) | 1617 | (frame-live-p idlwave-shell-idl-wframe)) |
| 1618 | (delete-frame idlwave-shell-idl-wframe) | 1618 | (delete-frame idlwave-shell-idl-wframe) |
| @@ -1636,8 +1636,8 @@ and then calls `idlwave-shell-send-command' for any pending commands." | |||
| 1636 | ;; in module and file names. I am not sure if it will be necessary to | 1636 | ;; in module and file names. I am not sure if it will be necessary to |
| 1637 | ;; change this. Currently it seems to work the way it is. | 1637 | ;; change this. Currently it seems to work the way it is. |
| 1638 | (defvar idlwave-shell-syntax-error | 1638 | (defvar idlwave-shell-syntax-error |
| 1639 | "^% Syntax error.\\s-*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)" | 1639 | "^% Syntax error.\\s-*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)" |
| 1640 | "A regular expression to match an IDL syntax error. | 1640 | "A regular expression to match an IDL syntax error. |
| 1641 | The 1st pair matches the file name, the second pair matches the line | 1641 | The 1st pair matches the file name, the second pair matches the line |
| 1642 | number.") | 1642 | number.") |
| 1643 | 1643 | ||
| @@ -1645,16 +1645,16 @@ number.") | |||
| 1645 | "^% .*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)" | 1645 | "^% .*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)" |
| 1646 | "A regular expression to match any IDL error.") | 1646 | "A regular expression to match any IDL error.") |
| 1647 | 1647 | ||
| 1648 | (defvar idlwave-shell-halting-error | 1648 | (defvar idlwave-shell-halting-error |
| 1649 | "^% .*\n\\([^%].*\n\\)*% Execution halted at:\\(\\s-*\\S-+\\s-*[0-9]+\\s-*.*\\)\n" | 1649 | "^% .*\n\\([^%].*\n\\)*% Execution halted at:\\(\\s-*\\S-+\\s-*[0-9]+\\s-*.*\\)\n" |
| 1650 | "A regular expression to match errors which halt execution.") | 1650 | "A regular expression to match errors which halt execution.") |
| 1651 | 1651 | ||
| 1652 | (defvar idlwave-shell-cant-continue-error | 1652 | (defvar idlwave-shell-cant-continue-error |
| 1653 | "^% Can't continue from this point.\n" | 1653 | "^% Can't continue from this point.\n" |
| 1654 | "A regular expression to match errors stepping errors.") | 1654 | "A regular expression to match errors stepping errors.") |
| 1655 | 1655 | ||
| 1656 | (defvar idlwave-shell-file-line-message | 1656 | (defvar idlwave-shell-file-line-message |
| 1657 | (concat | 1657 | (concat |
| 1658 | "\\(" ; program name group (1) | 1658 | "\\(" ; program name group (1) |
| 1659 | "\\$MAIN\\$\\|" ; main level routine | 1659 | "\\$MAIN\\$\\|" ; main level routine |
| 1660 | "\\<[a-zA-Z][a-zA-Z0-9_$:]*" ; start with a letter followed by [..] | 1660 | "\\<[a-zA-Z][a-zA-Z0-9_$:]*" ; start with a letter followed by [..] |
| @@ -1672,7 +1672,7 @@ number.") | |||
| 1672 | "\\)" ; end line number group (5) | 1672 | "\\)" ; end line number group (5) |
| 1673 | ) | 1673 | ) |
| 1674 | "*A regular expression to parse out the file name and line number. | 1674 | "*A regular expression to parse out the file name and line number. |
| 1675 | The 1st group should match the subroutine name. | 1675 | The 1st group should match the subroutine name. |
| 1676 | The 3rd group is the line number. | 1676 | The 3rd group is the line number. |
| 1677 | The 5th group is the file name. | 1677 | The 5th group is the file name. |
| 1678 | All parts may contain linebreaks surrounded by spaces. This is important | 1678 | All parts may contain linebreaks surrounded by spaces. This is important |
| @@ -1691,9 +1691,9 @@ the above." | |||
| 1691 | (cond | 1691 | (cond |
| 1692 | ;; Make sure we have output | 1692 | ;; Make sure we have output |
| 1693 | ((not idlwave-shell-command-output)) | 1693 | ((not idlwave-shell-command-output)) |
| 1694 | 1694 | ||
| 1695 | ;; First Priority: Syntax and other errors | 1695 | ;; First Priority: Syntax and other errors |
| 1696 | ((or | 1696 | ((or |
| 1697 | (string-match idlwave-shell-syntax-error | 1697 | (string-match idlwave-shell-syntax-error |
| 1698 | idlwave-shell-command-output) | 1698 | idlwave-shell-command-output) |
| 1699 | (string-match idlwave-shell-other-error | 1699 | (string-match idlwave-shell-other-error |
| @@ -1707,19 +1707,19 @@ the above." | |||
| 1707 | (setq idlwave-shell-error-last (point))) | 1707 | (setq idlwave-shell-error-last (point))) |
| 1708 | (setq idlwave-shell-current-state 'error) | 1708 | (setq idlwave-shell-current-state 'error) |
| 1709 | (idlwave-shell-goto-next-error)) | 1709 | (idlwave-shell-goto-next-error)) |
| 1710 | 1710 | ||
| 1711 | ;; Second Priority: Halting errors | 1711 | ;; Second Priority: Halting errors |
| 1712 | ((string-match idlwave-shell-halting-error | 1712 | ((string-match idlwave-shell-halting-error |
| 1713 | idlwave-shell-command-output) | 1713 | idlwave-shell-command-output) |
| 1714 | ;; Grab the file and line state info. | 1714 | ;; Grab the file and line state info. |
| 1715 | (setq idlwave-shell-calling-stack-index 0) | 1715 | (setq idlwave-shell-calling-stack-index 0) |
| 1716 | (setq idlwave-shell-halt-frame | 1716 | (setq idlwave-shell-halt-frame |
| 1717 | (idlwave-shell-parse-line | 1717 | (idlwave-shell-parse-line |
| 1718 | (substring idlwave-shell-command-output | 1718 | (substring idlwave-shell-command-output |
| 1719 | (match-beginning 2))) | 1719 | (match-beginning 2))) |
| 1720 | idlwave-shell-current-state 'error) | 1720 | idlwave-shell-current-state 'error) |
| 1721 | (idlwave-shell-display-line (idlwave-shell-pc-frame))) | 1721 | (idlwave-shell-display-line (idlwave-shell-pc-frame))) |
| 1722 | 1722 | ||
| 1723 | ;; Third Priority: Various types of innocuous HALT and | 1723 | ;; Third Priority: Various types of innocuous HALT and |
| 1724 | ;; TRACEBACK messages. | 1724 | ;; TRACEBACK messages. |
| 1725 | ((or (setq trace (string-match idlwave-shell-trace-message-re | 1725 | ((or (setq trace (string-match idlwave-shell-trace-message-re |
| @@ -1729,25 +1729,25 @@ the above." | |||
| 1729 | ;; Grab the file and line state info. | 1729 | ;; Grab the file and line state info. |
| 1730 | (setq idlwave-shell-calling-stack-index 0) | 1730 | (setq idlwave-shell-calling-stack-index 0) |
| 1731 | (setq idlwave-shell-halt-frame | 1731 | (setq idlwave-shell-halt-frame |
| 1732 | (idlwave-shell-parse-line | 1732 | (idlwave-shell-parse-line |
| 1733 | (substring idlwave-shell-command-output (match-end 0)))) | 1733 | (substring idlwave-shell-command-output (match-end 0)))) |
| 1734 | (setq idlwave-shell-current-state 'halt) | 1734 | (setq idlwave-shell-current-state 'halt) |
| 1735 | ;; Don't debug trace messages | 1735 | ;; Don't debug trace messages |
| 1736 | (idlwave-shell-display-line (idlwave-shell-pc-frame) nil | 1736 | (idlwave-shell-display-line (idlwave-shell-pc-frame) nil |
| 1737 | (if trace 'no-debug))) | 1737 | (if trace 'no-debug))) |
| 1738 | 1738 | ||
| 1739 | ;; Fourth Priority: Breakpoints | 1739 | ;; Fourth Priority: Breakpoints |
| 1740 | ((string-match idlwave-shell-break-message | 1740 | ((string-match idlwave-shell-break-message |
| 1741 | idlwave-shell-command-output) | 1741 | idlwave-shell-command-output) |
| 1742 | (setq idlwave-shell-calling-stack-index 0) | 1742 | (setq idlwave-shell-calling-stack-index 0) |
| 1743 | (setq idlwave-shell-halt-frame | 1743 | (setq idlwave-shell-halt-frame |
| 1744 | (idlwave-shell-parse-line | 1744 | (idlwave-shell-parse-line |
| 1745 | (substring idlwave-shell-command-output (match-end 0)))) | 1745 | (substring idlwave-shell-command-output (match-end 0)))) |
| 1746 | ;; We used to count hits on breakpoints | 1746 | ;; We used to count hits on breakpoints |
| 1747 | ;; this is no longer supported since IDL breakpoints | 1747 | ;; this is no longer supported since IDL breakpoints |
| 1748 | ;; have learned counting. | 1748 | ;; have learned counting. |
| 1749 | ;; Do breakpoint command processing | 1749 | ;; Do breakpoint command processing |
| 1750 | (let ((bp (assoc | 1750 | (let ((bp (assoc |
| 1751 | (list | 1751 | (list |
| 1752 | (nth 0 idlwave-shell-halt-frame) | 1752 | (nth 0 idlwave-shell-halt-frame) |
| 1753 | (nth 1 idlwave-shell-halt-frame)) | 1753 | (nth 1 idlwave-shell-halt-frame)) |
| @@ -1760,9 +1760,9 @@ the above." | |||
| 1760 | ;; A breakpoint that we did not know about - perhaps it was | 1760 | ;; A breakpoint that we did not know about - perhaps it was |
| 1761 | ;; set by the user... Let's update our list. | 1761 | ;; set by the user... Let's update our list. |
| 1762 | (idlwave-shell-bp-query))) | 1762 | (idlwave-shell-bp-query))) |
| 1763 | (setq idlwave-shell-current-state 'breakpoint) | 1763 | (setq idlwave-shell-current-state 'breakpoint) |
| 1764 | (idlwave-shell-display-line (idlwave-shell-pc-frame))) | 1764 | (idlwave-shell-display-line (idlwave-shell-pc-frame))) |
| 1765 | 1765 | ||
| 1766 | ;; Last Priority: Can't Step errors | 1766 | ;; Last Priority: Can't Step errors |
| 1767 | ((string-match idlwave-shell-cant-continue-error | 1767 | ((string-match idlwave-shell-cant-continue-error |
| 1768 | idlwave-shell-command-output) | 1768 | idlwave-shell-command-output) |
| @@ -1777,7 +1777,7 @@ We need to work hard here to remove the stupid line breaks inserted by | |||
| 1777 | IDL5. These line breaks can be right in the middle of procedure | 1777 | IDL5. These line breaks can be right in the middle of procedure |
| 1778 | or file names. | 1778 | or file names. |
| 1779 | It is very difficult to come up with a robust solution. This one seems | 1779 | It is very difficult to come up with a robust solution. This one seems |
| 1780 | to be pretty good though. | 1780 | to be pretty good though. |
| 1781 | 1781 | ||
| 1782 | Here is in what ways it improves over the previous solution: | 1782 | Here is in what ways it improves over the previous solution: |
| 1783 | 1783 | ||
| @@ -1802,7 +1802,7 @@ statements." | |||
| 1802 | (setq procedure (match-string 1 string) | 1802 | (setq procedure (match-string 1 string) |
| 1803 | number (match-string 3 string) | 1803 | number (match-string 3 string) |
| 1804 | file (match-string 5 string)) | 1804 | file (match-string 5 string)) |
| 1805 | 1805 | ||
| 1806 | ;; Repair the strings | 1806 | ;; Repair the strings |
| 1807 | (setq procedure (idlwave-shell-repair-string procedure)) | 1807 | (setq procedure (idlwave-shell-repair-string procedure)) |
| 1808 | (setq number (idlwave-shell-repair-string number)) | 1808 | (setq number (idlwave-shell-repair-string number)) |
| @@ -1811,7 +1811,7 @@ statements." | |||
| 1811 | ;; If we have a file, return the frame list | 1811 | ;; If we have a file, return the frame list |
| 1812 | (if file | 1812 | (if file |
| 1813 | (list (idlwave-shell-file-name file) | 1813 | (list (idlwave-shell-file-name file) |
| 1814 | (string-to-int number) | 1814 | (string-to-number number) |
| 1815 | procedure) | 1815 | procedure) |
| 1816 | ;; No success finding a file | 1816 | ;; No success finding a file |
| 1817 | nil)))) | 1817 | nil)))) |
| @@ -1828,7 +1828,7 @@ The last line of STRING may be garbage - we check which one makes a valid | |||
| 1828 | file name." | 1828 | file name." |
| 1829 | (let ((file1 "") (file2 "") (start 0)) | 1829 | (let ((file1 "") (file2 "") (start 0)) |
| 1830 | ;; We scan no further than to the next "^%" line | 1830 | ;; We scan no further than to the next "^%" line |
| 1831 | (if (string-match "^%" file) | 1831 | (if (string-match "^%" file) |
| 1832 | (setq file (substring file 0 (match-beginning 0)))) | 1832 | (setq file (substring file 0 (match-beginning 0)))) |
| 1833 | ;; Take out the line breaks | 1833 | ;; Take out the line breaks |
| 1834 | (while (string-match "[ \t]*\n[ \t]*" file start) | 1834 | (while (string-match "[ \t]*\n[ \t]*" file start) |
| @@ -1883,7 +1883,7 @@ file name." | |||
| 1883 | The size is given by `idlwave-shell-graphics-window-size'." | 1883 | The size is given by `idlwave-shell-graphics-window-size'." |
| 1884 | (interactive "P") | 1884 | (interactive "P") |
| 1885 | (let ((n (if n (prefix-numeric-value n) 0))) | 1885 | (let ((n (if n (prefix-numeric-value n) 0))) |
| 1886 | (idlwave-shell-send-command | 1886 | (idlwave-shell-send-command |
| 1887 | (apply 'format "window,%d,xs=%d,ys=%d" | 1887 | (apply 'format "window,%d,xs=%d,ys=%d" |
| 1888 | n idlwave-shell-graphics-window-size) | 1888 | n idlwave-shell-graphics-window-size) |
| 1889 | nil (idlwave-shell-hide-p 'misc) nil t))) | 1889 | nil (idlwave-shell-hide-p 'misc) nil t))) |
| @@ -1903,16 +1903,16 @@ directory." | |||
| 1903 | Also get rid of widget events in the queue." | 1903 | Also get rid of widget events in the queue." |
| 1904 | (interactive "P") | 1904 | (interactive "P") |
| 1905 | (save-selected-window | 1905 | (save-selected-window |
| 1906 | ;;if (widget_info(/MANAGED))[0] gt 0 then for i=0,n_elements(widget_info(/MANAGED))-1 do widget_control,(widget_info(/MANAGED))[i],/clear_events & | 1906 | ;;if (widget_info(/MANAGED))[0] gt 0 then for i=0,n_elements(widget_info(/MANAGED))-1 do widget_control,(widget_info(/MANAGED))[i],/clear_events & |
| 1907 | (idlwave-shell-send-command "retall" nil | 1907 | (idlwave-shell-send-command "retall" nil |
| 1908 | (if (idlwave-shell-hide-p 'misc) 'mostly) | 1908 | (if (idlwave-shell-hide-p 'misc) 'mostly) |
| 1909 | nil t) | 1909 | nil t) |
| 1910 | (idlwave-shell-display-line nil))) | 1910 | (idlwave-shell-display-line nil))) |
| 1911 | 1911 | ||
| 1912 | (defun idlwave-shell-closeall (&optional arg) | 1912 | (defun idlwave-shell-closeall (&optional arg) |
| 1913 | "Close all open files." | 1913 | "Close all open files." |
| 1914 | (interactive "P") | 1914 | (interactive "P") |
| 1915 | (idlwave-shell-send-command "close,/all" nil | 1915 | (idlwave-shell-send-command "close,/all" nil |
| 1916 | (idlwave-shell-hide-p 'misc) nil t)) | 1916 | (idlwave-shell-hide-p 'misc) nil t)) |
| 1917 | 1917 | ||
| 1918 | (defun idlwave-shell-quit (&optional arg) | 1918 | (defun idlwave-shell-quit (&optional arg) |
| @@ -1928,7 +1928,7 @@ With prefix ARG, exit without confirmation." | |||
| 1928 | 1928 | ||
| 1929 | (defun idlwave-shell-reset (&optional hidden) | 1929 | (defun idlwave-shell-reset (&optional hidden) |
| 1930 | "Reset IDL. Return to main level and destroy the leftover variables. | 1930 | "Reset IDL. Return to main level and destroy the leftover variables. |
| 1931 | This issues the following commands: | 1931 | This issues the following commands: |
| 1932 | RETALL | 1932 | RETALL |
| 1933 | WIDGET_CONTROL,/RESET | 1933 | WIDGET_CONTROL,/RESET |
| 1934 | CLOSE, /ALL | 1934 | CLOSE, /ALL |
| @@ -1978,14 +1978,14 @@ HEAP_GC, /VERBOSE" | |||
| 1978 | ;; Set dummy values and kill the text | 1978 | ;; Set dummy values and kill the text |
| 1979 | (setq sep "@" sep-re "@ *" text "") | 1979 | (setq sep "@" sep-re "@ *" text "") |
| 1980 | (if idlwave-idlwave_routine_info-compiled | 1980 | (if idlwave-idlwave_routine_info-compiled |
| 1981 | (message | 1981 | (message |
| 1982 | "Routine Info warning: No match for BEGIN line in \n>>>\n%s\n<<<\n" | 1982 | "Routine Info warning: No match for BEGIN line in \n>>>\n%s\n<<<\n" |
| 1983 | idlwave-shell-command-output))) | 1983 | idlwave-shell-command-output))) |
| 1984 | (if (string-match "^>>>END OF IDLWAVE ROUTINE INFO.*" text) | 1984 | (if (string-match "^>>>END OF IDLWAVE ROUTINE INFO.*" text) |
| 1985 | (setq text (substring text 0 (match-beginning 0))) | 1985 | (setq text (substring text 0 (match-beginning 0))) |
| 1986 | (if idlwave-idlwave_routine_info-compiled | 1986 | (if idlwave-idlwave_routine_info-compiled |
| 1987 | (message | 1987 | (message |
| 1988 | "Routine Info warning: No match for END line in \n>>>\n%s\n<<<\n" | 1988 | "Routine Info warning: No match for END line in \n>>>\n%s\n<<<\n" |
| 1989 | idlwave-shell-command-output))) | 1989 | idlwave-shell-command-output))) |
| 1990 | (if (string-match "\\S-" text) | 1990 | (if (string-match "\\S-" text) |
| 1991 | ;; Obviously, the pro worked. Make a note that we have it now. | 1991 | ;; Obviously, the pro worked. Make a note that we have it now. |
| @@ -2003,59 +2003,59 @@ HEAP_GC, /VERBOSE" | |||
| 2003 | key (nth 4 specs) | 2003 | key (nth 4 specs) |
| 2004 | keys (if (and (stringp key) | 2004 | keys (if (and (stringp key) |
| 2005 | (not (string-match "\\` *\\'" key))) | 2005 | (not (string-match "\\` *\\'" key))) |
| 2006 | (mapcar 'list | 2006 | (mapcar 'list |
| 2007 | (delete "" (idlwave-split-string key " +"))))) | 2007 | (delete "" (idlwave-split-string key " +"))))) |
| 2008 | (setq name (idlwave-sintern-routine-or-method name class t) | 2008 | (setq name (idlwave-sintern-routine-or-method name class t) |
| 2009 | class (idlwave-sintern-class class t) | 2009 | class (idlwave-sintern-class class t) |
| 2010 | file (if (equal file "") nil file) | 2010 | file (if (equal file "") nil file) |
| 2011 | keys (mapcar (lambda (x) | 2011 | keys (mapcar (lambda (x) |
| 2012 | (list (idlwave-sintern-keyword (car x) t))) keys)) | 2012 | (list (idlwave-sintern-keyword (car x) t))) keys)) |
| 2013 | 2013 | ||
| 2014 | ;; In the following ignore routines already defined in buffers, | 2014 | ;; In the following ignore routines already defined in buffers, |
| 2015 | ;; assuming that if the buffer stuff differs, it is a "new" | 2015 | ;; assuming that if the buffer stuff differs, it is a "new" |
| 2016 | ;; version, not yet compiled, and should take precedence. | 2016 | ;; version, not yet compiled, and should take precedence. |
| 2017 | ;; We could do the same for the library to avoid duplicates - | 2017 | ;; We could do the same for the library to avoid duplicates - |
| 2018 | ;; but I think frequently a user might have several versions of | 2018 | ;; but I think frequently a user might have several versions of |
| 2019 | ;; the same function in different programs, and in this case the | 2019 | ;; the same function in different programs, and in this case the |
| 2020 | ;; compiled one will be the best guess of all versions. | 2020 | ;; compiled one will be the best guess of all versions. |
| 2021 | ;; Therefore, we leave duplicates of library routines in. | 2021 | ;; Therefore, we leave duplicates of library routines in. |
| 2022 | (cond ((string= name "$MAIN$")) ; ignore this one | 2022 | (cond ((string= name "$MAIN$")) ; ignore this one |
| 2023 | ((and (string= type "PRO") | 2023 | ((and (string= type "PRO") |
| 2024 | ;; FIXME: is it OK to make the buffer routines dominate? | 2024 | ;; FIXME: is it OK to make the buffer routines dominate? |
| 2025 | (or t (null file) | 2025 | (or t (null file) |
| 2026 | (not (idlwave-rinfo-assq name 'pro class | 2026 | (not (idlwave-rinfo-assq name 'pro class |
| 2027 | idlwave-buffer-routines))) | 2027 | idlwave-buffer-routines))) |
| 2028 | ;; FIXME: is it OK to make the library routines dominate? | 2028 | ;; FIXME: is it OK to make the library routines dominate? |
| 2029 | ;;(not (idlwave-rinfo-assq name 'pro class | 2029 | ;;(not (idlwave-rinfo-assq name 'pro class |
| 2030 | ;; idlwave-library-routines)) | 2030 | ;; idlwave-library-routines)) |
| 2031 | ) | 2031 | ) |
| 2032 | (setq entry (list name 'pro class | 2032 | (setq entry (list name 'pro class |
| 2033 | (cons 'compiled | 2033 | (cons 'compiled |
| 2034 | (if file | 2034 | (if file |
| 2035 | (list | 2035 | (list |
| 2036 | (file-name-nondirectory file) | 2036 | (file-name-nondirectory file) |
| 2037 | (idlwave-sintern-dir | 2037 | (idlwave-sintern-dir |
| 2038 | (file-name-directory file))))) | 2038 | (file-name-directory file))))) |
| 2039 | cs (cons nil keys))) | 2039 | cs (cons nil keys))) |
| 2040 | (if file | 2040 | (if file |
| 2041 | (push entry idlwave-compiled-routines) | 2041 | (push entry idlwave-compiled-routines) |
| 2042 | (push entry idlwave-unresolved-routines))) | 2042 | (push entry idlwave-unresolved-routines))) |
| 2043 | 2043 | ||
| 2044 | ((and (string= type "FUN") | 2044 | ((and (string= type "FUN") |
| 2045 | ;; FIXME: is it OK to make the buffer routines dominate? | 2045 | ;; FIXME: is it OK to make the buffer routines dominate? |
| 2046 | (or t (not file) | 2046 | (or t (not file) |
| 2047 | (not (idlwave-rinfo-assq name 'fun class | 2047 | (not (idlwave-rinfo-assq name 'fun class |
| 2048 | idlwave-buffer-routines))) | 2048 | idlwave-buffer-routines))) |
| 2049 | ;; FIXME: is it OK to make the library routines dominate? | 2049 | ;; FIXME: is it OK to make the library routines dominate? |
| 2050 | ;; (not (idlwave-rinfo-assq name 'fun class | 2050 | ;; (not (idlwave-rinfo-assq name 'fun class |
| 2051 | ;; idlwave-library-routines)) | 2051 | ;; idlwave-library-routines)) |
| 2052 | ) | 2052 | ) |
| 2053 | (setq entry (list name 'fun class | 2053 | (setq entry (list name 'fun class |
| 2054 | (cons 'compiled | 2054 | (cons 'compiled |
| 2055 | (if file | 2055 | (if file |
| 2056 | (list | 2056 | (list |
| 2057 | (file-name-nondirectory file) | 2057 | (file-name-nondirectory file) |
| 2058 | (idlwave-sintern-dir | 2058 | (idlwave-sintern-dir |
| 2059 | (file-name-directory file))))) | 2059 | (file-name-directory file))))) |
| 2060 | cs (cons nil keys))) | 2060 | cs (cons nil keys))) |
| 2061 | (if file | 2061 | (if file |
| @@ -2072,7 +2072,7 @@ Change the default directory for the process buffer to concur." | |||
| 2072 | (set-buffer (idlwave-shell-buffer)) | 2072 | (set-buffer (idlwave-shell-buffer)) |
| 2073 | (if (string-match ",___cur[\n\r]\\(\\S-*\\) *[\n\r]" | 2073 | (if (string-match ",___cur[\n\r]\\(\\S-*\\) *[\n\r]" |
| 2074 | idlwave-shell-command-output) | 2074 | idlwave-shell-command-output) |
| 2075 | (let ((dir (substring idlwave-shell-command-output | 2075 | (let ((dir (substring idlwave-shell-command-output |
| 2076 | (match-beginning 1) (match-end 1)))) | 2076 | (match-beginning 1) (match-end 1)))) |
| 2077 | ; (message "Setting Emacs working dir to %s" dir) | 2077 | ; (message "Setting Emacs working dir to %s" dir) |
| 2078 | (setq idlwave-shell-default-directory dir) | 2078 | (setq idlwave-shell-default-directory dir) |
| @@ -2086,10 +2086,10 @@ Change the default directory for the process buffer to concur." | |||
| 2086 | expression) | 2086 | expression) |
| 2087 | (save-excursion | 2087 | (save-excursion |
| 2088 | (goto-char apos) | 2088 | (goto-char apos) |
| 2089 | (setq expression (buffer-substring | 2089 | (setq expression (buffer-substring |
| 2090 | (catch 'exit | 2090 | (catch 'exit |
| 2091 | (while t | 2091 | (while t |
| 2092 | (if (not (re-search-backward | 2092 | (if (not (re-search-backward |
| 2093 | "[^][.A-Za-z0-9_() ]" bos t)) | 2093 | "[^][.A-Za-z0-9_() ]" bos t)) |
| 2094 | (throw 'exit bos)) ;ran into bos | 2094 | (throw 'exit bos)) ;ran into bos |
| 2095 | (if (not (idlwave-is-pointer-dereference bol)) | 2095 | (if (not (idlwave-is-pointer-dereference bol)) |
| @@ -2117,7 +2117,7 @@ Change the default directory for the process buffer to concur." | |||
| 2117 | idlwave-shell-command-output)) | 2117 | idlwave-shell-command-output)) |
| 2118 | (string-match (concat match "\\([A-Za-z_0-9]+\\)") | 2118 | (string-match (concat match "\\([A-Za-z_0-9]+\\)") |
| 2119 | idlwave-shell-command-output)) | 2119 | idlwave-shell-command-output)) |
| 2120 | (setq idlwave-shell-get-object-class | 2120 | (setq idlwave-shell-get-object-class |
| 2121 | (match-string 1 idlwave-shell-command-output))))) | 2121 | (match-string 1 idlwave-shell-command-output))))) |
| 2122 | 2122 | ||
| 2123 | (defvar idlwave-sint-sysvars nil) | 2123 | (defvar idlwave-sint-sysvars nil) |
| @@ -2131,7 +2131,7 @@ keywords." | |||
| 2131 | (interactive "P") | 2131 | (interactive "P") |
| 2132 | (let (exec-cmd) | 2132 | (let (exec-cmd) |
| 2133 | (cond | 2133 | (cond |
| 2134 | ((and | 2134 | ((and |
| 2135 | (setq exec-cmd (idlwave-shell-executive-command)) | 2135 | (setq exec-cmd (idlwave-shell-executive-command)) |
| 2136 | (cdr exec-cmd) | 2136 | (cdr exec-cmd) |
| 2137 | (member (upcase (cdr exec-cmd)) | 2137 | (member (upcase (cdr exec-cmd)) |
| @@ -2141,7 +2141,7 @@ keywords." | |||
| 2141 | (idlwave-shell-complete-filename)) | 2141 | (idlwave-shell-complete-filename)) |
| 2142 | 2142 | ||
| 2143 | ((car-safe exec-cmd) | 2143 | ((car-safe exec-cmd) |
| 2144 | (setq idlwave-completion-help-info | 2144 | (setq idlwave-completion-help-info |
| 2145 | '(idlwave-shell-complete-execcomm-help)) | 2145 | '(idlwave-shell-complete-execcomm-help)) |
| 2146 | (idlwave-complete-in-buffer 'execcomm 'execcomm | 2146 | (idlwave-complete-in-buffer 'execcomm 'execcomm |
| 2147 | idlwave-executive-commands-alist nil | 2147 | idlwave-executive-commands-alist nil |
| @@ -2160,7 +2160,7 @@ keywords." | |||
| 2160 | (let ((case-fold-search t)) | 2160 | (let ((case-fold-search t)) |
| 2161 | (not (looking-at ".*obj_new"))))) | 2161 | (not (looking-at ".*obj_new"))))) |
| 2162 | (idlwave-shell-complete-filename)) | 2162 | (idlwave-shell-complete-filename)) |
| 2163 | 2163 | ||
| 2164 | (t | 2164 | (t |
| 2165 | ;; Default completion of modules and keywords | 2165 | ;; Default completion of modules and keywords |
| 2166 | (idlwave-complete arg))))) | 2166 | (idlwave-complete arg))))) |
| @@ -2182,7 +2182,7 @@ keywords." | |||
| 2182 | We assume that we are after a file name when completing one of the | 2182 | We assume that we are after a file name when completing one of the |
| 2183 | args of an executive .run, .rnew or .compile." | 2183 | args of an executive .run, .rnew or .compile." |
| 2184 | ;; CWD might have changed, resync, to set default directory | 2184 | ;; CWD might have changed, resync, to set default directory |
| 2185 | (idlwave-shell-resync-dirs) | 2185 | (idlwave-shell-resync-dirs) |
| 2186 | (let ((comint-file-name-chars idlwave-shell-file-name-chars)) | 2186 | (let ((comint-file-name-chars idlwave-shell-file-name-chars)) |
| 2187 | (comint-dynamic-complete-as-filename))) | 2187 | (comint-dynamic-complete-as-filename))) |
| 2188 | 2188 | ||
| @@ -2223,7 +2223,7 @@ args of an executive .run, .rnew or .compile." | |||
| 2223 | 2223 | ||
| 2224 | (defun idlwave-shell-redisplay (&optional hide) | 2224 | (defun idlwave-shell-redisplay (&optional hide) |
| 2225 | "Tries to resync the display with where execution has stopped. | 2225 | "Tries to resync the display with where execution has stopped. |
| 2226 | Issues a \"help,/trace\" command followed by a call to | 2226 | Issues a \"help,/trace\" command followed by a call to |
| 2227 | `idlwave-shell-display-line'. Also updates the breakpoint | 2227 | `idlwave-shell-display-line'. Also updates the breakpoint |
| 2228 | overlays." | 2228 | overlays." |
| 2229 | (interactive) | 2229 | (interactive) |
| @@ -2236,7 +2236,7 @@ overlays." | |||
| 2236 | (idlwave-shell-bp-query)) | 2236 | (idlwave-shell-bp-query)) |
| 2237 | 2237 | ||
| 2238 | (defun idlwave-shell-display-level-in-calling-stack (&optional hide) | 2238 | (defun idlwave-shell-display-level-in-calling-stack (&optional hide) |
| 2239 | (idlwave-shell-send-command | 2239 | (idlwave-shell-send-command |
| 2240 | "help,/trace" | 2240 | "help,/trace" |
| 2241 | `(progn | 2241 | `(progn |
| 2242 | ;; scanning for the state will reset the stack level - restore it | 2242 | ;; scanning for the state will reset the stack level - restore it |
| @@ -2267,14 +2267,14 @@ overlays." | |||
| 2267 | (setq idlwave-shell-calling-stack-index nmin | 2267 | (setq idlwave-shell-calling-stack-index nmin |
| 2268 | message (format "%d is the current calling stack level - can't go further down" | 2268 | message (format "%d is the current calling stack level - can't go further down" |
| 2269 | (- nmin))))) | 2269 | (- nmin))))) |
| 2270 | (setq idlwave-shell-calling-stack-routine | 2270 | (setq idlwave-shell-calling-stack-routine |
| 2271 | (nth 2 (nth idlwave-shell-calling-stack-index stack))) | 2271 | (nth 2 (nth idlwave-shell-calling-stack-index stack))) |
| 2272 | 2272 | ||
| 2273 | ;; only edebug if in that mode already | 2273 | ;; only edebug if in that mode already |
| 2274 | (idlwave-shell-display-line | 2274 | (idlwave-shell-display-line |
| 2275 | (nth idlwave-shell-calling-stack-index stack) nil | 2275 | (nth idlwave-shell-calling-stack-index stack) nil |
| 2276 | (unless idlwave-shell-electric-debug-mode 'no-debug)) | 2276 | (unless idlwave-shell-electric-debug-mode 'no-debug)) |
| 2277 | (message (or message | 2277 | (message (or message |
| 2278 | (format "In routine %s (stack level %d)" | 2278 | (format "In routine %s (stack level %d)" |
| 2279 | idlwave-shell-calling-stack-routine | 2279 | idlwave-shell-calling-stack-routine |
| 2280 | (- idlwave-shell-calling-stack-index)))))) | 2280 | (- idlwave-shell-calling-stack-index)))))) |
| @@ -2305,7 +2305,7 @@ used. Does nothing if the resulting frame is nil." | |||
| 2305 | (defun idlwave-shell-pc-frame () | 2305 | (defun idlwave-shell-pc-frame () |
| 2306 | "Returns the frame for IDL execution." | 2306 | "Returns the frame for IDL execution." |
| 2307 | (and idlwave-shell-halt-frame | 2307 | (and idlwave-shell-halt-frame |
| 2308 | (list (nth 0 idlwave-shell-halt-frame) | 2308 | (list (nth 0 idlwave-shell-halt-frame) |
| 2309 | (nth 1 idlwave-shell-halt-frame) | 2309 | (nth 1 idlwave-shell-halt-frame) |
| 2310 | (nth 2 idlwave-shell-halt-frame)))) | 2310 | (nth 2 idlwave-shell-halt-frame)))) |
| 2311 | 2311 | ||
| @@ -2323,7 +2323,7 @@ column in the line. If NO-DEBUG is non-nil, do *not* toggle the electric | |||
| 2323 | debug mode." | 2323 | debug mode." |
| 2324 | (if (not frame) | 2324 | (if (not frame) |
| 2325 | ;; Remove stop-line overlay from old position | 2325 | ;; Remove stop-line overlay from old position |
| 2326 | (progn | 2326 | (progn |
| 2327 | (setq overlay-arrow-string nil) | 2327 | (setq overlay-arrow-string nil) |
| 2328 | (setq idlwave-shell-mode-line-info nil) | 2328 | (setq idlwave-shell-mode-line-info nil) |
| 2329 | (setq idlwave-shell-is-stopped nil) | 2329 | (setq idlwave-shell-is-stopped nil) |
| @@ -2340,10 +2340,10 @@ debug mode." | |||
| 2340 | ;;; | 2340 | ;;; |
| 2341 | ;;; buffer : the buffer to display a line in. | 2341 | ;;; buffer : the buffer to display a line in. |
| 2342 | ;;; select-shell: current buffer is the shell. | 2342 | ;;; select-shell: current buffer is the shell. |
| 2343 | ;;; | 2343 | ;;; |
| 2344 | (setq idlwave-shell-mode-line-info | 2344 | (setq idlwave-shell-mode-line-info |
| 2345 | (if (nth 2 frame) | 2345 | (if (nth 2 frame) |
| 2346 | (format "[%d:%s]" | 2346 | (format "[%d:%s]" |
| 2347 | (- idlwave-shell-calling-stack-index) | 2347 | (- idlwave-shell-calling-stack-index) |
| 2348 | (nth 2 frame)))) | 2348 | (nth 2 frame)))) |
| 2349 | (let* ((buffer (idlwave-find-file-noselect (car frame) 'shell)) | 2349 | (let* ((buffer (idlwave-find-file-noselect (car frame) 'shell)) |
| @@ -2367,7 +2367,7 @@ debug mode." | |||
| 2367 | (forward-line 0) | 2367 | (forward-line 0) |
| 2368 | (setq pos (point)) | 2368 | (setq pos (point)) |
| 2369 | (setq idlwave-shell-is-stopped t) | 2369 | (setq idlwave-shell-is-stopped t) |
| 2370 | 2370 | ||
| 2371 | (if idlwave-shell-stop-line-overlay | 2371 | (if idlwave-shell-stop-line-overlay |
| 2372 | ;; Move overlay | 2372 | ;; Move overlay |
| 2373 | (move-overlay idlwave-shell-stop-line-overlay | 2373 | (move-overlay idlwave-shell-stop-line-overlay |
| @@ -2389,12 +2389,12 @@ debug mode." | |||
| 2389 | ;; If we have the column of the error, move the cursor there. | 2389 | ;; If we have the column of the error, move the cursor there. |
| 2390 | (if col (move-to-column col)) | 2390 | (if col (move-to-column col)) |
| 2391 | (setq pos (point)) | 2391 | (setq pos (point)) |
| 2392 | 2392 | ||
| 2393 | ;; Enter electric debug mode, if not prohibited and not in | 2393 | ;; Enter electric debug mode, if not prohibited and not in |
| 2394 | ;; it already | 2394 | ;; it already |
| 2395 | (when (and (or | 2395 | (when (and (or |
| 2396 | (eq idlwave-shell-automatic-electric-debug t) | 2396 | (eq idlwave-shell-automatic-electric-debug t) |
| 2397 | (and | 2397 | (and |
| 2398 | (eq idlwave-shell-automatic-electric-debug 'breakpoint) | 2398 | (eq idlwave-shell-automatic-electric-debug 'breakpoint) |
| 2399 | (not (eq idlwave-shell-current-state 'error)))) | 2399 | (not (eq idlwave-shell-current-state 'error)))) |
| 2400 | (not no-debug) | 2400 | (not no-debug) |
| @@ -2402,14 +2402,14 @@ debug mode." | |||
| 2402 | (not idlwave-shell-electric-debug-mode)) | 2402 | (not idlwave-shell-electric-debug-mode)) |
| 2403 | (idlwave-shell-electric-debug-mode) | 2403 | (idlwave-shell-electric-debug-mode) |
| 2404 | (setq electric t))) | 2404 | (setq electric t))) |
| 2405 | 2405 | ||
| 2406 | ;; Make sure pos is really displayed in the window. | 2406 | ;; Make sure pos is really displayed in the window. |
| 2407 | (set-window-point window pos) | 2407 | (set-window-point window pos) |
| 2408 | 2408 | ||
| 2409 | ;; If we came from the shell, go back there. Otherwise select | 2409 | ;; If we came from the shell, go back there. Otherwise select |
| 2410 | ;; the window where the error is displayed. | 2410 | ;; the window where the error is displayed. |
| 2411 | (if (or (and idlwave-shell-electric-zap-to-file electric) | 2411 | (if (or (and idlwave-shell-electric-zap-to-file electric) |
| 2412 | (and (equal (buffer-name) (idlwave-shell-buffer)) | 2412 | (and (equal (buffer-name) (idlwave-shell-buffer)) |
| 2413 | (not select-shell))) | 2413 | (not select-shell))) |
| 2414 | (select-window window)))))) | 2414 | (select-window window)))))) |
| 2415 | 2415 | ||
| @@ -2419,35 +2419,35 @@ debug mode." | |||
| 2419 | (interactive "p") | 2419 | (interactive "p") |
| 2420 | (or (not arg) (< arg 1) | 2420 | (or (not arg) (< arg 1) |
| 2421 | (setq arg 1)) | 2421 | (setq arg 1)) |
| 2422 | (idlwave-shell-send-command | 2422 | (idlwave-shell-send-command |
| 2423 | (concat ".s " (if (integerp arg) (int-to-string arg) arg)) | 2423 | (concat ".s " (if (integerp arg) (int-to-string arg) arg)) |
| 2424 | nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t)) | 2424 | nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t)) |
| 2425 | 2425 | ||
| 2426 | (defun idlwave-shell-stepover (arg) | 2426 | (defun idlwave-shell-stepover (arg) |
| 2427 | "Stepover one source line. | 2427 | "Stepover one source line. |
| 2428 | If given prefix argument ARG, step ARG source lines. | 2428 | If given prefix argument ARG, step ARG source lines. |
| 2429 | Uses IDL's stepover executive command which does not enter called functions." | 2429 | Uses IDL's stepover executive command which does not enter called functions." |
| 2430 | (interactive "p") | 2430 | (interactive "p") |
| 2431 | (or (not arg) (< arg 1) | 2431 | (or (not arg) (< arg 1) |
| 2432 | (setq arg 1)) | 2432 | (setq arg 1)) |
| 2433 | (idlwave-shell-send-command | 2433 | (idlwave-shell-send-command |
| 2434 | (concat ".so " (if (integerp arg) (int-to-string arg) arg)) | 2434 | (concat ".so " (if (integerp arg) (int-to-string arg) arg)) |
| 2435 | nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t)) | 2435 | nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t)) |
| 2436 | 2436 | ||
| 2437 | (defun idlwave-shell-break-here (&optional count cmd condition no-show) | 2437 | (defun idlwave-shell-break-here (&optional count cmd condition no-show) |
| 2438 | "Set breakpoint at current line. | 2438 | "Set breakpoint at current line. |
| 2439 | 2439 | ||
| 2440 | If Count is nil then an ordinary breakpoint is set. We treat a count | 2440 | If Count is nil then an ordinary breakpoint is set. We treat a count |
| 2441 | of 1 as a temporary breakpoint using the ONCE keyword. Counts greater | 2441 | of 1 as a temporary breakpoint using the ONCE keyword. Counts greater |
| 2442 | than 1 use the IDL AFTER=count keyword to break only after reaching | 2442 | than 1 use the IDL AFTER=count keyword to break only after reaching |
| 2443 | the statement count times. | 2443 | the statement count times. |
| 2444 | 2444 | ||
| 2445 | Optional argument CMD is a list or function to evaluate upon reaching | 2445 | Optional argument CMD is a list or function to evaluate upon reaching |
| 2446 | the breakpoint." | 2446 | the breakpoint." |
| 2447 | 2447 | ||
| 2448 | (interactive "P") | 2448 | (interactive "P") |
| 2449 | (when (listp count) | 2449 | (when (listp count) |
| 2450 | (if (equal (car count) 4) | 2450 | (if (equal (car count) 4) |
| 2451 | (setq condition (read-string "Break Condition: "))) | 2451 | (setq condition (read-string "Break Condition: "))) |
| 2452 | (setq count nil)) | 2452 | (setq count nil)) |
| 2453 | (idlwave-shell-set-bp | 2453 | (idlwave-shell-set-bp |
| @@ -2470,7 +2470,7 @@ the problem with not being able to set the breakpoint." | |||
| 2470 | (progn | 2470 | (progn |
| 2471 | (if (progn | 2471 | (if (progn |
| 2472 | (beep) | 2472 | (beep) |
| 2473 | (y-or-n-p | 2473 | (y-or-n-p |
| 2474 | (concat "Okay to recompile file " | 2474 | (concat "Okay to recompile file " |
| 2475 | (idlwave-shell-bp-get bp 'file) " "))) | 2475 | (idlwave-shell-bp-get bp 'file) " "))) |
| 2476 | ;; Recompile | 2476 | ;; Recompile |
| @@ -2478,7 +2478,7 @@ the problem with not being able to set the breakpoint." | |||
| 2478 | ;; Clean up before retrying | 2478 | ;; Clean up before retrying |
| 2479 | (idlwave-shell-command-failure) | 2479 | (idlwave-shell-command-failure) |
| 2480 | (idlwave-shell-send-command | 2480 | (idlwave-shell-send-command |
| 2481 | (concat ".run " (idlwave-shell-bp-get bp 'file)) nil | 2481 | (concat ".run " (idlwave-shell-bp-get bp 'file)) nil |
| 2482 | (if (idlwave-shell-hide-p 'run) 'mostly) nil t) | 2482 | (if (idlwave-shell-hide-p 'run) 'mostly) nil t) |
| 2483 | ;; Try setting breakpoint again | 2483 | ;; Try setting breakpoint again |
| 2484 | (idlwave-shell-set-bp bp)) | 2484 | (idlwave-shell-set-bp bp)) |
| @@ -2502,9 +2502,9 @@ breakpoint can not be set." | |||
| 2502 | (defun idlwave-shell-cont (&optional no-show) | 2502 | (defun idlwave-shell-cont (&optional no-show) |
| 2503 | "Continue executing." | 2503 | "Continue executing." |
| 2504 | (interactive) | 2504 | (interactive) |
| 2505 | (idlwave-shell-send-command ".c" (unless no-show | 2505 | (idlwave-shell-send-command ".c" (unless no-show |
| 2506 | '(idlwave-shell-redisplay 'hide)) | 2506 | '(idlwave-shell-redisplay 'hide)) |
| 2507 | (if (idlwave-shell-hide-p 'debug) 'mostly) | 2507 | (if (idlwave-shell-hide-p 'debug) 'mostly) |
| 2508 | nil t)) | 2508 | nil t)) |
| 2509 | 2509 | ||
| 2510 | (defun idlwave-shell-go () | 2510 | (defun idlwave-shell-go () |
| @@ -2585,7 +2585,7 @@ at a breakpoint." | |||
| 2585 | ((eq force 'enable) (setq disabled t))) | 2585 | ((eq force 'enable) (setq disabled t))) |
| 2586 | (when bp | 2586 | (when bp |
| 2587 | (setf (nth 3 (cdr (cdr bp))) (not disabled)) | 2587 | (setf (nth 3 (cdr (cdr bp))) (not disabled)) |
| 2588 | (idlwave-shell-send-command | 2588 | (idlwave-shell-send-command |
| 2589 | (concat "breakpoint," | 2589 | (concat "breakpoint," |
| 2590 | (if disabled "/enable," "/disable,") | 2590 | (if disabled "/enable," "/disable,") |
| 2591 | (int-to-string (idlwave-shell-bp-get bp))) | 2591 | (int-to-string (idlwave-shell-bp-get bp))) |
| @@ -2599,13 +2599,13 @@ If ENABLE is non-nil, enable them instead." | |||
| 2599 | (while bpl | 2599 | (while bpl |
| 2600 | (setq disabled (idlwave-shell-bp-get (car bpl) 'disabled)) | 2600 | (setq disabled (idlwave-shell-bp-get (car bpl) 'disabled)) |
| 2601 | (when (idlwave-xor (not disabled) (eq enable 'enable)) | 2601 | (when (idlwave-xor (not disabled) (eq enable 'enable)) |
| 2602 | (idlwave-shell-toggle-enable-current-bp | 2602 | (idlwave-shell-toggle-enable-current-bp |
| 2603 | (car bpl) (if (eq enable 'enable) 'enable 'disable) no-update) | 2603 | (car bpl) (if (eq enable 'enable) 'enable 'disable) no-update) |
| 2604 | (push (car bpl) modified)) | 2604 | (push (car bpl) modified)) |
| 2605 | (setq bpl (cdr bpl))) | 2605 | (setq bpl (cdr bpl))) |
| 2606 | (unless no-update (idlwave-shell-bp-query)) | 2606 | (unless no-update (idlwave-shell-bp-query)) |
| 2607 | modified)) | 2607 | modified)) |
| 2608 | 2608 | ||
| 2609 | (defun idlwave-shell-to-here () | 2609 | (defun idlwave-shell-to-here () |
| 2610 | "Set a breakpoint with count 1 then continue." | 2610 | "Set a breakpoint with count 1 then continue." |
| 2611 | (interactive) | 2611 | (interactive) |
| @@ -2643,7 +2643,7 @@ in the current routine." | |||
| 2643 | (defun idlwave-shell-set-bp-in-module (module) | 2643 | (defun idlwave-shell-set-bp-in-module (module) |
| 2644 | "Set breakpoint in module. Assumes that `idlwave-shell-sources-alist' | 2644 | "Set breakpoint in module. Assumes that `idlwave-shell-sources-alist' |
| 2645 | contains an entry for that module." | 2645 | contains an entry for that module." |
| 2646 | (let ((source-file (car-safe | 2646 | (let ((source-file (car-safe |
| 2647 | (cdr-safe | 2647 | (cdr-safe |
| 2648 | (assoc (upcase module) | 2648 | (assoc (upcase module) |
| 2649 | idlwave-shell-sources-alist)))) | 2649 | idlwave-shell-sources-alist)))) |
| @@ -2662,7 +2662,7 @@ contains an entry for that module." | |||
| 2662 | (save-excursion | 2662 | (save-excursion |
| 2663 | (goto-char (point-min)) | 2663 | (goto-char (point-min)) |
| 2664 | (let ((case-fold-search t)) | 2664 | (let ((case-fold-search t)) |
| 2665 | (if (re-search-forward | 2665 | (if (re-search-forward |
| 2666 | (concat "^[ \t]*\\(pro\\|function\\)[ \t]+" | 2666 | (concat "^[ \t]*\\(pro\\|function\\)[ \t]+" |
| 2667 | (downcase module) | 2667 | (downcase module) |
| 2668 | "[ \t\n,]") nil t) | 2668 | "[ \t\n,]") nil t) |
| @@ -2704,7 +2704,7 @@ Sets a breakpoint with count 1 at end of block, then continues." | |||
| 2704 | "Attempt to run until this procedure exits. | 2704 | "Attempt to run until this procedure exits. |
| 2705 | Runs to the last statement and then steps 1 statement. Use the .out command." | 2705 | Runs to the last statement and then steps 1 statement. Use the .out command." |
| 2706 | (interactive) | 2706 | (interactive) |
| 2707 | (idlwave-shell-send-command ".o" nil | 2707 | (idlwave-shell-send-command ".o" nil |
| 2708 | (if (idlwave-shell-hide-p 'debug) 'mostly) | 2708 | (if (idlwave-shell-hide-p 'debug) 'mostly) |
| 2709 | nil t)) | 2709 | nil t)) |
| 2710 | 2710 | ||
| @@ -2751,7 +2751,7 @@ Runs to the last statement and then steps 1 statement. Use the .out command." | |||
| 2751 | (interactive "e") | 2751 | (interactive "e") |
| 2752 | (let ((transient-mark-mode t) | 2752 | (let ((transient-mark-mode t) |
| 2753 | (zmacs-regions t) | 2753 | (zmacs-regions t) |
| 2754 | (tracker (if (featurep 'xemacs) | 2754 | (tracker (if (featurep 'xemacs) |
| 2755 | (if (fboundp 'default-mouse-track-event-is-with-button) | 2755 | (if (fboundp 'default-mouse-track-event-is-with-button) |
| 2756 | 'idlwave-xemacs-hack-mouse-track | 2756 | 'idlwave-xemacs-hack-mouse-track |
| 2757 | 'mouse-track) | 2757 | 'mouse-track) |
| @@ -2769,7 +2769,7 @@ Runs to the last statement and then steps 1 statement. Use the .out command." | |||
| 2769 | (let ((oldfunc (symbol-function 'default-mouse-track-event-is-with-button))) | 2769 | (let ((oldfunc (symbol-function 'default-mouse-track-event-is-with-button))) |
| 2770 | (unwind-protect | 2770 | (unwind-protect |
| 2771 | (progn | 2771 | (progn |
| 2772 | (fset 'default-mouse-track-event-is-with-button | 2772 | (fset 'default-mouse-track-event-is-with-button |
| 2773 | 'idlwave-default-mouse-track-event-is-with-button) | 2773 | 'idlwave-default-mouse-track-event-is-with-button) |
| 2774 | (mouse-track event)) | 2774 | (mouse-track event)) |
| 2775 | (fset 'default-mouse-track-event-is-with-button oldfunc)))) | 2775 | (fset 'default-mouse-track-event-is-with-button oldfunc)))) |
| @@ -2801,7 +2801,7 @@ Runs to the last statement and then steps 1 statement. Use the .out command." | |||
| 2801 | (defvar idlwave-shell-examine-completion-list nil) | 2801 | (defvar idlwave-shell-examine-completion-list nil) |
| 2802 | 2802 | ||
| 2803 | (defun idlwave-shell-print (arg &optional help ev complete-help-type) | 2803 | (defun idlwave-shell-print (arg &optional help ev complete-help-type) |
| 2804 | "Print current expression. | 2804 | "Print current expression. |
| 2805 | 2805 | ||
| 2806 | With HELP non-nil, show help on expression. If HELP is a string, | 2806 | With HELP non-nil, show help on expression. If HELP is a string, |
| 2807 | the expression will be put in place of ___, e.g.: | 2807 | the expression will be put in place of ___, e.g.: |
| @@ -2834,11 +2834,11 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2834 | (save-excursion | 2834 | (save-excursion |
| 2835 | (let* ((process (get-buffer-process (current-buffer))) | 2835 | (let* ((process (get-buffer-process (current-buffer))) |
| 2836 | (process-mark (if process (process-mark process))) | 2836 | (process-mark (if process (process-mark process))) |
| 2837 | (stack-label | 2837 | (stack-label |
| 2838 | (if (and (integerp idlwave-shell-calling-stack-index) | 2838 | (if (and (integerp idlwave-shell-calling-stack-index) |
| 2839 | (> idlwave-shell-calling-stack-index 0)) | 2839 | (> idlwave-shell-calling-stack-index 0)) |
| 2840 | (format " [-%d:%s]" | 2840 | (format " [-%d:%s]" |
| 2841 | idlwave-shell-calling-stack-index | 2841 | idlwave-shell-calling-stack-index |
| 2842 | idlwave-shell-calling-stack-routine))) | 2842 | idlwave-shell-calling-stack-routine))) |
| 2843 | expr beg end cmd examine-hook) | 2843 | expr beg end cmd examine-hook) |
| 2844 | (cond | 2844 | (cond |
| @@ -2868,7 +2868,7 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2868 | ;; an array | 2868 | ;; an array |
| 2869 | (forward-sexp)) | 2869 | (forward-sexp)) |
| 2870 | (setq end (point))))) | 2870 | (setq end (point))))) |
| 2871 | 2871 | ||
| 2872 | ;; Get expression, but first move the begin mark if a | 2872 | ;; Get expression, but first move the begin mark if a |
| 2873 | ;; process-mark is inside the region, to keep the overlay from | 2873 | ;; process-mark is inside the region, to keep the overlay from |
| 2874 | ;; wandering in the Shell. | 2874 | ;; wandering in the Shell. |
| @@ -2879,17 +2879,17 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2879 | 2879 | ||
| 2880 | ;; Show the overlay(s) and attach any necessary hooks and filters | 2880 | ;; Show the overlay(s) and attach any necessary hooks and filters |
| 2881 | (when (and beg end idlwave-shell-expression-overlay) | 2881 | (when (and beg end idlwave-shell-expression-overlay) |
| 2882 | (move-overlay idlwave-shell-expression-overlay beg end | 2882 | (move-overlay idlwave-shell-expression-overlay beg end |
| 2883 | (current-buffer)) | 2883 | (current-buffer)) |
| 2884 | (add-hook 'pre-command-hook | 2884 | (add-hook 'pre-command-hook |
| 2885 | 'idlwave-shell-delete-expression-overlay)) | 2885 | 'idlwave-shell-delete-expression-overlay)) |
| 2886 | (setq examine-hook | 2886 | (setq examine-hook |
| 2887 | (if idlwave-shell-separate-examine-output | 2887 | (if idlwave-shell-separate-examine-output |
| 2888 | 'idlwave-shell-examine-display | 2888 | 'idlwave-shell-examine-display |
| 2889 | 'idlwave-shell-examine-highlight)) | 2889 | 'idlwave-shell-examine-highlight)) |
| 2890 | (add-hook 'pre-command-hook | 2890 | (add-hook 'pre-command-hook |
| 2891 | 'idlwave-shell-delete-output-overlay) | 2891 | 'idlwave-shell-delete-output-overlay) |
| 2892 | 2892 | ||
| 2893 | ;; Remove empty or comment-only lines | 2893 | ;; Remove empty or comment-only lines |
| 2894 | (while (string-match "\n[ \t]*\\(;.*\\)?\r*\n" expr) | 2894 | (while (string-match "\n[ \t]*\\(;.*\\)?\r*\n" expr) |
| 2895 | (setq expr (replace-match "\n" t t expr))) | 2895 | (setq expr (replace-match "\n" t t expr))) |
| @@ -2899,41 +2899,41 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2899 | ;; Remove final newline | 2899 | ;; Remove final newline |
| 2900 | (if (string-match "\n[ \t\r]*\\'" expr) | 2900 | (if (string-match "\n[ \t\r]*\\'" expr) |
| 2901 | (setq expr (replace-match "" t t expr))) | 2901 | (setq expr (replace-match "" t t expr))) |
| 2902 | 2902 | ||
| 2903 | (catch 'exit | 2903 | (catch 'exit |
| 2904 | ;; Pop-up or complete on the examine selection list, if appropriate | 2904 | ;; Pop-up or complete on the examine selection list, if appropriate |
| 2905 | (if (or | 2905 | (if (or |
| 2906 | complete-help-type | 2906 | complete-help-type |
| 2907 | (and ev idlwave-shell-examine-alist) | 2907 | (and ev idlwave-shell-examine-alist) |
| 2908 | (consp help)) | 2908 | (consp help)) |
| 2909 | (let ((help-cons | 2909 | (let ((help-cons |
| 2910 | (if (consp help) help | 2910 | (if (consp help) help |
| 2911 | (assoc | 2911 | (assoc |
| 2912 | ;; A cons from either a pop-up or mini-buffer completion | 2912 | ;; A cons from either a pop-up or mini-buffer completion |
| 2913 | (if complete-help-type | 2913 | (if complete-help-type |
| 2914 | (idlwave-one-key-select 'idlwave-shell-examine-alist | 2914 | (idlwave-one-key-select 'idlwave-shell-examine-alist |
| 2915 | "Examine with: " 1.5) | 2915 | "Examine with: " 1.5) |
| 2916 | ;; (idlwave-completing-read | 2916 | ;; (idlwave-completing-read |
| 2917 | ;; "Examine with: " | 2917 | ;; "Examine with: " |
| 2918 | ;; idlwave-shell-examine-alist nil nil nil | 2918 | ;; idlwave-shell-examine-alist nil nil nil |
| 2919 | ;; 'idlwave-shell-examine-completion-list | 2919 | ;; 'idlwave-shell-examine-completion-list |
| 2920 | ;; "Print") | 2920 | ;; "Print") |
| 2921 | (idlwave-popup-select | 2921 | (idlwave-popup-select |
| 2922 | ev | 2922 | ev |
| 2923 | (mapcar 'car idlwave-shell-examine-alist) | 2923 | (mapcar 'car idlwave-shell-examine-alist) |
| 2924 | "Examine with")) | 2924 | "Examine with")) |
| 2925 | idlwave-shell-examine-alist)))) | 2925 | idlwave-shell-examine-alist)))) |
| 2926 | (setq help (cdr help-cons)) | 2926 | (setq help (cdr help-cons)) |
| 2927 | (if (null help) (throw 'exit nil)) | 2927 | (if (null help) (throw 'exit nil)) |
| 2928 | (if idlwave-shell-separate-examine-output | 2928 | (if idlwave-shell-separate-examine-output |
| 2929 | (setq idlwave-shell-examine-label | 2929 | (setq idlwave-shell-examine-label |
| 2930 | (concat | 2930 | (concat |
| 2931 | (format "==>%s<==\n%s:" expr (car help-cons)) | 2931 | (format "==>%s<==\n%s:" expr (car help-cons)) |
| 2932 | stack-label "\n")))) | 2932 | stack-label "\n")))) |
| 2933 | ;; The regular help label (no popups, cons cells, etc.) | 2933 | ;; The regular help label (no popups, cons cells, etc.) |
| 2934 | (setq idlwave-shell-examine-label | 2934 | (setq idlwave-shell-examine-label |
| 2935 | (concat | 2935 | (concat |
| 2936 | (format "==>%s<==\n%s:" expr | 2936 | (format "==>%s<==\n%s:" expr |
| 2937 | (cond ((null help) "print") | 2937 | (cond ((null help) "print") |
| 2938 | ((stringp help) help) | 2938 | ((stringp help) help) |
| 2939 | (t (symbol-name help)))) | 2939 | (t (symbol-name help)))) |
| @@ -2946,9 +2946,9 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2946 | idlwave-shell-calling-stack-index))) | 2946 | idlwave-shell-calling-stack-index))) |
| 2947 | (setq cmd (idlwave-shell-help-statement help expr)) | 2947 | (setq cmd (idlwave-shell-help-statement help expr)) |
| 2948 | ;;(idlwave-shell-recenter-shell-window) | 2948 | ;;(idlwave-shell-recenter-shell-window) |
| 2949 | (idlwave-shell-send-command | 2949 | (idlwave-shell-send-command |
| 2950 | cmd | 2950 | cmd |
| 2951 | examine-hook | 2951 | examine-hook |
| 2952 | (if idlwave-shell-separate-examine-output 'hide)))))) | 2952 | (if idlwave-shell-separate-examine-output 'hide)))))) |
| 2953 | 2953 | ||
| 2954 | (defvar idlwave-shell-examine-window-alist nil | 2954 | (defvar idlwave-shell-examine-window-alist nil |
| @@ -2975,9 +2975,9 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2975 | (let* ((end (or | 2975 | (let* ((end (or |
| 2976 | (re-search-backward idlwave-shell-prompt-pattern nil t) | 2976 | (re-search-backward idlwave-shell-prompt-pattern nil t) |
| 2977 | (point-max))) | 2977 | (point-max))) |
| 2978 | (beg (progn | 2978 | (beg (progn |
| 2979 | (goto-char | 2979 | (goto-char |
| 2980 | (or (progn (if (re-search-backward | 2980 | (or (progn (if (re-search-backward |
| 2981 | idlwave-shell-prompt-pattern nil t) | 2981 | idlwave-shell-prompt-pattern nil t) |
| 2982 | (match-end 0))) | 2982 | (match-end 0))) |
| 2983 | (point-min))) | 2983 | (point-min))) |
| @@ -2994,21 +2994,21 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 2994 | (setq buffer-read-only t) | 2994 | (setq buffer-read-only t) |
| 2995 | (move-overlay idlwave-shell-output-overlay cur-beg cur-end | 2995 | (move-overlay idlwave-shell-output-overlay cur-beg cur-end |
| 2996 | (current-buffer)) | 2996 | (current-buffer)) |
| 2997 | 2997 | ||
| 2998 | ;; Look for the examine buffer in all windows. If one is | 2998 | ;; Look for the examine buffer in all windows. If one is |
| 2999 | ;; found in a frame all by itself, use that, otherwise, switch | 2999 | ;; found in a frame all by itself, use that, otherwise, switch |
| 3000 | ;; to or create an examine window in this frame, and resize if | 3000 | ;; to or create an examine window in this frame, and resize if |
| 3001 | ;; it's a newly created window | 3001 | ;; it's a newly created window |
| 3002 | (let* ((winlist (get-buffer-window-list "*Examine*" nil 'visible))) | 3002 | (let* ((winlist (get-buffer-window-list "*Examine*" nil 'visible))) |
| 3003 | (setq win (idlwave-display-buffer | 3003 | (setq win (idlwave-display-buffer |
| 3004 | "*Examine*" | 3004 | "*Examine*" |
| 3005 | nil | 3005 | nil |
| 3006 | (let ((list winlist) thiswin) | 3006 | (let ((list winlist) thiswin) |
| 3007 | (catch 'exit | 3007 | (catch 'exit |
| 3008 | (save-selected-window | 3008 | (save-selected-window |
| 3009 | (while (setq thiswin (pop list)) | 3009 | (while (setq thiswin (pop list)) |
| 3010 | (select-window thiswin) | 3010 | (select-window thiswin) |
| 3011 | (if (one-window-p) | 3011 | (if (one-window-p) |
| 3012 | (throw 'exit (window-frame thiswin))))))))) | 3012 | (throw 'exit (window-frame thiswin))))))))) |
| 3013 | (set-window-start win (point-min)) ; Ensure the point is visible. | 3013 | (set-window-start win (point-min)) ; Ensure the point is visible. |
| 3014 | (save-selected-window | 3014 | (save-selected-window |
| @@ -3029,7 +3029,7 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 3029 | ;; And add the new value. | 3029 | ;; And add the new value. |
| 3030 | (if (setq elt (assoc win idlwave-shell-examine-window-alist)) | 3030 | (if (setq elt (assoc win idlwave-shell-examine-window-alist)) |
| 3031 | (setcdr elt (window-height)) | 3031 | (setcdr elt (window-height)) |
| 3032 | (add-to-list 'idlwave-shell-examine-window-alist | 3032 | (add-to-list 'idlwave-shell-examine-window-alist |
| 3033 | (cons win (window-height))))))))) | 3033 | (cons win (window-height))))))))) |
| 3034 | ;; Recenter for maximum output, after widened | 3034 | ;; Recenter for maximum output, after widened |
| 3035 | (save-selected-window | 3035 | (save-selected-window |
| @@ -3047,7 +3047,7 @@ idlw-shell-examine-alist via mini-buffer shortcut key." | |||
| 3047 | 3047 | ||
| 3048 | (defun idlwave-shell-examine-display-clear () | 3048 | (defun idlwave-shell-examine-display-clear () |
| 3049 | (interactive) | 3049 | (interactive) |
| 3050 | (save-excursion | 3050 | (save-excursion |
| 3051 | (let ((buf (get-buffer "*Examine*"))) | 3051 | (let ((buf (get-buffer "*Examine*"))) |
| 3052 | (when (bufferp buf) | 3052 | (when (bufferp buf) |
| 3053 | (set-buffer buf) | 3053 | (set-buffer buf) |
| @@ -3075,7 +3075,7 @@ versions of IDL." | |||
| 3075 | ;; break. We will look for identifiers and exclude cases where we | 3075 | ;; break. We will look for identifiers and exclude cases where we |
| 3076 | ;; know it is not a variable. To distinguish array references from | 3076 | ;; know it is not a variable. To distinguish array references from |
| 3077 | ;; function calls, we require that arrays use [] instead of () | 3077 | ;; function calls, we require that arrays use [] instead of () |
| 3078 | 3078 | ||
| 3079 | (while (string-match | 3079 | (while (string-match |
| 3080 | "\\(\\`\\|[^a-zA-Z0-9$_][ \t]*\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)\\([ \t]*[^a-zA-Z0-9$_]\\|\\'\\)" expr start) | 3080 | "\\(\\`\\|[^a-zA-Z0-9$_][ \t]*\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)\\([ \t]*[^a-zA-Z0-9$_]\\|\\'\\)" expr start) |
| 3081 | (setq var (match-string 2 expr) | 3081 | (setq var (match-string 2 expr) |
| @@ -3091,7 +3091,7 @@ versions of IDL." | |||
| 3091 | ((string-match "->[ \t]*\\'" pre)) ;; a method | 3091 | ((string-match "->[ \t]*\\'" pre)) ;; a method |
| 3092 | ((string-match "\\.\\'" pre)) ;; structure member | 3092 | ((string-match "\\.\\'" pre)) ;; structure member |
| 3093 | ((and (string-match "\\([\"\']\\)[^\1]*$" pre) | 3093 | ((and (string-match "\\([\"\']\\)[^\1]*$" pre) |
| 3094 | (string-match (concat "^[^" (match-string 1 pre) "]*" | 3094 | (string-match (concat "^[^" (match-string 1 pre) "]*" |
| 3095 | (match-string 1 pre)) post))) | 3095 | (match-string 1 pre)) post))) |
| 3096 | (t ;; seems to be a variable - replace its name in the | 3096 | (t ;; seems to be a variable - replace its name in the |
| 3097 | ;; expression with the fetch. | 3097 | ;; expression with the fetch. |
| @@ -3109,13 +3109,13 @@ to insert expression in place of the marker ___, e.g.: print, | |||
| 3109 | size(___,/DIMENSIONS)" | 3109 | size(___,/DIMENSIONS)" |
| 3110 | (cond | 3110 | (cond |
| 3111 | ((null help) (concat "print, " expr)) | 3111 | ((null help) (concat "print, " expr)) |
| 3112 | ((stringp help) | 3112 | ((stringp help) |
| 3113 | (if (string-match "\\(^\\|[^_]\\)\\(___\\)\\([^_]\\|$\\)" help) | 3113 | (if (string-match "\\(^\\|[^_]\\)\\(___\\)\\([^_]\\|$\\)" help) |
| 3114 | (concat (substring help 0 (match-beginning 2)) | 3114 | (concat (substring help 0 (match-beginning 2)) |
| 3115 | expr | 3115 | expr |
| 3116 | (substring help (match-end 2))))) | 3116 | (substring help (match-end 2))))) |
| 3117 | (t (concat "help, " expr)))) | 3117 | (t (concat "help, " expr)))) |
| 3118 | 3118 | ||
| 3119 | 3119 | ||
| 3120 | (defun idlwave-shell-examine-highlight () | 3120 | (defun idlwave-shell-examine-highlight () |
| 3121 | "Highlight the most recent IDL output." | 3121 | "Highlight the most recent IDL output." |
| @@ -3123,7 +3123,7 @@ size(___,/DIMENSIONS)" | |||
| 3123 | (process (get-buffer-process buffer)) | 3123 | (process (get-buffer-process buffer)) |
| 3124 | (process-mark (if process (process-mark process))) | 3124 | (process-mark (if process (process-mark process))) |
| 3125 | output-begin output-end) | 3125 | output-begin output-end) |
| 3126 | (save-excursion | 3126 | (save-excursion |
| 3127 | (set-buffer buffer) | 3127 | (set-buffer buffer) |
| 3128 | (goto-char process-mark) | 3128 | (goto-char process-mark) |
| 3129 | (beginning-of-line) | 3129 | (beginning-of-line) |
| @@ -3131,12 +3131,12 @@ size(___,/DIMENSIONS)" | |||
| 3131 | (re-search-backward idlwave-shell-prompt-pattern nil t) | 3131 | (re-search-backward idlwave-shell-prompt-pattern nil t) |
| 3132 | (beginning-of-line 2) | 3132 | (beginning-of-line 2) |
| 3133 | (setq output-begin (point))) | 3133 | (setq output-begin (point))) |
| 3134 | 3134 | ||
| 3135 | ;; First make sure the shell window is visible | 3135 | ;; First make sure the shell window is visible |
| 3136 | (idlwave-display-buffer (idlwave-shell-buffer) | 3136 | (idlwave-display-buffer (idlwave-shell-buffer) |
| 3137 | nil (idlwave-shell-shell-frame)) | 3137 | nil (idlwave-shell-shell-frame)) |
| 3138 | (if (and idlwave-shell-output-overlay process-mark) | 3138 | (if (and idlwave-shell-output-overlay process-mark) |
| 3139 | (move-overlay idlwave-shell-output-overlay | 3139 | (move-overlay idlwave-shell-output-overlay |
| 3140 | output-begin output-end buffer)))) | 3140 | output-begin output-end buffer)))) |
| 3141 | 3141 | ||
| 3142 | (defun idlwave-shell-delete-output-overlay () | 3142 | (defun idlwave-shell-delete-output-overlay () |
| @@ -3147,7 +3147,7 @@ size(___,/DIMENSIONS)" | |||
| 3147 | (delete-overlay idlwave-shell-output-overlay)) | 3147 | (delete-overlay idlwave-shell-output-overlay)) |
| 3148 | (error nil)) | 3148 | (error nil)) |
| 3149 | (remove-hook 'pre-command-hook 'idlwave-shell-delete-output-overlay))) | 3149 | (remove-hook 'pre-command-hook 'idlwave-shell-delete-output-overlay))) |
| 3150 | 3150 | ||
| 3151 | (defun idlwave-shell-delete-expression-overlay () | 3151 | (defun idlwave-shell-delete-expression-overlay () |
| 3152 | (unless (or (eq this-command 'idlwave-shell-mouse-nop) | 3152 | (unless (or (eq this-command 'idlwave-shell-mouse-nop) |
| 3153 | (eq this-command 'handle-switch-frame)) | 3153 | (eq this-command 'handle-switch-frame)) |
| @@ -3176,7 +3176,7 @@ contains four items: | |||
| 3176 | count - number of times to execute breakpoint. When count reaches 0 | 3176 | count - number of times to execute breakpoint. When count reaches 0 |
| 3177 | the breakpoint is cleared and removed from the alist. | 3177 | the breakpoint is cleared and removed from the alist. |
| 3178 | 3178 | ||
| 3179 | command - command to execute when breakpoint is reached, either a | 3179 | command - command to execute when breakpoint is reached, either a |
| 3180 | lisp function to be called with `funcall' with no arguments or a | 3180 | lisp function to be called with `funcall' with no arguments or a |
| 3181 | list to be evaluated with `eval'. | 3181 | list to be evaluated with `eval'. |
| 3182 | 3182 | ||
| @@ -3209,11 +3209,11 @@ If there is a prefix argument, display IDL process." | |||
| 3209 | (insert "\nend\n")) | 3209 | (insert "\nend\n")) |
| 3210 | (save-buffer 0))) | 3210 | (save-buffer 0))) |
| 3211 | (idlwave-shell-send-command (concat ".run " idlwave-shell-temp-pro-file) | 3211 | (idlwave-shell-send-command (concat ".run " idlwave-shell-temp-pro-file) |
| 3212 | nil | 3212 | nil |
| 3213 | (if (idlwave-shell-hide-p 'run) 'mostly) | 3213 | (if (idlwave-shell-hide-p 'run) 'mostly) |
| 3214 | nil t) | 3214 | nil t) |
| 3215 | (if n | 3215 | (if n |
| 3216 | (idlwave-display-buffer (idlwave-shell-buffer) | 3216 | (idlwave-display-buffer (idlwave-shell-buffer) |
| 3217 | nil (idlwave-shell-shell-frame)))) | 3217 | nil (idlwave-shell-shell-frame)))) |
| 3218 | 3218 | ||
| 3219 | (defun idlwave-shell-evaluate-region (beg end &optional n) | 3219 | (defun idlwave-shell-evaluate-region (beg end &optional n) |
| @@ -3224,7 +3224,7 @@ Does not work for a region with multiline blocks - use | |||
| 3224 | (interactive "r\nP") | 3224 | (interactive "r\nP") |
| 3225 | (idlwave-shell-send-command (buffer-substring beg end)) | 3225 | (idlwave-shell-send-command (buffer-substring beg end)) |
| 3226 | (if n | 3226 | (if n |
| 3227 | (idlwave-display-buffer (idlwave-shell-buffer) | 3227 | (idlwave-display-buffer (idlwave-shell-buffer) |
| 3228 | nil (idlwave-shell-shell-frame)))) | 3228 | nil (idlwave-shell-shell-frame)))) |
| 3229 | 3229 | ||
| 3230 | (defun idlwave-shell-delete-temp-files () | 3230 | (defun idlwave-shell-delete-temp-files () |
| @@ -3279,7 +3279,7 @@ Queries IDL using the string in `idlwave-shell-bp-query'." | |||
| 3279 | 'hide)) | 3279 | 'hide)) |
| 3280 | 3280 | ||
| 3281 | (defun idlwave-shell-bp-get (bp &optional item) | 3281 | (defun idlwave-shell-bp-get (bp &optional item) |
| 3282 | "Get a value for a breakpoint. | 3282 | "Get a value for a breakpoint. |
| 3283 | BP has the form of elements in idlwave-shell-bp-alist. Optional | 3283 | BP has the form of elements in idlwave-shell-bp-alist. Optional |
| 3284 | second arg ITEM is the particular value to retrieve. ITEM can be | 3284 | second arg ITEM is the particular value to retrieve. ITEM can be |
| 3285 | 'file, 'line, 'index, 'module, 'count, 'cmd, 'condition, 'disabled or | 3285 | 'file, 'line, 'index, 'module, 'count, 'cmd, 'condition, 'disabled or |
| @@ -3314,8 +3314,8 @@ breakpoint overlays." | |||
| 3314 | ;; Searching the breakpoints | 3314 | ;; Searching the breakpoints |
| 3315 | ;; In IDL 5.5, the breakpoint reporting format changed. | 3315 | ;; In IDL 5.5, the breakpoint reporting format changed. |
| 3316 | (bp-re54 "^[ \t]*\\([0-9]+\\)[ \t]+\\(\\S-+\\)?[ \t]+\\([0-9]+\\)[ \t]+\\(\\S-+\\)") | 3316 | (bp-re54 "^[ \t]*\\([0-9]+\\)[ \t]+\\(\\S-+\\)?[ \t]+\\([0-9]+\\)[ \t]+\\(\\S-+\\)") |
| 3317 | (bp-re55 | 3317 | (bp-re55 |
| 3318 | (concat | 3318 | (concat |
| 3319 | "^\\s-*\\([0-9]+\\)" ; 1 index | 3319 | "^\\s-*\\([0-9]+\\)" ; 1 index |
| 3320 | "\\s-+\\([0-9]+\\)" ; 2 line number | 3320 | "\\s-+\\([0-9]+\\)" ; 2 line number |
| 3321 | "\\s-+\\(Uncompiled\\|" ; 3-6 either uncompiled or routine name | 3321 | "\\s-+\\(Uncompiled\\|" ; 3-6 either uncompiled or routine name |
| @@ -3330,27 +3330,27 @@ breakpoint overlays." | |||
| 3330 | bp-re indmap) | 3330 | bp-re indmap) |
| 3331 | (setq idlwave-shell-bp-alist (list nil)) | 3331 | (setq idlwave-shell-bp-alist (list nil)) |
| 3332 | ;; Search for either header type, and set the correct regexp | 3332 | ;; Search for either header type, and set the correct regexp |
| 3333 | (when (or | 3333 | (when (or |
| 3334 | (if (re-search-forward "^\\s-*Index.*\n\\s-*-" nil t) | 3334 | (if (re-search-forward "^\\s-*Index.*\n\\s-*-" nil t) |
| 3335 | (setq bp-re bp-re54 ; versions <= 5.4 | 3335 | (setq bp-re bp-re54 ; versions <= 5.4 |
| 3336 | indmap '(1 2 3 4))) ;index module line file | 3336 | indmap '(1 2 3 4))) ;index module line file |
| 3337 | (if (re-search-forward | 3337 | (if (re-search-forward |
| 3338 | "^\\s-*Index\\s-*Line\\s-*Attributes\\s-*File" nil t) | 3338 | "^\\s-*Index\\s-*Line\\s-*Attributes\\s-*File" nil t) |
| 3339 | (setq bp-re bp-re55 ; versions >= 5.5 | 3339 | (setq bp-re bp-re55 ; versions >= 5.5 |
| 3340 | indmap '(1 6 2 16)))) ; index module line file | 3340 | indmap '(1 6 2 16)))) ; index module line file |
| 3341 | ;; There seems to be a breakpoint listing here, parse breakpoint lines. | 3341 | ;; There seems to be a breakpoint listing here, parse breakpoint lines. |
| 3342 | (while (re-search-forward bp-re nil t) | 3342 | (while (re-search-forward bp-re nil t) |
| 3343 | (setq index (string-to-int (match-string (nth 0 indmap))) | 3343 | (setq index (string-to-number (match-string (nth 0 indmap))) |
| 3344 | module (match-string (nth 1 indmap)) | 3344 | module (match-string (nth 1 indmap)) |
| 3345 | line (string-to-int (match-string (nth 2 indmap))) | 3345 | line (string-to-number (match-string (nth 2 indmap))) |
| 3346 | file (idlwave-shell-file-name (match-string (nth 3 indmap)))) | 3346 | file (idlwave-shell-file-name (match-string (nth 3 indmap)))) |
| 3347 | (if (eq bp-re bp-re55) | 3347 | (if (eq bp-re bp-re55) |
| 3348 | (setq count (if (match-string 10) 1 | 3348 | (setq count (if (match-string 10) 1 |
| 3349 | (if (match-string 8) | 3349 | (if (match-string 8) |
| 3350 | (string-to-int (match-string 8)))) | 3350 | (string-to-number (match-string 8)))) |
| 3351 | condition (match-string 13) | 3351 | condition (match-string 13) |
| 3352 | disabled (not (null (match-string 15))))) | 3352 | disabled (not (null (match-string 15))))) |
| 3353 | 3353 | ||
| 3354 | ;; Add the breakpoint info to the list | 3354 | ;; Add the breakpoint info to the list |
| 3355 | (nconc idlwave-shell-bp-alist | 3355 | (nconc idlwave-shell-bp-alist |
| 3356 | (list (cons (list file line) | 3356 | (list (cons (list file line) |
| @@ -3360,7 +3360,7 @@ breakpoint overlays." | |||
| 3360 | count nil condition disabled)))))) | 3360 | count nil condition disabled)))))) |
| 3361 | (setq idlwave-shell-bp-alist (cdr idlwave-shell-bp-alist)) | 3361 | (setq idlwave-shell-bp-alist (cdr idlwave-shell-bp-alist)) |
| 3362 | ;; Update breakpoint data | 3362 | ;; Update breakpoint data |
| 3363 | (if (eq bp-re bp-re54) | 3363 | (if (eq bp-re bp-re54) |
| 3364 | (mapcar 'idlwave-shell-update-bp old-bp-alist) | 3364 | (mapcar 'idlwave-shell-update-bp old-bp-alist) |
| 3365 | (mapcar 'idlwave-shell-update-bp-command-only old-bp-alist)))) | 3365 | (mapcar 'idlwave-shell-update-bp-command-only old-bp-alist)))) |
| 3366 | ;; Update the breakpoint overlays | 3366 | ;; Update the breakpoint overlays |
| @@ -3375,8 +3375,8 @@ breakpoint overlays." | |||
| 3375 | "Update BP data in breakpoint list. | 3375 | "Update BP data in breakpoint list. |
| 3376 | If BP frame is in `idlwave-shell-bp-alist' updates the breakpoint data." | 3376 | If BP frame is in `idlwave-shell-bp-alist' updates the breakpoint data." |
| 3377 | (let ((match (assoc (car bp) idlwave-shell-bp-alist))) | 3377 | (let ((match (assoc (car bp) idlwave-shell-bp-alist))) |
| 3378 | (if match | 3378 | (if match |
| 3379 | (if command-only | 3379 | (if command-only |
| 3380 | (setf (nth 1 (cdr (cdr match))) (nth 1 (cdr (cdr match)))) | 3380 | (setf (nth 1 (cdr (cdr match))) (nth 1 (cdr (cdr match)))) |
| 3381 | (setcdr (cdr match) (cdr (cdr bp))))))) | 3381 | (setcdr (cdr match) (cdr (cdr bp))))))) |
| 3382 | 3382 | ||
| @@ -3401,7 +3401,7 @@ Otherwise return the filename in bp." | |||
| 3401 | (let* | 3401 | (let* |
| 3402 | ((bp-file (idlwave-shell-bp-get bp 'file)) | 3402 | ((bp-file (idlwave-shell-bp-get bp 'file)) |
| 3403 | (bp-module (idlwave-shell-bp-get bp 'module)) | 3403 | (bp-module (idlwave-shell-bp-get bp 'module)) |
| 3404 | (internal-file-list | 3404 | (internal-file-list |
| 3405 | (cdr (assoc bp-module idlwave-shell-sources-alist)))) | 3405 | (cdr (assoc bp-module idlwave-shell-sources-alist)))) |
| 3406 | (if (and internal-file-list | 3406 | (if (and internal-file-list |
| 3407 | (equal bp-file (nth 0 internal-file-list))) | 3407 | (equal bp-file (nth 0 internal-file-list))) |
| @@ -3409,14 +3409,14 @@ Otherwise return the filename in bp." | |||
| 3409 | bp-file))) | 3409 | bp-file))) |
| 3410 | 3410 | ||
| 3411 | (defun idlwave-shell-set-bp (bp &optional no-show) | 3411 | (defun idlwave-shell-set-bp (bp &optional no-show) |
| 3412 | "Try to set a breakpoint BP. | 3412 | "Try to set a breakpoint BP. |
| 3413 | The breakpoint will be placed at the beginning of the statement on the | 3413 | The breakpoint will be placed at the beginning of the statement on the |
| 3414 | line specified by BP or at the next IDL statement if that line is not | 3414 | line specified by BP or at the next IDL statement if that line is not |
| 3415 | a statement. Determines IDL's internal representation for the | 3415 | a statement. Determines IDL's internal representation for the |
| 3416 | breakpoint, which may have occurred at a different line than | 3416 | breakpoint, which may have occurred at a different line than |
| 3417 | specified. If NO-SHOW is non-nil, don't do any updating." | 3417 | specified. If NO-SHOW is non-nil, don't do any updating." |
| 3418 | ;; Get and save the old breakpoints | 3418 | ;; Get and save the old breakpoints |
| 3419 | (idlwave-shell-send-command | 3419 | (idlwave-shell-send-command |
| 3420 | idlwave-shell-bp-query | 3420 | idlwave-shell-bp-query |
| 3421 | `(progn | 3421 | `(progn |
| 3422 | (idlwave-shell-filter-bp (quote ,no-show)) | 3422 | (idlwave-shell-filter-bp (quote ,no-show)) |
| @@ -3434,7 +3434,7 @@ specified. If NO-SHOW is non-nil, don't do any updating." | |||
| 3434 | (defun idlwave-shell-set-bp2 (bp &optional no-show) | 3434 | (defun idlwave-shell-set-bp2 (bp &optional no-show) |
| 3435 | "Use results of breakpoint and sources query to set bp. | 3435 | "Use results of breakpoint and sources query to set bp. |
| 3436 | Use the count argument with IDLs breakpoint command. | 3436 | Use the count argument with IDLs breakpoint command. |
| 3437 | We treat a count of 1 as a temporary breakpoint. | 3437 | We treat a count of 1 as a temporary breakpoint. |
| 3438 | Counts greater than 1 use the IDL AFTER=count keyword to break | 3438 | Counts greater than 1 use the IDL AFTER=count keyword to break |
| 3439 | only after reaching the statement count times." | 3439 | only after reaching the statement count times." |
| 3440 | (let* | 3440 | (let* |
| @@ -3446,11 +3446,11 @@ only after reaching the statement count times." | |||
| 3446 | ((> arg 1) | 3446 | ((> arg 1) |
| 3447 | (format ",after=%d" arg)))) | 3447 | (format ",after=%d" arg)))) |
| 3448 | (condition (idlwave-shell-bp-get bp 'condition)) | 3448 | (condition (idlwave-shell-bp-get bp 'condition)) |
| 3449 | (key (concat key | 3449 | (key (concat key |
| 3450 | (if condition (concat ",CONDITION=\"" condition "\"")))) | 3450 | (if condition (concat ",CONDITION=\"" condition "\"")))) |
| 3451 | (line (idlwave-shell-bp-get bp 'line))) | 3451 | (line (idlwave-shell-bp-get bp 'line))) |
| 3452 | (idlwave-shell-send-command | 3452 | (idlwave-shell-send-command |
| 3453 | (concat "breakpoint,'" | 3453 | (concat "breakpoint,'" |
| 3454 | (idlwave-shell-sources-bp bp) "'," | 3454 | (idlwave-shell-sources-bp bp) "'," |
| 3455 | (if (integerp line) (setq line (int-to-string line))) | 3455 | (if (integerp line) (setq line (int-to-string line))) |
| 3456 | key) | 3456 | key) |
| @@ -3534,14 +3534,14 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3534 | ov ov-list bp buf old-buffers win) | 3534 | ov ov-list bp buf old-buffers win) |
| 3535 | 3535 | ||
| 3536 | ;; Delete the old overlays from their buffers | 3536 | ;; Delete the old overlays from their buffers |
| 3537 | (if ov-alist | 3537 | (if ov-alist |
| 3538 | (while (setq ov-list (pop ov-alist)) | 3538 | (while (setq ov-list (pop ov-alist)) |
| 3539 | (while (setq ov (pop (cdr ov-list))) | 3539 | (while (setq ov (pop (cdr ov-list))) |
| 3540 | (add-to-list 'old-buffers (overlay-buffer ov)) | 3540 | (add-to-list 'old-buffers (overlay-buffer ov)) |
| 3541 | (delete-overlay ov)))) | 3541 | (delete-overlay ov)))) |
| 3542 | 3542 | ||
| 3543 | (setq ov-alist idlwave-shell-bp-overlays | 3543 | (setq ov-alist idlwave-shell-bp-overlays |
| 3544 | idlwave-shell-bp-overlays | 3544 | idlwave-shell-bp-overlays |
| 3545 | (if idlwave-shell-bp-glyph | 3545 | (if idlwave-shell-bp-glyph |
| 3546 | (mapcar 'list (mapcar 'car idlwave-shell-bp-glyph)) | 3546 | (mapcar 'list (mapcar 'car idlwave-shell-bp-glyph)) |
| 3547 | (list (list 'bp)))) | 3547 | (list (list 'bp)))) |
| @@ -3565,7 +3565,7 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3565 | (t 'bp-n))) | 3565 | (t 'bp-n))) |
| 3566 | (t 'bp)) | 3566 | (t 'bp)) |
| 3567 | 'bp)) | 3567 | 'bp)) |
| 3568 | (help-list | 3568 | (help-list |
| 3569 | (delq nil | 3569 | (delq nil |
| 3570 | (list | 3570 | (list |
| 3571 | (if count | 3571 | (if count |
| @@ -3573,7 +3573,7 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3573 | (if condition | 3573 | (if condition |
| 3574 | (concat "condition: " condition)) | 3574 | (concat "condition: " condition)) |
| 3575 | (if disabled "disabled")))) | 3575 | (if disabled "disabled")))) |
| 3576 | (help-text (if help-list | 3576 | (help-text (if help-list |
| 3577 | (mapconcat 'identity help-list ","))) | 3577 | (mapconcat 'identity help-list ","))) |
| 3578 | (full-type (if disabled | 3578 | (full-type (if disabled |
| 3579 | (intern (concat (symbol-name type) | 3579 | (intern (concat (symbol-name type) |
| @@ -3582,7 +3582,7 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3582 | (ov-existing (assq full-type ov-alist)) | 3582 | (ov-existing (assq full-type ov-alist)) |
| 3583 | (ov (or (and (cdr ov-existing) | 3583 | (ov (or (and (cdr ov-existing) |
| 3584 | (pop (cdr ov-existing))) | 3584 | (pop (cdr ov-existing))) |
| 3585 | (idlwave-shell-make-new-bp-overlay | 3585 | (idlwave-shell-make-new-bp-overlay |
| 3586 | type disabled help-text))) | 3586 | type disabled help-text))) |
| 3587 | match) | 3587 | match) |
| 3588 | (move-overlay ov beg end) | 3588 | (move-overlay ov beg end) |
| @@ -3592,7 +3592,7 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3592 | (list (list full-type ov))))) | 3592 | (list (list full-type ov))))) |
| 3593 | ;; Take care of margins if using a glyph | 3593 | ;; Take care of margins if using a glyph |
| 3594 | (when use-glyph | 3594 | (when use-glyph |
| 3595 | (if old-buffers | 3595 | (if old-buffers |
| 3596 | (setq old-buffers (delq (current-buffer) old-buffers))) | 3596 | (setq old-buffers (delq (current-buffer) old-buffers))) |
| 3597 | (if (fboundp 'set-specifier) ;; XEmacs | 3597 | (if (fboundp 'set-specifier) ;; XEmacs |
| 3598 | (set-specifier left-margin-width (cons (current-buffer) 2)) | 3598 | (set-specifier left-margin-width (cons (current-buffer) 2)) |
| @@ -3610,7 +3610,7 @@ Existing overlays are recycled, in order to minimize consumption." | |||
| 3610 | 3610 | ||
| 3611 | 3611 | ||
| 3612 | (defun idlwave-shell-make-new-bp-overlay (&optional type disabled help) | 3612 | (defun idlwave-shell-make-new-bp-overlay (&optional type disabled help) |
| 3613 | "Make a new overlay for highlighting breakpoints. | 3613 | "Make a new overlay for highlighting breakpoints. |
| 3614 | 3614 | ||
| 3615 | This stuff is strongly dependant upon the version of Emacs. If TYPE | 3615 | This stuff is strongly dependant upon the version of Emacs. If TYPE |
| 3616 | is passed, make an overlay of that type ('bp or 'bp-cond, currently | 3616 | is passed, make an overlay of that type ('bp or 'bp-cond, currently |
| @@ -3620,17 +3620,17 @@ text popup." | |||
| 3620 | (use-glyph (and (memq idlwave-shell-mark-breakpoints '(t glyph)) | 3620 | (use-glyph (and (memq idlwave-shell-mark-breakpoints '(t glyph)) |
| 3621 | idlwave-shell-bp-glyph)) | 3621 | idlwave-shell-bp-glyph)) |
| 3622 | (type (or type 'bp)) | 3622 | (type (or type 'bp)) |
| 3623 | (face (if disabled | 3623 | (face (if disabled |
| 3624 | idlwave-shell-disabled-breakpoint-face | 3624 | idlwave-shell-disabled-breakpoint-face |
| 3625 | idlwave-shell-breakpoint-face))) | 3625 | idlwave-shell-breakpoint-face))) |
| 3626 | (if (featurep 'xemacs) | 3626 | (if (featurep 'xemacs) |
| 3627 | ;; This is XEmacs | 3627 | ;; This is XEmacs |
| 3628 | (progn | 3628 | (progn |
| 3629 | (cond | 3629 | (cond |
| 3630 | ;; tty's cannot display glyphs | 3630 | ;; tty's cannot display glyphs |
| 3631 | ((eq (console-type) 'tty) | 3631 | ((eq (console-type) 'tty) |
| 3632 | (set-extent-property ov 'face face)) | 3632 | (set-extent-property ov 'face face)) |
| 3633 | 3633 | ||
| 3634 | ;; use the glyph | 3634 | ;; use the glyph |
| 3635 | (use-glyph | 3635 | (use-glyph |
| 3636 | (let ((glyph (cdr (assq type idlwave-shell-bp-glyph)))) | 3636 | (let ((glyph (cdr (assq type idlwave-shell-bp-glyph)))) |
| @@ -3651,13 +3651,13 @@ text popup." | |||
| 3651 | (if use-glyph | 3651 | (if use-glyph |
| 3652 | (let ((image-props (cdr (assq type idlwave-shell-bp-glyph))) | 3652 | (let ((image-props (cdr (assq type idlwave-shell-bp-glyph))) |
| 3653 | string) | 3653 | string) |
| 3654 | 3654 | ||
| 3655 | (if disabled (setq image-props | 3655 | (if disabled (setq image-props |
| 3656 | (append image-props | 3656 | (append image-props |
| 3657 | (list :conversion 'disabled)))) | 3657 | (list :conversion 'disabled)))) |
| 3658 | (setq string | 3658 | (setq string |
| 3659 | (propertize "@" | 3659 | (propertize "@" |
| 3660 | 'display | 3660 | 'display |
| 3661 | (list (list 'margin 'left-margin) | 3661 | (list (list 'margin 'left-margin) |
| 3662 | image-props) | 3662 | image-props) |
| 3663 | 'mouse-face 'highlight | 3663 | 'mouse-face 'highlight |
| @@ -3685,14 +3685,14 @@ text popup." | |||
| 3685 | Also with prefix arg, ask for the command. You can also use the command | 3685 | Also with prefix arg, ask for the command. You can also use the command |
| 3686 | `idlwave-shell-edit-default-command-line' to edit the line." | 3686 | `idlwave-shell-edit-default-command-line' to edit the line." |
| 3687 | (interactive "P") | 3687 | (interactive "P") |
| 3688 | (cond | 3688 | (cond |
| 3689 | ((equal arg '(16)) | 3689 | ((equal arg '(16)) |
| 3690 | (setq idlwave-shell-command-line-to-execute nil)) | 3690 | (setq idlwave-shell-command-line-to-execute nil)) |
| 3691 | ((equal arg '(4)) | 3691 | ((equal arg '(4)) |
| 3692 | (setq idlwave-shell-command-line-to-execute | 3692 | (setq idlwave-shell-command-line-to-execute |
| 3693 | (read-string "IDL> " idlwave-shell-command-line-to-execute)))) | 3693 | (read-string "IDL> " idlwave-shell-command-line-to-execute)))) |
| 3694 | (idlwave-shell-reset 'hidden) | 3694 | (idlwave-shell-reset 'hidden) |
| 3695 | (idlwave-shell-send-command | 3695 | (idlwave-shell-send-command |
| 3696 | (or idlwave-shell-command-line-to-execute | 3696 | (or idlwave-shell-command-line-to-execute |
| 3697 | (with-current-buffer (idlwave-shell-buffer) | 3697 | (with-current-buffer (idlwave-shell-buffer) |
| 3698 | (ring-ref comint-input-ring 0))) | 3698 | (ring-ref comint-input-ring 0))) |
| @@ -3702,7 +3702,7 @@ Also with prefix arg, ask for the command. You can also use the command | |||
| 3702 | "Save file and run it in IDL. | 3702 | "Save file and run it in IDL. |
| 3703 | Runs `save-buffer' and sends a '.RUN' command for the associated file to IDL. | 3703 | Runs `save-buffer' and sends a '.RUN' command for the associated file to IDL. |
| 3704 | When called from the shell buffer, re-run the file which was last handled by | 3704 | When called from the shell buffer, re-run the file which was last handled by |
| 3705 | one of the save-and-.. commands." | 3705 | one of the save-and-.. commands." |
| 3706 | (interactive) | 3706 | (interactive) |
| 3707 | (idlwave-shell-save-and-action 'run)) | 3707 | (idlwave-shell-save-and-action 'run)) |
| 3708 | 3708 | ||
| @@ -3718,7 +3718,7 @@ one of the save-and-.. commands." | |||
| 3718 | "Save file and batch it in IDL. | 3718 | "Save file and batch it in IDL. |
| 3719 | Runs `save-buffer' and sends a '@file' command for the associated file to IDL. | 3719 | Runs `save-buffer' and sends a '@file' command for the associated file to IDL. |
| 3720 | When called from the shell buffer, re-batch the file which was last handled by | 3720 | When called from the shell buffer, re-batch the file which was last handled by |
| 3721 | one of the save-and-.. commands." | 3721 | one of the save-and-.. commands." |
| 3722 | (interactive) | 3722 | (interactive) |
| 3723 | (idlwave-shell-save-and-action 'batch)) | 3723 | (idlwave-shell-save-and-action 'batch)) |
| 3724 | 3724 | ||
| @@ -3758,7 +3758,7 @@ handled by this command." | |||
| 3758 | 'idlwave-shell-maybe-update-routine-info | 3758 | 'idlwave-shell-maybe-update-routine-info |
| 3759 | (if (idlwave-shell-hide-p 'run) 'mostly) nil t) | 3759 | (if (idlwave-shell-hide-p 'run) 'mostly) nil t) |
| 3760 | (idlwave-shell-bp-query)) | 3760 | (idlwave-shell-bp-query)) |
| 3761 | (let ((msg (format "No such file %s" | 3761 | (let ((msg (format "No such file %s" |
| 3762 | idlwave-shell-last-save-and-action-file))) | 3762 | idlwave-shell-last-save-and-action-file))) |
| 3763 | (setq idlwave-shell-last-save-and-action-file nil) | 3763 | (setq idlwave-shell-last-save-and-action-file nil) |
| 3764 | (error msg)))) | 3764 | (error msg)))) |
| @@ -3791,7 +3791,7 @@ Queries IDL using the string in `idlwave-shell-sources-query'." | |||
| 3791 | 3791 | ||
| 3792 | (defun idlwave-shell-sources-filter () | 3792 | (defun idlwave-shell-sources-filter () |
| 3793 | "Get source files from `idlwave-shell-sources-query' output. | 3793 | "Get source files from `idlwave-shell-sources-query' output. |
| 3794 | Create `idlwave-shell-sources-alist' consisting of | 3794 | Create `idlwave-shell-sources-alist' consisting of |
| 3795 | list elements of the form: | 3795 | list elements of the form: |
| 3796 | (module name . (source-file-truename idlwave-internal-filename))." | 3796 | (module name . (source-file-truename idlwave-internal-filename))." |
| 3797 | (save-excursion | 3797 | (save-excursion |
| @@ -3876,9 +3876,9 @@ list elements of the form: | |||
| 3876 | (list | 3876 | (list |
| 3877 | (save-match-data | 3877 | (save-match-data |
| 3878 | (idlwave-shell-file-name | 3878 | (idlwave-shell-file-name |
| 3879 | (buffer-substring (match-beginning 1 ) | 3879 | (buffer-substring (match-beginning 1 ) |
| 3880 | (match-end 1)))) | 3880 | (match-end 1)))) |
| 3881 | (string-to-int | 3881 | (string-to-number |
| 3882 | (buffer-substring (match-beginning 2) | 3882 | (buffer-substring (match-beginning 2) |
| 3883 | (match-end 2))))) | 3883 | (match-end 2))))) |
| 3884 | ;; Try to find the column of the error | 3884 | ;; Try to find the column of the error |
| @@ -3943,13 +3943,13 @@ Otherwise, just expand the file name." | |||
| 3943 | 3943 | ||
| 3944 | ;; The mouse bindings for PRINT and HELP | 3944 | ;; The mouse bindings for PRINT and HELP |
| 3945 | (idlwave-shell-define-key-both | 3945 | (idlwave-shell-define-key-both |
| 3946 | (if (featurep 'xemacs) | 3946 | (if (featurep 'xemacs) |
| 3947 | [(shift button2)] | 3947 | [(shift button2)] |
| 3948 | [(shift down-mouse-2)]) | 3948 | [(shift down-mouse-2)]) |
| 3949 | 'idlwave-shell-mouse-print) | 3949 | 'idlwave-shell-mouse-print) |
| 3950 | (idlwave-shell-define-key-both | 3950 | (idlwave-shell-define-key-both |
| 3951 | (if (featurep 'xemacs) | 3951 | (if (featurep 'xemacs) |
| 3952 | [(control meta button2)] | 3952 | [(control meta button2)] |
| 3953 | [(control meta down-mouse-2)]) | 3953 | [(control meta down-mouse-2)]) |
| 3954 | 'idlwave-shell-mouse-help) | 3954 | 'idlwave-shell-mouse-help) |
| 3955 | (idlwave-shell-define-key-both | 3955 | (idlwave-shell-define-key-both |
| @@ -3958,14 +3958,14 @@ Otherwise, just expand the file name." | |||
| 3958 | [(control shift down-mouse-2)]) | 3958 | [(control shift down-mouse-2)]) |
| 3959 | 'idlwave-shell-examine-select) | 3959 | 'idlwave-shell-examine-select) |
| 3960 | ;; Add this one from the idlwave-mode-map | 3960 | ;; Add this one from the idlwave-mode-map |
| 3961 | (define-key idlwave-shell-mode-map | 3961 | (define-key idlwave-shell-mode-map |
| 3962 | (if (featurep 'xemacs) | 3962 | (if (featurep 'xemacs) |
| 3963 | [(shift button3)] | 3963 | [(shift button3)] |
| 3964 | [(shift mouse-3)]) | 3964 | [(shift mouse-3)]) |
| 3965 | 'idlwave-mouse-context-help) | 3965 | 'idlwave-mouse-context-help) |
| 3966 | 3966 | ||
| 3967 | ;; For Emacs, we need to turn off the button release events. | 3967 | ;; For Emacs, we need to turn off the button release events. |
| 3968 | (defun idlwave-shell-mouse-nop (event) | 3968 | (defun idlwave-shell-mouse-nop (event) |
| 3969 | (interactive "e")) | 3969 | (interactive "e")) |
| 3970 | (unless (featurep 'xemacs) | 3970 | (unless (featurep 'xemacs) |
| 3971 | (idlwave-shell-define-key-both | 3971 | (idlwave-shell-define-key-both |
| @@ -3975,7 +3975,7 @@ Otherwise, just expand the file name." | |||
| 3975 | (idlwave-shell-define-key-both | 3975 | (idlwave-shell-define-key-both |
| 3976 | [(control meta mouse-2)] 'idlwave-shell-mouse-nop)) | 3976 | [(control meta mouse-2)] 'idlwave-shell-mouse-nop)) |
| 3977 | 3977 | ||
| 3978 | 3978 | ||
| 3979 | ;; The following set of bindings is used to bind the debugging keys. | 3979 | ;; The following set of bindings is used to bind the debugging keys. |
| 3980 | ;; If `idlwave-shell-activate-prefix-keybindings' is non-nil, the | 3980 | ;; If `idlwave-shell-activate-prefix-keybindings' is non-nil, the |
| 3981 | ;; first key in the list gets bound the C-c C-d prefix map. If | 3981 | ;; first key in the list gets bound the C-c C-d prefix map. If |
| @@ -3984,10 +3984,10 @@ Otherwise, just expand the file name." | |||
| 3984 | ;; `idlwave-mode-map' and `idlwave-shell-mode-map'. The next list | 3984 | ;; `idlwave-mode-map' and `idlwave-shell-mode-map'. The next list |
| 3985 | ;; item, if non-nil, means to bind this as a single key in the | 3985 | ;; item, if non-nil, means to bind this as a single key in the |
| 3986 | ;; electric-debug-mode-map. | 3986 | ;; electric-debug-mode-map. |
| 3987 | ;; | 3987 | ;; |
| 3988 | ;; [C-c C-d]-binding debug-modifier-key command bind-electric-debug buf-only | 3988 | ;; [C-c C-d]-binding debug-modifier-key command bind-electric-debug buf-only |
| 3989 | ;; Used keys: abcdef hijklmnopqrstuvwxyz | 3989 | ;; Used keys: abcdef hijklmnopqrstuvwxyz |
| 3990 | ;; Unused keys: g | 3990 | ;; Unused keys: g |
| 3991 | (let* ((specs | 3991 | (let* ((specs |
| 3992 | '(([(control ?b)] ?b idlwave-shell-break-here t t) | 3992 | '(([(control ?b)] ?b idlwave-shell-break-here t t) |
| 3993 | ([(control ?i)] ?i idlwave-shell-break-in t t) | 3993 | ([(control ?i)] ?i idlwave-shell-break-in t t) |
| @@ -4037,10 +4037,10 @@ Otherwise, just expand the file name." | |||
| 4037 | electric (nth 3 s) | 4037 | electric (nth 3 s) |
| 4038 | only-buffer (nth 4 s) | 4038 | only-buffer (nth 4 s) |
| 4039 | cannotshift (and shift (char-valid-p c2) (eq c2 (upcase c2)))) | 4039 | cannotshift (and shift (char-valid-p c2) (eq c2 (upcase c2)))) |
| 4040 | 4040 | ||
| 4041 | ;; The regular prefix keymap. | 4041 | ;; The regular prefix keymap. |
| 4042 | (when (and idlwave-shell-activate-prefix-keybindings k1) | 4042 | (when (and idlwave-shell-activate-prefix-keybindings k1) |
| 4043 | (unless only-buffer | 4043 | (unless only-buffer |
| 4044 | (define-key idlwave-shell-mode-prefix-map k1 cmd)) | 4044 | (define-key idlwave-shell-mode-prefix-map k1 cmd)) |
| 4045 | (define-key idlwave-mode-prefix-map k1 cmd)) | 4045 | (define-key idlwave-mode-prefix-map k1 cmd)) |
| 4046 | ;; The debug modifier map | 4046 | ;; The debug modifier map |
| @@ -4054,24 +4054,24 @@ Otherwise, just expand the file name." | |||
| 4054 | (unless only-buffer (define-key idlwave-shell-mode-map k2 cmd)))) | 4054 | (unless only-buffer (define-key idlwave-shell-mode-map k2 cmd)))) |
| 4055 | ;; The electric debug single-keystroke map | 4055 | ;; The electric debug single-keystroke map |
| 4056 | (if (and electric (char-or-string-p c2)) | 4056 | (if (and electric (char-or-string-p c2)) |
| 4057 | (define-key idlwave-shell-electric-debug-mode-map (char-to-string c2) | 4057 | (define-key idlwave-shell-electric-debug-mode-map (char-to-string c2) |
| 4058 | cmd)))) | 4058 | cmd)))) |
| 4059 | 4059 | ||
| 4060 | ;; A few extras in the electric debug map | 4060 | ;; A few extras in the electric debug map |
| 4061 | (define-key idlwave-shell-electric-debug-mode-map " " 'idlwave-shell-step) | 4061 | (define-key idlwave-shell-electric-debug-mode-map " " 'idlwave-shell-step) |
| 4062 | (define-key idlwave-shell-electric-debug-mode-map "+" 'idlwave-shell-stack-up) | 4062 | (define-key idlwave-shell-electric-debug-mode-map "+" 'idlwave-shell-stack-up) |
| 4063 | (define-key idlwave-shell-electric-debug-mode-map "=" 'idlwave-shell-stack-up) | 4063 | (define-key idlwave-shell-electric-debug-mode-map "=" 'idlwave-shell-stack-up) |
| 4064 | (define-key idlwave-shell-electric-debug-mode-map "-" | 4064 | (define-key idlwave-shell-electric-debug-mode-map "-" |
| 4065 | 'idlwave-shell-stack-down) | 4065 | 'idlwave-shell-stack-down) |
| 4066 | (define-key idlwave-shell-electric-debug-mode-map "_" | 4066 | (define-key idlwave-shell-electric-debug-mode-map "_" |
| 4067 | 'idlwave-shell-stack-down) | 4067 | 'idlwave-shell-stack-down) |
| 4068 | (define-key idlwave-shell-electric-debug-mode-map "q" 'idlwave-shell-retall) | 4068 | (define-key idlwave-shell-electric-debug-mode-map "q" 'idlwave-shell-retall) |
| 4069 | (define-key idlwave-shell-electric-debug-mode-map "t" | 4069 | (define-key idlwave-shell-electric-debug-mode-map "t" |
| 4070 | '(lambda () (interactive) (idlwave-shell-send-command "help,/TRACE"))) | 4070 | '(lambda () (interactive) (idlwave-shell-send-command "help,/TRACE"))) |
| 4071 | (define-key idlwave-shell-electric-debug-mode-map [(control ??)] | 4071 | (define-key idlwave-shell-electric-debug-mode-map [(control ??)] |
| 4072 | 'idlwave-shell-electric-debug-help) | 4072 | 'idlwave-shell-electric-debug-help) |
| 4073 | (define-key idlwave-shell-electric-debug-mode-map "x" | 4073 | (define-key idlwave-shell-electric-debug-mode-map "x" |
| 4074 | '(lambda (arg) (interactive "P") | 4074 | '(lambda (arg) (interactive "P") |
| 4075 | (idlwave-shell-print arg nil nil t))) | 4075 | (idlwave-shell-print arg nil nil t))) |
| 4076 | 4076 | ||
| 4077 | 4077 | ||
| @@ -4092,12 +4092,12 @@ Otherwise, just expand the file name." | |||
| 4092 | (setq idlwave-shell-suppress-electric-debug nil)) | 4092 | (setq idlwave-shell-suppress-electric-debug nil)) |
| 4093 | (idlwave-shell-electric-debug-mode)) | 4093 | (idlwave-shell-electric-debug-mode)) |
| 4094 | 4094 | ||
| 4095 | (defvar idlwave-shell-electric-debug-read-only) | 4095 | (defvar idlwave-shell-electric-debug-read-only) |
| 4096 | (defvar idlwave-shell-electric-debug-buffers nil) | 4096 | (defvar idlwave-shell-electric-debug-buffers nil) |
| 4097 | 4097 | ||
| 4098 | (easy-mmode-define-minor-mode idlwave-shell-electric-debug-mode | 4098 | (easy-mmode-define-minor-mode idlwave-shell-electric-debug-mode |
| 4099 | "Toggle Electric Debug mode. | 4099 | "Toggle Electric Debug mode. |
| 4100 | With no argument, this command toggles the mode. | 4100 | With no argument, this command toggles the mode. |
| 4101 | Non-null prefix argument turns on the mode. | 4101 | Non-null prefix argument turns on the mode. |
| 4102 | Null prefix argument turns off the mode. | 4102 | Null prefix argument turns off the mode. |
| 4103 | 4103 | ||
| @@ -4107,7 +4107,7 @@ nil | |||
| 4107 | " *Debugging*" | 4107 | " *Debugging*" |
| 4108 | idlwave-shell-electric-debug-mode-map) | 4108 | idlwave-shell-electric-debug-mode-map) |
| 4109 | 4109 | ||
| 4110 | (add-hook | 4110 | (add-hook |
| 4111 | 'idlwave-shell-electric-debug-mode-on-hook | 4111 | 'idlwave-shell-electric-debug-mode-on-hook |
| 4112 | (lambda () | 4112 | (lambda () |
| 4113 | (set (make-local-variable 'idlwave-shell-electric-debug-read-only) | 4113 | (set (make-local-variable 'idlwave-shell-electric-debug-read-only) |
| @@ -4115,13 +4115,13 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4115 | (setq buffer-read-only t) | 4115 | (setq buffer-read-only t) |
| 4116 | (add-to-list 'idlwave-shell-electric-debug-buffers (current-buffer)) | 4116 | (add-to-list 'idlwave-shell-electric-debug-buffers (current-buffer)) |
| 4117 | (if idlwave-shell-stop-line-overlay | 4117 | (if idlwave-shell-stop-line-overlay |
| 4118 | (overlay-put idlwave-shell-stop-line-overlay 'face | 4118 | (overlay-put idlwave-shell-stop-line-overlay 'face |
| 4119 | idlwave-shell-electric-stop-line-face)) | 4119 | idlwave-shell-electric-stop-line-face)) |
| 4120 | (if (facep 'fringe) | 4120 | (if (facep 'fringe) |
| 4121 | (set-face-foreground 'fringe idlwave-shell-electric-stop-color | 4121 | (set-face-foreground 'fringe idlwave-shell-electric-stop-color |
| 4122 | (selected-frame))))) | 4122 | (selected-frame))))) |
| 4123 | 4123 | ||
| 4124 | (add-hook | 4124 | (add-hook |
| 4125 | 'idlwave-shell-electric-debug-mode-off-hook | 4125 | 'idlwave-shell-electric-debug-mode-off-hook |
| 4126 | (lambda () | 4126 | (lambda () |
| 4127 | ;; Return to previous read-only state | 4127 | ;; Return to previous read-only state |
| @@ -4130,7 +4130,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4130 | (setq idlwave-shell-electric-debug-buffers | 4130 | (setq idlwave-shell-electric-debug-buffers |
| 4131 | (delq (current-buffer) idlwave-shell-electric-debug-buffers)) | 4131 | (delq (current-buffer) idlwave-shell-electric-debug-buffers)) |
| 4132 | (if idlwave-shell-stop-line-overlay | 4132 | (if idlwave-shell-stop-line-overlay |
| 4133 | (overlay-put idlwave-shell-stop-line-overlay 'face | 4133 | (overlay-put idlwave-shell-stop-line-overlay 'face |
| 4134 | idlwave-shell-stop-line-face) | 4134 | idlwave-shell-stop-line-face) |
| 4135 | (if (facep 'fringe) | 4135 | (if (facep 'fringe) |
| 4136 | (set-face-foreground 'fringe (face-foreground 'default)))))) | 4136 | (set-face-foreground 'fringe (face-foreground 'default)))))) |
| @@ -4161,7 +4161,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4161 | ;; Show the help text | 4161 | ;; Show the help text |
| 4162 | (defun idlwave-shell-electric-debug-help () | 4162 | (defun idlwave-shell-electric-debug-help () |
| 4163 | (interactive) | 4163 | (interactive) |
| 4164 | (with-output-to-temp-buffer "*IDLWAVE Electric Debug Help*" | 4164 | (with-output-to-temp-buffer "*IDLWAVE Electric Debug Help*" |
| 4165 | (princ idlwave-shell-electric-debug-help)) | 4165 | (princ idlwave-shell-electric-debug-help)) |
| 4166 | (let* ((current-window (selected-window)) | 4166 | (let* ((current-window (selected-window)) |
| 4167 | (window (get-buffer-window "*IDLWAVE Electric Debug Help*")) | 4167 | (window (get-buffer-window "*IDLWAVE Electric Debug Help*")) |
| @@ -4176,7 +4176,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4176 | `("Debug" | 4176 | `("Debug" |
| 4177 | ["Electric Debug Mode" | 4177 | ["Electric Debug Mode" |
| 4178 | idlwave-shell-electric-debug-mode | 4178 | idlwave-shell-electric-debug-mode |
| 4179 | :style toggle :selected idlwave-shell-electric-debug-mode | 4179 | :style toggle :selected idlwave-shell-electric-debug-mode |
| 4180 | :included (eq major-mode 'idlwave-mode) :keys "C-c C-d C-v"] | 4180 | :included (eq major-mode 'idlwave-mode) :keys "C-c C-d C-v"] |
| 4181 | "--" | 4181 | "--" |
| 4182 | ("Compile & Run" | 4182 | ("Compile & Run" |
| @@ -4192,35 +4192,35 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4192 | "--" | 4192 | "--" |
| 4193 | ["Goto Next Error" idlwave-shell-goto-next-error t] | 4193 | ["Goto Next Error" idlwave-shell-goto-next-error t] |
| 4194 | "--" | 4194 | "--" |
| 4195 | ["Compile and Run Region" idlwave-shell-run-region | 4195 | ["Compile and Run Region" idlwave-shell-run-region |
| 4196 | (eq major-mode 'idlwave-mode)] | 4196 | (eq major-mode 'idlwave-mode)] |
| 4197 | ["Evaluate Region" idlwave-shell-evaluate-region | 4197 | ["Evaluate Region" idlwave-shell-evaluate-region |
| 4198 | (eq major-mode 'idlwave-mode)] | 4198 | (eq major-mode 'idlwave-mode)] |
| 4199 | "--" | 4199 | "--" |
| 4200 | ["Execute Default Cmd" idlwave-shell-execute-default-command-line t] | 4200 | ["Execute Default Cmd" idlwave-shell-execute-default-command-line t] |
| 4201 | ["Edit Default Cmd" idlwave-shell-edit-default-command-line t]) | 4201 | ["Edit Default Cmd" idlwave-shell-edit-default-command-line t]) |
| 4202 | ("Breakpoints" | 4202 | ("Breakpoints" |
| 4203 | ["Set Breakpoint" idlwave-shell-break-here | 4203 | ["Set Breakpoint" idlwave-shell-break-here |
| 4204 | :keys "C-c C-d C-c" :active (eq major-mode 'idlwave-mode)] | 4204 | :keys "C-c C-d C-c" :active (eq major-mode 'idlwave-mode)] |
| 4205 | ("Set Special Breakpoint" | 4205 | ("Set Special Breakpoint" |
| 4206 | ["Set After Count Breakpoint" | 4206 | ["Set After Count Breakpoint" |
| 4207 | (progn | 4207 | (progn |
| 4208 | (let ((count (string-to-int (read-string "Break after count: ")))) | 4208 | (let ((count (string-to-number (read-string "Break after count: ")))) |
| 4209 | (if (integerp count) (idlwave-shell-break-here count)))) | 4209 | (if (integerp count) (idlwave-shell-break-here count)))) |
| 4210 | :active (eq major-mode 'idlwave-mode)] | 4210 | :active (eq major-mode 'idlwave-mode)] |
| 4211 | ["Set Condition Breakpoint" | 4211 | ["Set Condition Breakpoint" |
| 4212 | (idlwave-shell-break-here '(4)) | 4212 | (idlwave-shell-break-here '(4)) |
| 4213 | :active (eq major-mode 'idlwave-mode)]) | 4213 | :active (eq major-mode 'idlwave-mode)]) |
| 4214 | ["Break in Module" idlwave-shell-break-in | 4214 | ["Break in Module" idlwave-shell-break-in |
| 4215 | :keys "C-c C-d C-i" :active (eq major-mode 'idlwave-mode)] | 4215 | :keys "C-c C-d C-i" :active (eq major-mode 'idlwave-mode)] |
| 4216 | ["Break in this Module" idlwave-shell-break-this-module | 4216 | ["Break in this Module" idlwave-shell-break-this-module |
| 4217 | :keys "C-c C-d C-j" :active (eq major-mode 'idlwave-mode)] | 4217 | :keys "C-c C-d C-j" :active (eq major-mode 'idlwave-mode)] |
| 4218 | ["Clear Breakpoint" idlwave-shell-clear-current-bp t] | 4218 | ["Clear Breakpoint" idlwave-shell-clear-current-bp t] |
| 4219 | ["Clear All Breakpoints" idlwave-shell-clear-all-bp t] | 4219 | ["Clear All Breakpoints" idlwave-shell-clear-all-bp t] |
| 4220 | ["Disable/Enable Breakpoint" idlwave-shell-toggle-enable-current-bp t] | 4220 | ["Disable/Enable Breakpoint" idlwave-shell-toggle-enable-current-bp t] |
| 4221 | ["Goto Previous Breakpoint" idlwave-shell-goto-previous-bp | 4221 | ["Goto Previous Breakpoint" idlwave-shell-goto-previous-bp |
| 4222 | :keys "C-c C-d [" :active (eq major-mode 'idlwave-mode)] | 4222 | :keys "C-c C-d [" :active (eq major-mode 'idlwave-mode)] |
| 4223 | ["Goto Next Breakpoint" idlwave-shell-goto-next-bp | 4223 | ["Goto Next Breakpoint" idlwave-shell-goto-next-bp |
| 4224 | :keys "C-c C-d ]" :active (eq major-mode 'idlwave-mode)] | 4224 | :keys "C-c C-d ]" :active (eq major-mode 'idlwave-mode)] |
| 4225 | ["List All Breakpoints" idlwave-shell-list-all-bp t] | 4225 | ["List All Breakpoints" idlwave-shell-list-all-bp t] |
| 4226 | ["Resync Breakpoints" idlwave-shell-bp-query t]) | 4226 | ["Resync Breakpoints" idlwave-shell-bp-query t]) |
| @@ -4252,38 +4252,38 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4252 | ["Redisplay and Sync" idlwave-shell-redisplay t]) | 4252 | ["Redisplay and Sync" idlwave-shell-redisplay t]) |
| 4253 | ("Show Commands" | 4253 | ("Show Commands" |
| 4254 | ["Everything" (if (eq idlwave-shell-show-commands 'everything) | 4254 | ["Everything" (if (eq idlwave-shell-show-commands 'everything) |
| 4255 | (progn | 4255 | (progn |
| 4256 | (setq idlwave-shell-show-commands | 4256 | (setq idlwave-shell-show-commands |
| 4257 | (get 'idlwave-shell-show-commands 'last-val)) | 4257 | (get 'idlwave-shell-show-commands 'last-val)) |
| 4258 | (put 'idlwave-shell-show-commands 'last-val nil)) | 4258 | (put 'idlwave-shell-show-commands 'last-val nil)) |
| 4259 | (put 'idlwave-shell-show-commands 'last-val | 4259 | (put 'idlwave-shell-show-commands 'last-val |
| 4260 | idlwave-shell-show-commands) | 4260 | idlwave-shell-show-commands) |
| 4261 | (setq idlwave-shell-show-commands 'everything)) | 4261 | (setq idlwave-shell-show-commands 'everything)) |
| 4262 | :style toggle :selected (and (not (listp idlwave-shell-show-commands)) | 4262 | :style toggle :selected (and (not (listp idlwave-shell-show-commands)) |
| 4263 | (eq idlwave-shell-show-commands | 4263 | (eq idlwave-shell-show-commands |
| 4264 | 'everything))] | 4264 | 'everything))] |
| 4265 | "--" | 4265 | "--" |
| 4266 | ["Compiling Commands" (idlwave-shell-add-or-remove-show 'run) | 4266 | ["Compiling Commands" (idlwave-shell-add-or-remove-show 'run) |
| 4267 | :style toggle | 4267 | :style toggle |
| 4268 | :selected (not (idlwave-shell-hide-p | 4268 | :selected (not (idlwave-shell-hide-p |
| 4269 | 'run | 4269 | 'run |
| 4270 | (get 'idlwave-shell-show-commands 'last-val))) | 4270 | (get 'idlwave-shell-show-commands 'last-val))) |
| 4271 | :active (not (eq idlwave-shell-show-commands 'everything))] | 4271 | :active (not (eq idlwave-shell-show-commands 'everything))] |
| 4272 | ["Breakpoint Commands" (idlwave-shell-add-or-remove-show 'breakpoint) | 4272 | ["Breakpoint Commands" (idlwave-shell-add-or-remove-show 'breakpoint) |
| 4273 | :style toggle | 4273 | :style toggle |
| 4274 | :selected (not (idlwave-shell-hide-p | 4274 | :selected (not (idlwave-shell-hide-p |
| 4275 | 'breakpoint | 4275 | 'breakpoint |
| 4276 | (get 'idlwave-shell-show-commands 'last-val))) | 4276 | (get 'idlwave-shell-show-commands 'last-val))) |
| 4277 | :active (not (eq idlwave-shell-show-commands 'everything))] | 4277 | :active (not (eq idlwave-shell-show-commands 'everything))] |
| 4278 | ["Debug Commands" (idlwave-shell-add-or-remove-show 'debug) | 4278 | ["Debug Commands" (idlwave-shell-add-or-remove-show 'debug) |
| 4279 | :style toggle | 4279 | :style toggle |
| 4280 | :selected (not (idlwave-shell-hide-p | 4280 | :selected (not (idlwave-shell-hide-p |
| 4281 | 'debug | 4281 | 'debug |
| 4282 | (get 'idlwave-shell-show-commands 'last-val))) | 4282 | (get 'idlwave-shell-show-commands 'last-val))) |
| 4283 | :active (not (eq idlwave-shell-show-commands 'everything))] | 4283 | :active (not (eq idlwave-shell-show-commands 'everything))] |
| 4284 | ["Miscellaneous Commands" (idlwave-shell-add-or-remove-show 'misc) | 4284 | ["Miscellaneous Commands" (idlwave-shell-add-or-remove-show 'misc) |
| 4285 | :style toggle | 4285 | :style toggle |
| 4286 | :selected (not (idlwave-shell-hide-p | 4286 | :selected (not (idlwave-shell-hide-p |
| 4287 | 'misc | 4287 | 'misc |
| 4288 | (get 'idlwave-shell-show-commands 'last-val))) | 4288 | (get 'idlwave-shell-show-commands 'last-val))) |
| 4289 | :active (not (eq idlwave-shell-show-commands 'everything))]) | 4289 | :active (not (eq idlwave-shell-show-commands 'everything))]) |
| @@ -4297,7 +4297,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4297 | :style toggle :selected idlwave-shell-use-input-mode-magic]) | 4297 | :style toggle :selected idlwave-shell-use-input-mode-magic]) |
| 4298 | "--" | 4298 | "--" |
| 4299 | ["Update Working Dir" idlwave-shell-resync-dirs t] | 4299 | ["Update Working Dir" idlwave-shell-resync-dirs t] |
| 4300 | ["Save Path Info" | 4300 | ["Save Path Info" |
| 4301 | (idlwave-shell-send-command idlwave-shell-path-query | 4301 | (idlwave-shell-send-command idlwave-shell-path-query |
| 4302 | 'idlwave-shell-get-path-info | 4302 | 'idlwave-shell-get-path-info |
| 4303 | 'hide) | 4303 | 'hide) |
| @@ -4309,7 +4309,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4309 | 4309 | ||
| 4310 | (if (or (featurep 'easymenu) (load "easymenu" t)) | 4310 | (if (or (featurep 'easymenu) (load "easymenu" t)) |
| 4311 | (progn | 4311 | (progn |
| 4312 | (easy-menu-define | 4312 | (easy-menu-define |
| 4313 | idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus" | 4313 | idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus" |
| 4314 | idlwave-shell-menu-def) | 4314 | idlwave-shell-menu-def) |
| 4315 | (easy-menu-define | 4315 | (easy-menu-define |
| @@ -4329,7 +4329,7 @@ idlwave-shell-electric-debug-mode-map) | |||
| 4329 | (defvar idlwave-shell-bp-glyph nil | 4329 | (defvar idlwave-shell-bp-glyph nil |
| 4330 | "The glyphs to mark breakpoint lines in the source code.") | 4330 | "The glyphs to mark breakpoint lines in the source code.") |
| 4331 | 4331 | ||
| 4332 | (let ((image-alist | 4332 | (let ((image-alist |
| 4333 | '((bp . "/* XPM */ | 4333 | '((bp . "/* XPM */ |
| 4334 | static char * file[] = { | 4334 | static char * file[] = { |
| 4335 | \"14 12 3 1\", | 4335 | \"14 12 3 1\", |
| @@ -4462,7 +4462,7 @@ static char * file[] = { | |||
| 4462 | \" .XXXX. \", | 4462 | \" .XXXX. \", |
| 4463 | \" .... \", | 4463 | \" .... \", |
| 4464 | \" \"};"))) im-cons im) | 4464 | \" \"};"))) im-cons im) |
| 4465 | 4465 | ||
| 4466 | (while (setq im-cons (pop image-alist)) | 4466 | (while (setq im-cons (pop image-alist)) |
| 4467 | (setq im (cond ((and (featurep 'xemacs) | 4467 | (setq im (cond ((and (featurep 'xemacs) |
| 4468 | (featurep 'xpm)) | 4468 | (featurep 'xpm)) |
| @@ -4475,7 +4475,7 @@ static char * file[] = { | |||
| 4475 | ((and (not (featurep 'xemacs)) | 4475 | ((and (not (featurep 'xemacs)) |
| 4476 | (fboundp 'image-type-available-p) | 4476 | (fboundp 'image-type-available-p) |
| 4477 | (image-type-available-p 'xpm)) | 4477 | (image-type-available-p 'xpm)) |
| 4478 | (list 'image :type 'xpm :data (cdr im-cons) | 4478 | (list 'image :type 'xpm :data (cdr im-cons) |
| 4479 | :ascent 'center)) | 4479 | :ascent 'center)) |
| 4480 | (t nil))) | 4480 | (t nil))) |
| 4481 | (if im (push (cons (car im-cons) im) idlwave-shell-bp-glyph)))) | 4481 | (if im (push (cons (car im-cons) im) idlwave-shell-bp-glyph)))) |
| @@ -4485,7 +4485,7 @@ static char * file[] = { | |||
| 4485 | 4485 | ||
| 4486 | ;;; Load the toolbar when wanted by the user. | 4486 | ;;; Load the toolbar when wanted by the user. |
| 4487 | 4487 | ||
| 4488 | (autoload 'idlwave-toolbar-toggle "idlw-toolbar" | 4488 | (autoload 'idlwave-toolbar-toggle "idlw-toolbar" |
| 4489 | "Toggle the IDLWAVE toolbar") | 4489 | "Toggle the IDLWAVE toolbar") |
| 4490 | (autoload 'idlwave-toolbar-add-everywhere "idlw-toolbar" | 4490 | (autoload 'idlwave-toolbar-add-everywhere "idlw-toolbar" |
| 4491 | "Add IDLWAVE toolbar") | 4491 | "Add IDLWAVE toolbar") |
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el index 083d87f581c..13bc7f08999 100644 --- a/lisp/progmodes/inf-lisp.el +++ b/lisp/progmodes/inf-lisp.el | |||
| @@ -214,10 +214,8 @@ processes, you can change `inferior-lisp-buffer' to another process | |||
| 214 | buffer with \\[set-variable].") | 214 | buffer with \\[set-variable].") |
| 215 | 215 | ||
| 216 | ;;;###autoload | 216 | ;;;###autoload |
| 217 | (defcustom inferior-lisp-mode-hook '() | 217 | (defvar inferior-lisp-mode-hook '() |
| 218 | "*Hook for customising Inferior Lisp mode." | 218 | "*Hook for customising Inferior Lisp mode.") |
| 219 | :type 'hook | ||
| 220 | :group 'inferior-lisp) | ||
| 221 | 219 | ||
| 222 | (put 'inferior-lisp-mode 'mode-class 'special) | 220 | (put 'inferior-lisp-mode 'mode-class 'special) |
| 223 | 221 | ||
| @@ -590,10 +588,8 @@ See variable `lisp-describe-sym-command'." | |||
| 590 | 588 | ||
| 591 | ;;; Do the user's customisation... | 589 | ;;; Do the user's customisation... |
| 592 | ;;;=============================== | 590 | ;;;=============================== |
| 593 | (defcustom inferior-lisp-load-hook nil | 591 | (defvar inferior-lisp-load-hook nil |
| 594 | "This hook is run when the library `inf-lisp' is loaded." | 592 | "This hook is run when the library `inf-lisp' is loaded.") |
| 595 | :type 'hook | ||
| 596 | :group 'inferior-lisp) | ||
| 597 | 593 | ||
| 598 | (run-hooks 'inferior-lisp-load-hook) | 594 | (run-hooks 'inferior-lisp-load-hook) |
| 599 | 595 | ||
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index 7c1ccb25fb0..86002768757 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el | |||
| @@ -100,12 +100,35 @@ | |||
| 100 | :prefix "makefile-") | 100 | :prefix "makefile-") |
| 101 | 101 | ||
| 102 | (defface makefile-space-face | 102 | (defface makefile-space-face |
| 103 | '((((class color)) (:background "hotpink")) | 103 | '((((class color)) (:background "hotpink")) |
| 104 | (t (:reverse-video t))) | 104 | (t (:reverse-video t))) |
| 105 | "Face to use for highlighting leading spaces in Font-Lock mode." | 105 | "Face to use for highlighting leading spaces in Font-Lock mode." |
| 106 | :group 'faces | 106 | :group 'faces |
| 107 | :group 'makefile) | 107 | :group 'makefile) |
| 108 | 108 | ||
| 109 | (defface makefile-targets-face | ||
| 110 | ;; This needs to go along both with foreground and background colors (i.e. shell) | ||
| 111 | '((t (:underline t))) | ||
| 112 | "Face to use for additionally highlighting rule targets in Font-Lock mode." | ||
| 113 | :group 'faces | ||
| 114 | :group 'makefile) | ||
| 115 | |||
| 116 | (defface makefile-shell-face | ||
| 117 | '((((class color) (background light)) (:background "seashell1")) | ||
| 118 | (((class color) (background dark)) (:background "seashell4")) | ||
| 119 | (t (:reverse-video t))) | ||
| 120 | "Face to use for additionally highlighting Shell commands in Font-Lock mode." | ||
| 121 | :group 'faces | ||
| 122 | :group 'makefile) | ||
| 123 | |||
| 124 | (defface makefile-makepp-perl-face | ||
| 125 | '((((class color) (background light)) (:background "LightBlue1")) ; Camel Book | ||
| 126 | (((class color) (background dark)) (:background "DarkBlue")) | ||
| 127 | (t (:reverse-video t))) | ||
| 128 | "Face to use for additionally highlighting Perl code in Font-Lock mode." | ||
| 129 | :group 'faces | ||
| 130 | :group 'makefile) | ||
| 131 | |||
| 109 | (defcustom makefile-browser-buffer-name "*Macros and Targets*" | 132 | (defcustom makefile-browser-buffer-name "*Macros and Targets*" |
| 110 | "*Name of the macro- and target browser buffer." | 133 | "*Name of the macro- and target browser buffer." |
| 111 | :type 'string | 134 | :type 'string |
| @@ -234,17 +257,29 @@ not be enclosed in { } or ( )." | |||
| 234 | ;; Note that the first big subexpression is used by font lock. Note | 257 | ;; Note that the first big subexpression is used by font lock. Note |
| 235 | ;; that if you change this regexp you might have to fix the imenu | 258 | ;; that if you change this regexp you might have to fix the imenu |
| 236 | ;; index in makefile-imenu-generic-expression. | 259 | ;; index in makefile-imenu-generic-expression. |
| 237 | (defconst makefile-dependency-regex | 260 | (defvar makefile-dependency-regex |
| 238 | "^ *\\([^ \n\t#:=]+\\([ \t]+\\([^ \t\n#:=]+\\|\\$[({][^ \t\n#})]+[})]\\)\\)*\\)[ \t]*:\\([ \t]*$\\|\\([^=\n].*$\\)\\)" | 261 | ;; Allow for two nested levels $(v1:$(v2:$(v3:a=b)=c)=d) |
| 262 | "^ *\\(\\(?: *\\$\\(?:[({]\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[^({]\\|.[^\n$#})]+?[})]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\| *[^ \n$#:=]+\\)+?\\)[ \t]*\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)" | ||
| 239 | "Regex used to find dependency lines in a makefile.") | 263 | "Regex used to find dependency lines in a makefile.") |
| 240 | 264 | ||
| 241 | ;; Note that the first subexpression is used by font lock. Note | 265 | (defvar makefile-dependency-skip "^:" |
| 242 | ;; that if you change this regexp you might have to fix the imenu | 266 | "Characters to skip to find a line that might be a dependency.") |
| 243 | ;; index in makefile-imenu-generic-expression. | 267 | |
| 268 | (defvar makefile-rule-action-regex | ||
| 269 | "^\t[ \t]*\\([-@]*\\)[ \t]*\\(\\(?:.+\\\\\n\\)*.+\\)" | ||
| 270 | "Regex used to highlight rule action lines in font lock mode.") | ||
| 271 | |||
| 272 | ;; Note that the first and second subexpression is used by font lock. Note | ||
| 273 | ;; that if you change this regexp you might have to fix the imenu index in | ||
| 274 | ;; makefile-imenu-generic-expression. | ||
| 244 | (defconst makefile-macroassign-regex | 275 | (defconst makefile-macroassign-regex |
| 245 | "^ *\\([^ \n\t][^:#= \t\n]*\\)[ \t]*[*:+]?[:?]?=" | 276 | "^ *\\([^ \n\t][^:#= \t\n]*\\)[ \t]*\\(?:!=[ \t]*\\(\\(?:.+\\\\\n\\)*.+\\)\\|[*:+]?[:?]?=[ \t]*\\(\\(?:.+\\\\\n\\)*.+\\)\\)" |
| 246 | "Regex used to find macro assignment lines in a makefile.") | 277 | "Regex used to find macro assignment lines in a makefile.") |
| 247 | 278 | ||
| 279 | (defconst makefile-var-use-regex | ||
| 280 | "[^$]\\$[({]\\([-a-zA-Z0-9_.]+\\|[@%<?^+*][FD]?\\)" | ||
| 281 | "Regex used to find $(macro) uses in a makefile.") | ||
| 282 | |||
| 248 | (defconst makefile-ignored-files-in-pickup-regex | 283 | (defconst makefile-ignored-files-in-pickup-regex |
| 249 | "\\(^\\..*\\)\\|\\(.*~$\\)\\|\\(.*,v$\\)\\|\\(\\.[chy]\\)" | 284 | "\\(^\\..*\\)\\|\\(.*~$\\)\\|\\(.*,v$\\)\\|\\(\\.[chy]\\)" |
| 250 | "Regex for filenames that will NOT be included in the target list.") | 285 | "Regex for filenames that will NOT be included in the target list.") |
| @@ -254,50 +289,189 @@ not be enclosed in { } or ( )." | |||
| 254 | (defvar makefile-space-face 'makefile-space-face | 289 | (defvar makefile-space-face 'makefile-space-face |
| 255 | "Face to use for highlighting leading spaces in Font-Lock mode.") | 290 | "Face to use for highlighting leading spaces in Font-Lock mode.") |
| 256 | 291 | ||
| 257 | (defconst makefile-font-lock-keywords | 292 | ;; These lists were inspired by the old solution. But they are silly, because |
| 258 | (list | 293 | ;; you can't differentiate what follows. They need to be split up. |
| 294 | (defconst makefile-statements '("include") | ||
| 295 | "List of keywords understood by standard make.") | ||
| 296 | |||
| 297 | (defconst makefile-automake-statements | ||
| 298 | `("if" "else" "endif" ,@makefile-statements) | ||
| 299 | "List of keywords understood by automake.") | ||
| 300 | |||
| 301 | (defconst makefile-gmake-statements | ||
| 302 | `("-sinclude" "sinclude" "override" "vpath" | ||
| 303 | "ifdef" "ifndef" "ifeq" "ifneq" "-include" "define" "endef" "export" | ||
| 304 | "unexport" | ||
| 305 | ,@(cdr makefile-automake-statements)) | ||
| 306 | "List of keywords understood by gmake.") | ||
| 307 | |||
| 308 | ;; These are even more silly, because you can have more spaces in between. | ||
| 309 | (defconst makefile-makepp-statements | ||
| 310 | `("and ifdef" "and ifndef" "and ifeq" "and ifneq" "and ifperl" | ||
| 311 | "and ifmakeperl" "and ifsys" "and ifnsys" "build_cache" "build_check" | ||
| 312 | "else ifdef" "else ifndef" "else ifeq" "else ifneq" "else ifperl" | ||
| 313 | "else ifmakeperl" "else ifsys" "else ifnsys" "enddef" "load_makefile" | ||
| 314 | "ifperl" "ifmakeperl" "ifsys" "ifnsys" "_include" "makeperl" "makesub" | ||
| 315 | "no_implicit_load" "perl" "perl-begin" "perl_begin" "perl-end" "perl_end" | ||
| 316 | "prebuild" "or ifdef" "or ifndef" "or ifeq" "or ifneq" "or ifperl" | ||
| 317 | "or ifmakeperl" "or ifsys" "or ifnsys" "register_command_parser" | ||
| 318 | "register_scanner" "repository" "runtime" "signature" "sub" | ||
| 319 | ,@(nthcdr 4 makefile-gmake-statements)) | ||
| 320 | "List of keywords understood by gmake.") | ||
| 321 | |||
| 322 | (defconst makefile-bsdmake-statements | ||
| 323 | `(".elif" ".elifdef" ".elifmake" ".elifndef" ".elifnmake" ".else" ".endfor" | ||
| 324 | ".endif" ".for" ".if" ".ifdef" ".ifmake" ".ifndef" ".ifnmake" ".undef") | ||
| 325 | "List of keywords understood by BSD make.") | ||
| 326 | |||
| 327 | (defun makefile-make-font-lock-keywords (var keywords space | ||
| 328 | &optional negation | ||
| 329 | &rest font-lock-keywords) | ||
| 330 | `(;; Do macro assignments. These get the "variable-name" face. | ||
| 331 | (,makefile-macroassign-regex | ||
| 332 | (1 font-lock-variable-name-face) | ||
| 333 | ;; This is for after != | ||
| 334 | (2 'makefile-shell-face prepend t) | ||
| 335 | ;; This is for after normal assignment | ||
| 336 | (3 'font-lock-string-face prepend t)) | ||
| 337 | |||
| 338 | ;; Rule actions. | ||
| 339 | (makefile-match-action | ||
| 340 | (1 font-lock-type-face) | ||
| 341 | (2 'makefile-shell-face prepend) | ||
| 342 | ;; Only makepp has builtin commands. | ||
| 343 | (3 font-lock-builtin-face prepend t)) | ||
| 344 | |||
| 345 | ;; Variable references even in targets/strings/comments. | ||
| 346 | (,var 1 font-lock-variable-name-face prepend) | ||
| 347 | |||
| 348 | ;; Automatic variable references and single character variable references, | ||
| 349 | ;; but not shell variables references. | ||
| 350 | ("[^$]\\$\\([@%<?^+*_]\\|[a-zA-Z0-9]\\>\\)" | ||
| 351 | 1 font-lock-constant-face prepend) | ||
| 352 | ("[^$]\\(\\$[@%*]\\)" | ||
| 353 | 1 'makefile-targets-face prepend) | ||
| 259 | 354 | ||
| 260 | ;; Do macro assignments. These get the "variable-name" face rather | 355 | ;; Fontify conditionals and includes. |
| 261 | ;; arbitrarily. | 356 | (,(concat "^\\(?: [ \t]*\\)?" |
| 262 | (list makefile-macroassign-regex 1 'font-lock-variable-name-face) | 357 | (regexp-opt keywords t) |
| 358 | "\\>[ \t]*\\([^: \t\n#]*\\)") | ||
| 359 | (1 font-lock-keyword-face) (2 font-lock-variable-name-face)) | ||
| 263 | 360 | ||
| 264 | ;; Do dependencies. These get the function name face. | 361 | ,@(if negation |
| 265 | (list makefile-dependency-regex 1 'font-lock-function-name-face) | 362 | `((,negation (1 font-lock-negation-char-face prepend) |
| 363 | (2 font-lock-negation-char-face prepend t)))) | ||
| 266 | 364 | ||
| 267 | ;; Variable references even in targets/strings/comments. | 365 | ,@(if space |
| 268 | '("[^$]\\$[({]\\([-a-zA-Z0-9_.]+\\|[@%<?^+*][FD]?\\)[}):]" | 366 | '(;; Highlight lines that contain just whitespace. |
| 269 | 1 font-lock-constant-face prepend) | 367 | ;; They can cause trouble, especially if they start with a tab. |
| 368 | ("^[ \t]+$" . makefile-space-face) | ||
| 270 | 369 | ||
| 271 | ;; Automatic variable references and single character variable references, | 370 | ;; Highlight shell comments that Make treats as commands, |
| 272 | ;; but not shell variables references. | 371 | ;; since these can fool people. |
| 273 | '("[^$]\\$\\([@%<?^+*_]\\|[a-zA-Z0-9]\\>\\)" | 372 | ("^\t+#" 0 makefile-space-face t) |
| 274 | 1 font-lock-constant-face prepend) | ||
| 275 | 373 | ||
| 276 | ;; Fontify conditionals and includes. | 374 | ;; Highlight spaces that precede tabs. |
| 277 | ;; Note that plain `if' is an automake conditional, and not a bug. | 375 | ;; They can make a tab fail to be effective. |
| 278 | (list | 376 | ("^\\( +\\)\t" 1 makefile-space-face))) |
| 279 | (concat "^\\(?: [ \t]*\\)?" | ||
| 280 | (regexp-opt '("-include" "-sinclude" "include" "sinclude" "ifeq" | ||
| 281 | "if" "ifneq" "ifdef" "ifndef" "endif" "else" | ||
| 282 | "define" "endef" "override" | ||
| 283 | "export" "unexport" "vpath") t) | ||
| 284 | "\\>[ \t]*\\([^: \t\n#]*\\)") | ||
| 285 | '(1 font-lock-keyword-face) '(2 font-lock-variable-name-face)) | ||
| 286 | 377 | ||
| 287 | '("^\\(?: [ \t]*\\)?if\\(n\\)\\(?:def\\|eq\\)\\>" | 378 | ,@font-lock-keywords |
| 288 | 1 font-lock-negation-char-face prepend) | ||
| 289 | 379 | ||
| 290 | ;; Highlight lines that contain just whitespace. | 380 | ;; Do dependencies. |
| 291 | ;; They can cause trouble, especially if they start with a tab. | 381 | (makefile-match-dependency |
| 292 | '("^[ \t]+$" . makefile-space-face) | 382 | (1 'makefile-targets-face prepend) |
| 383 | (3 'makefile-shell-face prepend t)))) | ||
| 293 | 384 | ||
| 294 | ;; Highlight shell comments that Make treats as commands, | 385 | (defconst makefile-font-lock-keywords |
| 295 | ;; since these can fool people. | 386 | (makefile-make-font-lock-keywords |
| 296 | '("^\t+#" 0 makefile-space-face t) | 387 | makefile-var-use-regex |
| 388 | makefile-statements | ||
| 389 | t)) | ||
| 390 | |||
| 391 | (defconst makefile-automake-font-lock-keywords | ||
| 392 | (makefile-make-font-lock-keywords | ||
| 393 | makefile-var-use-regex | ||
| 394 | makefile-automake-statements | ||
| 395 | t)) | ||
| 396 | |||
| 397 | (defconst makefile-gmake-font-lock-keywords | ||
| 398 | (makefile-make-font-lock-keywords | ||
| 399 | makefile-var-use-regex | ||
| 400 | makefile-gmake-statements | ||
| 401 | t | ||
| 402 | "^\\(?: [ \t]*\\)?if\\(n\\)\\(?:def\\|eq\\)\\>" | ||
| 403 | |||
| 404 | '("[^$]\\(\\$[({][@%*][DF][})]\\)" | ||
| 405 | 1 'makefile-targets-face prepend) | ||
| 406 | |||
| 407 | ;; $(function ...) ${function ...} | ||
| 408 | '("[^$]\\$[({]\\([-a-zA-Z0-9_.]+\\s \\)" | ||
| 409 | 1 font-lock-function-name-face prepend) | ||
| 410 | |||
| 411 | ;; $(shell ...) ${shell ...} | ||
| 412 | '("[^$]\\$\\([({]\\)shell[ \t]+" | ||
| 413 | makefile-match-function-end nil nil | ||
| 414 | (1 'makefile-shell-face prepend t)))) | ||
| 415 | |||
| 416 | (defconst makefile-makepp-font-lock-keywords | ||
| 417 | (makefile-make-font-lock-keywords | ||
| 418 | makefile-var-use-regex | ||
| 419 | makefile-makepp-statements | ||
| 420 | nil | ||
| 421 | "^\\(?: [ \t]*\\)?\\(?:and[ \t]+\\|else[ \t]+\\|or[ \t]+\\)?if\\(n\\)\\(?:def\\|eq\\|sys\\)\\>" | ||
| 422 | |||
| 423 | '("[^$]\\(\\$[({]\\(?:target\\|output\\)s?\\_>.*?[})]\\)" | ||
| 424 | 1 'makefile-targets-face prepend) | ||
| 425 | |||
| 426 | ;; Colon modifier keywords. | ||
| 427 | '("\\(:\\s *\\)\\(build_c\\(?:ache\\|heck\\)\\|env\\(?:ironment\\)?\\|foreach\\|signature\\|scanner\\|quickscan\\|smartscan\\)\\>\\([^:\n]*\\)" | ||
| 428 | (1 font-lock-type-face t) | ||
| 429 | (2 font-lock-keyword-face t) | ||
| 430 | (3 font-lock-variable-name-face t)) | ||
| 431 | |||
| 432 | ;; $(function ...) $((function ...)) ${function ...} ${{function ...}} | ||
| 433 | '("[^$]\\$\\(?:((?\\|{{?\\)\\([-a-zA-Z0-9_.]+\\s \\)" | ||
| 434 | 1 font-lock-function-name-face prepend) | ||
| 435 | |||
| 436 | ;; $(shell ...) $((shell ...)) ${shell ...} ${{shell ...}} | ||
| 437 | '("[^$]\\$\\(((?\\|{{?\\)shell\\(?:[-_]\\(?:global[-_]\\)?once\\)?[ \t]+" | ||
| 438 | makefile-match-function-end nil nil | ||
| 439 | (1 'makefile-shell-face prepend t)) | ||
| 440 | |||
| 441 | ;; $(perl ...) $((perl ...)) ${perl ...} ${{perl ...}} | ||
| 442 | '("[^$]\\$\\(((?\\|{{?\\)makeperl[ \t]+" | ||
| 443 | makefile-match-function-end nil nil | ||
| 444 | (1 'makefile-makepp-perl-face prepend t)) | ||
| 445 | '("[^$]\\$\\(((?\\|{{?\\)perl[ \t]+" | ||
| 446 | makefile-match-function-end nil nil | ||
| 447 | (1 'makefile-makepp-perl-face t t)) | ||
| 448 | |||
| 449 | ;; Can we unify these with (if (match-end 1) 'prepend t)? | ||
| 450 | '("ifmakeperl\\s +\\(.*\\)" 1 'makefile-makepp-perl-face prepend) | ||
| 451 | '("ifperl\\s +\\(.*\\)" 1 'makefile-makepp-perl-face t) | ||
| 452 | |||
| 453 | ;; Perl block single- or multiline, as statement or rule action. | ||
| 454 | ;; Don't know why the initial newline in 2nd variant of group 2 doesn't get skipped. | ||
| 455 | '("\\<make\\(?:perl\\|sub\\s +\\S +\\)\\s *\n?\\s *{\\(?:{\\s *\n?\\(\\(?:.*\n\\)+?\\)\\s *}\\|\\s *\\(\\(?:.*?\\|\n?\\(?:.*\n\\)+?\\)\\)\\)}" | ||
| 456 | (1 'makefile-makepp-perl-face prepend t) | ||
| 457 | (2 'makefile-makepp-perl-face prepend t)) | ||
| 458 | '("\\<\\(?:perl\\|sub\\s +\\S +\\)\\s *\n?\\s *{\\(?:{\\s *\n?\\(\\(?:.*\n\\)+?\\)\\s *}\\|\\s *\\(\\(?:.*?\\|\n?\\(?:.*\n\\)+?\\)\\)\\)}" | ||
| 459 | (1 'makefile-makepp-perl-face t t) | ||
| 460 | (2 'makefile-makepp-perl-face t t)) | ||
| 461 | |||
| 462 | ;; Statement style perl block. | ||
| 463 | '("perl[-_]begin\\s *\\(?:\\s #.*\\)?\n\\(\\(?:.*\n\\)+?\\)\\s *perl[-_]end\\>" | ||
| 464 | 1 'makefile-makepp-perl-face t))) | ||
| 465 | |||
| 466 | (defconst makefile-bsdmake-font-lock-keywords | ||
| 467 | (makefile-make-font-lock-keywords | ||
| 468 | ;; A lot more could be done for variables here: | ||
| 469 | makefile-var-use-regex | ||
| 470 | makefile-bsdmake-statements | ||
| 471 | t | ||
| 472 | "^\\(?: [ \t]*\\)?\\.\\(?:el\\)?if\\(n?\\)\\(?:def\\|make\\)?\\>[ \t]*\\(!?\\)" | ||
| 473 | '("^[ \t]*\\.for[ \t].+[ \t]\\(in\\)\\>" 1 font-lock-keyword-face))) | ||
| 297 | 474 | ||
| 298 | ;; Highlight spaces that precede tabs. | ||
| 299 | ;; They can make a tab fail to be effective. | ||
| 300 | '("^\\( +\\)\t" 1 makefile-space-face))) | ||
| 301 | 475 | ||
| 302 | (defconst makefile-font-lock-syntactic-keywords | 476 | (defconst makefile-font-lock-syntactic-keywords |
| 303 | ;; From sh-script.el. | 477 | ;; From sh-script.el. |
| @@ -310,9 +484,8 @@ not be enclosed in { } or ( )." | |||
| 310 | ("\\\\\n" 0 "."))) | 484 | ("\\\\\n" 0 "."))) |
| 311 | 485 | ||
| 312 | (defvar makefile-imenu-generic-expression | 486 | (defvar makefile-imenu-generic-expression |
| 313 | (list | 487 | `(("Dependencies" ,makefile-dependency-regex 1) |
| 314 | (list "Dependencies" makefile-dependency-regex 1) | 488 | ("Macro Assignment" ,makefile-macroassign-regex 1)) |
| 315 | (list "Macro Assignment" makefile-macroassign-regex 1)) | ||
| 316 | "Imenu generic expression for Makefile mode. See `imenu-generic-expression'.") | 489 | "Imenu generic expression for Makefile mode. See `imenu-generic-expression'.") |
| 317 | 490 | ||
| 318 | ;;; ------------------------------------------------------------ | 491 | ;;; ------------------------------------------------------------ |
| @@ -371,47 +544,50 @@ The function must satisfy this calling convention: | |||
| 371 | () | 544 | () |
| 372 | (define-abbrev-table 'makefile-mode-abbrev-table ())) | 545 | (define-abbrev-table 'makefile-mode-abbrev-table ())) |
| 373 | 546 | ||
| 374 | (defvar makefile-mode-map nil | 547 | (defvar makefile-mode-map |
| 548 | (let ((map (make-sparse-keymap))) | ||
| 549 | ;; set up the keymap | ||
| 550 | (define-key map "\C-c:" 'makefile-insert-target-ref) | ||
| 551 | (if makefile-electric-keys | ||
| 552 | (progn | ||
| 553 | (define-key map "$" 'makefile-insert-macro-ref) | ||
| 554 | (define-key map ":" 'makefile-electric-colon) | ||
| 555 | (define-key map "=" 'makefile-electric-equal) | ||
| 556 | (define-key map "." 'makefile-electric-dot))) | ||
| 557 | (define-key map "\C-c\C-f" 'makefile-pickup-filenames-as-targets) | ||
| 558 | (define-key map "\C-c\C-b" 'makefile-switch-to-browser) | ||
| 559 | (define-key map "\C-c\C-c" 'comment-region) | ||
| 560 | (define-key map "\C-c\C-p" 'makefile-pickup-everything) | ||
| 561 | (define-key map "\C-c\C-u" 'makefile-create-up-to-date-overview) | ||
| 562 | (define-key map "\C-c\C-i" 'makefile-insert-gmake-function) | ||
| 563 | (define-key map "\C-c\C-\\" 'makefile-backslash-region) | ||
| 564 | (define-key map "\C-c\C-m\C-a" 'makefile-automake-mode) | ||
| 565 | (define-key map "\C-c\C-m\C-b" 'makefile-bsdmake-mode) | ||
| 566 | (define-key map "\C-c\C-m\C-g" 'makefile-gmake-mode) | ||
| 567 | (define-key map "\C-c\C-m\C-m" 'makefile-mode) | ||
| 568 | (define-key map "\C-c\C-m\C-p" 'makefile-makepp-mode) | ||
| 569 | (define-key map "\M-p" 'makefile-previous-dependency) | ||
| 570 | (define-key map "\M-n" 'makefile-next-dependency) | ||
| 571 | (define-key map "\e\t" 'makefile-complete) | ||
| 572 | |||
| 573 | ;; Make menus. | ||
| 574 | (define-key map [menu-bar makefile-mode] | ||
| 575 | (cons "Makefile" (make-sparse-keymap "Makefile"))) | ||
| 576 | |||
| 577 | (define-key map [menu-bar makefile-mode browse] | ||
| 578 | '("Pop up Makefile Browser" . makefile-switch-to-browser)) | ||
| 579 | (define-key map [menu-bar makefile-mode complete] | ||
| 580 | '("Complete Target or Macro" . makefile-complete)) | ||
| 581 | (define-key map [menu-bar makefile-mode pickup] | ||
| 582 | '("Find Targets and Macros" . makefile-pickup-everything)) | ||
| 583 | |||
| 584 | (define-key map [menu-bar makefile-mode prev] | ||
| 585 | '("Move to Previous Dependency" . makefile-previous-dependency)) | ||
| 586 | (define-key map [menu-bar makefile-mode next] | ||
| 587 | '("Move to Next Dependency" . makefile-next-dependency)) | ||
| 588 | map) | ||
| 375 | "The keymap that is used in Makefile mode.") | 589 | "The keymap that is used in Makefile mode.") |
| 376 | 590 | ||
| 377 | (if makefile-mode-map | ||
| 378 | () | ||
| 379 | (setq makefile-mode-map (make-sparse-keymap)) | ||
| 380 | ;; set up the keymap | ||
| 381 | (define-key makefile-mode-map "\C-c:" 'makefile-insert-target-ref) | ||
| 382 | (if makefile-electric-keys | ||
| 383 | (progn | ||
| 384 | (define-key makefile-mode-map "$" 'makefile-insert-macro-ref) | ||
| 385 | (define-key makefile-mode-map ":" 'makefile-electric-colon) | ||
| 386 | (define-key makefile-mode-map "=" 'makefile-electric-equal) | ||
| 387 | (define-key makefile-mode-map "." 'makefile-electric-dot))) | ||
| 388 | (define-key makefile-mode-map "\C-c\C-f" 'makefile-pickup-filenames-as-targets) | ||
| 389 | (define-key makefile-mode-map "\C-c\C-b" 'makefile-switch-to-browser) | ||
| 390 | (define-key makefile-mode-map "\C-c\C-c" 'comment-region) | ||
| 391 | (define-key makefile-mode-map "\C-c\C-p" 'makefile-pickup-everything) | ||
| 392 | (define-key makefile-mode-map "\C-c\C-u" 'makefile-create-up-to-date-overview) | ||
| 393 | (define-key makefile-mode-map "\C-c\C-i" 'makefile-insert-gmake-function) | ||
| 394 | (define-key makefile-mode-map "\C-c\C-\\" 'makefile-backslash-region) | ||
| 395 | (define-key makefile-mode-map "\M-p" 'makefile-previous-dependency) | ||
| 396 | (define-key makefile-mode-map "\M-n" 'makefile-next-dependency) | ||
| 397 | (define-key makefile-mode-map "\e\t" 'makefile-complete) | ||
| 398 | |||
| 399 | ;; Make menus. | ||
| 400 | (define-key makefile-mode-map [menu-bar makefile-mode] | ||
| 401 | (cons "Makefile" (make-sparse-keymap "Makefile"))) | ||
| 402 | |||
| 403 | (define-key makefile-mode-map [menu-bar makefile-mode browse] | ||
| 404 | '("Pop up Makefile Browser" . makefile-switch-to-browser)) | ||
| 405 | (define-key makefile-mode-map [menu-bar makefile-mode complete] | ||
| 406 | '("Complete Target or Macro" . makefile-complete)) | ||
| 407 | (define-key makefile-mode-map [menu-bar makefile-mode pickup] | ||
| 408 | '("Find Targets and Macros" . makefile-pickup-everything)) | ||
| 409 | |||
| 410 | (define-key makefile-mode-map [menu-bar makefile-mode prev] | ||
| 411 | '("Move to Previous Dependency" . makefile-previous-dependency)) | ||
| 412 | (define-key makefile-mode-map [menu-bar makefile-mode next] | ||
| 413 | '("Move to Next Dependency" . makefile-next-dependency))) | ||
| 414 | |||
| 415 | (defvar makefile-browser-map nil | 591 | (defvar makefile-browser-map nil |
| 416 | "The keymap that is used in the macro- and target browser.") | 592 | "The keymap that is used in the macro- and target browser.") |
| 417 | (if makefile-browser-map | 593 | (if makefile-browser-map |
| @@ -504,8 +680,19 @@ The function must satisfy this calling convention: | |||
| 504 | 680 | ||
| 505 | ;;;###autoload | 681 | ;;;###autoload |
| 506 | (defun makefile-mode () | 682 | (defun makefile-mode () |
| 507 | "Major mode for editing Makefiles. | 683 | "Major mode for editing standard Makefiles. |
| 508 | This function ends by invoking the function(s) `makefile-mode-hook'. | 684 | |
| 685 | If you are editing a file for a different make, try one of the | ||
| 686 | variants `makefile-automake-mode', `makefile-gmake-mode', | ||
| 687 | `makefile-makepp-mode' or `makefile-bsdmake-mode'. All but the | ||
| 688 | last should be correctly chosen based on the file name, except if | ||
| 689 | it is *.mk. This function ends by invoking the function(s) | ||
| 690 | `makefile-mode-hook'. | ||
| 691 | |||
| 692 | It is strongly recommended to use `font-lock-mode', because that | ||
| 693 | provides additional parsing information. This is used for | ||
| 694 | example to see that a rule action `echo foo: bar' is a not rule | ||
| 695 | dependency, despite the colon. | ||
| 509 | 696 | ||
| 510 | \\{makefile-mode-map} | 697 | \\{makefile-mode-map} |
| 511 | 698 | ||
| @@ -601,7 +788,8 @@ Makefile mode can be configured by modifying the following variables: | |||
| 601 | nil nil | 788 | nil nil |
| 602 | ((?$ . ".")) | 789 | ((?$ . ".")) |
| 603 | backward-paragraph | 790 | backward-paragraph |
| 604 | (font-lock-syntactic-keywords . makefile-font-lock-syntactic-keywords))) | 791 | (font-lock-syntactic-keywords . makefile-font-lock-syntactic-keywords) |
| 792 | (font-lock-support-mode))) ; JIT breaks on long series of continuation lines. | ||
| 605 | 793 | ||
| 606 | ;; Add-log. | 794 | ;; Add-log. |
| 607 | (make-local-variable 'add-log-current-defun-function) | 795 | (make-local-variable 'add-log-current-defun-function) |
| @@ -643,7 +831,45 @@ Makefile mode can be configured by modifying the following variables: | |||
| 643 | 831 | ||
| 644 | ;; Real TABs are important in makefiles | 832 | ;; Real TABs are important in makefiles |
| 645 | (setq indent-tabs-mode t) | 833 | (setq indent-tabs-mode t) |
| 646 | (run-hooks 'makefile-mode-hook)) | 834 | (run-mode-hooks 'makefile-mode-hook)) |
| 835 | |||
| 836 | ;; These should do more than just differentiate font-lock. | ||
| 837 | ;;;###autoload | ||
| 838 | (define-derived-mode makefile-automake-mode makefile-mode "Makefile.am" | ||
| 839 | "An adapted `makefile-mode' that knows about automake." | ||
| 840 | (setq font-lock-defaults | ||
| 841 | `(makefile-automake-font-lock-keywords ,@(cdr font-lock-defaults)))) | ||
| 842 | |||
| 843 | ;;;###autoload | ||
| 844 | (define-derived-mode makefile-gmake-mode makefile-mode "GNUmakefile" | ||
| 845 | "An adapted `makefile-mode' that knows about gmake." | ||
| 846 | (setq font-lock-defaults | ||
| 847 | `(makefile-gmake-font-lock-keywords ,@(cdr font-lock-defaults)))) | ||
| 848 | |||
| 849 | ;;;###autoload | ||
| 850 | (define-derived-mode makefile-makepp-mode makefile-mode "Makeppfile" | ||
| 851 | "An adapted `makefile-mode' that knows about makepp." | ||
| 852 | (set (make-local-variable 'makefile-rule-action-regex) | ||
| 853 | ;; Don't care about initial tab, but I don't know how to font-lock correctly without. | ||
| 854 | "^\t[ \t]*\\(\\(?:\\(?:noecho\\|ignore[-_]error\\|[-@]+\\)[ \t]*\\)*\\)\\(\\(&\\S +\\)?\\(?:.+\\\\\n\\)*.+\\)") | ||
| 855 | |||
| 856 | (setq font-lock-defaults | ||
| 857 | `(makefile-makepp-font-lock-keywords ,@(cdr font-lock-defaults)))) | ||
| 858 | |||
| 859 | ;;;###autoload | ||
| 860 | (define-derived-mode makefile-bsdmake-mode makefile-mode "BSDmakefile" | ||
| 861 | "An adapted `makefile-mode' that knows about BSD make." | ||
| 862 | (set (make-local-variable 'makefile-dependency-regex) | ||
| 863 | ;; Identical to default, except allows `!' instead of `:'. | ||
| 864 | "^ *\\(\\(?: *\\$\\(?:[({]\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[^({]\\|.[^\n$#})]+?[})]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\| *[^ \n$#:=]+\\)+?\\)[ \t]*\\([:!]\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)") | ||
| 865 | (set (make-local-variable 'makefile-dependency-skip) "^:!") | ||
| 866 | (set (make-local-variable 'makefile-rule-action-regex) | ||
| 867 | "^\t[ \t]*\\([-+@]*\\)[ \t]*\\(\\(?:.+\\\\\n\\)*.+\\)") | ||
| 868 | (setq font-lock-defaults | ||
| 869 | `(makefile-bsdmake-font-lock-keywords ,@(cdr font-lock-defaults)) | ||
| 870 | imenu-generic-expression | ||
| 871 | `(("Dependencies" ,makefile-dependency-regex 1) | ||
| 872 | ,@(cdr imenu-generic-expression)))) | ||
| 647 | 873 | ||
| 648 | 874 | ||
| 649 | 875 | ||
| @@ -654,18 +880,27 @@ Makefile mode can be configured by modifying the following variables: | |||
| 654 | (interactive) | 880 | (interactive) |
| 655 | (let ((here (point))) | 881 | (let ((here (point))) |
| 656 | (end-of-line) | 882 | (end-of-line) |
| 657 | (if (re-search-forward makefile-dependency-regex (point-max) t) | 883 | (if (makefile-match-dependency nil) |
| 658 | (progn (beginning-of-line) t) ; indicate success | 884 | (progn (beginning-of-line) t) ; indicate success |
| 659 | (goto-char here) nil))) | 885 | (goto-char here) nil))) |
| 660 | 886 | ||
| 661 | (defun makefile-previous-dependency () | 887 | (defun makefile-previous-dependency () |
| 662 | "Move point to the beginning of the previous dependency line." | 888 | "Move point to the beginning of the previous dependency line." |
| 663 | (interactive) | 889 | (interactive) |
| 664 | (let ((here (point))) | 890 | (let ((pt (point))) |
| 665 | (beginning-of-line) | 891 | (beginning-of-line) |
| 666 | (if (re-search-backward makefile-dependency-regex (point-min) t) | 892 | ;; makefile-match-dependency done backwards: |
| 667 | (progn (beginning-of-line) t) ; indicate success | 893 | (catch 'found |
| 668 | (goto-char here) nil))) | 894 | (while (progn (skip-chars-backward makefile-dependency-skip) |
| 895 | (not (bobp))) | ||
| 896 | (or (prog1 (eq (char-after) ?=) | ||
| 897 | (backward-char)) | ||
| 898 | (get-text-property (point) 'face) | ||
| 899 | (beginning-of-line) | ||
| 900 | (if (looking-at makefile-dependency-regex) | ||
| 901 | (throw 'found t)))) | ||
| 902 | (goto-char pt) | ||
| 903 | nil))) | ||
| 669 | 904 | ||
| 670 | 905 | ||
| 671 | 906 | ||
| @@ -763,74 +998,56 @@ Anywhere else just self-inserts." | |||
| 763 | (defun makefile-pickup-targets () | 998 | (defun makefile-pickup-targets () |
| 764 | "Notice names of all target definitions in Makefile." | 999 | "Notice names of all target definitions in Makefile." |
| 765 | (interactive) | 1000 | (interactive) |
| 766 | (if (not makefile-need-target-pickup) | 1001 | (when makefile-need-target-pickup |
| 767 | nil | 1002 | (setq makefile-need-target-pickup nil |
| 768 | (setq makefile-need-target-pickup nil) | 1003 | makefile-target-table nil |
| 769 | (setq makefile-target-table nil) | 1004 | makefile-has-prereqs nil) |
| 770 | (setq makefile-has-prereqs nil) | ||
| 771 | (save-excursion | 1005 | (save-excursion |
| 772 | (goto-char (point-min)) | 1006 | (goto-char (point-min)) |
| 773 | (while (re-search-forward makefile-dependency-regex nil t) | 1007 | (while (makefile-match-dependency nil) |
| 774 | (makefile-add-this-line-targets))) | 1008 | (goto-char (match-beginning 1)) |
| 775 | (message "Read targets OK."))) | 1009 | (while (let ((target-name |
| 776 | 1010 | (buffer-substring-no-properties (point) | |
| 777 | (defun makefile-add-this-line-targets () | 1011 | (progn |
| 778 | (save-excursion | 1012 | (skip-chars-forward "^ \t:#") |
| 779 | (beginning-of-line) | 1013 | (point)))) |
| 780 | (let ((done-with-line nil) | ||
| 781 | (line-number (1+ (count-lines (point-min) (point))))) | ||
| 782 | (while (not done-with-line) | ||
| 783 | (skip-chars-forward " \t") | ||
| 784 | (if (not (setq done-with-line (or (eolp) | ||
| 785 | (char-equal (char-after (point)) ?:)))) | ||
| 786 | (progn | ||
| 787 | (let* ((start-of-target-name (point)) | ||
| 788 | (target-name | ||
| 789 | (progn | ||
| 790 | (skip-chars-forward "^ \t:#") | ||
| 791 | (buffer-substring start-of-target-name (point)))) | ||
| 792 | (has-prereqs | 1014 | (has-prereqs |
| 793 | (not (looking-at ":[ \t]*$")))) | 1015 | (not (looking-at ":[ \t]*$")))) |
| 794 | (if (makefile-remember-target target-name has-prereqs) | 1016 | (if (makefile-remember-target target-name has-prereqs) |
| 795 | (message "Picked up target \"%s\" from line %d" | 1017 | (message "Picked up target \"%s\" from line %d" |
| 796 | target-name line-number))))))))) | 1018 | target-name (line-number-at-pos))) |
| 1019 | (skip-chars-forward " \t") | ||
| 1020 | (not (or (eolp) (eq (char-after) ?:))))) | ||
| 1021 | (forward-line))) | ||
| 1022 | (message "Read targets OK."))) | ||
| 797 | 1023 | ||
| 798 | (defun makefile-pickup-macros () | 1024 | (defun makefile-pickup-macros () |
| 799 | "Notice names of all macro definitions in Makefile." | 1025 | "Notice names of all macro definitions in Makefile." |
| 800 | (interactive) | 1026 | (interactive) |
| 801 | (if (not makefile-need-macro-pickup) | 1027 | (when makefile-need-macro-pickup |
| 802 | nil | 1028 | (setq makefile-need-macro-pickup nil |
| 803 | (setq makefile-need-macro-pickup nil) | 1029 | makefile-macro-table nil) |
| 804 | (setq makefile-macro-table nil) | ||
| 805 | (save-excursion | 1030 | (save-excursion |
| 806 | (goto-char (point-min)) | 1031 | (goto-char (point-min)) |
| 807 | (while (re-search-forward makefile-macroassign-regex nil t) | 1032 | (while (re-search-forward makefile-macroassign-regex nil t) |
| 808 | (makefile-add-this-line-macro) | 1033 | (goto-char (match-beginning 1)) |
| 809 | (forward-line 1))) | 1034 | (let ((macro-name (buffer-substring-no-properties (point) |
| 1035 | (progn | ||
| 1036 | (skip-chars-forward "^ \t:#=*") | ||
| 1037 | (point))))) | ||
| 1038 | (if (makefile-remember-macro macro-name) | ||
| 1039 | (message "Picked up macro \"%s\" from line %d" | ||
| 1040 | macro-name (line-number-at-pos)))) | ||
| 1041 | (forward-line))) | ||
| 810 | (message "Read macros OK."))) | 1042 | (message "Read macros OK."))) |
| 811 | 1043 | ||
| 812 | (defun makefile-add-this-line-macro () | ||
| 813 | (save-excursion | ||
| 814 | (beginning-of-line) | ||
| 815 | (skip-chars-forward " \t") | ||
| 816 | (unless (eolp) | ||
| 817 | (let* ((start-of-macro-name (point)) | ||
| 818 | (line-number (1+ (count-lines (point-min) (point)))) | ||
| 819 | (macro-name (progn | ||
| 820 | (skip-chars-forward "^ \t:#=*") | ||
| 821 | (buffer-substring start-of-macro-name (point))))) | ||
| 822 | (if (makefile-remember-macro macro-name) | ||
| 823 | (message "Picked up macro \"%s\" from line %d" | ||
| 824 | macro-name line-number)))))) | ||
| 825 | |||
| 826 | (defun makefile-pickup-everything (arg) | 1044 | (defun makefile-pickup-everything (arg) |
| 827 | "Notice names of all macros and targets in Makefile. | 1045 | "Notice names of all macros and targets in Makefile. |
| 828 | Prefix arg means force pickups to be redone." | 1046 | Prefix arg means force pickups to be redone." |
| 829 | (interactive "P") | 1047 | (interactive "P") |
| 830 | (if arg | 1048 | (if arg |
| 831 | (progn | 1049 | (setq makefile-need-target-pickup t |
| 832 | (setq makefile-need-target-pickup t) | 1050 | makefile-need-macro-pickup t)) |
| 833 | (setq makefile-need-macro-pickup t))) | ||
| 834 | (makefile-pickup-macros) | 1051 | (makefile-pickup-macros) |
| 835 | (makefile-pickup-targets) | 1052 | (makefile-pickup-targets) |
| 836 | (if makefile-pickup-everything-picks-up-filenames-p | 1053 | (if makefile-pickup-everything-picks-up-filenames-p |
| @@ -841,17 +1058,12 @@ Prefix arg means force pickups to be redone." | |||
| 841 | Checks each filename against `makefile-ignored-files-in-pickup-regex' | 1058 | Checks each filename against `makefile-ignored-files-in-pickup-regex' |
| 842 | and adds all qualifying names to the list of known targets." | 1059 | and adds all qualifying names to the list of known targets." |
| 843 | (interactive) | 1060 | (interactive) |
| 844 | (let* ((dir (file-name-directory (buffer-file-name))) | 1061 | (mapc (lambda (name) |
| 845 | (raw-filename-list (if dir | 1062 | (or (file-directory-p name) |
| 846 | (file-name-all-completions "" dir) | 1063 | (string-match makefile-ignored-files-in-pickup-regex name) |
| 847 | (file-name-all-completions "" "")))) | 1064 | (if (makefile-remember-target name) |
| 848 | (mapcar (lambda (name) | 1065 | (message "Picked up file \"%s\" as target" name)))) |
| 849 | (if (and (not (file-directory-p name)) | 1066 | (file-name-all-completions "" (or (file-name-directory (buffer-file-name)) "")))) |
| 850 | (not (string-match makefile-ignored-files-in-pickup-regex | ||
| 851 | name))) | ||
| 852 | (if (makefile-remember-target name) | ||
| 853 | (message "Picked up file \"%s\" as target" name)))) | ||
| 854 | raw-filename-list))) | ||
| 855 | 1067 | ||
| 856 | 1068 | ||
| 857 | 1069 | ||
| @@ -1453,6 +1665,41 @@ Then prompts for all required parameters." | |||
| 1453 | ;;; Utility functions | 1665 | ;;; Utility functions |
| 1454 | ;;; ------------------------------------------------------------ | 1666 | ;;; ------------------------------------------------------------ |
| 1455 | 1667 | ||
| 1668 | (defun makefile-match-function-end (end) | ||
| 1669 | "To be called as an anchored matcher by font-lock. | ||
| 1670 | The anchor must have matched the opening parens in the first group." | ||
| 1671 | (let ((s (match-string-no-properties 1))) | ||
| 1672 | (setq s (cond ((string= s "(") "\\(.*?\\)[ \t]*)") | ||
| 1673 | ((string= s "{") "\\(.*?\\)[ \t]*}") | ||
| 1674 | ((string= s "((") "\\(.*?\\)[ \t]*))") | ||
| 1675 | ((string= s "{{") "\\(.*?\\)[ \t]*}}"))) | ||
| 1676 | (if s (looking-at s)))) | ||
| 1677 | |||
| 1678 | (defun makefile-match-dependency (bound) | ||
| 1679 | "Search for `makefile-dependency-regex' up to BOUND. | ||
| 1680 | Checks that the colon has not already been fontified, else we | ||
| 1681 | matched in a rule action." | ||
| 1682 | (catch 'found | ||
| 1683 | (let ((pt (point))) | ||
| 1684 | (while (progn (skip-chars-forward makefile-dependency-skip bound) | ||
| 1685 | (not (eobp))) | ||
| 1686 | (forward-char) | ||
| 1687 | (or (eq (char-after) ?=) | ||
| 1688 | (get-text-property (1- (point)) 'face) | ||
| 1689 | (when (save-excursion | ||
| 1690 | (beginning-of-line) | ||
| 1691 | (looking-at makefile-dependency-regex)) | ||
| 1692 | (end-of-line) | ||
| 1693 | (throw 'found (point))))) | ||
| 1694 | (goto-char pt)) | ||
| 1695 | nil)) | ||
| 1696 | |||
| 1697 | (defun makefile-match-action (bound) | ||
| 1698 | (catch 'found | ||
| 1699 | (while (re-search-forward makefile-rule-action-regex bound t) | ||
| 1700 | (or (eq ?\\ (char-after (- (match-beginning 0) 2))) | ||
| 1701 | (throw 'found t))))) | ||
| 1702 | |||
| 1456 | (defun makefile-do-macro-insertion (macro-name) | 1703 | (defun makefile-do-macro-insertion (macro-name) |
| 1457 | "Insert a macro reference." | 1704 | "Insert a macro reference." |
| 1458 | (if (not (zerop (length macro-name))) | 1705 | (if (not (zerop (length macro-name))) |
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index 0febea4450f..f2576ad94db 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el | |||
| @@ -376,33 +376,41 @@ The expansion is entirely correct because it uses the C preprocessor." | |||
| 376 | 376 | ||
| 377 | (defcustom perl-indent-level 4 | 377 | (defcustom perl-indent-level 4 |
| 378 | "*Indentation of Perl statements with respect to containing block." | 378 | "*Indentation of Perl statements with respect to containing block." |
| 379 | :type 'integer) | 379 | :type 'integer |
| 380 | :group 'perl) | ||
| 380 | (defcustom perl-continued-statement-offset 4 | 381 | (defcustom perl-continued-statement-offset 4 |
| 381 | "*Extra indent for lines not starting new statements." | 382 | "*Extra indent for lines not starting new statements." |
| 382 | :type 'integer) | 383 | :type 'integer |
| 384 | :group 'perl) | ||
| 383 | (defcustom perl-continued-brace-offset -4 | 385 | (defcustom perl-continued-brace-offset -4 |
| 384 | "*Extra indent for substatements that start with open-braces. | 386 | "*Extra indent for substatements that start with open-braces. |
| 385 | This is in addition to `perl-continued-statement-offset'." | 387 | This is in addition to `perl-continued-statement-offset'." |
| 386 | :type 'integer) | 388 | :type 'integer |
| 389 | :group 'perl) | ||
| 387 | (defcustom perl-brace-offset 0 | 390 | (defcustom perl-brace-offset 0 |
| 388 | "*Extra indentation for braces, compared with other text in same context." | 391 | "*Extra indentation for braces, compared with other text in same context." |
| 389 | :type 'integer) | 392 | :type 'integer |
| 393 | :group 'perl) | ||
| 390 | (defcustom perl-brace-imaginary-offset 0 | 394 | (defcustom perl-brace-imaginary-offset 0 |
| 391 | "*Imagined indentation of an open brace that actually follows a statement." | 395 | "*Imagined indentation of an open brace that actually follows a statement." |
| 392 | :type 'integer) | 396 | :type 'integer |
| 397 | :group 'perl) | ||
| 393 | (defcustom perl-label-offset -2 | 398 | (defcustom perl-label-offset -2 |
| 394 | "*Offset of Perl label lines relative to usual indentation." | 399 | "*Offset of Perl label lines relative to usual indentation." |
| 395 | :type 'integer) | 400 | :type 'integer |
| 401 | :group 'perl) | ||
| 396 | (defcustom perl-indent-continued-arguments nil | 402 | (defcustom perl-indent-continued-arguments nil |
| 397 | "*If non-nil offset of argument lines relative to usual indentation. | 403 | "*If non-nil offset of argument lines relative to usual indentation. |
| 398 | If nil, continued arguments are aligned with the first argument." | 404 | If nil, continued arguments are aligned with the first argument." |
| 399 | :type '(choice integer (const nil))) | 405 | :type '(choice integer (const nil)) |
| 406 | :group 'perl) | ||
| 400 | 407 | ||
| 401 | (defcustom perl-tab-always-indent tab-always-indent | 408 | (defcustom perl-tab-always-indent tab-always-indent |
| 402 | "Non-nil means TAB in Perl mode always indents the current line. | 409 | "Non-nil means TAB in Perl mode always indents the current line. |
| 403 | Otherwise it inserts a tab character if you type it past the first | 410 | Otherwise it inserts a tab character if you type it past the first |
| 404 | nonwhite character on the line." | 411 | nonwhite character on the line." |
| 405 | :type 'boolean) | 412 | :type 'boolean |
| 413 | :group 'perl) | ||
| 406 | 414 | ||
| 407 | ;; I changed the default to nil for consistency with general Emacs | 415 | ;; I changed the default to nil for consistency with general Emacs |
| 408 | ;; conventions -- rms. | 416 | ;; conventions -- rms. |
| @@ -411,11 +419,13 @@ nonwhite character on the line." | |||
| 411 | For lines which don't need indenting, TAB either indents an | 419 | For lines which don't need indenting, TAB either indents an |
| 412 | existing comment, moves to end-of-line, or if at end-of-line already, | 420 | existing comment, moves to end-of-line, or if at end-of-line already, |
| 413 | create a new comment." | 421 | create a new comment." |
| 414 | :type 'boolean) | 422 | :type 'boolean |
| 423 | :group 'perl) | ||
| 415 | 424 | ||
| 416 | (defcustom perl-nochange ";?#\\|\f\\|\\s(\\|\\(\\w\\|\\s_\\)+:[^:]" | 425 | (defcustom perl-nochange ";?#\\|\f\\|\\s(\\|\\(\\w\\|\\s_\\)+:[^:]" |
| 417 | "*Lines starting with this regular expression are not auto-indented." | 426 | "*Lines starting with this regular expression are not auto-indented." |
| 418 | :type 'regexp) | 427 | :type 'regexp |
| 428 | :group 'perl) | ||
| 419 | 429 | ||
| 420 | ;; Outline support | 430 | ;; Outline support |
| 421 | 431 | ||
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 25bc337a7b2..73450dec61a 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el | |||
| @@ -234,8 +234,8 @@ Entry to this mode calls the value of `prolog-mode-hook' with no arguments, | |||
| 234 | if that value is non-nil. Likewise with the value of `comint-mode-hook'. | 234 | if that value is non-nil. Likewise with the value of `comint-mode-hook'. |
| 235 | `prolog-mode-hook' is called after `comint-mode-hook'. | 235 | `prolog-mode-hook' is called after `comint-mode-hook'. |
| 236 | 236 | ||
| 237 | You can send text to the inferior Prolog from other buffers | 237 | You can send text to the inferior Prolog from other buffers using the commands |
| 238 | using the commands `send-region', `send-string' and \\[prolog-consult-region]. | 238 | `process-send-region', `process-send-string' and \\[prolog-consult-region]. |
| 239 | 239 | ||
| 240 | Commands: | 240 | Commands: |
| 241 | Tab indents for Prolog; with argument, shifts rest | 241 | Tab indents for Prolog; with argument, shifts rest |
| @@ -265,12 +265,12 @@ If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." | |||
| 265 | (interactive "P\nr") | 265 | (interactive "P\nr") |
| 266 | (save-excursion | 266 | (save-excursion |
| 267 | (if compile | 267 | (if compile |
| 268 | (send-string "prolog" prolog-compile-string) | 268 | (process-send-string "prolog" prolog-compile-string) |
| 269 | (send-string "prolog" prolog-consult-string)) | 269 | (process-send-string "prolog" prolog-consult-string)) |
| 270 | (send-region "prolog" beg end) | 270 | (process-send-region "prolog" beg end) |
| 271 | (send-string "prolog" "\n") ;May be unnecessary | 271 | (process-send-string "prolog" "\n") ;May be unnecessary |
| 272 | (if prolog-eof-string | 272 | (if prolog-eof-string |
| 273 | (send-string "prolog" prolog-eof-string) | 273 | (process-send-string "prolog" prolog-eof-string) |
| 274 | (process-send-eof "prolog")))) ;Send eof to prolog process. | 274 | (process-send-eof "prolog")))) ;Send eof to prolog process. |
| 275 | 275 | ||
| 276 | (defun prolog-consult-region-and-go (compile beg end) | 276 | (defun prolog-consult-region-and-go (compile beg end) |
diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el index b3495c74491..2d8f1d80aae 100644 --- a/lisp/progmodes/ps-mode.el +++ b/lisp/progmodes/ps-mode.el | |||
| @@ -1173,7 +1173,7 @@ Use line numbers if `ps-run-error-line-numbers' is not nil" | |||
| 1173 | (let (i) | 1173 | (let (i) |
| 1174 | (setq | 1174 | (setq |
| 1175 | i | 1175 | i |
| 1176 | (string-to-int | 1176 | (string-to-number |
| 1177 | (buffer-substring (match-beginning 0) (match-end 0)))) | 1177 | (buffer-substring (match-beginning 0) (match-end 0)))) |
| 1178 | (goto-char p) | 1178 | (goto-char p) |
| 1179 | (pop-to-buffer ps-run-parent) | 1179 | (pop-to-buffer ps-run-parent) |
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index f2389d8defa..0173c419b5d 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el | |||
| @@ -1015,7 +1015,7 @@ Anything else means: whenever we have a \"good guess\" as to the value." | |||
| 1015 | :group 'sh-indentation) | 1015 | :group 'sh-indentation) |
| 1016 | 1016 | ||
| 1017 | (defcustom sh-popup-occur-buffer nil | 1017 | (defcustom sh-popup-occur-buffer nil |
| 1018 | "*Controls when `sh-learn-buffer-indent' pops the *indent* buffer. | 1018 | "*Controls when `sh-learn-buffer-indent' pops the `*indent*' buffer. |
| 1019 | If t it is always shown. If nil, it is shown only when there | 1019 | If t it is always shown. If nil, it is shown only when there |
| 1020 | are conflicts." | 1020 | are conflicts." |
| 1021 | :type '(choice | 1021 | :type '(choice |
| @@ -1044,7 +1044,7 @@ Can be set to a number, or to nil which means leave it as is." | |||
| 1044 | 1044 | ||
| 1045 | (defcustom sh-basic-offset 4 | 1045 | (defcustom sh-basic-offset 4 |
| 1046 | "*The default indentation increment. | 1046 | "*The default indentation increment. |
| 1047 | This value is used for the + and - symbols in an indentation variable." | 1047 | This value is used for the `+' and `-' symbols in an indentation variable." |
| 1048 | :type 'integer | 1048 | :type 'integer |
| 1049 | :group 'sh-indentation) | 1049 | :group 'sh-indentation) |
| 1050 | 1050 | ||
| @@ -1088,7 +1088,7 @@ a number means align to that column, e.g. 0 means fist column." | |||
| 1088 | :menu-tag "/ Indent left half sh-basic-offset"))) | 1088 | :menu-tag "/ Indent left half sh-basic-offset"))) |
| 1089 | 1089 | ||
| 1090 | (defcustom sh-indent-for-else 0 | 1090 | (defcustom sh-indent-for-else 0 |
| 1091 | "*How much to indent an else relative to an if. Usually 0." | 1091 | "*How much to indent an `else' relative to its `if'. Usually 0." |
| 1092 | :type `(choice | 1092 | :type `(choice |
| 1093 | (integer :menu-tag "A number (positive=>indent right)" | 1093 | (integer :menu-tag "A number (positive=>indent right)" |
| 1094 | :tag "A number") | 1094 | :tag "A number") |
| @@ -1104,75 +1104,75 @@ a number means align to that column, e.g. 0 means fist column." | |||
| 1104 | sh-symbol-list)) | 1104 | sh-symbol-list)) |
| 1105 | 1105 | ||
| 1106 | (defcustom sh-indent-for-fi 0 | 1106 | (defcustom sh-indent-for-fi 0 |
| 1107 | "*How much to indent a fi relative to an if. Usually 0." | 1107 | "*How much to indent a `fi' relative to its `if'. Usually 0." |
| 1108 | :type `(choice ,@ sh-number-or-symbol-list ) | 1108 | :type `(choice ,@ sh-number-or-symbol-list ) |
| 1109 | :group 'sh-indentation) | 1109 | :group 'sh-indentation) |
| 1110 | 1110 | ||
| 1111 | (defcustom sh-indent-for-done '0 | 1111 | (defcustom sh-indent-for-done 0 |
| 1112 | "*How much to indent a done relative to its matching stmt. Usually 0." | 1112 | "*How much to indent a `done' relative to its matching stmt. Usually 0." |
| 1113 | :type `(choice ,@ sh-number-or-symbol-list ) | 1113 | :type `(choice ,@ sh-number-or-symbol-list ) |
| 1114 | :group 'sh-indentation) | 1114 | :group 'sh-indentation) |
| 1115 | 1115 | ||
| 1116 | (defcustom sh-indent-after-else '+ | 1116 | (defcustom sh-indent-after-else '+ |
| 1117 | "*How much to indent a statement after an else statement." | 1117 | "*How much to indent a statement after an `else' statement." |
| 1118 | :type `(choice ,@ sh-number-or-symbol-list ) | 1118 | :type `(choice ,@ sh-number-or-symbol-list ) |
| 1119 | :group 'sh-indentation) | 1119 | :group 'sh-indentation) |
| 1120 | 1120 | ||
| 1121 | (defcustom sh-indent-after-if '+ | 1121 | (defcustom sh-indent-after-if '+ |
| 1122 | "*How much to indent a statement after an if statement. | 1122 | "*How much to indent a statement after an `if' statement. |
| 1123 | This includes lines after else and elif statements, too, but | 1123 | This includes lines after `else' and `elif' statements, too, but |
| 1124 | does not affect then else elif or fi statements themselves." | 1124 | does not affect the `else', `elif' or `fi' statements themselves." |
| 1125 | :type `(choice ,@ sh-number-or-symbol-list ) | 1125 | :type `(choice ,@ sh-number-or-symbol-list ) |
| 1126 | :group 'sh-indentation) | 1126 | :group 'sh-indentation) |
| 1127 | 1127 | ||
| 1128 | (defcustom sh-indent-for-then 0 | 1128 | (defcustom sh-indent-for-then 0 |
| 1129 | "*How much to indent a then relative to an if." | 1129 | "*How much to indent a `then' relative to its `if'." |
| 1130 | :type `(choice ,@ sh-number-or-symbol-list ) | 1130 | :type `(choice ,@ sh-number-or-symbol-list ) |
| 1131 | :group 'sh-indentation) | 1131 | :group 'sh-indentation) |
| 1132 | 1132 | ||
| 1133 | (defcustom sh-indent-for-do 0 | 1133 | (defcustom sh-indent-for-do 0 |
| 1134 | "*How much to indent a do statement. | 1134 | "*How much to indent a `do' statement. |
| 1135 | This is relative to the statement before the do, i.e. the | 1135 | This is relative to the statement before the `do', typically a |
| 1136 | while until or for statement." | 1136 | `while', `until', `for', `repeat' or `select' statement." |
| 1137 | :type `(choice ,@ sh-number-or-symbol-list) | 1137 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1138 | :group 'sh-indentation) | 1138 | :group 'sh-indentation) |
| 1139 | 1139 | ||
| 1140 | (defcustom sh-indent-after-do '* | 1140 | (defcustom sh-indent-after-do '+ |
| 1141 | "*How much to indent a line after a do statement. | 1141 | "*How much to indent a line after a `do' statement. |
| 1142 | This is used when the do is the first word of the line. | 1142 | This is used when the `do' is the first word of the line. |
| 1143 | This is relative to the statement before the do, e.g. a | 1143 | This is relative to the statement before the `do', typically a |
| 1144 | while for repeat or select statement." | 1144 | `while', `until', `for', `repeat' or `select' statement." |
| 1145 | :type `(choice ,@ sh-number-or-symbol-list) | 1145 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1146 | :group 'sh-indentation) | 1146 | :group 'sh-indentation) |
| 1147 | 1147 | ||
| 1148 | (defcustom sh-indent-after-loop-construct '+ | 1148 | (defcustom sh-indent-after-loop-construct '+ |
| 1149 | "*How much to indent a statement after a loop construct. | 1149 | "*How much to indent a statement after a loop construct. |
| 1150 | 1150 | ||
| 1151 | This variable is used when the keyword \"do\" is on the same line as the | 1151 | This variable is used when the keyword `do' is on the same line as the |
| 1152 | loop statement (e.g. \"until\", \"while\" or \"for\"). | 1152 | loop statement (e.g., `until', `while' or `for'). |
| 1153 | If the do is on a line by itself, then `sh-indent-after-do' is used instead." | 1153 | If the `do' is on a line by itself, then `sh-indent-after-do' is used instead." |
| 1154 | :type `(choice ,@ sh-number-or-symbol-list) | 1154 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1155 | :group 'sh-indentation) | 1155 | :group 'sh-indentation) |
| 1156 | 1156 | ||
| 1157 | 1157 | ||
| 1158 | (defcustom sh-indent-after-done 0 | 1158 | (defcustom sh-indent-after-done 0 |
| 1159 | "*How much to indent a statement after a \"done\" keyword. | 1159 | "*How much to indent a statement after a `done' keyword. |
| 1160 | Normally this is 0, which aligns the \"done\" to the matching | 1160 | Normally this is 0, which aligns the `done' to the matching |
| 1161 | looping construct line. | 1161 | looping construct line. |
| 1162 | Setting it non-zero allows you to have the \"do\" statement on a line | 1162 | Setting it non-zero allows you to have the `do' statement on a line |
| 1163 | by itself and align the done under to do." | 1163 | by itself and align the done under to do." |
| 1164 | :type `(choice ,@ sh-number-or-symbol-list) | 1164 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1165 | :group 'sh-indentation) | 1165 | :group 'sh-indentation) |
| 1166 | 1166 | ||
| 1167 | (defcustom sh-indent-for-case-label '+ | 1167 | (defcustom sh-indent-for-case-label '+ |
| 1168 | "*How much to indent a case label statement. | 1168 | "*How much to indent a case label statement. |
| 1169 | This is relative to the line containing the case statement." | 1169 | This is relative to the line containing the `case' statement." |
| 1170 | :type `(choice ,@ sh-number-or-symbol-list) | 1170 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1171 | :group 'sh-indentation) | 1171 | :group 'sh-indentation) |
| 1172 | 1172 | ||
| 1173 | (defcustom sh-indent-for-case-alt '++ | 1173 | (defcustom sh-indent-for-case-alt '++ |
| 1174 | "*How much to indent statements after the case label. | 1174 | "*How much to indent statements after the case label. |
| 1175 | This is relative to the line containing the case statement." | 1175 | This is relative to the line containing the `case' statement." |
| 1176 | :type `(choice ,@ sh-number-or-symbol-list) | 1176 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1177 | :group 'sh-indentation) | 1177 | :group 'sh-indentation) |
| 1178 | 1178 | ||
| @@ -1184,7 +1184,7 @@ This is relative to the line containing the case statement." | |||
| 1184 | 1184 | ||
| 1185 | (defcustom sh-indent-after-open '+ | 1185 | (defcustom sh-indent-after-open '+ |
| 1186 | "*How much to indent after a line with an opening parenthesis or brace. | 1186 | "*How much to indent after a line with an opening parenthesis or brace. |
| 1187 | For an open paren after a function `sh-indent-after-function' is used." | 1187 | For an open paren after a function, `sh-indent-after-function' is used." |
| 1188 | :type `(choice ,@ sh-number-or-symbol-list) | 1188 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1189 | :group 'sh-indentation) | 1189 | :group 'sh-indentation) |
| 1190 | 1190 | ||
| @@ -1196,13 +1196,13 @@ For an open paren after a function `sh-indent-after-function' is used." | |||
| 1196 | ;; These 2 are for the rc shell: | 1196 | ;; These 2 are for the rc shell: |
| 1197 | 1197 | ||
| 1198 | (defcustom sh-indent-after-switch '+ | 1198 | (defcustom sh-indent-after-switch '+ |
| 1199 | "*How much to indent a case statement relative to the switch statement. | 1199 | "*How much to indent a `case' statement relative to the `switch' statement. |
| 1200 | This is for the rc shell." | 1200 | This is for the rc shell." |
| 1201 | :type `(choice ,@ sh-number-or-symbol-list) | 1201 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1202 | :group 'sh-indentation) | 1202 | :group 'sh-indentation) |
| 1203 | 1203 | ||
| 1204 | (defcustom sh-indent-after-case '+ | 1204 | (defcustom sh-indent-after-case '+ |
| 1205 | "*How much to indent a statement relative to the case statement. | 1205 | "*How much to indent a statement relative to the `case' statement. |
| 1206 | This is for the rc shell." | 1206 | This is for the rc shell." |
| 1207 | :type `(choice ,@ sh-number-or-symbol-list) | 1207 | :type `(choice ,@ sh-number-or-symbol-list) |
| 1208 | :group 'sh-indentation) | 1208 | :group 'sh-indentation) |
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el index 95cfbb15196..a3447befa20 100644 --- a/lisp/progmodes/tcl.el +++ b/lisp/progmodes/tcl.el | |||
| @@ -123,15 +123,18 @@ | |||
| 123 | 123 | ||
| 124 | (defcustom tcl-indent-level 4 | 124 | (defcustom tcl-indent-level 4 |
| 125 | "*Indentation of Tcl statements with respect to containing block." | 125 | "*Indentation of Tcl statements with respect to containing block." |
| 126 | :type 'integer) | 126 | :type 'integer |
| 127 | :group 'tcl) | ||
| 127 | 128 | ||
| 128 | (defcustom tcl-continued-indent-level 4 | 129 | (defcustom tcl-continued-indent-level 4 |
| 129 | "*Indentation of continuation line relative to first line of command." | 130 | "*Indentation of continuation line relative to first line of command." |
| 130 | :type 'integer) | 131 | :type 'integer |
| 132 | :group 'tcl) | ||
| 131 | 133 | ||
| 132 | (defcustom tcl-auto-newline nil | 134 | (defcustom tcl-auto-newline nil |
| 133 | "*Non-nil means automatically newline before and after braces you insert." | 135 | "*Non-nil means automatically newline before and after braces you insert." |
| 134 | :type 'boolean) | 136 | :type 'boolean |
| 137 | :group 'tcl) | ||
| 135 | 138 | ||
| 136 | (defcustom tcl-tab-always-indent tab-always-indent | 139 | (defcustom tcl-tab-always-indent tab-always-indent |
| 137 | "*Control effect of TAB key. | 140 | "*Control effect of TAB key. |
| @@ -149,7 +152,8 @@ to take place: | |||
| 149 | 6. Move backward to start of comment, indenting if necessary." | 152 | 6. Move backward to start of comment, indenting if necessary." |
| 150 | :type '(choice (const :tag "Always" t) | 153 | :type '(choice (const :tag "Always" t) |
| 151 | (const :tag "Beginning only" nil) | 154 | (const :tag "Beginning only" nil) |
| 152 | (const :tag "Maybe move or make or delete comment" 'tcl))) | 155 | (const :tag "Maybe move or make or delete comment" 'tcl)) |
| 156 | :group 'tcl) | ||
| 153 | 157 | ||
| 154 | 158 | ||
| 155 | (defcustom tcl-electric-hash-style nil ;; 'smart | 159 | (defcustom tcl-electric-hash-style nil ;; 'smart |
| @@ -160,23 +164,28 @@ meaning that the choice between `backslash' and `quote' should be | |||
| 160 | made depending on the number of hashes inserted; or nil, meaning that | 164 | made depending on the number of hashes inserted; or nil, meaning that |
| 161 | no quoting should be done. Any other value for this variable is | 165 | no quoting should be done. Any other value for this variable is |
| 162 | taken to mean `smart'. The default is nil." | 166 | taken to mean `smart'. The default is nil." |
| 163 | :type '(choice (const backslash) (const quote) (const smart) (const nil))) | 167 | :type '(choice (const backslash) (const quote) (const smart) (const nil)) |
| 168 | :group 'tcl) | ||
| 164 | 169 | ||
| 165 | (defcustom tcl-help-directory-list nil | 170 | (defcustom tcl-help-directory-list nil |
| 166 | "*List of topmost directories containing TclX help files." | 171 | "*List of topmost directories containing TclX help files." |
| 167 | :type '(repeat directory)) | 172 | :type '(repeat directory) |
| 173 | :group 'tcl) | ||
| 168 | 174 | ||
| 169 | (defcustom tcl-use-smart-word-finder t | 175 | (defcustom tcl-use-smart-word-finder t |
| 170 | "*If not nil, use smart way to find current word, for Tcl help feature." | 176 | "*If not nil, use smart way to find current word, for Tcl help feature." |
| 171 | :type 'boolean) | 177 | :type 'boolean |
| 178 | :group 'tcl) | ||
| 172 | 179 | ||
| 173 | (defcustom tcl-application "wish" | 180 | (defcustom tcl-application "wish" |
| 174 | "*Name of Tcl program to run in inferior Tcl mode." | 181 | "*Name of Tcl program to run in inferior Tcl mode." |
| 175 | :type 'string) | 182 | :type 'string |
| 183 | :group 'tcl) | ||
| 176 | 184 | ||
| 177 | (defcustom tcl-command-switches nil | 185 | (defcustom tcl-command-switches nil |
| 178 | "*List of switches to supply to the `tcl-application' program." | 186 | "*List of switches to supply to the `tcl-application' program." |
| 179 | :type '(repeat string)) | 187 | :type '(repeat string) |
| 188 | :group 'tcl) | ||
| 180 | 189 | ||
| 181 | (defcustom tcl-prompt-regexp "^\\(% \\|\\)" | 190 | (defcustom tcl-prompt-regexp "^\\(% \\|\\)" |
| 182 | "*If not nil, a regexp that will match the prompt in the inferior process. | 191 | "*If not nil, a regexp that will match the prompt in the inferior process. |
| @@ -184,7 +193,8 @@ If nil, the prompt is the name of the application with \">\" appended. | |||
| 184 | 193 | ||
| 185 | The default is \"^\\(% \\|\\)\", which will match the default primary | 194 | The default is \"^\\(% \\|\\)\", which will match the default primary |
| 186 | and secondary prompts for tclsh and wish." | 195 | and secondary prompts for tclsh and wish." |
| 187 | :type 'regexp) | 196 | :type 'regexp |
| 197 | :group 'tcl) | ||
| 188 | 198 | ||
| 189 | (defcustom inferior-tcl-source-command "source %s\n" | 199 | (defcustom inferior-tcl-source-command "source %s\n" |
| 190 | "*Format-string for building a Tcl command to load a file. | 200 | "*Format-string for building a Tcl command to load a file. |
| @@ -192,7 +202,8 @@ This format string should use `%s' to substitute a file name | |||
| 192 | and should result in a Tcl expression that will command the | 202 | and should result in a Tcl expression that will command the |
| 193 | inferior Tcl to load that file. The filename will be appropriately | 203 | inferior Tcl to load that file. The filename will be appropriately |
| 194 | quoted for Tcl." | 204 | quoted for Tcl." |
| 195 | :type 'string) | 205 | :type 'string |
| 206 | :group 'tcl) | ||
| 196 | 207 | ||
| 197 | (defface tcl-escaped-newline '((t :inherit font-lock-string-face)) | 208 | (defface tcl-escaped-newline '((t :inherit font-lock-string-face)) |
| 198 | "Face used for (non-escaped) backslash at end of a line in Tcl mode." | 209 | "Face used for (non-escaped) backslash at end of a line in Tcl mode." |
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index 9f0e63e80a6..12f04895f98 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el | |||
| @@ -5082,7 +5082,7 @@ Return a valid value only." | |||
| 5082 | ((string-equal "++" input) '++) | 5082 | ((string-equal "++" input) '++) |
| 5083 | ((string-equal "--" input) '--) | 5083 | ((string-equal "--" input) '--) |
| 5084 | ((string-match "^-?[0-9]+$" input) | 5084 | ((string-match "^-?[0-9]+$" input) |
| 5085 | (string-to-int input)) | 5085 | (string-to-number input)) |
| 5086 | ((fboundp (setq interned (intern input))) | 5086 | ((fboundp (setq interned (intern input))) |
| 5087 | interned) | 5087 | interned) |
| 5088 | ((boundp interned) interned) | 5088 | ((boundp interned) interned) |
| @@ -13701,10 +13701,10 @@ entity ENT-KEY." | |||
| 13701 | (condition-case () | 13701 | (condition-case () |
| 13702 | (progn (load-file file-dir-name) | 13702 | (progn (load-file file-dir-name) |
| 13703 | (string< (mapconcat | 13703 | (string< (mapconcat |
| 13704 | (lambda (a) (format "%3d" (string-to-int a))) | 13704 | (lambda (a) (format "%3d" (string-to-number a))) |
| 13705 | (split-string "3.31.14" "\\.") "") | 13705 | (split-string "3.31.14" "\\.") "") |
| 13706 | (mapconcat | 13706 | (mapconcat |
| 13707 | (lambda (a) (format "%3d" (string-to-int a))) | 13707 | (lambda (a) (format "%3d" (string-to-number a))) |
| 13708 | (split-string vhdl-cache-version "\\.") ""))) | 13708 | (split-string vhdl-cache-version "\\.") ""))) |
| 13709 | (error (progn (vhdl-warning (format "ERROR: Corrupted cache file: \"%s\"" file-dir-name)) | 13709 | (error (progn (vhdl-warning (format "ERROR: Corrupted cache file: \"%s\"" file-dir-name)) |
| 13710 | nil)))))) | 13710 | nil)))))) |
| @@ -14075,7 +14075,7 @@ otherwise use cached data." | |||
| 14075 | (beginning-of-line) (looking-at "^\\([0-9]+\\):")) | 14075 | (beginning-of-line) (looking-at "^\\([0-9]+\\):")) |
| 14076 | (re-search-backward | 14076 | (re-search-backward |
| 14077 | (format "^[0-%d]:\\s-*[[{<]-" | 14077 | (format "^[0-%d]:\\s-*[[{<]-" |
| 14078 | (max (1- (string-to-int (match-string 1))) 0)) nil t))) | 14078 | (max (1- (string-to-number (match-string 1))) 0)) nil t))) |
| 14079 | (goto-char (match-end 0)) | 14079 | (goto-char (match-end 0)) |
| 14080 | (speedbar-do-function-pointer) | 14080 | (speedbar-do-function-pointer) |
| 14081 | (speedbar-center-buffer-smartly))) | 14081 | (speedbar-center-buffer-smartly))) |