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