comparison lisp/gdb-ui.el @ 48738:81dc78298a54

Remove inappropriate key-bindings. (gdb-info-breakpoints-custom, gdb-goto-bp-this-line): Parse correctly when breakpoint has no line number. (def-gdb-auto-update-handler, gdb-info-locals-handler), (gdb-display-end): Avoid using insert-buffer. (gdb-frames-select-by-mouse): Rename gdb-frames-mouse-select.
author Nick Roberts <nickrob@snap.net.nz>
date Sun, 08 Dec 2002 01:29:31 +0000
parents 19bf840bede8
children dc51e4b2d5c1
comparison
equal deleted inserted replaced
48737:3c7872fd5cbd 48738:81dc78298a54
63 | 63 |
64 | 64 |
65 | 65 |
66 --------------------------------------------------------------------- 66 ---------------------------------------------------------------------
67 Stack buffer | Breakpoints buffer 67 Stack buffer | Breakpoints buffer
68 \[mouse-2\] gdb-frames-select | SPC gdb-toggle-bp-this-line 68 \[mouse-2\] gdb-frames-mouse-select | SPC gdb-toggle-bp-this-line
69 | g gdb-goto-bp-this-line 69 | g gdb-goto-bp-this-line
70 | d gdb-delete-bp-this-line 70 | d gdb-delete-bp-this-line
71 --------------------------------------------------------------------- 71 ---------------------------------------------------------------------
72 72
73 All the buffers share the toolbar and source should always display in the same 73 All the buffers share the toolbar and source should always display in the same
254 ;; More than one buffer can be associated with a gdb instance. 254 ;; More than one buffer can be associated with a gdb instance.
255 ;; 255 ;;
256 ;; Each buffer has a TYPE -- a symbol that identifies the function 256 ;; Each buffer has a TYPE -- a symbol that identifies the function
257 ;; of that particular buffer. 257 ;; of that particular buffer.
258 ;; 258 ;;
259 ;; The usual gdb interaction buffer is given the type `gdb' and 259 ;; The usual gdb interaction buffer is given the type `gdba' and
260 ;; is constructed specially. 260 ;; is constructed specially.
261 ;; 261 ;;
262 ;; Others are constructed by gdb-get-create-instance-buffer and 262 ;; Others are constructed by gdb-get-create-instance-buffer and
263 ;; named according to the rules set forth in the gdb-instance-buffer-rules-assoc 263 ;; named according to the rules set forth in the gdb-instance-buffer-rules-assoc
264 264
753 (progn 753 (progn
754 (save-excursion 754 (save-excursion
755 (set-buffer gdb-expression-buffer-name) 755 (set-buffer gdb-expression-buffer-name)
756 (setq buffer-read-only nil) 756 (setq buffer-read-only nil)
757 (delete-region (point-min) (point-max)) 757 (delete-region (point-min) (point-max))
758 (insert-buffer (gdb-get-instance-buffer 'gdb-partial-output-buffer)) 758 (insert-buffer-substring
759 (gdb-get-instance-buffer 'gdb-partial-output-buffer))
759 (setq buffer-read-only t))) 760 (setq buffer-read-only t)))
760 ;; display expression name... 761 ;; display expression name...
761 (goto-char (point-min)) 762 (goto-char (point-min))
762 (let ((start (progn (point))) 763 (let ((start (progn (point)))
763 (end (progn (end-of-line) (point)))) 764 (end (progn (end-of-line) (point))))
1220 (save-excursion 1221 (save-excursion
1221 (set-buffer buf) 1222 (set-buffer buf)
1222 (let ((p (point)) 1223 (let ((p (point))
1223 (buffer-read-only nil)) 1224 (buffer-read-only nil))
1224 (delete-region (point-min) (point-max)) 1225 (delete-region (point-min) (point-max))
1225 (insert-buffer (gdb-get-create-instance-buffer 1226 (insert-buffer-substring (gdb-get-create-instance-buffer
1226 'gdb-partial-output-buffer)) 1227 'gdb-partial-output-buffer))
1227 (goto-char p))))) 1228 (goto-char p)))))
1228 ;; put customisation here 1229 ;; put customisation here
1229 (,custom-defun))) 1230 (,custom-defun)))
1230 1231
1297 (if (looking-at "[^\t].*breakpoint") 1298 (if (looking-at "[^\t].*breakpoint")
1298 (progn 1299 (progn
1299 (looking-at "\\([0-9]*\\)\\s-*\\S-*\\s-*\\S-*\\s-*\\(.\\)") 1300 (looking-at "\\([0-9]*\\)\\s-*\\S-*\\s-*\\S-*\\s-*\\(.\\)")
1300 (setq flag (char-after (match-beginning 2))) 1301 (setq flag (char-after (match-beginning 2)))
1301 (beginning-of-line) 1302 (beginning-of-line)
1302 (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+") 1303 (if (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t)
1303 (looking-at "\\(\\S-*\\):\\([0-9]+\\)") 1304 (progn
1304 (let ((line (match-string 2)) 1305 (looking-at "\\(\\S-*\\):\\([0-9]+\\)")
1305 (file (match-string 1))) 1306 (let ((line (match-string 2))
1306 (save-excursion 1307 (file (match-string 1)))
1307 (set-buffer 1308 (save-excursion
1308 (find-file-noselect (if (file-exists-p file) 1309 (set-buffer
1309 file 1310 (find-file-noselect
1310 (expand-file-name file gdb-cdir)))) 1311 (if (file-exists-p file) file
1311 (save-current-buffer 1312 (expand-file-name file gdb-cdir))))
1312 (set (make-local-variable 'gud-minor-mode) 'gdba) 1313 (save-current-buffer
1313 (set (make-local-variable 'tool-bar-map) 1314 (set (make-local-variable 'gud-minor-mode) 'gdba)
1314 gud-tool-bar-map) 1315 (set (make-local-variable 'tool-bar-map)
1315 (setq left-margin-width 2) 1316 gud-tool-bar-map)
1316 (if (get-buffer-window (current-buffer)) 1317 (setq left-margin-width 2)
1317 (set-window-margins (get-buffer-window 1318 (if (get-buffer-window (current-buffer))
1318 (current-buffer)) 1319 (set-window-margins (get-buffer-window
1319 left-margin-width 1320 (current-buffer))
1320 right-margin-width))) 1321 left-margin-width
1321 ;; only want one breakpoint icon at each location 1322 right-margin-width)))
1322 (save-excursion 1323 ;; only want one breakpoint icon at each location
1323 (goto-line (string-to-number line)) 1324 (save-excursion
1324 (let ((start (progn (beginning-of-line) (- (point) 1))) 1325 (goto-line (string-to-number line))
1325 (end (progn (end-of-line) (+ (point) 1)))) 1326 (let ((start (progn (beginning-of-line)
1326 (if (display-graphic-p) 1327 (- (point) 1)))
1327 (progn 1328 (end (progn (end-of-line) (+ (point) 1))))
1328 (remove-images start end) 1329 (if (display-graphic-p)
1329 (if (eq ?y flag) 1330 (progn
1330 (put-image breakpoint-enabled-icon (point) 1331 (remove-images start end)
1331 "breakpoint icon enabled" 1332 (if (eq ?y flag)
1332 'left-margin) 1333 (put-image breakpoint-enabled-icon
1333 (put-image breakpoint-disabled-icon (point) 1334 (point)
1334 "breakpoint icon disabled" 1335 "breakpoint icon enabled"
1335 'left-margin))) 1336 'left-margin)
1336 (remove-strings start end) 1337 (put-image breakpoint-disabled-icon (point)
1337 (if (eq ?y flag) 1338 "breakpoint icon disabled"
1338 (put-string "B" (point) "enabled" 1339 'left-margin)))
1339 'left-margin) 1340 (remove-strings start end)
1340 (put-string "b" (point) "disabled" 1341 (if (eq ?y flag)
1341 'left-margin))))))))) 1342 (put-string "B" (point) "enabled"
1343 'left-margin)
1344 (put-string "b" (point) "disabled"
1345 'left-margin)))))))))))
1342 (end-of-line)))))) 1346 (end-of-line))))))
1343 1347
1344 (defun gdb-breakpoints-buffer-name () 1348 (defun gdb-breakpoints-buffer-name ()
1345 (with-current-buffer gud-comint-buffer 1349 (with-current-buffer gud-comint-buffer
1346 (concat "*breakpoints of " (gdb-instance-target-string) "*"))) 1350 (concat "*breakpoints of " (gdb-instance-target-string) "*")))
1415 (defun gdb-goto-bp-this-line () 1419 (defun gdb-goto-bp-this-line ()
1416 "Display the file at the specified breakpoint." 1420 "Display the file at the specified breakpoint."
1417 (interactive) 1421 (interactive)
1418 (save-excursion 1422 (save-excursion
1419 (beginning-of-line 1) 1423 (beginning-of-line 1)
1420 (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+") 1424 (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t)
1421 (looking-at "\\(\\S-*\\):\\([0-9]+\\)")) 1425 (looking-at "\\(\\S-*\\):\\([0-9]+\\)"))
1422 (let ((line (match-string 2)) 1426 (if (match-string 2)
1423 (file (match-string 1))) 1427 (let ((line (match-string 2))
1424 (save-selected-window 1428 (file (match-string 1)))
1425 (select-window gdb-source-window) 1429 (save-selected-window
1426 (switch-to-buffer (find-file-noselect 1430 (select-window gdb-source-window)
1427 (if (file-exists-p file) 1431 (switch-to-buffer (find-file-noselect
1428 file 1432 (if (file-exists-p file)
1429 (expand-file-name file gdb-cdir)))) 1433 file
1430 (goto-line (string-to-number line))))) 1434 (expand-file-name file gdb-cdir))))
1435 (goto-line (string-to-number line))))))
1431 1436
1432 ;; 1437 ;;
1433 ;; Frames buffers. These display a perpetually correct bactracktrace 1438 ;; Frames buffers. These display a perpetually correct bactracktrace
1434 ;; (from the command `where'). 1439 ;; (from the command `where').
1435 ;; 1440 ;;
1475 (gdb-get-create-instance-buffer 'gdb-stack-buffer))) 1480 (gdb-get-create-instance-buffer 'gdb-stack-buffer)))
1476 1481
1477 (defvar gdb-frames-mode-map 1482 (defvar gdb-frames-mode-map
1478 (let ((map (make-sparse-keymap))) 1483 (let ((map (make-sparse-keymap)))
1479 (suppress-keymap map) 1484 (suppress-keymap map)
1480 (define-key map [mouse-2]'gdb-frames-select-by-mouse) 1485 (define-key map [mouse-2] 'gdb-frames-mouse-select)
1481 map)) 1486 map))
1482 1487
1483 (defun gdb-frames-mode () 1488 (defun gdb-frames-mode ()
1484 "Major mode for gdb frames. 1489 "Major mode for gdb frames.
1485 1490
1494 (save-excursion 1499 (save-excursion
1495 (let* ((pos (re-search-backward "^#\\([0-9]*\\)" nil t)) 1500 (let* ((pos (re-search-backward "^#\\([0-9]*\\)" nil t))
1496 (n (or (and pos (string-to-int (match-string 1))) 0))) 1501 (n (or (and pos (string-to-int (match-string 1))) 0)))
1497 n))) 1502 n)))
1498 1503
1499 (defun gdb-frames-select-by-mouse (e) 1504 (defun gdb-frames-mouse-select (e)
1500 "Display the source of the selected frame." 1505 "Display the source of the selected frame."
1501 (interactive "e") 1506 (interactive "e")
1502 (let (selection) 1507 (let (selection)
1503 (save-excursion 1508 (save-excursion
1504 (set-buffer (window-buffer (posn-window (event-end e)))) 1509 (set-buffer (window-buffer (posn-window (event-end e))))
1590 (and buf (save-excursion 1595 (and buf (save-excursion
1591 (set-buffer buf) 1596 (set-buffer buf)
1592 (let ((p (point)) 1597 (let ((p (point))
1593 (buffer-read-only nil)) 1598 (buffer-read-only nil))
1594 (delete-region (point-min) (point-max)) 1599 (delete-region (point-min) (point-max))
1595 (insert-buffer (gdb-get-create-instance-buffer 1600 (insert-buffer-substring (gdb-get-create-instance-buffer
1596 'gdb-partial-output-buffer)) 1601 'gdb-partial-output-buffer))
1597 (goto-char p))))) 1602 (goto-char p)))))
1598 (run-hooks 'gdb-info-locals-hook)) 1603 (run-hooks 'gdb-info-locals-hook))
1599 1604
1600 (defun gdb-info-locals-custom () 1605 (defun gdb-info-locals-custom ()
1822 (defun gdb-display-gdb-buffer () 1827 (defun gdb-display-gdb-buffer ()
1823 (interactive) 1828 (interactive)
1824 (gdb-display-buffer 1829 (gdb-display-buffer
1825 (gdb-get-create-instance-buffer 'gdba))) 1830 (gdb-get-create-instance-buffer 'gdba)))
1826 1831
1827 ;; FIXME: changing GUD's behavior: bad bad bad!!!
1828 (define-key gud-minor-mode-map "\C-c\M-\C-r" 'gdb-display-registers-buffer)
1829 (define-key gud-minor-mode-map "\C-c\M-\C-f" 'gdb-display-stack-buffer)
1830 (define-key gud-minor-mode-map "\C-c\M-\C-b" 'gdb-display-breakpoints-buffer)
1831
1832 (let ((menu (make-sparse-keymap "GDB-Windows"))) 1832 (let ((menu (make-sparse-keymap "GDB-Windows")))
1833 (define-key gud-menu-map [displays] 1833 (define-key gud-menu-map [displays]
1834 `(menu-item "GDB-Windows" ,menu :visible (memq gud-minor-mode '(gdba)))) 1834 `(menu-item "GDB-Windows" ,menu :visible (eq gud-minor-mode 'gdba)))
1835 (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer)) 1835 (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer))
1836 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) 1836 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
1837 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) 1837 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
1838 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) 1838 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
1839 (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)) 1839 (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer))
1845 (switch-to-buffer-other-frame 1845 (switch-to-buffer-other-frame
1846 (gdb-get-create-instance-buffer 'gdba))) 1846 (gdb-get-create-instance-buffer 'gdba)))
1847 1847
1848 (let ((menu (make-sparse-keymap "GDB-Frames"))) 1848 (let ((menu (make-sparse-keymap "GDB-Frames")))
1849 (define-key gud-menu-map [frames] 1849 (define-key gud-menu-map [frames]
1850 `(menu-item "GDB-Frames" ,menu :visible (memq gud-minor-mode '(gdba)))) 1850 `(menu-item "GDB-Frames" ,menu :visible (eq gud-minor-mode 'gdba)))
1851 (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) 1851 (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer))
1852 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) 1852 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
1853 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) 1853 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
1854 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) 1854 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
1855 (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)) 1855 (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer))