aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Dzhus2009-08-04 14:40:33 +0000
committerDmitry Dzhus2009-08-04 14:40:33 +0000
commit4a6bcbc60243f18091b676b25cdff253515e0baa (patch)
treef12c5cf7db36d5c284cebaec65c77df5668256e6
parent9e919ceebc9dd5f177d37886e10bfcce0de6664b (diff)
downloademacs-4a6bcbc60243f18091b676b25cdff253515e0baa.tar.gz
emacs-4a6bcbc60243f18091b676b25cdff253515e0baa.zip
(gdb-rules-name-maker, gdb-rules-buffer-mode)
(gdb-rules-update-trigger): Accessors for gdb-buffer-rules. (def-gdb-auto-update-handler): New nopreserve optional argument. (gdb-stack-list-frames-custom): Print stack from top to bottom.
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/progmodes/gdb-mi.el47
2 files changed, 36 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 85f277eed8f..f7ee7f9b652 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -41,6 +41,10 @@
41 (gdb-display-disassembly-for-thread) 41 (gdb-display-disassembly-for-thread)
42 (gdb-frame-disassembly-for-thread): New commands for threads 42 (gdb-frame-disassembly-for-thread): New commands for threads
43 buffer. 43 buffer.
44 (gdb-rules-name-maker, gdb-rules-buffer-mode)
45 (gdb-rules-update-trigger): Accessors for gdb-buffer-rules.
46 (def-gdb-auto-update-handler): New nopreserve optional argument.
47 (gdb-stack-list-frames-custom): Print stack from top to bottom.
44 48
452009-08-04 Michael Albinus <michael.albinus@gmx.de> 492009-08-04 Michael Albinus <michael.albinus@gmx.de>
46 50
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index a5119e4257e..1f722264a34 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -926,9 +926,13 @@ INDENT is the current indentation depth."
926;; named according to the rules set forth in the gdb-buffer-rules 926;; named according to the rules set forth in the gdb-buffer-rules
927 927
928(defvar gdb-buffer-rules '()) 928(defvar gdb-buffer-rules '())
929(defalias 'gdb-rules-name-maker 'second) 929
930(defalias 'gdb-rules-buffer-mode 'third) 930(defun gdb-rules-name-maker (rules-entry)
931(defalias 'gdb-rules-update-trigger 'fourth) 931 (cadr rules-entry))
932(defun gdb-rules-buffer-mode (rules-entry)
933 (nth 2 rules-entry))
934(defun gdb-rules-update-trigger (rules-entry)
935 (nth 3 rules-entry))
932 936
933(defun gdb-update-buffer-name () 937(defun gdb-update-buffer-name ()
934 (let ((f (gdb-rules-name-maker (assoc gdb-buffer-type 938 (let ((f (gdb-rules-name-maker (assoc gdb-buffer-type
@@ -1048,14 +1052,15 @@ DOC is an optional documentation string."
1048 (function 1052 (function
1049 (lambda () 1053 (lambda ()
1050 (let ((trigger (gdb-rules-update-trigger 1054 (let ((trigger (gdb-rules-update-trigger
1051 (gdb-get-current-buffer-rules)))) 1055 (gdb-current-buffer-rules))))
1052 (when trigger 1056 (when trigger
1053 (gdb-delete-subscriber 1057 (gdb-delete-subscriber
1054 gdb-buf-publisher 1058 gdb-buf-publisher
1055 ;; This should match gdb-add-subscriber done in 1059 ;; This should match gdb-add-subscriber done in
1056 ;; gdb-get-buffer-create 1060 ;; gdb-get-buffer-create
1057 (cons (current-buffer) 1061 (cons (current-buffer)
1058 (gdb-bind-function-to-buffer trigger (current-buffer)))))))))) 1062 (gdb-bind-function-to-buffer trigger (current-buffer))))))))
1063 nil t))
1059 1064
1060;; GUD buffers are an exception to the rules 1065;; GUD buffers are an exception to the rules
1061(gdb-set-buffer-rules 'gdbmi 'error) 1066(gdb-set-buffer-rules 'gdbmi 'error)
@@ -1454,7 +1459,7 @@ valid signal handlers.")
1454(defun gdb-starting (output-field) 1459(defun gdb-starting (output-field)
1455 ;; CLI commands don't emit ^running at the moment so use gdb-running too. 1460 ;; CLI commands don't emit ^running at the moment so use gdb-running too.
1456 (gdb-input 1461 (gdb-input
1457 (list "-data-list-register-names" 'gdb-get-register-names)) 1462 (list "-data-list-register-names" 'gdb-register-names-handler))
1458 (setq gdb-inferior-status "running") 1463 (setq gdb-inferior-status "running")
1459 (gdb-force-mode-line-update 1464 (gdb-force-mode-line-update
1460 (propertize gdb-inferior-status 'face font-lock-type-face)) 1465 (propertize gdb-inferior-status 'face font-lock-type-face))
@@ -1655,17 +1660,28 @@ trigger argument when describing buffer types with
1655 1660
1656;; Used by disassembly buffer only, the rest use 1661;; Used by disassembly buffer only, the rest use
1657;; def-gdb-trigger-and-handler 1662;; def-gdb-trigger-and-handler
1658(defmacro def-gdb-auto-update-handler (handler-name trigger-name custom-defun) 1663(defmacro def-gdb-auto-update-handler (handler-name trigger-name custom-defun &optional nopreserve)
1659 "Define a handler HANDLER-NAME for TRIGGER-NAME with CUSTOM-DEFUN. 1664 "Define a handler HANDLER-NAME for TRIGGER-NAME with CUSTOM-DEFUN.
1660 1665
1666Handlers are normally called from the buffers they put output in.
1667
1661Delete ((current-buffer) . TRIGGER) from `gdb-pending-triggers', 1668Delete ((current-buffer) . TRIGGER) from `gdb-pending-triggers',
1662erase current buffer and evaluate CUSTOM-DEFUN." 1669erase current buffer and evaluate CUSTOM-DEFUN. Then
1670`gdb-update-buffer-name' is called.
1671
1672If NOPRESERVE is non-nil, window point is not restored after CUSTOM-DEFUN."
1663 `(defun ,handler-name () 1673 `(defun ,handler-name ()
1664 (gdb-delete-pending (cons (current-buffer) ',trigger-name)) 1674 (gdb-delete-pending (cons (current-buffer) ',trigger-name))
1665 (let* ((buffer-read-only nil)) 1675 (let* ((buffer-read-only nil)
1676 (window (get-buffer-window (current-buffer) 0))
1677 (start (window-start window))
1678 (p (window-point window)))
1666 (erase-buffer) 1679 (erase-buffer)
1667 (,custom-defun) 1680 (,custom-defun)
1668 (gdb-update-buffer-name)))) 1681 (gdb-update-buffer-name)
1682 ,(when (not nopreserve)
1683 '(set-window-start window start)
1684 '(set-window-point window p)))))
1669 1685
1670(defmacro def-gdb-trigger-and-handler (trigger-name gdb-command 1686(defmacro def-gdb-trigger-and-handler (trigger-name gdb-command
1671 handler-name custom-defun) 1687 handler-name custom-defun)
@@ -2026,7 +2042,7 @@ FILE is a full path."
2026 2042
2027(defvar gdb-threads-mode-map 2043(defvar gdb-threads-mode-map
2028 (let ((map (make-sparse-keymap))) 2044 (let ((map (make-sparse-keymap)))
2029 (define-key map " " 'gdb-select-thread) 2045 (define-key map "\r" 'gdb-select-thread)
2030 (define-key map "s" 'gdb-display-stack-for-thread) 2046 (define-key map "s" 'gdb-display-stack-for-thread)
2031 (define-key map "S" 'gdb-frame-stack-for-thread) 2047 (define-key map "S" 'gdb-frame-stack-for-thread)
2032 (define-key map "l" 'gdb-display-locals-for-thread) 2048 (define-key map "l" 'gdb-display-locals-for-thread)
@@ -2119,7 +2135,8 @@ on the current line."
2119 (error "Cannot select running thread") 2135 (error "Cannot select running thread")
2120 (let ((new-id (gdb-get-field thread 'id))) 2136 (let ((new-id (gdb-get-field thread 'id)))
2121 (setq gdb-thread-number new-id) 2137 (setq gdb-thread-number new-id)
2122 (gud-basic-call (concat "-thread-select " new-id)))) 2138 (gdb-input (list (concat "-thread-select " new-id) 'ignore))
2139 (gdb-update)))
2123 "Select the thread at current line of threads buffer.") 2140 "Select the thread at current line of threads buffer.")
2124 2141
2125(def-gdb-thread-simple-buffer-command 2142(def-gdb-thread-simple-buffer-command
@@ -2583,7 +2600,8 @@ DOC is an optional documentation string."
2583(def-gdb-auto-update-handler 2600(def-gdb-auto-update-handler
2584 gdb-disassembly-handler 2601 gdb-disassembly-handler
2585 gdb-invalidate-disassembly 2602 gdb-invalidate-disassembly
2586 gdb-disassembly-handler-custom) 2603 gdb-disassembly-handler-custom
2604 t)
2587 2605
2588(gdb-set-buffer-rules 2606(gdb-set-buffer-rules
2589 'gdb-disassembly-buffer 2607 'gdb-disassembly-buffer
@@ -2767,13 +2785,12 @@ member."
2767(defun gdb-stack-list-frames-custom () 2785(defun gdb-stack-list-frames-custom ()
2768 (let* ((res (json-partial-output "frame")) 2786 (let* ((res (json-partial-output "frame"))
2769 (stack (gdb-get-field res 'stack))) 2787 (stack (gdb-get-field res 'stack)))
2770 (dolist (frame (nreverse stack)) 2788 (dolist (frame stack)
2771 (insert (apply 'format `("%s in %s" ,@(gdb-get-many-fields frame 'level 'func)))) 2789 (insert (apply 'format `("%s in %s" ,@(gdb-get-many-fields frame 'level 'func))))
2772 (gdb-insert-frame-location frame) 2790 (gdb-insert-frame-location frame)
2773 (newline)) 2791 (newline))
2774 (save-excursion 2792 (save-excursion
2775 (goto-char (point-min)) 2793 (goto-char (point-min))
2776 (forward-line 1)
2777 (while (< (point) (point-max)) 2794 (while (< (point) (point-max))
2778 (add-text-properties (point-at-bol) (1+ (point-at-bol)) 2795 (add-text-properties (point-at-bol) (1+ (point-at-bol))
2779 '(mouse-face highlight 2796 '(mouse-face highlight