Mercurial > emacs
changeset 49000:f3c5848184cb
(gdb-delete-display): Rename (gdb-delete-expression).
(gdb-goto-bp-this-line): Rename (gdb-goto-breakpoint).
(gdb-toggle-bp-this-line): Rename (gdb-toggle-breakpoint).
(gdb-delete-bp-this-line): Rename (gdb-delete-breakpoint).
(gdb-toggle-disp-this-line): Rename (gdb-toggle-display).
(gdb-delete-disp-this-line): Rename (gdb-delete-display).
(gud-gdba-marker-filter): Remove unnecessary save-match-data.
(gdb-mouse-goto-breakpoint, gdb-frames-select): New functions.
(gdb-frames-mouse-select): Simplify.
Make keybindings (gdb-goto-breakpoint, gdb-frames-select, etc)
consistent with other modes in emacs.
(gdb-display-source-buffer): Return window of source buffer
for (gud-display-line).
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Sun, 29 Dec 2002 20:46:41 +0000 |
parents | a39c6bb2d692 |
children | 85b083d06a17 |
files | lisp/gdb-ui.el |
diffstat | 1 files changed, 108 insertions(+), 101 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gdb-ui.el Sun Dec 29 20:45:38 2002 +0000 +++ b/lisp/gdb-ui.el Sun Dec 29 20:46:41 2002 +0000 @@ -47,6 +47,10 @@ (defvar gdb-current-address nil) (defvar gdb-display-in-progress nil) (defvar gdb-dive nil) +(defvar gdb-buffer-type nil) +(defvar gdb-variables '() + "A list of variables that are local to the GUD buffer.") + ;;;###autoload (defun gdba (command-line) @@ -76,9 +80,9 @@ | --------------------------------------------------------------------- Stack buffer | Breakpoints buffer -\[mouse-2\] gdb-frames-mouse-select | SPC gdb-toggle-bp-this-line - | g gdb-goto-bp-this-line - | d gdb-delete-bp-this-line + RET gdb-frames-select | SPC gdb-toggle-breakpoint + | RET gdb-goto-breakpoint + | d gdb-delete-breakpoint --------------------------------------------------------------------- All the buffers share the toolbar and source should always display in the same @@ -174,9 +178,6 @@ ;; The list of variables is built up by the expansions of ;; def-gdb-variable -(defvar gdb-variables '() - "A list of variables that are local to the GUD buffer.") - (defmacro def-gdb-var (root-symbol &optional default doc) (let* ((root (symbol-name root-symbol)) (accessor (intern (concat "gdb-get-" root))) @@ -1043,64 +1044,63 @@ (defun gud-gdba-marker-filter (string) "A gud marker filter for gdb. Handle a burst of output from GDB." - (save-match-data - (let ( - ;; Recall the left over burst from last time - (burst (concat (gdb-get-burst) string)) - ;; Start accumulating output for the GUD buffer - (output "")) - ;; - ;; Process all the complete markers in this chunk. - (while (string-match "\n\032\032\\(.*\\)\n" burst) - (let ((annotation (match-string 1 burst))) - ;; - ;; Stuff prior to the match is just ordinary output. - ;; It is either concatenated to OUTPUT or directed - ;; elsewhere. - (setq output - (gdb-concat-output - output - (substring burst 0 (match-beginning 0)))) + (let ( + ;; Recall the left over burst from last time + (burst (concat (gdb-get-burst) string)) + ;; Start accumulating output for the GUD buffer + (output "")) + ;; + ;; Process all the complete markers in this chunk. + (while (string-match "\n\032\032\\(.*\\)\n" burst) + (let ((annotation (match-string 1 burst))) + ;; + ;; Stuff prior to the match is just ordinary output. + ;; It is either concatenated to OUTPUT or directed + ;; elsewhere. + (setq output + (gdb-concat-output + output + (substring burst 0 (match-beginning 0)))) - ;; Take that stuff off the burst. - (setq burst (substring burst (match-end 0))) + ;; Take that stuff off the burst. + (setq burst (substring burst (match-end 0))) - ;; Parse the tag from the annotation, and maybe its arguments. - (string-match "\\(\\S-*\\) ?\\(.*\\)" annotation) - (let* ((annotation-type (match-string 1 annotation)) - (annotation-arguments (match-string 2 annotation)) - (annotation-rule (assoc annotation-type - gdb-annotation-rules))) - ;; Call the handler for this annotation. - (if annotation-rule - (funcall (car (cdr annotation-rule)) - annotation-arguments) - ;; Else the annotation is not recognized. Ignore it silently, - ;; so that GDB can add new annotations without causing - ;; us to blow up. - )))) + ;; Parse the tag from the annotation, and maybe its arguments. + (string-match "\\(\\S-*\\) ?\\(.*\\)" annotation) + (let* ((annotation-type (match-string 1 annotation)) + (annotation-arguments (match-string 2 annotation)) + (annotation-rule (assoc annotation-type + gdb-annotation-rules))) + ;; Call the handler for this annotation. + (if annotation-rule + (funcall (car (cdr annotation-rule)) + annotation-arguments) + ;; Else the annotation is not recognized. Ignore it silently, + ;; so that GDB can add new annotations without causing + ;; us to blow up. + )))) + ;; + ;; Does the remaining text end in a partial line? + ;; If it does, then keep part of the burst until we get more. + (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'" + burst) + (progn + ;; Everything before the potential marker start can be output. + (setq output + (gdb-concat-output output + (substring burst 0 (match-beginning 0)))) + ;; + ;; Everything after, we save, to combine with later input. + (setq burst (substring burst (match-beginning 0)))) ;; - ;; Does the remaining text end in a partial line? - ;; If it does, then keep part of the burst until we get more. - (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'" - burst) - (progn - ;; Everything before the potential marker start can be output. - (setq output - (gdb-concat-output output - (substring burst 0 (match-beginning 0)))) - ;; - ;; Everything after, we save, to combine with later input. - (setq burst (substring burst (match-beginning 0)))) - ;; - ;; In case we know the burst contains no partial annotations: - (progn - (setq output (gdb-concat-output output burst)) - (setq burst ""))) - ;; - ;; Save the remaining burst for the next call to this function. - (gdb-set-burst burst) - output))) + ;; In case we know the burst contains no partial annotations: + (progn + (setq output (gdb-concat-output output burst)) + (setq burst ""))) + ;; + ;; Save the remaining burst for the next call to this function. + (gdb-set-burst burst) + output)) (defun gdb-concat-output (so-far new) (let ((sink (gdb-get-output-sink ))) @@ -1327,15 +1327,16 @@ (defvar gdb-breakpoints-mode-map (let ((map (make-sparse-keymap)) (menu (make-sparse-keymap "Breakpoints"))) - (define-key menu [toggle] '("Toggle" . gdb-toggle-bp-this-line)) - (define-key menu [delete] '("Delete" . gdb-delete-bp-this-line)) - (define-key menu [goto] '("Goto" . gdb-goto-bp-this-line)) + (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) + (define-key menu [delete] '("Delete" . gdb-delete-breakpoint)) + (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) (suppress-keymap map) (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) - (define-key map " " 'gdb-toggle-bp-this-line) - (define-key map "d" 'gdb-delete-bp-this-line) - (define-key map "g" 'gdb-goto-bp-this-line) + (define-key map " " 'gdb-toggle-breakpoint) + (define-key map "d" 'gdb-delete-breakpoint) + (define-key map "\r" 'gdb-goto-breakpoint) + (define-key map [mouse-2] 'gdb-mouse-goto-breakpoint) map)) (defun gdb-breakpoints-mode () @@ -1348,8 +1349,8 @@ (setq buffer-read-only t) (gdb-invalidate-breakpoints)) -(defun gdb-toggle-bp-this-line () - "Enable/disable the breakpoint of the current line." +(defun gdb-toggle-breakpoint () + "Enable/disable the breakpoint at current line." (interactive) (save-excursion (beginning-of-line 1) @@ -1364,8 +1365,8 @@ (match-string 1) "\n") 'ignore))))) -(defun gdb-delete-bp-this-line () - "Delete the breakpoint of the current line." +(defun gdb-delete-breakpoint () + "Delete the breakpoint at current line." (interactive) (beginning-of-line 1) (if (not (looking-at "\\([0-9]+\\).*point\\s-*\\S-*\\s-*\\(.\\)")) @@ -1375,8 +1376,9 @@ (defvar gdb-source-window nil) -(defun gdb-goto-bp-this-line () - "Display the file in the source buffer at the specified breakpoint." +(defun gdb-goto-breakpoint () + "Display the file in the source buffer at the breakpoint specified on the +current line." (interactive) (save-excursion (beginning-of-line 1) @@ -1392,6 +1394,12 @@ file (expand-file-name file gdb-cdir)))) (goto-line (string-to-number line)))))) + +(defun gdb-mouse-goto-breakpoint (event) + "Display the file in the source buffer at the selected breakpoint." + (interactive "e") + (mouse-set-point event) + (gdb-goto-breakpoint)) ;; ;; Frames buffer. This displays a perpetually correct bactracktrace @@ -1437,6 +1445,7 @@ (defvar gdb-frames-mode-map (let ((map (make-sparse-keymap))) (suppress-keymap map) + (define-key map "\r" 'gdb-frames-select) (define-key map [mouse-2] 'gdb-frames-mouse-select) map)) @@ -1453,26 +1462,23 @@ (defun gdb-get-frame-number () (save-excursion (let* ((pos (re-search-backward "^#\\([0-9]*\\)" nil t)) - (n (or (and pos (string-to-int (match-string 1))) 0))) + (n (or (and pos (match-string-no-properties 1)) "0"))) n))) -(defun gdb-frames-mouse-select (e) - "Make the selected frame become the current frame and -display the source in the source buffer." +(defun gdb-frames-select () + "Make the frame on the current line become the current frame and display the +source in the source buffer." + (interactive) + (gdb-enqueue-input + (list (concat "server frame " (gdb-get-frame-number) "\n") 'ignore)) + (gud-display-frame)) + +(defun gdb-frames-mouse-select (event) + "Make the selected frame become the current frame and display the source in +the source buffer." (interactive "e") - (let (selection) - (save-excursion - (set-buffer (window-buffer (posn-window (event-end e)))) - (save-excursion - (goto-char (posn-point (event-end e))) - (setq selection (gdb-get-frame-number)))) - (select-window (posn-window (event-end e))) - (save-excursion - (set-buffer gud-comint-buffer) - (gdb-enqueue-input - (list (gud-format-command "server frame %p\n" selection) 'ignore)) - (gud-display-frame)))) - + (mouse-set-point event) + (gdb-frames-select)) ;; ;; Registers buffer. @@ -1639,13 +1645,13 @@ (defvar gdb-display-mode-map (let ((map (make-sparse-keymap)) (menu (make-sparse-keymap "Display"))) - (define-key menu [toggle] '("Toggle" . gdb-toggle-disp-this-line)) - (define-key menu [delete] '("Delete" . gdb-delete-disp-this-line)) + (define-key menu [toggle] '("Toggle" . gdb-toggle-display)) + (define-key menu [delete] '("Delete" . gdb-delete-display)) (suppress-keymap map) (define-key map [menu-bar display] (cons "Display" menu)) - (define-key map " " 'gdb-toggle-disp-this-line) - (define-key map "d" 'gdb-delete-disp-this-line) + (define-key map " " 'gdb-toggle-display) + (define-key map "d" 'gdb-delete-display) map)) (defun gdb-display-mode () @@ -1672,8 +1678,8 @@ (switch-to-buffer-other-frame (gdb-get-create-buffer 'gdb-display-buffer))) -(defun gdb-toggle-disp-this-line () - "Enable/disable the displayed expression of the current line." +(defun gdb-toggle-display () + "Enable/disable the displayed expression at current line." (interactive) (save-excursion (beginning-of-line 1) @@ -1688,8 +1694,8 @@ (match-string 1) "\n") 'ignore))))) -(defun gdb-delete-disp-this-line () - "Delete the displayed expression of the current line." +(defun gdb-delete-display () + "Delete the displayed expression at current line." (interactive) (save-excursion (set-buffer @@ -1713,7 +1719,7 @@ '("GDB Expressions Commands" "----" ["Visualise" gdb-array-visualise t] - ["Delete" gdb-delete-display t]) + ["Delete" gdb-delete-expression t]) "Menu for `gdb-expressions-mode'.") (defun gdb-expressions-popup-menu (event) @@ -1786,7 +1792,8 @@ answer)) (defun gdb-display-source-buffer (buffer) - (set-window-buffer gdb-source-window buffer)) + (set-window-buffer gdb-source-window buffer) + gdb-source-window) ;;; Shared keymap initialization: @@ -2059,7 +2066,7 @@ (int-to-string (aref gdb-array-stop n)) " 1 -T X")))))) -(defun gdb-delete-display () +(defun gdb-delete-expression () "Delete displayed expression and its frame." (interactive) (gdb-enqueue-input