(debug): Hide the buffer if it's not killed.

Remove unused and inexistent var `inhibit-trace'.
(debugger-mode): Use run-mode-hooks.
(debugger-list-functions): Add buttons; setup xref stack.
This commit is contained in:
Stefan Monnier 2005-02-26 05:28:24 +00:00
parent c6f4488cfd
commit 78d54deee7
2 changed files with 70 additions and 64 deletions

View file

@ -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