diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/debug.el | 42 | ||||
-rw-r--r-- | lisp/emacs-lisp/easy-mmode.el | 15 | ||||
-rw-r--r-- | lisp/emacs-lisp/lisp-mode.el | 3 |
3 files changed, 48 insertions, 12 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 2149cba8720..f1ff37551d7 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -88,6 +88,8 @@ This is to optimize `debugger-make-xrefs'.") (defvar debugger-outer-standard-output) (defvar debugger-outer-inhibit-redisplay) (defvar debugger-outer-cursor-in-echo-area) +(defvar debugger-will-be-back nil + "Non-nil if we expect to get back in the debugger soon.") (defvar inhibit-debug-on-entry nil "Non-nil means that debug-on-entry is disabled.") @@ -97,6 +99,8 @@ This is to optimize `debugger-make-xrefs'.") This variable is used by `debugger-jump', `debugger-step-through', and `debugger-reenable' to temporarily disable debug-on-entry.") +(defvar inhibit-trace) ;Not yet implemented. + ;;;###autoload (setq debugger 'debug) ;;;###autoload @@ -121,6 +125,7 @@ first will be printed into the backtrace buffer." (get-buffer-create "*Backtrace*"))) (debugger-old-buffer (current-buffer)) (debugger-step-after-exit nil) + (debugger-will-be-back nil) ;; Don't keep reading from an executing kbd macro! (executing-kbd-macro nil) ;; Save the outer values of these vars for the `e' command @@ -178,7 +183,7 @@ first will be printed into the backtrace buffer." ;; Place an extra debug-on-exit for macro's. (when (eq 'lambda (car-safe (cadr (backtrace-frame 4)))) (backtrace-debug 5 t))) - (pop-to-buffer debugger-buffer) + (pop-to-buffer debugger-buffer) (debugger-mode) (debugger-setup-buffer debugger-args) (when noninteractive @@ -210,12 +215,23 @@ first will be printed into the backtrace buffer." ;; Still visible despite the save-window-excursion? Maybe it ;; it's in a pop-up frame. It would be annoying to delete and ;; recreate it every time the debugger stops, so instead we'll - ;; erase it and hide it but keep it alive. + ;; erase it (and maybe hide it) but keep it alive. (with-current-buffer debugger-buffer (erase-buffer) (fundamental-mode) (with-selected-window (get-buffer-window debugger-buffer 0) - (bury-buffer))) + (when (and (window-dedicated-p (selected-window)) + (not debugger-will-be-back)) + ;; If the window is not dedicated, burying the buffer + ;; will mean that the frame created for it is left + ;; around showing some random buffer, and next time we + ;; pop to the debugger buffer we'll create yet + ;; another frame. + ;; If debugger-will-be-back is non-nil, the frame + ;; would need to be de-iconified anyway immediately + ;; after when we re-enter the debugger, so iconifying it + ;; here would cause flashing. + (bury-buffer)))) (kill-buffer debugger-buffer)) (set-match-data debugger-outer-match-data))) ;; Put into effect the modified values of these variables @@ -307,7 +323,7 @@ That buffer should be current already." (save-excursion (set-buffer (or buffer (current-buffer))) (setq buffer (current-buffer)) - (let ((buffer-read-only nil) + (let ((inhibit-read-only t) (old-end (point-min)) (new-end (point-min))) ;; If we saved an old backtrace, find the common part ;; between the new and the old. @@ -377,6 +393,7 @@ Enter another debugger on next entry to eval, apply or funcall." (interactive) (setq debugger-step-after-exit t) (setq debugger-jumping-flag t) + (setq debugger-will-be-back t) (add-hook 'post-command-hook 'debugger-reenable) (message "Proceeding, will debug on next eval or call.") (exit-recursive-edit)) @@ -387,6 +404,12 @@ Enter another debugger on next entry to eval, apply or funcall." (unless debugger-may-continue (error "Cannot continue")) (message "Continuing.") + (save-excursion + ;; Check to see if we've flagged some frame for debug-on-exit, in which + ;; case we'll probably come back to the debugger soon. + (goto-char (point-min)) + (if (re-search-forward "^\\* " nil t) + (setq debugger-will-be-back t))) (exit-recursive-edit)) (defun debugger-return-value (val) @@ -397,6 +420,12 @@ will be used, such as in a debug on exit from a frame." (setq debugger-value val) (princ "Returning " t) (prin1 debugger-value) + (save-excursion + ;; Check to see if we've flagged some frame for debug-on-exit, in which + ;; case we'll probably come back to the debugger soon. + (goto-char (point-min)) + (if (re-search-forward "^\\* " nil t) + (setq debugger-will-be-back t))) (exit-recursive-edit)) (defun debugger-jump () @@ -406,6 +435,7 @@ will be used, such as in a debug on exit from a frame." (setq debugger-jumping-flag t) (add-hook 'post-command-hook 'debugger-reenable) (message "Continuing through this frame") + (setq debugger-will-be-back t) (exit-recursive-edit)) (defun debugger-reenable () @@ -454,7 +484,7 @@ Applies to the frame whose line point is on in the backtrace." (beginning-of-line) (backtrace-debug (debugger-frame-number) t) (if (= (following-char) ? ) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (delete-char 1) (insert ?*))) (beginning-of-line)) @@ -470,7 +500,7 @@ Applies to the frame whose line point is on in the backtrace." (beginning-of-line) (backtrace-debug (debugger-frame-number) nil) (if (= (following-char) ?*) - (let ((buffer-read-only nil)) + (let ((inhibit-read-only t)) (delete-char 1) (insert ? ))) (beginning-of-line)) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index bb0fa666217..a342f8a5530 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -183,13 +183,18 @@ Use the command `%s' to change this variable." pretty-name mode)) (let ((curfile (or (and (boundp 'byte-compile-current-file) byte-compile-current-file) - load-file-name))) - `(defcustom ,mode ,init-value - ,(format "Non-nil if %s is enabled. + load-file-name)) + base-doc-string) + (setq base-doc-string "Non-nil if %s is enabled. See the command `%s' for a description of this minor-mode. Setting this variable directly does not take effect; -use either \\[customize] or the function `%s'." - pretty-name mode mode) +use either \\[customize] or the function `%s'.") + (if (null body) + (setq base-doc-string "Non-nil if %s is enabled. +See the command `%s' for a description of this minor-mode.")) + + `(defcustom ,mode ,init-value + ,(format base-doc-string pretty-name mode mode) :set 'custom-set-minor-mode :initialize 'custom-initialize-default ,@group diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index bb815481bf0..72924417109 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -129,6 +129,7 @@ (put 'defmacro 'doc-string-elt 3) (put 'defmacro* 'doc-string-elt 3) (put 'defsubst 'doc-string-elt 3) +(put 'defstruct 'doc-string-elt 2) (put 'define-skeleton 'doc-string-elt 2) (put 'define-derived-mode 'doc-string-elt 4) (put 'define-compilation-mode 'doc-string-elt 3) @@ -194,7 +195,7 @@ (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *") (make-local-variable 'font-lock-comment-start-skip) ;; Font lock mode uses this only when it KNOWS a comment is starting. - (setq font-lock-comment-start-skip ";+ *") + (setq font-lock-comment-start-skip ";+ *") (make-local-variable 'comment-add) (setq comment-add 1) ;default to `;;' in comment-region (make-local-variable 'comment-column) |