diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/debug.el | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index a84a7aca52c..58616ff3076 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -1,6 +1,7 @@ ;;; debug.el --- debuggers and related commands for Emacs -;; Copyright (C) 1985, 1986, 1994, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1994, 2001, 2003, 2005 +;; Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: lisp, tools, maint @@ -188,8 +189,7 @@ first will be printed into the backtrace buffer." (backtrace-debug 3 t)) (debugger-reenable) (message "") - (let ((inhibit-trace t) - (standard-output nil) + (let ((standard-output nil) (buffer-read-only t)) (message "") ;; Make sure we unbind buffer-read-only in the right buffer. @@ -197,15 +197,16 @@ first will be printed into the backtrace buffer." (recursive-edit))))) ;; Kill or at least neuter the backtrace buffer, so that users ;; don't try to execute debugger commands in an invalid context. - (if (get-buffer-window debugger-buffer 'visible) + (if (get-buffer-window debugger-buffer 0) ;; 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 but leave it visible. - (save-excursion - (set-buffer debugger-buffer) + ;; erase it and hide it but keep it alive. + (with-current-buffer debugger-buffer (erase-buffer) - (fundamental-mode)) + (fundamental-mode) + (with-selected-window (get-buffer-window debugger-buffer 0) + (bury-buffer))) (kill-buffer debugger-buffer)) (set-match-data debugger-outer-match-data))) ;; Put into effect the modified values of these variables @@ -543,29 +544,26 @@ Applies to the frame whose line point is on in the backtrace." 'read-expression-history))) (debugger-env-macro (eval-expression exp))) -(defvar debugger-mode-map nil) -(unless debugger-mode-map - (let ((loop ? )) - (setq debugger-mode-map (make-keymap)) - (set-keymap-parent debugger-mode-map button-buffer-map) - (suppress-keymap debugger-mode-map) - (define-key debugger-mode-map "-" 'negative-argument) - (define-key debugger-mode-map "b" 'debugger-frame) - (define-key debugger-mode-map "c" 'debugger-continue) - (define-key debugger-mode-map "j" 'debugger-jump) - (define-key debugger-mode-map "r" 'debugger-return-value) - (define-key debugger-mode-map "u" 'debugger-frame-clear) - (define-key debugger-mode-map "d" 'debugger-step-through) - (define-key debugger-mode-map "l" 'debugger-list-functions) - (define-key debugger-mode-map "h" 'describe-mode) - (define-key debugger-mode-map "q" 'top-level) - (define-key debugger-mode-map "e" 'debugger-eval-expression) - (define-key debugger-mode-map " " 'next-line) - (define-key debugger-mode-map "R" 'debugger-record-expression) - (define-key debugger-mode-map "\C-m" 'help-follow) - (define-key debugger-mode-map [mouse-2] 'push-button) - )) - +(defvar debugger-mode-map + (let ((map (make-keymap))) + (set-keymap-parent map button-buffer-map) + (suppress-keymap map) + (define-key map "-" 'negative-argument) + (define-key map "b" 'debugger-frame) + (define-key map "c" 'debugger-continue) + (define-key map "j" 'debugger-jump) + (define-key map "r" 'debugger-return-value) + (define-key map "u" 'debugger-frame-clear) + (define-key map "d" 'debugger-step-through) + (define-key map "l" 'debugger-list-functions) + (define-key map "h" 'describe-mode) + (define-key map "q" 'top-level) + (define-key map "e" 'debugger-eval-expression) + (define-key map " " 'next-line) + (define-key map "R" 'debugger-record-expression) + (define-key map "\C-m" 'help-follow) + (define-key map [mouse-2] 'push-button) + map)) (defcustom debugger-record-buffer "*Debugger-record*" "*Buffer name for expression values, for \\[debugger-record-expression]." @@ -616,7 +614,7 @@ Complete list of commands: (setq truncate-lines t) (set-syntax-table emacs-lisp-mode-syntax-table) (use-local-map debugger-mode-map) - (run-hooks 'debugger-mode-hook)) + (run-mode-hooks 'debugger-mode-hook)) ;;;###autoload (defun debug-on-entry (function) @@ -716,22 +714,23 @@ If argument is nil or an empty string, cancel for all functions." (defun debugger-list-functions () "Display a list of all the functions now set to debug on entry." (interactive) - (with-output-to-temp-buffer "*Help*" - (if (null debug-function-list) - (princ "No debug-on-entry functions now\n") - (princ "Functions set to debug on entry:\n\n") - (let ((list debug-function-list)) - (while list - (prin1 (car list)) - (terpri) - (setq list (cdr list)))) - (princ "Note: if you have redefined a function, then it may no longer\n") - (princ "be set to debug on entry, even if it is in the list.")) - (save-excursion - (set-buffer standard-output) - (help-mode)))) + (require 'help-mode) + (help-setup-xref '(debugger-list-functions) (interactive-p)) + (with-output-to-temp-buffer (help-buffer) + (with-current-buffer standard-output + (if (null debug-function-list) + (princ "No debug-on-entry functions now\n") + (princ "Functions set to debug on entry:\n\n") + (dolist (fun debug-function-list) + (make-text-button (point) (progn (prin1 fun) (point)) + 'type 'help-function + 'help-args (list fun)) + (terpri)) + (terpri) + (princ "Note: if you have redefined a function, then it may no longer\n") + (princ "be set to debug on entry, even if it is in the list."))))) (provide 'debug) -;;; arch-tag: b6ec7047-f801-4103-9c63-d69322db9d3b +;; arch-tag: b6ec7047-f801-4103-9c63-d69322db9d3b ;;; debug.el ends here |