diff options
| author | Richard M. Stallman | 2005-07-10 17:06:33 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2005-07-10 17:06:33 +0000 |
| commit | 245f0222c60fd267bef3f2db1b1fc4eeda60b7eb (patch) | |
| tree | 36b2225430f9a53869744321fc3bbe1618107a30 | |
| parent | 3f39f99678a85583ed5217ddc236afaae54d4357 (diff) | |
| download | emacs-245f0222c60fd267bef3f2db1b1fc4eeda60b7eb.tar.gz emacs-245f0222c60fd267bef3f2db1b1fc4eeda60b7eb.zip | |
(debug-help-follow): New function.
(debugger-mode-map): Use that instead of help-follow.
(debugger-setup-buffer): Use eval-buffer-list to handle eval-buffer frames.
| -rw-r--r-- | lisp/emacs-lisp/debug.el | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 76d86985079..11909cf44c0 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el | |||
| @@ -312,18 +312,17 @@ That buffer should be current already." | |||
| 312 | ;; After any frame that uses eval-buffer, | 312 | ;; After any frame that uses eval-buffer, |
| 313 | ;; insert a line that states the buffer position it's reading at. | 313 | ;; insert a line that states the buffer position it's reading at. |
| 314 | (save-excursion | 314 | (save-excursion |
| 315 | (while (re-search-forward "^ eval-buffer(" nil t) | 315 | (let ((tem eval-buffer-list)) |
| 316 | (end-of-line) | 316 | (while (and tem |
| 317 | (insert (format " ; Reading at buffer position %d" | 317 | (re-search-forward "^ eval-\\(buffer\\|region\\)(" nil t)) |
| 318 | (with-current-buffer | 318 | (end-of-line) |
| 319 | (or (nth 2 (backtrace-frame (debugger-frame-number))) | 319 | (insert (format " ; Reading at buffer position %d" |
| 320 | debugger-old-buffer) | 320 | ;; This will get the wrong result |
| 321 | (point))))) | 321 | ;; if there are two nested eval-region calls |
| 322 | (while (re-search-forward "^ eval-region(" nil t) | 322 | ;; for the same buffer. That's not a very useful case. |
| 323 | (end-of-line) | 323 | (with-current-buffer (car tem) |
| 324 | (insert (format " ; Reading at buffer position %d" | 324 | (point)))) |
| 325 | (with-current-buffer debugger-old-buffer | 325 | (pop tem)))) |
| 326 | (point)))))) | ||
| 327 | (debugger-make-xrefs)) | 326 | (debugger-make-xrefs)) |
| 328 | 327 | ||
| 329 | (defun debugger-make-xrefs (&optional buffer) | 328 | (defun debugger-make-xrefs (&optional buffer) |
| @@ -598,10 +597,10 @@ Applies to the frame whose line point is on in the backtrace." | |||
| 598 | (define-key map "e" 'debugger-eval-expression) | 597 | (define-key map "e" 'debugger-eval-expression) |
| 599 | (define-key map " " 'next-line) | 598 | (define-key map " " 'next-line) |
| 600 | (define-key map "R" 'debugger-record-expression) | 599 | (define-key map "R" 'debugger-record-expression) |
| 601 | (define-key map "\C-m" 'help-follow) | 600 | (define-key map "\C-m" 'debug-help-follow) |
| 602 | (define-key map [mouse-2] 'push-button) | 601 | (define-key map [mouse-2] 'push-button) |
| 603 | map)) | 602 | map)) |
| 604 | 603 | ||
| 605 | (defcustom debugger-record-buffer "*Debugger-record*" | 604 | (defcustom debugger-record-buffer "*Debugger-record*" |
| 606 | "*Buffer name for expression values, for \\[debugger-record-expression]." | 605 | "*Buffer name for expression values, for \\[debugger-record-expression]." |
| 607 | :type 'string | 606 | :type 'string |
| @@ -627,6 +626,27 @@ Applies to the frame whose line point is on in the backtrace." | |||
| 627 | (buffer-substring (line-beginning-position 0) | 626 | (buffer-substring (line-beginning-position 0) |
| 628 | (line-end-position 0))))) | 627 | (line-end-position 0))))) |
| 629 | 628 | ||
| 629 | (defun debug-help-follow (&optional pos) | ||
| 630 | "Follow cross-reference at POS, defaulting to point. | ||
| 631 | |||
| 632 | For the cross-reference format, see `help-make-xrefs'." | ||
| 633 | (interactive "d") | ||
| 634 | (require 'help-mode) | ||
| 635 | (unless pos | ||
| 636 | (setq pos (point))) | ||
| 637 | (unless (push-button pos) | ||
| 638 | ;; check if the symbol under point is a function or variable | ||
| 639 | (let ((sym | ||
| 640 | (intern | ||
| 641 | (save-excursion | ||
| 642 | (goto-char pos) (skip-syntax-backward "w_") | ||
| 643 | (buffer-substring (point) | ||
| 644 | (progn (skip-syntax-forward "w_") | ||
| 645 | (point))))))) | ||
| 646 | (when (or (boundp sym) (fboundp sym) (facep sym)) | ||
| 647 | (switch-to-buffer-other-window (generate-new-buffer "*Help*")) | ||
| 648 | (help-do-xref pos #'help-xref-interned (list sym)))))) | ||
| 649 | |||
| 630 | (put 'debugger-mode 'mode-class 'special) | 650 | (put 'debugger-mode 'mode-class 'special) |
| 631 | 651 | ||
| 632 | (defun debugger-mode () | 652 | (defun debugger-mode () |