Mercurial > emacs
comparison lisp/gdb-ui.el @ 48661:b092bff770ec
Fold top-level `setq's and `define-key's into their corresponding defvar.
(gdb-inferior-io-mode-map): New var.
Add bindings to it rather than to comint-mode-map.
(gdb-display-number-end): Use dolist. Remove always-true test.
(gdb-delete-line): Move and simplify.
(gdb-display-end): Don't bother going to beg-of-line since we're there.
(gdb-array-format1): Use dolist.
(gdb-make-windows-menu, gdb-make-frames-menu):
Move to top-level code. Move the menus to within the GUD menu.
Make the menus only appear in gdba mode.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 04 Dec 2002 18:43:59 +0000 |
parents | 4d69c0f01cc0 |
children | d29870d63092 |
comparison
equal
deleted
inserted
replaced
48660:02c875f8f059 | 48661:b092bff770ec |
---|---|
470 (defun gdb-inferior-io-name () | 470 (defun gdb-inferior-io-name () |
471 (concat "*input/output of " | 471 (concat "*input/output of " |
472 (gdb-instance-target-string) | 472 (gdb-instance-target-string) |
473 "*")) | 473 "*")) |
474 | 474 |
475 (define-key comint-mode-map "\C-c\C-c" 'gdb-inferior-io-interrupt) | 475 (defvar gdb-inferior-io-mode-map |
476 (define-key comint-mode-map "\C-c\C-z" 'gdb-inferior-io-stop) | 476 (let ((map (make-sparse-keymap))) |
477 (define-key comint-mode-map "\C-c\C-\\" 'gdb-inferior-io-quit) | 477 (define-key map "\C-c\C-c" 'gdb-inferior-io-interrupt) |
478 (define-key comint-mode-map "\C-c\C-d" 'gdb-inferior-io-eof) | 478 (define-key map "\C-c\C-z" 'gdb-inferior-io-stop) |
479 (define-key map "\C-c\C-\\" 'gdb-inferior-io-quit) | |
480 (define-key map "\C-c\C-d" 'gdb-inferior-io-eof) | |
481 map)) | |
479 | 482 |
480 (define-derived-mode gdb-inferior-io-mode comint-mode "Debuggee I/O" | 483 (define-derived-mode gdb-inferior-io-mode comint-mode "Debuggee I/O" |
481 "Major mode for gdb inferior-io." | 484 "Major mode for gdb inferior-io." |
482 :syntax-table nil :abbrev-table nil | 485 :syntax-table nil :abbrev-table nil |
483 ;; We want to use comint because it has various nifty and familiar | 486 ;; We want to use comint because it has various nifty and familiar |
823 (let ((number gdb-display-number)) | 826 (let ((number gdb-display-number)) |
824 (switch-to-buffer | 827 (switch-to-buffer |
825 (set-buffer (get-buffer-create gdb-expression-buffer-name))) | 828 (set-buffer (get-buffer-create gdb-expression-buffer-name))) |
826 (gdb-expressions-mode) | 829 (gdb-expressions-mode) |
827 (setq gdb-dive-display-number number))) | 830 (setq gdb-dive-display-number number))) |
828 ;else | |
829 (set-buffer (get-buffer-create gdb-expression-buffer-name)) | 831 (set-buffer (get-buffer-create gdb-expression-buffer-name)) |
830 (if (and (display-graphic-p) (not gdb-dive)) | 832 (if (and (display-graphic-p) (not gdb-dive)) |
831 (catch 'frame-exists | 833 (catch 'frame-exists |
832 (let ((frames (frame-list))) | 834 (dolist (frame (frame-list)) |
833 (while frames | 835 (if (string-equal (frame-parameter frame 'name) |
834 (if (string-equal (frame-parameter (car frames) 'name) | 836 gdb-expression-buffer-name) |
835 gdb-expression-buffer-name) | 837 (throw 'frame-exists nil))) |
836 (throw 'frame-exists nil)) | 838 (gdb-expressions-mode) |
837 (setq frames (cdr frames))) | 839 (make-frame '((height . 20) (width . 40) |
838 (if (not frames) | 840 (tool-bar-lines . nil) |
839 (progn | 841 (menu-bar-lines . nil) |
840 (gdb-expressions-mode) | 842 (minibuffer . nil))))))) |
841 (make-frame '((height . 20) (width . 40) | |
842 (tool-bar-lines . nil) | |
843 (menu-bar-lines . nil) | |
844 (minibuffer . nil)))))))))) | |
845 (set-buffer (gdb-get-instance-buffer 'gdb-partial-output-buffer)) | 843 (set-buffer (gdb-get-instance-buffer 'gdb-partial-output-buffer)) |
846 (setq gdb-dive nil)) | 844 (setq gdb-dive nil)) |
847 | 845 |
848 (defvar gdb-current-frame nil) | 846 (defvar gdb-current-frame nil) |
849 (defvar gdb-nesting-level) | 847 (defvar gdb-nesting-level) |
850 (defvar gdb-expression) | 848 (defvar gdb-expression) |
851 (defvar gdb-point) | 849 (defvar gdb-point) |
852 (defvar gdb-annotation-arg) | 850 (defvar gdb-annotation-arg) |
851 | |
852 (defun gdb-delete-line () | |
853 "Delete the current line." | |
854 (delete-region (line-beginning-position) (line-beginning-position 2))) | |
853 | 855 |
854 (defun gdb-display-end (ignored) | 856 (defun gdb-display-end (ignored) |
855 (set-buffer (gdb-get-instance-buffer 'gdb-partial-output-buffer)) | 857 (set-buffer (gdb-get-instance-buffer 'gdb-partial-output-buffer)) |
856 (goto-char (point-min)) | 858 (goto-char (point-min)) |
857 (search-forward ": ") | 859 (search-forward ": ") |
899 (re-search-forward "##" nil t) | 901 (re-search-forward "##" nil t) |
900 (setq gdb-nesting-level 0) | 902 (setq gdb-nesting-level 0) |
901 (if (looking-at "array-section-begin") | 903 (if (looking-at "array-section-begin") |
902 (progn | 904 (progn |
903 (gdb-delete-line) | 905 (gdb-delete-line) |
904 (beginning-of-line) | |
905 (setq gdb-point (point)) | 906 (setq gdb-point (point)) |
906 (gdb-array-format))) | 907 (gdb-array-format))) |
907 (if (looking-at "field-begin \\(.\\)") | 908 (if (looking-at "field-begin \\(.\\)") |
908 (progn | 909 (progn |
909 (setq gdb-annotation-arg (match-string 1)) | 910 (setq gdb-annotation-arg (match-string 1)) |
994 ; get rid of ##field-end and `,' or `}' | 995 ; get rid of ##field-end and `,' or `}' |
995 (gdb-delete-line) | 996 (gdb-delete-line) |
996 (gdb-delete-line) | 997 (gdb-delete-line) |
997 (setq gdb-nesting-level (- gdb-nesting-level 1))) | 998 (setq gdb-nesting-level (- gdb-nesting-level 1))) |
998 | 999 |
999 (defvar gdb-dive-map nil) | 1000 (defvar gdb-dive-map |
1000 | 1001 (let ((map (make-sparse-keymap))) |
1001 (setq gdb-dive-map (make-keymap)) | 1002 (define-key map [mouse-2] 'gdb-dive) |
1002 (define-key gdb-dive-map [mouse-2] 'gdb-dive) | 1003 (define-key map [S-mouse-2] 'gdb-dive-new-frame) |
1003 (define-key gdb-dive-map [S-mouse-2] 'gdb-dive-new-frame) | 1004 map)) |
1004 | 1005 |
1005 (defun gdb-dive (event) | 1006 (defun gdb-dive (event) |
1006 "Dive into structure." | 1007 "Dive into structure." |
1007 (interactive "e") | 1008 (interactive "e") |
1008 (setq gdb-dive t) | 1009 (setq gdb-dive t) |
1090 (gdb-array-format))))) | 1091 (gdb-array-format))))) |
1091 | 1092 |
1092 (defvar gdb-array-start) | 1093 (defvar gdb-array-start) |
1093 (defvar gdb-array-stop) | 1094 (defvar gdb-array-stop) |
1094 | 1095 |
1095 (defvar gdb-array-slice-map nil) | 1096 (defvar gdb-array-slice-map |
1096 (setq gdb-array-slice-map (make-keymap)) | 1097 (let ((map (make-sparse-keymap))) |
1097 (define-key gdb-array-slice-map [mouse-2] 'gdb-array-slice) | 1098 (define-key map [mouse-2] 'gdb-array-slice) |
1099 map)) | |
1098 | 1100 |
1099 (defun gdb-array-slice (event) | 1101 (defun gdb-array-slice (event) |
1100 "Select an array slice to display." | 1102 "Select an array slice to display." |
1101 (interactive "e") | 1103 (interactive "e") |
1102 (mouse-set-point event) | 1104 (mouse-set-point event) |
1123 (let* ((depth (- (match-end 1) (match-beginning 1))) | 1125 (let* ((depth (- (match-end 1) (match-beginning 1))) |
1124 (indices (make-vector depth '0)) | 1126 (indices (make-vector depth '0)) |
1125 (index 0) (num 0) (array-start "") | 1127 (index 0) (num 0) (array-start "") |
1126 (array-stop "") (array-slice "") (array-range nil) | 1128 (array-stop "") (array-slice "") (array-range nil) |
1127 (flag t) (indices-string "")) | 1129 (flag t) (indices-string "")) |
1128 (while gdb-value-list | 1130 (dolist (gdb-value gdb-value-list) |
1129 (string-match "{*\\([^}]*\\)\\(}*\\)" (car gdb-value-list)) | 1131 (string-match "{*\\([^}]*\\)\\(}*\\)" gdb-value) |
1130 (setq num 0) | 1132 (setq num 0) |
1131 (while (< num depth) | 1133 (while (< num depth) |
1132 (setq indices-string | 1134 (setq indices-string |
1133 (concat indices-string | 1135 (concat indices-string |
1134 "[" (int-to-string (aref indices num)) "]")) | 1136 "[" (int-to-string (aref indices num)) "]")) |
1137 (> (aref indices num) (aref gdb-array-stop num))) | 1139 (> (aref indices num) (aref gdb-array-stop num))) |
1138 (setq flag nil)) | 1140 (setq flag nil)) |
1139 (aset gdb-array-size num (aref indices num))) | 1141 (aset gdb-array-size num (aref indices num))) |
1140 (setq num (+ num 1))) | 1142 (setq num (+ num 1))) |
1141 (if flag | 1143 (if flag |
1142 (let ((gdb-display-value (match-string 1 (car gdb-value-list)))) | 1144 (let ((gdb-display-value (match-string 1 gdb-value))) |
1143 (setq gdb-display-string (concat gdb-display-string " " | 1145 (setq gdb-display-string (concat gdb-display-string " " |
1144 gdb-display-value)) | 1146 gdb-display-value)) |
1145 (insert | 1147 (insert |
1146 (concat indices-string "\t" gdb-display-value "\n")))) | 1148 (concat indices-string "\t" gdb-display-value "\n")))) |
1147 (setq indices-string "") | 1149 (setq indices-string "") |
1148 (setq flag t) | 1150 (setq flag t) |
1149 ;; 0<= index < depth, start at right : (- depth 1) | 1151 ;; 0<= index < depth, start at right : (- depth 1) |
1150 (setq index (- (- depth 1) | 1152 (setq index (- (- depth 1) |
1151 (- (match-end 2) (match-beginning 2)))) | 1153 (- (match-end 2) (match-beginning 2)))) |
1152 ;;don't set for very last brackets | 1154 ;;don't set for very last brackets |
1153 (if (>= index 0) | 1155 (when (>= index 0) |
1154 (progn | 1156 (aset indices index (+ 1 (aref indices index))) |
1155 (aset indices index (+ 1 (aref indices index))) | 1157 (setq num (+ 1 index)) |
1156 (setq num (+ 1 index)) | 1158 (while (< num depth) |
1157 (while (< num depth) | 1159 (aset indices num 0) |
1158 (aset indices num 0) | 1160 (setq num (+ num 1))))) |
1159 (setq num (+ num 1))))) | |
1160 (setq gdb-value-list (cdr gdb-value-list))) | |
1161 (setq num 0) | 1161 (setq num 0) |
1162 (while (< num depth) | 1162 (while (< num depth) |
1163 (if (= (aref gdb-array-start num) -1) | 1163 (if (= (aref gdb-array-start num) -1) |
1164 (progn | 1164 (progn |
1165 (aset gdb-array-start num 0) | 1165 (aset gdb-array-start num 0) |
1395 gdb-info-breakpoints-handler | 1395 gdb-info-breakpoints-handler |
1396 ;; buffer specific functions | 1396 ;; buffer specific functions |
1397 gdb-info-breakpoints-custom) | 1397 gdb-info-breakpoints-custom) |
1398 | 1398 |
1399 (defvar gdb-cdir nil "Compilation directory.") | 1399 (defvar gdb-cdir nil "Compilation directory.") |
1400 (defvar breakpoint-enabled-icon | 1400 (defvar breakpoint-enabled-icon) |
1401 "Icon for enabled breakpoint in display margin") | 1401 (defvar breakpoint-disabled-icon) |
1402 (defvar breakpoint-disabled-icon | |
1403 "Icon for disabled breakpoint in display margin") | |
1404 | 1402 |
1405 ;-put breakpoint icons in relevant margins (even those set in the GUD buffer) | 1403 ;-put breakpoint icons in relevant margins (even those set in the GUD buffer) |
1406 (defun gdb-info-breakpoints-custom () | 1404 (defun gdb-info-breakpoints-custom () |
1407 (let ((flag)(address)) | 1405 (let ((flag)(address)) |
1408 | 1406 |
1484 (defun gdb-frame-breakpoints-buffer () | 1482 (defun gdb-frame-breakpoints-buffer () |
1485 (interactive) | 1483 (interactive) |
1486 (switch-to-buffer-other-frame | 1484 (switch-to-buffer-other-frame |
1487 (gdb-get-create-instance-buffer 'gdb-breakpoints-buffer))) | 1485 (gdb-get-create-instance-buffer 'gdb-breakpoints-buffer))) |
1488 | 1486 |
1489 (defvar gdb-breakpoints-mode-map nil) | 1487 (defvar gdb-breakpoints-mode-map |
1490 (setq gdb-breakpoints-mode-map (make-keymap)) | 1488 (let ((map (make-sparse-keymap)) |
1491 (suppress-keymap gdb-breakpoints-mode-map) | 1489 (menu (make-sparse-keymap "Breakpoints"))) |
1492 | 1490 (define-key menu [toggle] '("Toggle" . gdb-toggle-bp-this-line)) |
1493 (define-key gdb-breakpoints-mode-map [menu-bar breakpoints] | 1491 (define-key menu [delete] '("Delete" . gdb-delete-bp-this-line)) |
1494 (cons "Breakpoints" (make-sparse-keymap "Breakpoints"))) | 1492 (define-key menu [goto] '("Goto" . gdb-goto-bp-this-line)) |
1495 (define-key gdb-breakpoints-mode-map [menu-bar breakpoints toggle] | 1493 |
1496 '("Toggle" . gdb-toggle-bp-this-line)) | 1494 (suppress-keymap map) |
1497 (define-key gdb-breakpoints-mode-map [menu-bar breakpoints delete] | 1495 (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) |
1498 '("Delete" . gdb-delete-bp-this-line)) | 1496 (define-key map " " 'gdb-toggle-bp-this-line) |
1499 (define-key gdb-breakpoints-mode-map [menu-bar breakpoints goto] | 1497 (define-key map "d" 'gdb-delete-bp-this-line) |
1500 '("Goto" . gdb-goto-bp-this-line)) | 1498 (define-key map "g" 'gdb-goto-bp-this-line) |
1501 | 1499 map)) |
1502 (define-key gdb-breakpoints-mode-map " " 'gdb-toggle-bp-this-line) | |
1503 (define-key gdb-breakpoints-mode-map "d" 'gdb-delete-bp-this-line) | |
1504 (define-key gdb-breakpoints-mode-map "g" 'gdb-goto-bp-this-line) | |
1505 | 1500 |
1506 (defun gdb-breakpoints-mode () | 1501 (defun gdb-breakpoints-mode () |
1507 "Major mode for gdb breakpoints. | 1502 "Major mode for gdb breakpoints. |
1508 | 1503 |
1509 \\{gdb-breakpoints-mode-map}" | 1504 \\{gdb-breakpoints-mode-map}" |
1608 (defun gdb-frame-stack-buffer () | 1603 (defun gdb-frame-stack-buffer () |
1609 (interactive) | 1604 (interactive) |
1610 (switch-to-buffer-other-frame | 1605 (switch-to-buffer-other-frame |
1611 (gdb-get-create-instance-buffer 'gdb-stack-buffer))) | 1606 (gdb-get-create-instance-buffer 'gdb-stack-buffer))) |
1612 | 1607 |
1613 (defvar gdb-frames-mode-map nil) | 1608 (defvar gdb-frames-mode-map |
1614 (setq gdb-frames-mode-map (make-keymap)) | 1609 (let ((map (make-sparse-keymap))) |
1615 (suppress-keymap gdb-frames-mode-map) | 1610 (suppress-keymap map) |
1616 (define-key gdb-frames-mode-map [mouse-2] | 1611 (define-key map [mouse-2]'gdb-frames-select-by-mouse) |
1617 'gdb-frames-select-by-mouse) | 1612 map)) |
1618 | 1613 |
1619 (defun gdb-frames-mode () | 1614 (defun gdb-frames-mode () |
1620 "Major mode for gdb frames. | 1615 "Major mode for gdb frames. |
1621 | 1616 |
1622 \\{gdb-frames-mode-map}" | 1617 \\{gdb-frames-mode-map}" |
1666 | 1661 |
1667 (gdb-set-instance-buffer-rules 'gdb-registers-buffer | 1662 (gdb-set-instance-buffer-rules 'gdb-registers-buffer |
1668 'gdb-registers-buffer-name | 1663 'gdb-registers-buffer-name |
1669 'gdb-registers-mode) | 1664 'gdb-registers-mode) |
1670 | 1665 |
1671 (defvar gdb-registers-mode-map nil) | 1666 (defvar gdb-registers-mode-map |
1672 (setq gdb-registers-mode-map (make-keymap)) | 1667 (let ((map (make-sparse-keymap))) |
1673 (suppress-keymap gdb-registers-mode-map) | 1668 (suppress-keymap map) |
1669 map)) | |
1674 | 1670 |
1675 (defun gdb-registers-mode () | 1671 (defun gdb-registers-mode () |
1676 "Major mode for gdb registers. | 1672 "Major mode for gdb registers. |
1677 | 1673 |
1678 \\{gdb-registers-mode-map}" | 1674 \\{gdb-registers-mode-map}" |
1739 | 1735 |
1740 (gdb-set-instance-buffer-rules 'gdb-locals-buffer | 1736 (gdb-set-instance-buffer-rules 'gdb-locals-buffer |
1741 'gdb-locals-buffer-name | 1737 'gdb-locals-buffer-name |
1742 'gdb-locals-mode) | 1738 'gdb-locals-mode) |
1743 | 1739 |
1744 (defvar gdb-locals-mode-map nil) | 1740 (defvar gdb-locals-mode-map |
1745 (setq gdb-locals-mode-map (make-keymap)) | 1741 (let ((map (make-sparse-keymap))) |
1746 (suppress-keymap gdb-locals-mode-map) | 1742 (suppress-keymap map) |
1743 map)) | |
1747 | 1744 |
1748 (defun gdb-locals-mode () | 1745 (defun gdb-locals-mode () |
1749 "Major mode for gdb locals. | 1746 "Major mode for gdb locals. |
1750 | 1747 |
1751 \\{gdb-locals-mode-map}" | 1748 \\{gdb-locals-mode-map}" |
1789 ; TODO: ensure frames of expressions that have been deleted are also deleted | 1786 ; TODO: ensure frames of expressions that have been deleted are also deleted |
1790 ; these can be missed currently eg through GUD buffer, restarting a | 1787 ; these can be missed currently eg through GUD buffer, restarting a |
1791 ; recompiled program. | 1788 ; recompiled program. |
1792 ) | 1789 ) |
1793 | 1790 |
1794 (defvar gdb-display-mode-map nil) | 1791 (defvar gdb-display-mode-map |
1795 (setq gdb-display-mode-map (make-keymap)) | 1792 (let ((map (make-sparse-keymap)) |
1796 (suppress-keymap gdb-display-mode-map) | 1793 (menu (make-sparse-keymap "Display"))) |
1797 | 1794 (define-key menu [toggle] '("Toggle" . gdb-toggle-disp-this-line)) |
1798 (define-key gdb-display-mode-map [menu-bar display] | 1795 (define-key menu [delete] '("Delete" . gdb-delete-disp-this-line)) |
1799 (cons "Display" (make-sparse-keymap "Display"))) | 1796 |
1800 (define-key gdb-display-mode-map [menu-bar display toggle] | 1797 (suppress-keymap map) |
1801 '("Toggle" . gdb-toggle-disp-this-line)) | 1798 (define-key map [menu-bar display] (cons "Display" menu)) |
1802 (define-key gdb-display-mode-map [menu-bar display delete] | 1799 (define-key map " " 'gdb-toggle-disp-this-line) |
1803 '("Delete" . gdb-delete-disp-this-line)) | 1800 (define-key map "d" 'gdb-delete-disp-this-line) |
1804 | 1801 map)) |
1805 (define-key gdb-display-mode-map " " 'gdb-toggle-disp-this-line) | |
1806 (define-key gdb-display-mode-map "d" 'gdb-delete-disp-this-line) | |
1807 | 1802 |
1808 (defun gdb-display-mode () | 1803 (defun gdb-display-mode () |
1809 "Major mode for gdb display. | 1804 "Major mode for gdb display. |
1810 | 1805 |
1811 \\{gdb-display-mode-map}" | 1806 \\{gdb-display-mode-map}" |
1874 (get-buffer (concat "*display " number "*"))) | 1869 (get-buffer (concat "*display " number "*"))) |
1875 (delete-frame (car frames)) | 1870 (delete-frame (car frames)) |
1876 (throw 'frame-found nil))) | 1871 (throw 'frame-found nil))) |
1877 (setq frames (cdr frames)))))))))) | 1872 (setq frames (cdr frames)))))))))) |
1878 | 1873 |
1879 (defvar gdb-expressions-mode-map nil) | 1874 (defvar gdb-expressions-mode-map |
1880 (setq gdb-expressions-mode-map (make-keymap)) | 1875 (let ((map (make-sparse-keymap))) |
1881 (suppress-keymap gdb-expressions-mode-map) | 1876 (suppress-keymap map) |
1877 (define-key map "v" 'gdb-array-visualise) | |
1878 (define-key map "q" 'gdb-delete-display) | |
1879 (define-key map [mouse-3] 'gdb-expressions-popup-menu) | |
1880 map)) | |
1882 | 1881 |
1883 (defvar gdb-expressions-mode-menu | 1882 (defvar gdb-expressions-mode-menu |
1884 '("GDB Expressions Commands" | 1883 '("GDB Expressions Commands" |
1885 "----" | 1884 "----" |
1886 ["Visualise" gdb-array-visualise t] | 1885 ["Visualise" gdb-array-visualise t] |
1887 ["Delete" gdb-delete-display t]) | 1886 ["Delete" gdb-delete-display t]) |
1888 "Menu for `gdb-expressions-mode'.") | 1887 "Menu for `gdb-expressions-mode'.") |
1889 | |
1890 (define-key gdb-expressions-mode-map "v" 'gdb-array-visualise) | |
1891 (define-key gdb-expressions-mode-map "q" 'gdb-delete-display) | |
1892 (define-key gdb-expressions-mode-map [mouse-3] 'gdb-expressions-popup-menu) | |
1893 | 1888 |
1894 (defun gdb-expressions-popup-menu (event) | 1889 (defun gdb-expressions-popup-menu (event) |
1895 "Explicit Popup menu as this buffer doesn't have a menubar." | 1890 "Explicit Popup menu as this buffer doesn't have a menubar." |
1896 (interactive "@e") | 1891 (interactive "@e") |
1897 (mouse-set-point event) | 1892 (mouse-set-point event) |
1969 (defun gdb-display-gdb-buffer () | 1964 (defun gdb-display-gdb-buffer () |
1970 (interactive) | 1965 (interactive) |
1971 (gdb-display-buffer | 1966 (gdb-display-buffer |
1972 (gdb-get-create-instance-buffer 'gdba))) | 1967 (gdb-get-create-instance-buffer 'gdba))) |
1973 | 1968 |
1974 (defun gdb-make-windows-menu (map) | 1969 ;; FIXME: changing GUD's behavior: bad bad bad!!! |
1975 ;; FIXME: This adds to the DBX, PerlDB, ... menu as well :-( | |
1976 ;; Probably we should create gdb-many-windows-map and put those menus | |
1977 ;; on that map. | |
1978 (define-key map [menu-bar displays] | |
1979 (cons "GDB-Windows" (make-sparse-keymap "GDB-Windows"))) | |
1980 (define-key map [menu-bar displays gdb] | |
1981 '("Gdb" . gdb-display-gdb-buffer)) | |
1982 (define-key map [menu-bar displays locals] | |
1983 '("Locals" . gdb-display-locals-buffer)) | |
1984 (define-key map [menu-bar displays registers] | |
1985 '("Registers" . gdb-display-registers-buffer)) | |
1986 (define-key map [menu-bar displays frames] | |
1987 '("Stack" . gdb-display-stack-buffer)) | |
1988 (define-key map [menu-bar displays breakpoints] | |
1989 '("Breakpoints" . gdb-display-breakpoints-buffer)) | |
1990 (define-key map [menu-bar displays display] | |
1991 '("Display" . gdb-display-display-buffer)) | |
1992 (define-key map [menu-bar displays assembler] | |
1993 '("Assembler" . gdb-display-assembler-buffer))) | |
1994 | |
1995 (define-key gud-minor-mode-map "\C-c\M-\C-r" 'gdb-display-registers-buffer) | 1970 (define-key gud-minor-mode-map "\C-c\M-\C-r" 'gdb-display-registers-buffer) |
1996 (define-key gud-minor-mode-map "\C-c\M-\C-f" 'gdb-display-stack-buffer) | 1971 (define-key gud-minor-mode-map "\C-c\M-\C-f" 'gdb-display-stack-buffer) |
1997 (define-key gud-minor-mode-map "\C-c\M-\C-b" 'gdb-display-breakpoints-buffer) | 1972 (define-key gud-minor-mode-map "\C-c\M-\C-b" 'gdb-display-breakpoints-buffer) |
1998 | 1973 |
1999 (gdb-make-windows-menu gud-minor-mode-map) | 1974 (let ((menu (make-sparse-keymap "GDB-Windows"))) |
1975 (define-key gud-minor-mode-map [menu-bar debug displays] | |
1976 `(menu-item "GDB-Windows" ,menu :visible (memq gud-minor-mode '(gdba)))) | |
1977 (define-key menu [gdb] '("Gdb" . gdb-display-gdb-buffer)) | |
1978 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) | |
1979 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) | |
1980 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) | |
1981 (define-key menu [breakpoints] '("Breakpoints" . gdb-display-breakpoints-buffer)) | |
1982 (define-key menu [display] '("Display" . gdb-display-display-buffer)) | |
1983 (define-key menu [assembler] '("Assembler" . gdb-display-assembler-buffer))) | |
2000 | 1984 |
2001 (defun gdb-frame-gdb-buffer () | 1985 (defun gdb-frame-gdb-buffer () |
2002 (interactive) | 1986 (interactive) |
2003 (switch-to-buffer-other-frame | 1987 (switch-to-buffer-other-frame |
2004 (gdb-get-create-instance-buffer 'gdba))) | 1988 (gdb-get-create-instance-buffer 'gdba))) |
2005 | 1989 |
2006 (defun gdb-make-frames-menu (map) | 1990 (let ((menu (make-sparse-keymap "GDB-Frames"))) |
2007 (define-key map [menu-bar frames] | 1991 (define-key gud-minor-mode-map [menu-bar debug frames] |
2008 (cons "GDB-Frames" (make-sparse-keymap "GDB-Frames"))) | 1992 `(menu-item "GDB-Frames" ,menu :visible (memq gud-minor-mode '(gdba)))) |
2009 (define-key map [menu-bar frames gdb] | 1993 (define-key menu [gdb] '("Gdb" . gdb-frame-gdb-buffer)) |
2010 '("Gdb" . gdb-frame-gdb-buffer)) | 1994 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) |
2011 (define-key map [menu-bar frames locals] | 1995 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) |
2012 '("Locals" . gdb-frame-locals-buffer)) | 1996 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) |
2013 (define-key map [menu-bar frames registers] | 1997 (define-key menu [breakpoints] '("Breakpoints" . gdb-frame-breakpoints-buffer)) |
2014 '("Registers" . gdb-frame-registers-buffer)) | 1998 (define-key menu [display] '("Display" . gdb-frame-display-buffer)) |
2015 (define-key map [menu-bar frames frames] | 1999 (define-key menu [assembler] '("Assembler" . gdb-frame-assembler-buffer))) |
2016 '("Stack" . gdb-frame-stack-buffer)) | |
2017 (define-key map [menu-bar frames breakpoints] | |
2018 '("Breakpoints" . gdb-frame-breakpoints-buffer)) | |
2019 (define-key map [menu-bar frames display] | |
2020 '("Display" . gdb-frame-display-buffer)) | |
2021 (define-key map [menu-bar frames assembler] | |
2022 '("Assembler" . gdb-frame-assembler-buffer))) | |
2023 | |
2024 (if (display-graphic-p) | |
2025 (gdb-make-frames-menu gud-minor-mode-map)) | |
2026 | 2000 |
2027 (defvar gdb-main-file nil "Source file from which program execution begins.") | 2001 (defvar gdb-main-file nil "Source file from which program execution begins.") |
2028 | 2002 |
2029 ;; layout for all the windows | 2003 ;; layout for all the windows |
2030 (defun gdb-setup-windows () | 2004 (defun gdb-setup-windows () |
2101 \"+++ +++\", | 2075 \"+++ +++\", |
2102 \"+++++ +++++\" | 2076 \"+++++ +++++\" |
2103 };" | 2077 };" |
2104 "XPM file used for breakpoint icon.") | 2078 "XPM file used for breakpoint icon.") |
2105 | 2079 |
2106 (setq breakpoint-enabled-icon (find-image | 2080 (defvar breakpoint-enabled-icon |
2107 `((:type xpm :data ,breakpoint-xpm-data)))) | 2081 (find-image `((:type xpm :data ,breakpoint-xpm-data))) |
2108 (setq breakpoint-disabled-icon (find-image | 2082 "Icon for enabled breakpoint in display margin") |
2109 `((:type xpm :data ,breakpoint-xpm-data | 2083 (defvar breakpoint-disabled-icon |
2110 :conversion laplace)))) | 2084 (find-image `((:type xpm :data ,breakpoint-xpm-data |
2085 :conversion laplace))) | |
2086 "Icon for disabled breakpoint in display margin") | |
2111 | 2087 |
2112 (defun gdb-quit () | 2088 (defun gdb-quit () |
2113 "Kill the GUD and ancillary (including source) buffers. | 2089 "Kill the GUD and ancillary (including source) buffers. |
2114 Just the partial-output buffer is left." | 2090 Just the partial-output buffer is left." |
2115 (interactive) | 2091 (interactive) |
2235 (setq overlays (cdr overlays))))) | 2211 (setq overlays (cdr overlays))))) |
2236 | 2212 |
2237 (defun gdb-array-visualise () | 2213 (defun gdb-array-visualise () |
2238 "Visualise arrays and slices using graph program from plotutils." | 2214 "Visualise arrays and slices using graph program from plotutils." |
2239 (interactive) | 2215 (interactive) |
2240 (if (and (display-graphic-p) gdb-display-string) | 2216 (when (and (display-graphic-p) gdb-display-string) |
2241 (let ((n 0) m) | 2217 (let ((n 0) m) |
2242 (catch 'multi-dimensional | 2218 (catch 'multi-dimensional |
2243 (while (eq (aref gdb-array-start n) (aref gdb-array-stop n)) | 2219 (while (eq (aref gdb-array-start n) (aref gdb-array-stop n)) |
2244 (setq n (+ n 1))) | 2220 (setq n (+ n 1))) |
2245 (setq m (+ n 1)) | 2221 (setq m (+ n 1)) |
2246 (while (< m (length gdb-array-start)) | 2222 (while (< m (length gdb-array-start)) |
2247 (if (not (eq (aref gdb-array-start m) (aref gdb-array-stop m))) | 2223 (if (not (eq (aref gdb-array-start m) (aref gdb-array-stop m))) |
2248 (progn | 2224 (progn |
2249 (x-popup-dialog | 2225 (x-popup-dialog |
2250 t `(,(concat "Only one dimensional data can be visualised.\n" | 2226 t `(,(concat "Only one dimensional data can be visualised.\n" |
2251 "Use an array slice to reduce the number of\n" | 2227 "Use an array slice to reduce the number of\n" |
2252 "dimensions") ("OK" t))) | 2228 "dimensions") ("OK" t))) |
2253 (throw 'multi-dimensional nil)) | 2229 (throw 'multi-dimensional nil)) |
2254 (setq m (+ m 1)))) | 2230 (setq m (+ m 1)))) |
2255 (shell-command (concat "echo" gdb-display-string " | graph -a 1 " | 2231 (shell-command (concat "echo" gdb-display-string " | graph -a 1 " |
2256 (int-to-string (aref gdb-array-start n)) | 2232 (int-to-string (aref gdb-array-start n)) |
2257 " -x " | 2233 " -x " |
2258 (int-to-string (aref gdb-array-start n)) | 2234 (int-to-string (aref gdb-array-start n)) |
2259 " " | 2235 " " |
2260 (int-to-string (aref gdb-array-stop n)) | 2236 (int-to-string (aref gdb-array-stop n)) |
2261 " 1 -T X")))))) | 2237 " 1 -T X")))))) |
2262 | 2238 |
2263 (defun gdb-delete-display () | 2239 (defun gdb-delete-display () |
2264 "Delete displayed expression and its frame." | 2240 "Delete displayed expression and its frame." |
2265 (interactive) | 2241 (interactive) |
2266 (gdb-instance-enqueue-idle-input | 2242 (gdb-instance-enqueue-idle-input |
2336 | 2312 |
2337 (gdb-set-instance-buffer-rules 'gdb-assembler-buffer | 2313 (gdb-set-instance-buffer-rules 'gdb-assembler-buffer |
2338 'gdb-assembler-buffer-name | 2314 'gdb-assembler-buffer-name |
2339 'gdb-assembler-mode) | 2315 'gdb-assembler-mode) |
2340 | 2316 |
2341 (defvar gdb-assembler-mode-map nil) | 2317 (defvar gdb-assembler-mode-map |
2342 (setq gdb-assembler-mode-map (make-keymap)) | 2318 (let ((map (make-sparse-keymap))) |
2343 (suppress-keymap gdb-assembler-mode-map) | 2319 (suppress-keymap map) |
2320 map)) | |
2344 | 2321 |
2345 (defun gdb-assembler-mode () | 2322 (defun gdb-assembler-mode () |
2346 "Major mode for viewing code assembler. | 2323 "Major mode for viewing code assembler. |
2347 | 2324 |
2348 \\{gdb-assembler-mode-map}" | 2325 \\{gdb-assembler-mode-map}" |
2406 (set-gdb-instance-pending-triggers | 2383 (set-gdb-instance-pending-triggers |
2407 (cons 'gdb-invalidate-assembler | 2384 (cons 'gdb-invalidate-assembler |
2408 (gdb-instance-pending-triggers))) | 2385 (gdb-instance-pending-triggers))) |
2409 (setq gdb-prev-main-or-pc gdb-main-or-pc)))) | 2386 (setq gdb-prev-main-or-pc gdb-main-or-pc)))) |
2410 | 2387 |
2411 (defun gdb-delete-line () | |
2412 "Delete the current line." | |
2413 (interactive) | |
2414 (let ((start (progn (beginning-of-line) (point))) | |
2415 (end (progn (end-of-line) (+ (point) 1)))) | |
2416 (delete-region start end))) | |
2417 | |
2418 (provide 'gdb-ui) | 2388 (provide 'gdb-ui) |
2419 | 2389 |
2420 ;;; gdb-ui.el ends here | 2390 ;;; gdb-ui.el ends here |