;; Maintainer: FSF
;; Keywords: unix, tools
-;; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
(global-set-key (concat gud-key-prefix "\C-l") 'gud-refresh)
(define-key ctl-x-map " " 'gud-break) ;; backward compatibility hack
-(defvar gud-massage-args nil)
-(put 'gud-massage-args 'permanent-local t)
(defvar gud-marker-filter nil)
(put 'gud-marker-filter 'permanent-local t)
(defvar gud-find-file nil)
(put 'gud-find-file 'permanent-local t)
-(defun gud-massage-args (&rest args)
- (apply gud-massage-args args))
-
(defun gud-marker-filter (&rest args)
(apply gud-marker-filter args))
;; before use.)
(defvar gud-menu-map (make-sparse-keymap "Gud") nil)
(define-key gud-menu-map [refresh] '("Refresh" . gud-refresh))
-(define-key gud-menu-map [remove] '("Remove breakpoint" . gud-remove))
+(define-key gud-menu-map [remove] '("Remove Breakpoint" . gud-remove))
(define-key gud-menu-map [tbreak] nil) ; gdb, sdb and xdb
-(define-key gud-menu-map [break] '("Set breakpoint" . gud-break))
+(define-key gud-menu-map [break] '("Set Breakpoint" . gud-break))
(define-key gud-menu-map [up] nil) ; gdb, dbx, and xdb
(define-key gud-menu-map [down] nil) ; gdb, dbx, and xdb
-(define-key gud-menu-map [print] '("Print expression" . gud-print))
+(define-key gud-menu-map [print] '("Print Expression" . gud-print))
(define-key gud-menu-map [finish] nil) ; gdb or xdb
-(define-key gud-menu-map [stepi] '("Step instruction" . gud-stepi))
-(define-key gud-menu-map [step] '("Step line" . gud-step))
-(define-key gud-menu-map [next] '("Next line" . gud-next))
+(define-key gud-menu-map [stepi] '("Step Instruction" . gud-stepi))
+(define-key gud-menu-map [step] '("Step Line" . gud-step))
+(define-key gud-menu-map [next] '("Next Line" . gud-next))
(define-key gud-menu-map [cont] '("Continue" . gud-cont))
\f
;; ======================================================================
(defun gud-gdb-massage-args (file args)
(cons "-fullname" args))
+(defvar gud-gdb-marker-regexp
+ (concat "\032\032\\([^" path-separator "\n]*\\)" path-separator
+ "\\([0-9]*\\)" path-separator ".*\n"))
+
;; There's no guarantee that Emacs will hand the filter the entire
;; marker at once; it could be broken up across several strings. We
;; might even receive a big chunk with several markers in it. If we
(let ((output ""))
;; Process all the complete markers in this chunk.
- (while (string-match "\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n"
- gud-marker-acc)
+ (while (string-match gud-gdb-marker-regexp gud-marker-acc)
(setq
;; Extract the frame position from the marker.
"Return a new keymap which inherits from MAP and has name `Gud'."
(nconc (make-sparse-keymap "Gud") map))
+(defun gud-make-debug-menu ()
+ "Make sure the current local map has a [menu-bar debug] submap.
+If it doesn't, replace it with a new map that inherits it,
+and create such a submap in that new map."
+ (if (lookup-key (current-local-map) [menu-bar debug])
+ nil
+ (use-local-map (gud-new-keymap (current-local-map)))
+ (define-key (current-local-map) [menu-bar debug]
+ (cons "Gud" (gud-new-keymap gud-menu-map)))))
+
(defun gud-gdb-find-file (f)
(save-excursion
(let ((buf (find-file-noselect f)))
(set-buffer buf)
- (use-local-map (gud-new-keymap (current-local-map)))
- (define-key (current-local-map) [menu-bar debug]
- (cons "Gud" (gud-new-keymap gud-menu-map)))
+ (gud-make-debug-menu)
(local-set-key [menu-bar debug tbreak]
- '("Temporary breakpoint" . gud-tbreak))
- (local-set-key [menu-bar debug finish] '("Finish function" . gud-finish))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ '("Temporary Breakpoint" . gud-tbreak))
+ (local-set-key [menu-bar debug finish] '("Finish Function" . gud-finish))
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
buf)))
(defvar gdb-minibuffer-local-map nil
(gud-def gud-print "print %e" "\C-p" "Evaluate C expression at point.")
(local-set-key "\C-i" 'gud-gdb-complete-command)
- (local-set-key [menu-bar debug tbreak] '("Temporary breakpoint" . gud-tbreak))
- (local-set-key [menu-bar debug finish] '("Finish function" . gud-finish))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ (local-set-key [menu-bar debug tbreak] '("Temporary Breakpoint" . gud-tbreak))
+ (local-set-key [menu-bar debug finish] '("Finish Function" . gud-finish))
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
(setq comint-prompt-regexp "^(.*gdb[+]?) *")
(setq paragraph-start comint-prompt-regexp)
(run-hooks 'gdb-mode-hook)
(find-tag-noselect f)
(find-file-noselect f))))
(set-buffer buf)
- (use-local-map (gud-new-keymap (current-local-map)))
- (define-key (current-local-map) [menu-bar debug]
- (cons "Gud" (gud-new-keymap gud-menu-map)))
- (local-set-key [menu-bar debug tbreak] '("Temporary breakpoint" . gud-tbreak))
+ (gud-make-debug-menu)
+ (local-set-key [menu-bar debug tbreak] '("Temporary Breakpoint" . gud-tbreak))
buf)))
;;;###autoload
(setq comint-prompt-regexp "\\(^\\|\n\\)\\*")
(setq paragraph-start comint-prompt-regexp)
(local-set-key [menu-bar debug tbreak]
- '("Temporary breakpoint" . gud-tbreak))
+ '("Temporary Breakpoint" . gud-tbreak))
(run-hooks 'sdb-mode-hook)
)
\f
(save-excursion
(let ((buf (find-file-noselect f)))
(set-buffer buf)
- (use-local-map (gud-new-keymap (current-local-map)))
- (define-key (current-local-map) [menu-bar debug]
- (cons "Gud" (gud-new-keymap gud-menu-map)))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ (gud-make-debug-menu)
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
buf)))
;;;###autoload
(setq comint-prompt-regexp "^[^)\n]*dbx) *")
(setq paragraph-start comint-prompt-regexp)
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
(run-hooks 'dbx-mode-hook)
)
\f
(if realf
(let ((buf (find-file-noselect realf)))
(set-buffer buf)
- (use-local-map (gud-new-keymap (current-local-map)))
- (define-key (current-local-map) [menu-bar debug]
- (cons "Gud" (gud-new-keymap gud-menu-map)))
+ (gud-make-debug-menu)
(local-set-key [menu-bar debug tbreak]
- '("Temporary breakpoint" . gud-tbreak))
+ '("Temporary Breakpoint" . gud-tbreak))
(local-set-key [menu-bar debug finish]
- '("Finish function" . gud-finish))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ '("Finish Function" . gud-finish))
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
buf)
nil))))
(setq comint-prompt-regexp "^>")
(setq paragraph-start comint-prompt-regexp)
- (local-set-key [menu-bar debug tbreak] '("Temporary breakpoint" . gud-tbreak))
- (local-set-key [menu-bar debug finish] '("Finish function" . gud-finish))
- (local-set-key [menu-bar debug up] '("Up stack" . gud-up))
- (local-set-key [menu-bar debug down] '("Down stack" . gud-down))
+ (local-set-key [menu-bar debug tbreak] '("Temporary Breakpoint" . gud-tbreak))
+ (local-set-key [menu-bar debug finish] '("Finish Function" . gud-finish))
+ (local-set-key [menu-bar debug up] '("Up Stack" . gud-up))
+ (local-set-key [menu-bar debug down] '("Down Stack" . gud-down))
(run-hooks 'xdb-mode-hook))
\f
;; ======================================================================
(defvar gud-perldb-history nil)
(defun gud-perldb-massage-args (file args)
- (cons "-d" (cons "-emacs" args)))
+ (cons "-d" (cons (car args) (cons "-emacs" (cdr args)))))
;; There's no guarantee that Emacs will hand the filter the entire
;; marker at once; it could be broken up across several strings. We
(save-excursion
(let ((buf (find-file-noselect f)))
(set-buffer buf)
- (define-key (current-local-map) [menu-bar debug] (cons "Gud" (copy-keymap gud-menu-map)))
+ (gud-make-debug-menu)
buf)))
;;;###autoload
(setq major-mode 'gud-mode)
(setq mode-name "Debugger")
(setq mode-line-process '(":%s"))
- (use-local-map (gud-new-keymap comint-mode-map))
+ (use-local-map comint-mode-map)
+ (gud-make-debug-menu)
(define-key (current-local-map) "\C-c\C-l" 'gud-refresh)
- (define-key (current-local-map) [menu-bar debug]
- (cons "Gud" (gud-new-keymap gud-menu-map)))
(make-local-variable 'gud-last-frame)
(setq gud-last-frame nil)
(make-local-variable 'comint-prompt-regexp)
(file-word (let ((w (cdr words)))
(while (and w (= ?- (aref (car w) 0)))
(setq w (cdr w)))
- (prog1 (car w)
- (setcar w t))))
+ (and w
+ (prog1 (car w)
+ (setcar w t)))))
(file-subst
(and file-word (substitute-in-file-name file-word)))
(args (cdr words))
(if (file-name-directory file-subst)
(expand-file-name file-subst)
file-subst)))
- (filepart (and file-word (file-name-nondirectory file))))
- (switch-to-buffer (concat "*gud-" filepart "*"))
+ (filepart (and file-word (concat "-" (file-name-nondirectory file)))))
+ (switch-to-buffer (concat "*gud" filepart "*"))
;; Set default-directory to the file's directory.
(and file-word
;; Don't set default-directory if no directory was specified.
(let ((w args))
(while (and w (not (eq (car w) t)))
(setq w (cdr w)))
- (setcar w file))
- (apply 'make-comint (concat "gud-" filepart) program nil
- (if file-word (funcall massage-args file args) args)))
+ (if w
+ (setcar w file)))
+ (apply 'make-comint (concat "gud" filepart) program nil
+ (funcall massage-args file args)))
;; Since comint clobbered the mode, we don't set it until now.
(gud-mode)
- (make-local-variable 'gud-massage-args)
- (setq gud-massage-args massage-args)
(make-local-variable 'gud-marker-filter)
(setq gud-marker-filter marker-filter)
(make-local-variable 'gud-find-file)
(progn
;; Write something in *compilation* and hack its mode line,
(set-buffer (process-buffer proc))
- ;; Force mode line redisplay soon
- (set-buffer-modified-p (buffer-modified-p))
+ (force-mode-line-update)
(if (eobp)
(insert ?\n mode-name " " msg)
(save-excursion