Mercurial > emacs
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)) |