diff options
author | Karoly Lorentey <karoly@lorentey.hu> | 2007-02-24 19:26:54 +0000 |
---|---|---|
committer | Karoly Lorentey <karoly@lorentey.hu> | 2007-02-24 19:26:54 +0000 |
commit | f65f7603312547e51230192daf34349b8ac569a0 (patch) | |
tree | cbc5877854d00bbdd5ecd4906d130ab8fbb44430 /lisp/progmodes/gdb-ui.el | |
parent | 9440b75fccbf763e3fb23a31a128d97eb4debdf5 (diff) | |
parent | 735895f1fa28f88c559e73910ea0ff0bda0f228c (diff) | |
download | emacs-f65f7603312547e51230192daf34349b8ac569a0.tar.gz |
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-619
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-620
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-621
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-622
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-623
Remove RCS keywords
* emacs@sv.gnu.org/emacs--devo--0--patch-624
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-625
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-626
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-627
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-628
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-629
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-630
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-631
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-632
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-633
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-634
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-635
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-636
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-637
Remove RCS keywords
* emacs@sv.gnu.org/emacs--devo--0--patch-638
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-639
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-640
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-641
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-642
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-643
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-644
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-645
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-646
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-647
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-648
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-649
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-197
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-198
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-199
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-200
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-201
Update from CVS: lisp/nnweb.el (nnweb-google-parse-1): Update parser.
* emacs@sv.gnu.org/gnus--rel--5.10--patch-202
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-596
Diffstat (limited to 'lisp/progmodes/gdb-ui.el')
-rw-r--r-- | lisp/progmodes/gdb-ui.el | 128 |
1 files changed, 55 insertions, 73 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index c2811a9658a..02c65ae07df 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el @@ -114,7 +114,7 @@ Set to \"main\" at start if gdb-show-main is t.") (defvar gdb-var-list nil "List of variables in watch window. Each element has the form (VARNUM EXPRESSION NUMCHILD TYPE VALUE STATUS FP) -where STATUS is nil (unchanged), `changed' or `out-of-scope', FP the frame +where STATUS is nil (`unchanged'), `changed' or `out-of-scope', FP the frame address for root variables.") (defvar gdb-main-file nil "Source file from which program execution begins.") (defvar gud-old-arrow nil) @@ -606,34 +606,31 @@ With arg, use separate IO iff arg is positive." (setq gdb-version "6.4+")) (gdb-init-2)) +(defmacro gdb-if-arrow (arrow-position &rest body) + `(if ,arrow-position + (let ((buffer (marker-buffer ,arrow-position)) (line)) + (if (equal buffer (window-buffer (posn-window end))) + (with-current-buffer buffer + (when (or (equal start end) + (equal (posn-point start) + (marker-position ,arrow-position))) + ,@body)))))) + (defun gdb-mouse-until (event) "Continue running until a source line past the current line. The destination source line can be selected either by clicking with mouse-2 on the fringe/margin or dragging the arrow with mouse-1 (default bindings)." (interactive "e") - (if gud-overlay-arrow-position - (let ((start (event-start event)) - (end (event-end event)) - (buffer (marker-buffer gud-overlay-arrow-position)) (line)) - (if (not (string-match "Machine" mode-name)) - (if (equal buffer (window-buffer (posn-window end))) - (with-current-buffer buffer - (when (or (equal start end) - (equal (posn-point start) - (marker-position - gud-overlay-arrow-position))) - (setq line (line-number-at-pos (posn-point end))) - (gud-call (concat "until " (number-to-string line)))))) - (if (equal (marker-buffer gdb-overlay-arrow-position) - (window-buffer (posn-window end))) - (when (or (equal start end) - (equal (posn-point start) - (marker-position - gdb-overlay-arrow-position))) - (save-excursion - (goto-line (line-number-at-pos (posn-point end))) - (forward-char 2) - (gud-call (concat "until *%a"))))))))) + (let ((start (event-start event)) + (end (event-end event))) + (gdb-if-arrow gud-overlay-arrow-position + (setq line (line-number-at-pos (posn-point end))) + (gud-call (concat "until " (number-to-string line)))) + (gdb-if-arrow gdb-overlay-arrow-position + (save-excursion + (goto-line (line-number-at-pos (posn-point end))) + (forward-char 2) + (gud-call (concat "until *%a")))))) (defun gdb-mouse-jump (event) "Set execution address/line. @@ -642,32 +639,20 @@ on the fringe/margin or dragging the arrow with mouse-1 (default bindings). Unlike gdb-mouse-until the destination address can be before the current line, and no execution takes place." (interactive "e") - (if gud-overlay-arrow-position - (let ((start (event-start event)) - (end (event-end event)) - (buffer (marker-buffer gud-overlay-arrow-position)) (line)) - (if (not (string-match "Machine" mode-name)) - (if (equal buffer (window-buffer (posn-window end))) - (with-current-buffer buffer - (when (or (equal start end) - (equal (posn-point start) - (marker-position - gud-overlay-arrow-position))) - (setq line (line-number-at-pos (posn-point end))) - (progn (gud-call (concat "tbreak " (number-to-string line))) - (gud-call (concat "jump " (number-to-string line))))))) - (if (equal (marker-buffer gdb-overlay-arrow-position) - (window-buffer (posn-window end))) - (when (or (equal start end) - (equal (posn-point start) - (marker-position - gdb-overlay-arrow-position))) - (save-excursion - (goto-line (line-number-at-pos (posn-point end))) - (forward-char 2) + (let ((start (event-start event)) + (end (event-end event))) + (gdb-if-arrow gud-overlay-arrow-position + (setq line (line-number-at-pos (posn-point end))) (progn - (gud-call (concat "tbreak *%a")) - (gud-call (concat "jump *%a")))))))))) + (gud-call (concat "tbreak " (number-to-string line))) + (gud-call (concat "jump " (number-to-string line))))) + (gdb-if-arrow gdb-overlay-arrow-position + (save-excursion + (goto-line (line-number-at-pos (posn-point end))) + (forward-char 2) + (progn + (gud-call (concat "tbreak *%a")) + (gud-call (concat "jump *%a"))))))) (defcustom gdb-speedbar-auto-raise nil "If non-nil raise speedbar every time display of watch expressions is\ @@ -739,7 +724,7 @@ With arg, enter name of variable to be watched in the minibuffer." (match-string 2) (match-string 4) (if (match-string 3) (read (match-string 3))) - nil gdb-frame-address))) + nil gdb-frame-address))) (push var gdb-var-list) (unless (string-equal speedbar-initial-expansion-list-name "GUD") @@ -759,7 +744,8 @@ With arg, enter name of variable to be watched in the minibuffer." (message-box "No symbol \"%s\" in current context." expr)))) (defun gdb-speedbar-update () - (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) + (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame) + (not (member 'gdb-speedbar-timer gdb-pending-triggers))) ;; Dummy command to update speedbar even when idle. (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) ;; Keep gdb-pending-triggers non-nil till end. @@ -848,6 +834,19 @@ type_changed=\".*?\".*?}") (setq gdb-pending-triggers (delq 'gdb-var-update gdb-pending-triggers))) +(defun gdb-var-delete-1 (varnum) + (gdb-enqueue-input + (list + (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) + 'gdba) + (concat "server interpreter mi \"-var-delete " varnum "\"\n") + (concat "-var-delete " varnum "\n")) + 'ignore)) + (setq gdb-var-list (delq var gdb-var-list)) + (dolist (varchild gdb-var-list) + (if (string-match (concat (car var) "\\.") (car varchild)) + (setq gdb-var-list (delq varchild gdb-var-list))))) + (defun gdb-var-delete () "Delete watch expression at point from the speedbar." (interactive) @@ -857,17 +856,7 @@ type_changed=\".*?\".*?}") (varnum (car var))) (if (string-match "\\." (car var)) (message-box "Can only delete a root expression") - (gdb-enqueue-input - (list - (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) - 'gdba) - (concat "server interpreter mi \"-var-delete " varnum "\"\n") - (concat "-var-delete " varnum "\n")) - 'ignore)) - (setq gdb-var-list (delq var gdb-var-list)) - (dolist (varchild gdb-var-list) - (if (string-match (concat (car var) "\\.") (car varchild)) - (setq gdb-var-list (delq varchild gdb-var-list)))))))) + (gdb-var-delete-1 varnum))))) (defun gdb-var-delete-children (varnum) "Delete children of variable object at point from the speedbar." @@ -2154,8 +2143,9 @@ static char *magick[] = { (kill-all-local-variables) (setq major-mode 'gdb-frames-mode) (setq mode-name "Frames") - (setq gdb-stack-position nil) + (setq gdb-stack-position nil) (add-to-list 'overlay-arrow-variable-list 'gdb-stack-position) + (setq truncate-lines t) ;; Make it easier to see overlay arrow. (setq buffer-read-only t) (use-local-map gdb-frames-mode-map) (run-mode-hooks 'gdb-frames-mode-hook) @@ -3443,16 +3433,8 @@ in_scope=\"\\(.*?\\)\".*?}") (setcar (nthcdr 5 var) 'changed) (setcar (nthcdr 4 var) (read (match-string 2)))) -;; ((string-equal match "invalid") -;; (gdb-enqueue-input -;; (list -;; (if (eq (buffer-local-value -;; 'gud-minor-mode gud-comint-buffer) 'gdba) -;; (concat "server interpreter mi \"-var-delete " -;; varnum "\"\n") -;; (concat "-var-delete " varnum "\n")) -;; 'ignore))) - ))))) + ((string-equal match "invalid") + (gdb-var-delete-1 varnum))))))) (setq gdb-pending-triggers (delq 'gdb-var-update gdb-pending-triggers)) (gdb-speedbar-update)) |