summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/debug.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/debug.el')
-rw-r--r--lisp/emacs-lisp/debug.el93
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