aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorNick Roberts2005-05-03 06:48:47 +0000
committerNick Roberts2005-05-03 06:48:47 +0000
commit5c66660f61ad9caccc7787eac5f8559c22ebf893 (patch)
tree8a68e275359ec2d2ff7a8694525af22e46e96911 /lisp
parent0d2794e36229828136ae5166563a36effb87dd82 (diff)
downloademacs-5c66660f61ad9caccc7787eac5f8559c22ebf893.tar.gz
emacs-5c66660f61ad9caccc7787eac5f8559c22ebf893.zip
(gdb-cpp-define-alist-program)
(gdb-define-alist): New variables. (gdb-create-define-alist): New function. (gdb-set-gud-minor-mode-1): Handle gdb-define-alist. (gdb-source, gdb-memory-set-repeat-count): Replace string-to-int with string-to-number. (gdb-reset): Kill gdb-define-alist. Move assignments outside loop.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/gdb-ui.el63
1 files changed, 48 insertions, 15 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index b378adf0c07..cf3e18c936d 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -196,6 +196,33 @@ detailed description of this mode.
196 :group 'gud 196 :group 'gud
197 :version "22.1") 197 :version "22.1")
198 198
199(defcustom gdb-cpp-define-alist-program "gcc -E -dM -"
200 "The program name for generating an alist of #define directives.
201This list is used to display the #define directive associated
202with an identifier as a tooltip. It works in a debug session with
203GDB, when tooltip-gud-tips-p is t."
204 :type 'string
205 :group 'gud
206 :version "22.1")
207
208(defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.")
209
210(defun gdb-create-define-alist ()
211 (let* ((file (buffer-file-name))
212 (output
213 (with-output-to-string
214 (with-current-buffer standard-output
215 (call-process shell-file-name
216 (if (file-exists-p file) file nil)
217 (list t nil) nil "-c"
218 gdb-cpp-define-alist-program))))
219 (define-list (split-string output "\n" t))
220 (name))
221 (setq gdb-define-alist nil)
222 (dolist (define define-list)
223 (setq name (nth 1 (split-string define "[( ]")))
224 (push (cons name define) gdb-define-alist))))
225
199(defun gdb-set-gud-minor-mode (buffer) 226(defun gdb-set-gud-minor-mode (buffer)
200 "Set gud-minor-mode from find-file if appropriate." 227 "Set gud-minor-mode from find-file if appropriate."
201 (goto-char (point-min)) 228 (goto-char (point-min))
@@ -208,13 +235,16 @@ detailed description of this mode.
208 235
209(defun gdb-set-gud-minor-mode-1 (buffer) 236(defun gdb-set-gud-minor-mode-1 (buffer)
210 (goto-char (point-min)) 237 (goto-char (point-min))
211 (if (and (search-forward "Located in " nil t) 238 (when (and (search-forward "Located in " nil t)
212 (looking-at "\\S-*") 239 (looking-at "\\S-*")
213 (string-equal (buffer-file-name buffer) 240 (string-equal (buffer-file-name buffer)
214 (match-string 0))) 241 (match-string 0)))
215 (with-current-buffer buffer 242 (with-current-buffer buffer
216 (set (make-local-variable 'gud-minor-mode) 'gdba) 243 (set (make-local-variable 'gud-minor-mode) 'gdba)
217 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)))) 244 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
245 (make-local-variable 'gdb-define-alist)
246 (gdb-create-define-alist)
247 (add-hook 'after-save-hook 'gdb-create-define-alist nil t))))
218 248
219(defun gdb-set-gud-minor-mode-existing-buffers () 249(defun gdb-set-gud-minor-mode-existing-buffers ()
220 (dolist (buffer (buffer-list)) 250 (dolist (buffer (buffer-list))
@@ -805,7 +835,7 @@ This filter may simply queue input for a later time."
805 (setq gud-last-frame 835 (setq gud-last-frame
806 (cons 836 (cons
807 (match-string 1 args) 837 (match-string 1 args)
808 (string-to-int (match-string 2 args)))) 838 (string-to-number (match-string 2 args))))
809 (setq gdb-current-address (match-string 3 args)) 839 (setq gdb-current-address (match-string 3 args))
810 ;; cover for auto-display output which comes *before* 840 ;; cover for auto-display output which comes *before*
811 ;; stopped annotation 841 ;; stopped annotation
@@ -889,7 +919,6 @@ directives."
889 (setq gdb-active-process nil) 919 (setq gdb-active-process nil)
890 (gdb-stopping ignored)) 920 (gdb-stopping ignored))
891 921
892
893(defun gdb-frame-begin (ignored) 922(defun gdb-frame-begin (ignored)
894 (let ((sink gdb-output-sink)) 923 (let ((sink gdb-output-sink))
895 (cond 924 (cond
@@ -1690,7 +1719,7 @@ static char *magick[] = {
1690 (save-selected-window 1719 (save-selected-window
1691 (select-window (posn-window (event-start event))) 1720 (select-window (posn-window (event-start event)))
1692 (let* ((arg (read-from-minibuffer "Repeat count: ")) 1721 (let* ((arg (read-from-minibuffer "Repeat count: "))
1693 (count (string-to-int arg))) 1722 (count (string-to-number arg)))
1694 (if (< count 0) 1723 (if (< count 0)
1695 (error "Non-negative numbers only") 1724 (error "Non-negative numbers only")
1696 (customize-set-variable 'gdb-memory-repeat-count count) 1725 (customize-set-variable 'gdb-memory-repeat-count count)
@@ -1998,7 +2027,8 @@ corresponding to the mode line clicked."
1998 2027
1999(let ((menu (make-sparse-keymap "GDB-Windows"))) 2028(let ((menu (make-sparse-keymap "GDB-Windows")))
2000 (define-key gud-menu-map [displays] 2029 (define-key gud-menu-map [displays]
2001 `(menu-item "GDB-Windows" ,menu :visible (eq gud-minor-mode 'gdba))) 2030 `(menu-item "GDB-Windows" ,menu
2031 :visible (memq gud-minor-mode '(gdbmi gdba))))
2002 (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer)) 2032 (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer))
2003 (define-key menu [threads] '("Threads" . gdb-display-threads-buffer)) 2033 (define-key menu [threads] '("Threads" . gdb-display-threads-buffer))
2004 (define-key menu [memory] '("Memory" . gdb-display-memory-buffer)) 2034 (define-key menu [memory] '("Memory" . gdb-display-memory-buffer))
@@ -2014,7 +2044,8 @@ corresponding to the mode line clicked."
2014 2044
2015(let ((menu (make-sparse-keymap "GDB-Frames"))) 2045(let ((menu (make-sparse-keymap "GDB-Frames")))
2016 (define-key gud-menu-map [frames] 2046 (define-key gud-menu-map [frames]
2017 `(menu-item "GDB-Frames" ,menu :visible (eq gud-minor-mode 'gdba))) 2047 `(menu-item "GDB-Frames" ,menu
2048 :visible (memq gud-minor-mode '(gdbmi gdba))))
2018 (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) 2049 (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer))
2019 (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer)) 2050 (define-key menu [threads] '("Threads" . gdb-frame-threads-buffer))
2020 (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer)) 2051 (define-key menu [memory] '("Memory" . gdb-frame-memory-buffer))
@@ -2153,13 +2184,15 @@ Kills the gdb buffers and resets the source buffers."
2153 (gdb-remove-breakpoint-icons (point-min) (point-max) t) 2184 (gdb-remove-breakpoint-icons (point-min) (point-max) t)
2154 (setq gud-minor-mode nil) 2185 (setq gud-minor-mode nil)
2155 (kill-local-variable 'tool-bar-map) 2186 (kill-local-variable 'tool-bar-map)
2156 (setq gud-running nil) 2187 (kill-local-variable 'gdb-define-alist))))))
2157 (setq gdb-active-process nil))))))
2158 (when (markerp gdb-overlay-arrow-position) 2188 (when (markerp gdb-overlay-arrow-position)
2159 (move-marker gdb-overlay-arrow-position nil) 2189 (move-marker gdb-overlay-arrow-position nil)
2160 (setq gdb-overlay-arrow-position nil)) 2190 (setq gdb-overlay-arrow-position nil))
2161 (setq overlay-arrow-variable-list 2191 (setq overlay-arrow-variable-list
2162 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list))) 2192 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list))
2193 (setq gud-running nil)
2194 (setq gdb-active-process nil)
2195 (remove-hook 'after-save-hook 'gdb-create-define-alist t))
2163 2196
2164(defun gdb-source-info () 2197(defun gdb-source-info ()
2165 "Find the source file where the program starts and displays it with related 2198 "Find the source file where the program starts and displays it with related