aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorKaroly Lorentey2006-02-16 16:18:54 +0000
committerKaroly Lorentey2006-02-16 16:18:54 +0000
commit322c30faa92c5ba2accc1027893a7cc24abbde72 (patch)
tree235c1de5e7e7b71c470b326e9480e3476c483050 /lisp/progmodes
parent6213d5b33cfae99e350488ab96bfd9704e0ff834 (diff)
parentb51897597a6ab40a4772d70a23421e66b3eb5048 (diff)
downloademacs-322c30faa92c5ba2accc1027893a7cc24abbde72.tar.gz
emacs-322c30faa92c5ba2accc1027893a7cc24abbde72.zip
Merged from
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-73 Merge from erc--emacs--0 * emacs@sv.gnu.org/emacs--devo--0--patch-74 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-75 Make ERC comply with the new copyright year guidelines. * emacs@sv.gnu.org/emacs--devo--0--patch-76 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-77 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-78 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-79 (rcirc-format-response-string): Fix small bugs * emacs@sv.gnu.org/emacs--devo--0--patch-80 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-81 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-82 Fix compiler error in erc-dcc.el. * emacs@sv.gnu.org/emacs--devo--0--patch-83 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-84 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-85 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-86 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-87 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-88 Merge from erc--emacs--0 * emacs@sv.gnu.org/emacs--devo--0--patch-89 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-90 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-513
Diffstat (limited to 'lisp/progmodes')
-rw-r--r--lisp/progmodes/ebrowse.el2
-rw-r--r--lisp/progmodes/flymake.el2
-rw-r--r--lisp/progmodes/gdb-ui.el190
-rw-r--r--lisp/progmodes/gud.el11
4 files changed, 88 insertions, 117 deletions
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 0d8d7bebbcb..29f1036b1bb 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -4236,7 +4236,7 @@ NUMBER-OF-STATIC-VARIABLES:"
4236 "*Keymap for Ebrowse commands.") 4236 "*Keymap for Ebrowse commands.")
4237 4237
4238 4238
4239(defvar ebrowse-global-prefix-key "\C-cb" 4239(defvar ebrowse-global-prefix-key "\C-cC-m"
4240 "Prefix key for Ebrowse commands.") 4240 "Prefix key for Ebrowse commands.")
4241 4241
4242 4242
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 9a6024c8e8b..4f197e34bfe 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -339,7 +339,7 @@ Return its file name if found, or nil if not found."
339 nil))))) 339 nil)))))
340 340
341(defun flymake-fix-file-name (name) 341(defun flymake-fix-file-name (name)
342 "Replace all occurences of '\' with '/'." 342 "Replace all occurrences of '\' with '/'."
343 (when name 343 (when name
344 (setq name (expand-file-name name)) 344 (setq name (expand-file-name name))
345 (setq name (abbreviate-file-name name)) 345 (setq name (abbreviate-file-name name))
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index 755e83646fc..49f6c64c1a7 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -185,7 +185,6 @@ handlers.")
185 "Font lock keywords used in `gdb-local-mode'.") 185 "Font lock keywords used in `gdb-local-mode'.")
186 186
187;; Variables for GDB 6.4+ 187;; Variables for GDB 6.4+
188
189(defvar gdb-register-names nil "List of register names.") 188(defvar gdb-register-names nil "List of register names.")
190(defvar gdb-changed-registers nil 189(defvar gdb-changed-registers nil
191 "List of changed register numbers (strings).") 190 "List of changed register numbers (strings).")
@@ -203,7 +202,7 @@ other with the source file with the main routine of the inferior.
203 202
204If `gdb-many-windows' is t, regardless of the value of 203If `gdb-many-windows' is t, regardless of the value of
205`gdb-show-main', the layout below will appear unless 204`gdb-show-main', the layout below will appear unless
206`gdb-use-inferior-io-buffer' is nil when the source buffer 205`gdb-use-separate-io-buffer' is nil when the source buffer
207occupies the full width of the frame. Keybindings are given in 206occupies the full width of the frame. Keybindings are given in
208relevant buffer. 207relevant buffer.
209 208
@@ -281,26 +280,26 @@ Also display the main routine in the disassembly buffer if present."
281 :group 'gud 280 :group 'gud
282 :version "22.1") 281 :version "22.1")
283 282
284(defcustom gdb-use-inferior-io-buffer nil 283(defcustom gdb-use-separate-io-buffer nil
285 "Non-nil means display output from the inferior in a separate buffer." 284 "Non-nil means display output from the inferior in a separate buffer."
286 :type 'boolean 285 :type 'boolean
287 :group 'gud 286 :group 'gud
288 :version "22.1") 287 :version "22.1")
289 288
290(defun gdb-use-inferior-io-buffer (arg) 289(defun gdb-use-separate-io-buffer (arg)
291 "Toggle separate IO for inferior. 290 "Toggle separate IO for inferior.
292With arg, use separate IO iff arg is positive." 291With arg, use separate IO iff arg is positive."
293 (interactive "P") 292 (interactive "P")
294 (setq gdb-use-inferior-io-buffer 293 (setq gdb-use-separate-io-buffer
295 (if (null arg) 294 (if (null arg)
296 (not gdb-use-inferior-io-buffer) 295 (not gdb-use-separate-io-buffer)
297 (> (prefix-numeric-value arg) 0))) 296 (> (prefix-numeric-value arg) 0)))
298 (message (format "Separate inferior IO %sabled" 297 (message (format "Separate inferior IO %sabled"
299 (if gdb-use-inferior-io-buffer "en" "dis"))) 298 (if gdb-use-separate-io-buffer "en" "dis")))
300 (if (and gud-comint-buffer 299 (if (and gud-comint-buffer
301 (buffer-name gud-comint-buffer)) 300 (buffer-name gud-comint-buffer))
302 (condition-case nil 301 (condition-case nil
303 (if gdb-use-inferior-io-buffer 302 (if gdb-use-separate-io-buffer
304 (gdb-restore-windows) 303 (gdb-restore-windows)
305 (kill-buffer (gdb-inferior-io-name))) 304 (kill-buffer (gdb-inferior-io-name)))
306 (error nil)))) 305 (error nil))))
@@ -462,7 +461,7 @@ With arg, use separate IO iff arg is positive."
462 461
463 (setq gdb-buffer-type 'gdba) 462 (setq gdb-buffer-type 'gdba)
464 463
465 (if gdb-use-inferior-io-buffer (gdb-clear-inferior-io)) 464 (if gdb-use-separate-io-buffer (gdb-clear-inferior-io))
466 465
467 ;; Hack to see test for GDB 6.4+ (-stack-info-frame was implemented in 6.4) 466 ;; Hack to see test for GDB 6.4+ (-stack-info-frame was implemented in 6.4)
468 (setq gdb-version nil) 467 (setq gdb-version nil)
@@ -571,7 +570,7 @@ With arg, automatically raise speedbar iff arg is positive."
571 (set-text-properties 0 (length expr) nil expr) 570 (set-text-properties 0 (length expr) nil expr)
572 (gdb-enqueue-input 571 (gdb-enqueue-input
573 (list 572 (list
574 (if (eq gud-minor-mode 'gdba) 573 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
575 (concat "server interpreter mi \"-var-create - * " expr "\"\n") 574 (concat "server interpreter mi \"-var-create - * " expr "\"\n")
576 (concat"-var-create - * " expr "\n")) 575 (concat"-var-create - * " expr "\n"))
577 `(lambda () (gdb-var-create-handler ,expr)))))))) 576 `(lambda () (gdb-var-create-handler ,expr))))))))
@@ -594,8 +593,7 @@ With arg, automatically raise speedbar iff arg is positive."
594 (speedbar-change-initial-expansion-list "GUD")) 593 (speedbar-change-initial-expansion-list "GUD"))
595 (gdb-enqueue-input 594 (gdb-enqueue-input
596 (list 595 (list
597 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 596 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
598 'gdba)
599 (concat "server interpreter mi \"-var-evaluate-expression " 597 (concat "server interpreter mi \"-var-evaluate-expression "
600 (nth 1 var) "\"\n") 598 (nth 1 var) "\"\n")
601 (concat "-var-evaluate-expression " (nth 1 var) "\n")) 599 (concat "-var-evaluate-expression " (nth 1 var) "\n"))
@@ -743,13 +741,11 @@ TEXT is the text of the button we clicked on, a + or - item.
743TOKEN is data related to this node. 741TOKEN is data related to this node.
744INDENT is the current indentation depth." 742INDENT is the current indentation depth."
745 (cond ((string-match "+" text) ;expand this node 743 (cond ((string-match "+" text) ;expand this node
746 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 744 (if (and
747 (if (string-equal gdb-version "pre-6.4") 745 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
748 (gdb-var-list-children token) 746 (string-equal gdb-version "pre-6.4"))
749 (gdb-var-list-children-1 token)) 747 (gdb-var-list-children token)
750 (progn 748 (gdb-var-list-children-1 token)))
751 (gdbmi-var-update)
752 (gdbmi-var-list-children token))))
753 ((string-match "-" text) ;contract this node 749 ((string-match "-" text) ;contract this node
754 (dolist (var gdb-var-list) 750 (dolist (var gdb-var-list)
755 (if (string-match (concat token "\\.") (nth 1 var)) 751 (if (string-match (concat token "\\.") (nth 1 var))
@@ -856,10 +852,10 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
856 (gdb-get-target-string) 852 (gdb-get-target-string)
857 "*")) 853 "*"))
858 854
859(defun gdb-display-inferior-io-buffer () 855(defun gdb-display-separate-io-buffer ()
860 "Display IO of inferior in a separate window." 856 "Display IO of inferior in a separate window."
861 (interactive) 857 (interactive)
862 (if gdb-use-inferior-io-buffer 858 (if gdb-use-separate-io-buffer
863 (gdb-display-buffer 859 (gdb-display-buffer
864 (gdb-get-create-buffer 'gdb-inferior-io)))) 860 (gdb-get-create-buffer 'gdb-inferior-io))))
865 861
@@ -870,21 +866,21 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
870 (menu-bar-lines . nil) 866 (menu-bar-lines . nil)
871 (minibuffer . nil))) 867 (minibuffer . nil)))
872 868
873(defun gdb-frame-inferior-io-buffer () 869(defun gdb-frame-separate-io-buffer ()
874 "Display IO of inferior in a new frame." 870 "Display IO of inferior in a new frame."
875 (interactive) 871 (interactive)
876 (if gdb-use-inferior-io-buffer 872 (if gdb-use-separate-io-buffer
877 (let ((special-display-regexps (append special-display-regexps '(".*"))) 873 (let ((special-display-regexps (append special-display-regexps '(".*")))
878 (special-display-frame-alist gdb-frame-parameters)) 874 (special-display-frame-alist gdb-frame-parameters))
879 (display-buffer (gdb-get-create-buffer 'gdb-inferior-io))))) 875 (display-buffer (gdb-get-create-buffer 'gdb-inferior-io)))))
880 876
881(defvar gdb-inferior-io-mode-map 877(defvar gdb-inferior-io-mode-map
882 (let ((map (make-sparse-keymap))) 878 (let ((map (make-sparse-keymap)))
883 (define-key map "\C-c\C-c" 'gdb-inferior-io-interrupt) 879 (define-key map "\C-c\C-c" 'gdb-separate-io-interrupt)
884 (define-key map "\C-c\C-z" 'gdb-inferior-io-stop) 880 (define-key map "\C-c\C-z" 'gdb-separate-io-stop)
885 (define-key map "\C-c\C-\\" 'gdb-inferior-io-quit) 881 (define-key map "\C-c\C-\\" 'gdb-separate-io-quit)
886 (define-key map "\C-c\C-d" 'gdb-inferior-io-eof) 882 (define-key map "\C-c\C-d" 'gdb-separate-io-eof)
887 (define-key map "\C-d" 'gdb-inferior-io-eof) 883 (define-key map "\C-d" 'gdb-separate-io-eof)
888 map)) 884 map))
889 885
890(define-derived-mode gdb-inferior-io-mode comint-mode "Inferior I/O" 886(define-derived-mode gdb-inferior-io-mode comint-mode "Inferior I/O"
@@ -905,25 +901,25 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'."
905 (process-send-string proc string) 901 (process-send-string proc string)
906 (process-send-string proc "\n"))) 902 (process-send-string proc "\n")))
907 903
908(defun gdb-inferior-io-interrupt () 904(defun gdb-separate-io-interrupt ()
909 "Interrupt the program being debugged." 905 "Interrupt the program being debugged."
910 (interactive) 906 (interactive)
911 (interrupt-process 907 (interrupt-process
912 (get-buffer-process gud-comint-buffer) comint-ptyp)) 908 (get-buffer-process gud-comint-buffer) comint-ptyp))
913 909
914(defun gdb-inferior-io-quit () 910(defun gdb-separate-io-quit ()
915 "Send quit signal to the program being debugged." 911 "Send quit signal to the program being debugged."
916 (interactive) 912 (interactive)
917 (quit-process 913 (quit-process
918 (get-buffer-process gud-comint-buffer) comint-ptyp)) 914 (get-buffer-process gud-comint-buffer) comint-ptyp))
919 915
920(defun gdb-inferior-io-stop () 916(defun gdb-separate-io-stop ()
921 "Stop the program being debugged." 917 "Stop the program being debugged."
922 (interactive) 918 (interactive)
923 (stop-process 919 (stop-process
924 (get-buffer-process gud-comint-buffer) comint-ptyp)) 920 (get-buffer-process gud-comint-buffer) comint-ptyp))
925 921
926(defun gdb-inferior-io-eof () 922(defun gdb-separate-io-eof ()
927 "Send end-of-file to the program being debugged." 923 "Send end-of-file to the program being debugged."
928 (interactive) 924 (interactive)
929 (process-send-eof 925 (process-send-eof
@@ -1119,7 +1115,7 @@ not GDB."
1119 ((eq sink 'user) 1115 ((eq sink 'user)
1120 (progn 1116 (progn
1121 (setq gud-running t) 1117 (setq gud-running t)
1122 (if gdb-use-inferior-io-buffer 1118 (if gdb-use-separate-io-buffer
1123 (setq gdb-output-sink 'inferior)))) 1119 (setq gdb-output-sink 'inferior))))
1124 (t 1120 (t
1125 (gdb-resync) 1121 (gdb-resync)
@@ -1129,7 +1125,7 @@ not GDB."
1129 "An annotation handler for `breakpoint' and other annotations. 1125 "An annotation handler for `breakpoint' and other annotations.
1130They say that I/O for the subprocess is now GDB, not the program 1126They say that I/O for the subprocess is now GDB, not the program
1131being debugged." 1127being debugged."
1132 (if gdb-use-inferior-io-buffer 1128 (if gdb-use-separate-io-buffer
1133 (let ((sink gdb-output-sink)) 1129 (let ((sink gdb-output-sink))
1134 (cond 1130 (cond
1135 ((eq sink 'inferior) 1131 ((eq sink 'inferior)
@@ -1195,7 +1191,7 @@ happens to be appropriate."
1195 1191
1196 (if (string-equal gdb-version "pre-6.4") 1192 (if (string-equal gdb-version "pre-6.4")
1197 (gdb-invalidate-registers) 1193 (gdb-invalidate-registers)
1198 (if (gdb-get-buffer 'gdb-registers-buffer) (gdb-get-changed-registers)) 1194 (gdb-get-changed-registers)
1199 (gdb-invalidate-registers-1)) 1195 (gdb-invalidate-registers-1))
1200 1196
1201 (gdb-invalidate-memory) 1197 (gdb-invalidate-memory)
@@ -1498,7 +1494,7 @@ static char *magick[] = {
1498 ;; Remove all breakpoint-icons in source buffers but not assembler buffer. 1494 ;; Remove all breakpoint-icons in source buffers but not assembler buffer.
1499 (dolist (buffer (buffer-list)) 1495 (dolist (buffer (buffer-list))
1500 (with-current-buffer buffer 1496 (with-current-buffer buffer
1501 (if (and (eq gud-minor-mode 'gdba) 1497 (if (and (memq gud-minor-mode '(gdba gdbmi))
1502 (not (string-match "\\`\\*.+\\*\\'" (buffer-name)))) 1498 (not (string-match "\\`\\*.+\\*\\'" (buffer-name))))
1503 (gdb-remove-breakpoint-icons (point-min) (point-max))))) 1499 (gdb-remove-breakpoint-icons (point-min) (point-max)))))
1504 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer) 1500 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer)
@@ -1633,7 +1629,7 @@ static char *magick[] = {
1633(defvar gdb-breakpoints-mode-map 1629(defvar gdb-breakpoints-mode-map
1634 (let ((map (make-sparse-keymap)) 1630 (let ((map (make-sparse-keymap))
1635 (menu (make-sparse-keymap "Breakpoints"))) 1631 (menu (make-sparse-keymap "Breakpoints")))
1636 (define-key menu [quit] '("Quit" . kill-this-buffer)) 1632 (define-key menu [quit] '("Quit" . gdb-delete-frame-or-window))
1637 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) 1633 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint))
1638 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint)) 1634 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint))
1639 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) 1635 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint))
@@ -1668,15 +1664,15 @@ static char *magick[] = {
1668 'gdb-invalidate-breakpoints 1664 'gdb-invalidate-breakpoints
1669 'gdbmi-invalidate-breakpoints)) 1665 'gdbmi-invalidate-breakpoints))
1670 1666
1667(defconst gdb-breakpoint-regexp
1668 "\\([0-9]+\\).*?\\(?:point\\|catch\\s-+\\S-+\\)\\s-+\\S-+\\s-+\\(.\\)\\s-+")
1669
1671(defun gdb-toggle-breakpoint () 1670(defun gdb-toggle-breakpoint ()
1672 "Enable/disable breakpoint at current line." 1671 "Enable/disable breakpoint at current line."
1673 (interactive) 1672 (interactive)
1674 (save-excursion 1673 (save-excursion
1675 (beginning-of-line 1) 1674 (beginning-of-line 1)
1676 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1675 (if (looking-at gdb-breakpoint-regexp)
1677 (looking-at "\\([0-9]+\\).*?point\\s-+\\S-+\\s-+\\(.\\)\\s-+")
1678 (looking-at
1679 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)\\s-+\\S-+\\s-+\\S-+:[0-9]+"))
1680 (gdb-enqueue-input 1676 (gdb-enqueue-input
1681 (list 1677 (list
1682 (concat gdb-server-prefix 1678 (concat gdb-server-prefix
@@ -1690,10 +1686,7 @@ static char *magick[] = {
1690 "Delete the breakpoint at current line." 1686 "Delete the breakpoint at current line."
1691 (interactive) 1687 (interactive)
1692 (beginning-of-line 1) 1688 (beginning-of-line 1)
1693 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1689 (if (looking-at gdb-breakpoint-regexp)
1694 (looking-at "\\([0-9]+\\).*?point\\s-+\\S-+\\s-+\\(.\\)")
1695 (looking-at
1696 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\s-+\\S-+\\s-+\\S-+:[0-9]+"))
1697 (gdb-enqueue-input 1690 (gdb-enqueue-input
1698 (list 1691 (list
1699 (concat gdb-server-prefix "delete " (match-string 1) "\n") 'ignore)) 1692 (concat gdb-server-prefix "delete " (match-string 1) "\n") 'ignore))
@@ -1708,11 +1701,7 @@ static char *magick[] = {
1708 (if window (save-selected-window (select-window window)))) 1701 (if window (save-selected-window (select-window window))))
1709 (save-excursion 1702 (save-excursion
1710 (beginning-of-line 1) 1703 (beginning-of-line 1)
1711 (if (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 1704 (if (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)")
1712 (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)")
1713 (looking-at
1714 "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+.\\s-+\\S-+\\s-+\
1715\\(\\S-+\\):\\([0-9]+\\)"))
1716 (let ((bptno (match-string 1)) 1705 (let ((bptno (match-string 1))
1717 (file (match-string 2)) 1706 (file (match-string 2))
1718 (line (match-string 3))) 1707 (line (match-string 3)))
@@ -1724,7 +1713,7 @@ static char *magick[] = {
1724 (with-current-buffer buf 1713 (with-current-buffer buf
1725 (goto-line (string-to-number line)) 1714 (goto-line (string-to-number line))
1726 (set-window-point window (point)))))) 1715 (set-window-point window (point))))))
1727 (error "Not recognized as break/watchpoint line")))) 1716 (error "No location specified."))))
1728 1717
1729 1718
1730;; Frames buffer. This displays a perpetually correct bactracktrace 1719;; Frames buffer. This displays a perpetually correct bactracktrace
@@ -2416,11 +2405,10 @@ corresponding to the mode line clicked."
2416 (set (make-local-variable 'font-lock-defaults) 2405 (set (make-local-variable 'font-lock-defaults)
2417 '(gdb-locals-font-lock-keywords)) 2406 '(gdb-locals-font-lock-keywords))
2418 (run-mode-hooks 'gdb-locals-mode-hook) 2407 (run-mode-hooks 'gdb-locals-mode-hook)
2419 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 2408 (if (and (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
2420 (if (string-equal gdb-version "pre-6.4") 2409 (string-equal gdb-version "pre-6.4"))
2421 'gdb-invalidate-locals 2410 'gdb-invalidate-locals
2422 'gdb-invalidate-locals-1) 2411 'gdb-invalidate-locals-1))
2423 'gdbmi-invalidate-locals))
2424 2412
2425(defun gdb-locals-buffer-name () 2413(defun gdb-locals-buffer-name ()
2426 (with-current-buffer gud-comint-buffer 2414 (with-current-buffer gud-comint-buffer
@@ -2478,8 +2466,8 @@ corresponding to the mode line clicked."
2478 '("Disassembly" . gdb-display-assembler-buffer)) 2466 '("Disassembly" . gdb-display-assembler-buffer))
2479 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer)) 2467 (define-key menu [registers] '("Registers" . gdb-display-registers-buffer))
2480 (define-key menu [inferior] 2468 (define-key menu [inferior]
2481 '(menu-item "Inferior IO" gdb-display-inferior-io-buffer 2469 '(menu-item "Inferior IO" gdb-display-separate-io-buffer
2482 :enable gdb-use-inferior-io-buffer)) 2470 :enable gdb-use-separate-io-buffer))
2483 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer)) 2471 (define-key menu [locals] '("Locals" . gdb-display-locals-buffer))
2484 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer)) 2472 (define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
2485 (define-key menu [breakpoints] 2473 (define-key menu [breakpoints]
@@ -2495,8 +2483,8 @@ corresponding to the mode line clicked."
2495 (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer)) 2483 (define-key menu [disassembly] '("Disassembiy" . gdb-frame-assembler-buffer))
2496 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer)) 2484 (define-key menu [registers] '("Registers" . gdb-frame-registers-buffer))
2497 (define-key menu [inferior] 2485 (define-key menu [inferior]
2498 '(menu-item "Inferior IO" gdb-frame-inferior-io-buffer 2486 '(menu-item "Inferior IO" gdb-frame-separate-io-buffer
2499 :enable gdb-use-inferior-io-buffer)) 2487 :enable gdb-use-separate-io-buffer))
2500 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer)) 2488 (define-key menu [locals] '("Locals" . gdb-frame-locals-buffer))
2501 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer)) 2489 (define-key menu [frames] '("Stack" . gdb-frame-stack-buffer))
2502 (define-key menu [breakpoints] 2490 (define-key menu [breakpoints]
@@ -2506,11 +2494,11 @@ corresponding to the mode line clicked."
2506 (define-key gud-menu-map [ui] 2494 (define-key gud-menu-map [ui]
2507 `(menu-item (if (eq gud-minor-mode 'gdba) "GDB-UI" "GDB-MI") 2495 `(menu-item (if (eq gud-minor-mode 'gdba) "GDB-UI" "GDB-MI")
2508 ,menu :visible (memq gud-minor-mode '(gdbmi gdba)))) 2496 ,menu :visible (memq gud-minor-mode '(gdbmi gdba))))
2509 (define-key menu [gdb-use-inferior-io] 2497 (define-key menu [gdb-use-separate-io]
2510 '(menu-item "Separate inferior IO" gdb-use-inferior-io-buffer 2498 '(menu-item "Separate inferior IO" gdb-use-separate-io-buffer
2511 :visible (eq gud-minor-mode 'gdba) 2499 :visible (eq gud-minor-mode 'gdba)
2512 :help "Toggle separate IO for inferior." 2500 :help "Toggle separate IO for inferior."
2513 :button (:toggle . gdb-use-inferior-io-buffer))) 2501 :button (:toggle . gdb-use-separate-io-buffer)))
2514 (define-key menu [gdb-many-windows] 2502 (define-key menu [gdb-many-windows]
2515 '(menu-item "Display Other Windows" gdb-many-windows 2503 '(menu-item "Display Other Windows" gdb-many-windows
2516 :help "Toggle display of locals, stack and breakpoint information" 2504 :help "Toggle display of locals, stack and breakpoint information"
@@ -2556,7 +2544,7 @@ corresponding to the mode line clicked."
2556 (if gud-last-last-frame 2544 (if gud-last-last-frame
2557 (gud-find-file (car gud-last-last-frame)) 2545 (gud-find-file (car gud-last-last-frame))
2558 (gud-find-file gdb-main-file))) 2546 (gud-find-file gdb-main-file)))
2559 (when gdb-use-inferior-io-buffer 2547 (when gdb-use-separate-io-buffer
2560 (split-window-horizontally) 2548 (split-window-horizontally)
2561 (other-window 1) 2549 (other-window 1)
2562 (gdb-set-window-buffer 2550 (gdb-set-window-buffer
@@ -2684,11 +2672,12 @@ of the current session."
2684 (if (and (buffer-name gud-comint-buffer) 2672 (if (and (buffer-name gud-comint-buffer)
2685 ;; in case gud or gdb-ui is just loaded 2673 ;; in case gud or gdb-ui is just loaded
2686 gud-comint-buffer 2674 gud-comint-buffer
2687 (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 2675 (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
2688 'gdba)) 2676 '(gdba gdbmi)))
2689 (if (member buffer-file-name gdb-source-file-list) 2677 (if (member buffer-file-name gdb-source-file-list)
2690 (with-current-buffer (find-buffer-visiting buffer-file-name) 2678 (with-current-buffer (find-buffer-visiting buffer-file-name)
2691 (set (make-local-variable 'gud-minor-mode) 'gdba) 2679 (set (make-local-variable 'gud-minor-mode)
2680 (buffer-local-value 'gud-minor-mode gud-comint-buffer))
2692 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map))))) 2681 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)))))
2693 2682
2694;;from put-image 2683;;from put-image
@@ -2967,49 +2956,23 @@ BUFFER nil or omitted means use the current buffer."
2967 (if (re-search-forward " source language \\(\\S-*\\)\." nil t) 2956 (if (re-search-forward " source language \\(\\S-*\\)\." nil t)
2968 (setq gdb-current-language (match-string 1))) 2957 (setq gdb-current-language (match-string 1)))
2969 (gdb-invalidate-assembler)) 2958 (gdb-invalidate-assembler))
2970
2971
2972;; For debugging Emacs only (assumes that usual stack buffer already exists).
2973(defun gdb-xbacktrace ()
2974 "Generate a full lisp level backtrace with arguments."
2975 (interactive)
2976 (setq my-frames nil)
2977 (with-current-buffer (get-buffer-create "xbacktrace")
2978 (erase-buffer))
2979 (let (frame-number gdb-frame-number)
2980 (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer)
2981 (save-excursion
2982 (goto-char (point-min))
2983 (while (search-forward "in Ffuncall " nil t)
2984 (goto-char (line-beginning-position))
2985 (looking-at "^#\\([0-9]+\\)")
2986 (push (match-string-no-properties 1) my-frames)
2987 (forward-line 1))))
2988 (dolist (frame my-frames)
2989 (gdb-enqueue-input (list (concat "server frame " frame "\n")
2990 'ignore))
2991; (gdb-enqueue-input (list "server ppargs\n" 'gdb-get-arguments))
2992 (gud-basic-call "server ppargs")
2993)
2994 (gdb-enqueue-input (list (concat "server frame " frame-number "\n")
2995 'ignore))))
2996
2997(defun gdb-get-arguments ()
2998 (with-current-buffer "xbacktrace"
2999 (insert-buffer-substring (gdb-get-buffer 'gdb-partial-output-buffer))))
3000 2959
2960
3001;; Code specific to GDB 6.4 2961;; Code specific to GDB 6.4
3002(defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"") 2962(defconst gdb-source-file-regexp-1 "fullname=\"\\(.*?\\)\"")
3003 2963
3004(defun gdb-set-gud-minor-mode-existing-buffers-1 () 2964(defun gdb-set-gud-minor-mode-existing-buffers-1 ()
3005 "Create list of source files for current GDB session." 2965 "Create list of source files for current GDB session.
2966If buffers already exist for any of these files, gud-minor-mode
2967is set in them."
3006 (goto-char (point-min)) 2968 (goto-char (point-min))
3007 (while (re-search-forward gdb-source-file-regexp-1 nil t) 2969 (while (re-search-forward gdb-source-file-regexp-1 nil t)
3008 (push (match-string 1) gdb-source-file-list)) 2970 (push (match-string 1) gdb-source-file-list))
3009 (dolist (buffer (buffer-list)) 2971 (dolist (buffer (buffer-list))
3010 (with-current-buffer buffer 2972 (with-current-buffer buffer
3011 (when (member buffer-file-name gdb-source-file-list) 2973 (when (member buffer-file-name gdb-source-file-list)
3012 (set (make-local-variable 'gud-minor-mode) 'gdba) 2974 (set (make-local-variable 'gud-minor-mode)
2975 (buffer-local-value 'gud-minor-mode gud-comint-buffer))
3013 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) 2976 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
3014 (when gud-tooltip-mode 2977 (when gud-tooltip-mode
3015 (make-local-variable 'gdb-define-alist) 2978 (make-local-variable 'gdb-define-alist)
@@ -3019,12 +2982,12 @@ BUFFER nil or omitted means use the current buffer."
3019; Uses "-var-list-children --all-values". Needs GDB 6.1 onwards. 2982; Uses "-var-list-children --all-values". Needs GDB 6.1 onwards.
3020(defun gdb-var-list-children-1 (varnum) 2983(defun gdb-var-list-children-1 (varnum)
3021 (gdb-enqueue-input 2984 (gdb-enqueue-input
3022 (list (concat "server interpreter mi \"-var-update " varnum "\"\n") 2985 (list
3023 'ignore)) 2986 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3024 (gdb-enqueue-input 2987 (concat "server interpreter mi \"-var-list-children --all-values "
3025 (list (concat "server interpreter mi \"-var-list-children --all-values " 2988 varnum "\"\n")
3026 varnum "\"\n") 2989 (concat "-var-list-children --all-values " varnum "\n"))
3027 `(lambda () (gdb-var-list-children-handler-1 ,varnum))))) 2990 `(lambda () (gdb-var-list-children-handler-1 ,varnum)))))
3028 2991
3029(defconst gdb-var-list-children-regexp-1 2992(defconst gdb-var-list-children-regexp-1
3030 "name=\"\\(.+?\\)\",exp=\"\\(.+?\\)\",numchild=\"\\(.+?\\)\",\ 2993 "name=\"\\(.+?\\)\",exp=\"\\(.+?\\)\",numchild=\"\\(.+?\\)\",\
@@ -3059,10 +3022,10 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3059 (progn 3022 (progn
3060 (gdb-enqueue-input 3023 (gdb-enqueue-input
3061 (list 3024 (list
3062 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 3025 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3063 "server interpreter mi \"-var-update --all-values *\"\n" 3026 "server interpreter mi \"-var-update --all-values *\"\n"
3064 "-var-update --all-values *\n") 3027 "-var-update --all-values *\n")
3065 'gdb-var-update-handler-1)) 3028 'gdb-var-update-handler-1))
3066 (push 'gdb-var-update gdb-pending-triggers)))) 3029 (push 'gdb-var-update gdb-pending-triggers))))
3067 3030
3068(defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),") 3031(defconst gdb-var-update-regexp-1 "name=\"\\(.*?\\)\",value=\\(\".*?\"\\),")
@@ -3098,7 +3061,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3098 3061
3099(def-gdb-auto-update-trigger gdb-invalidate-registers-1 3062(def-gdb-auto-update-trigger gdb-invalidate-registers-1
3100 (gdb-get-buffer 'gdb-registers-buffer) 3063 (gdb-get-buffer 'gdb-registers-buffer)
3101 (if (eq gud-minor-mode 'gdba) 3064 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3102 "server interpreter mi \"-data-list-register-values x\"\n" 3065 "server interpreter mi \"-data-list-register-values x\"\n"
3103 "-data-list-register-values x\n") 3066 "-data-list-register-values x\n")
3104 gdb-data-list-register-values-handler) 3067 gdb-data-list-register-values-handler)
@@ -3157,14 +3120,15 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3157 3120
3158;; Needs GDB 6.4 onwards (used to fail with no stack). 3121;; Needs GDB 6.4 onwards (used to fail with no stack).
3159(defun gdb-get-changed-registers () 3122(defun gdb-get-changed-registers ()
3160 (if (not (member 'gdb-get-changed-registers gdb-pending-triggers)) 3123 (if (and (gdb-get-buffer 'gdb-registers-buffer)
3124 (not (member 'gdb-get-changed-registers gdb-pending-triggers)))
3161 (progn 3125 (progn
3162 (gdb-enqueue-input 3126 (gdb-enqueue-input
3163 (list 3127 (list
3164 (if (eq gud-minor-mode 'gdba) 3128 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3165 "server interpreter mi -data-list-changed-registers\n" 3129 "server interpreter mi -data-list-changed-registers\n"
3166 "-data-list-changed-registers\n") 3130 "-data-list-changed-registers\n")
3167 'gdb-get-changed-registers-handler)) 3131 'gdb-get-changed-registers-handler))
3168 (push 'gdb-get-changed-registers gdb-pending-triggers)))) 3132 (push 'gdb-get-changed-registers gdb-pending-triggers))))
3169 3133
3170(defconst gdb-data-list-register-names-regexp "\"\\(.*?\\)\"") 3134(defconst gdb-data-list-register-names-regexp "\"\\(.*?\\)\"")
@@ -3187,7 +3151,9 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3187 3151
3188(def-gdb-auto-update-trigger gdb-invalidate-locals-1 3152(def-gdb-auto-update-trigger gdb-invalidate-locals-1
3189 (gdb-get-buffer 'gdb-locals-buffer) 3153 (gdb-get-buffer 'gdb-locals-buffer)
3190 "server interpreter mi -\"stack-list-locals --simple-values\"\n" 3154 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
3155 "server interpreter mi -\"stack-list-locals --simple-values\"\n"
3156 "-stack-list-locals --simple-values\n")
3191 gdb-stack-list-locals-handler) 3157 gdb-stack-list-locals-handler)
3192 3158
3193(defconst gdb-stack-list-locals-regexp 3159(defconst gdb-stack-list-locals-regexp
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index b927c765476..1d5172a1a52 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -656,8 +656,13 @@ required by the caller."
656;;;###autoload 656;;;###autoload
657(defun gdb (command-line) 657(defun gdb (command-line)
658 "Run gdb on program FILE in buffer *gud-FILE*. 658 "Run gdb on program FILE in buffer *gud-FILE*.
659The directory containing FILE becomes the initial working directory 659The directory containing FILE becomes the initial working
660and source-file directory for your debugger." 660directory and source-file directory for your debugger. By
661default this command starts GDB using a graphical interface. See
662`gdba' for more information.
663
664To run GDB in text command mode, set `gud-gdb-command-name' to
665\"gdb --fullname\" and include the pathname, if necessary."
661 (interactive (list (gud-query-cmdline 'gdb))) 666 (interactive (list (gud-query-cmdline 'gdb)))
662 667
663 (if (and gud-comint-buffer 668 (if (and gud-comint-buffer
@@ -3120,7 +3125,7 @@ class of the file (using s to separate nested class ids)."
3120(defvar gdb-script-font-lock-keywords 3125(defvar gdb-script-font-lock-keywords
3121 '(("^define\\s-+\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-function-name-face)) 3126 '(("^define\\s-+\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-function-name-face))
3122 ("\\$\\(\\w+\\)" (1 font-lock-variable-name-face)) 3127 ("\\$\\(\\w+\\)" (1 font-lock-variable-name-face))
3123 ("^\\s-*\\([a-z]+\\)" (1 font-lock-keyword-face)))) 3128 ("^\\s-*\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-keyword-face))))
3124 3129
3125;; FIXME: The keyword "end" associated with "document" 3130;; FIXME: The keyword "end" associated with "document"
3126;; should have font-lock-keyword-face (currently font-lock-doc-face). 3131;; should have font-lock-keyword-face (currently font-lock-doc-face).