diff lisp/emacs-lisp/debug.el @ 60256:62670df9ca97

(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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 26 Feb 2005 05:28:24 +0000
parents f9293296e0cb
children 6649c3010597
line wrap: on
line diff
--- a/lisp/emacs-lisp/debug.el	Fri Feb 25 23:32:44 2005 +0000
+++ b/lisp/emacs-lisp/debug.el	Sat Feb 26 05:28:24 2005 +0000
@@ -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 @@
 		    (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 @@
 		    (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 @@
 			       '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 @@
   (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 @@
 (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