summaryrefslogtreecommitdiff
path: root/lisp/progmodes/gdb-ui.el
diff options
context:
space:
mode:
authorKaroly Lorentey <karoly@lorentey.hu>2007-02-24 19:26:54 +0000
committerKaroly Lorentey <karoly@lorentey.hu>2007-02-24 19:26:54 +0000
commitf65f7603312547e51230192daf34349b8ac569a0 (patch)
treecbc5877854d00bbdd5ecd4906d130ab8fbb44430 /lisp/progmodes/gdb-ui.el
parent9440b75fccbf763e3fb23a31a128d97eb4debdf5 (diff)
parent735895f1fa28f88c559e73910ea0ff0bda0f228c (diff)
downloademacs-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.el128
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))