[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/progmodes/gdb-ui.el [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/progmodes/gdb-ui.el [lexbind] |
Date: |
Wed, 08 Dec 2004 19:17:35 -0500 |
Index: emacs/lisp/progmodes/gdb-ui.el
diff -c emacs/lisp/progmodes/gdb-ui.el:1.4.2.15
emacs/lisp/progmodes/gdb-ui.el:1.4.2.16
*** emacs/lisp/progmodes/gdb-ui.el:1.4.2.15 Fri Nov 12 04:21:21 2004
--- emacs/lisp/progmodes/gdb-ui.el Wed Dec 8 23:36:35 2004
***************
*** 62,76 ****
(defvar gdb-current-frame nil)
(defvar gdb-current-stack-level nil)
(defvar gdb-current-language nil)
- (defvar gdb-view-source t "Non-nil means that source code can be viewed.")
- (defvar gdb-selected-view 'source "Code type that user wishes to view.")
(defvar gdb-var-list nil "List of variables in watch window.")
(defvar gdb-var-changed nil "Non-nil means that gdb-var-list has changed.")
(defvar gdb-buffer-type nil)
(defvar gdb-overlay-arrow-position nil)
- (defvar gdb-variables '()
- "A list of variables that are local to the GUD buffer.")
(defvar gdb-server-prefix nil)
;;;###autoload
(defun gdba (command-line)
--- 62,113 ----
(defvar gdb-current-frame nil)
(defvar gdb-current-stack-level nil)
(defvar gdb-current-language nil)
(defvar gdb-var-list nil "List of variables in watch window.")
(defvar gdb-var-changed nil "Non-nil means that gdb-var-list has changed.")
(defvar gdb-buffer-type nil)
(defvar gdb-overlay-arrow-position nil)
(defvar gdb-server-prefix nil)
+ (defvar gdb-flush-pending-output nil)
+
+ (defvar gdb-buffer-type nil
+ "One of the symbols bound in `gdb-buffer-rules'.")
+
+ (defvar gdb-input-queue ()
+ "A list of gdb command objects.")
+
+ (defvar gdb-prompting nil
+ "True when gdb is idle with no pending input.")
+
+ (defvar gdb-output-sink 'user
+ "The disposition of the output of the current gdb command.
+ Possible values are these symbols:
+
+ `user' -- gdb output should be copied to the GUD buffer
+ for the user to see.
+
+ `inferior' -- gdb output should be copied to the inferior-io buffer
+
+ `pre-emacs' -- output should be ignored util the post-prompt
+ annotation is received. Then the output-sink
+ becomes:...
+ `emacs' -- output should be collected in the partial-output-buffer
+ for subsequent processing by a command. This is the
+ disposition of output generated by commands that
+ gdb mode sends to gdb on its own behalf.
+ `post-emacs' -- ignore output until the prompt annotation is
+ received, then go to USER disposition.
+
+ gdba (gdb-ui.el) uses all five values, gdbmi (gdb-mi.el) only two
+ \(`user' and `emacs').")
+
+ (defvar gdb-current-item nil
+ "The most recent command item sent to gdb.")
+
+ (defvar gdb-pending-triggers '()
+ "A list of trigger functions that have run later than their output
+ handlers.")
+
+ ;; end of gdb variables
;;;###autoload
(defun gdba (command-line)
***************
*** 185,192 ****
(setq gdb-previous-frame nil)
(setq gdb-current-frame nil)
(setq gdb-current-stack-level nil)
- (setq gdb-view-source t)
- (setq gdb-selected-view 'source)
(setq gdb-var-list nil)
(setq gdb-var-changed nil)
(setq gdb-first-prompt nil)
--- 222,227 ----
***************
*** 196,203 ****
(setq gdb-pending-triggers nil)
(setq gdb-output-sink 'user)
(setq gdb-server-prefix "server ")
;;
- (mapc 'make-local-variable gdb-variables)
(setq gdb-buffer-type 'gdba)
;;
(if gdb-use-inferior-io-buffer (gdb-clear-inferior-io))
--- 231,238 ----
(setq gdb-pending-triggers nil)
(setq gdb-output-sink 'user)
(setq gdb-server-prefix "server ")
+ (setq gdb-flush-pending-output nil)
;;
(setq gdb-buffer-type 'gdba)
;;
(if gdb-use-inferior-io-buffer (gdb-clear-inferior-io))
***************
*** 236,242 ****
(concat "server interpreter mi \"-var-create - * " expr "\"\n")
(concat"-var-create - * " expr "\n"))
`(lambda () (gdb-var-create-handler ,expr))))))
! (select-window (get-buffer-window gud-comint-buffer 'visible)))
(defun gdb-goto-info ()
"Go to Emacs info node: GDB Graphical Interface."
--- 271,277 ----
(concat "server interpreter mi \"-var-create - * " expr "\"\n")
(concat"-var-create - * " expr "\n"))
`(lambda () (gdb-var-create-handler ,expr))))))
! (select-window (get-buffer-window gud-comint-buffer 0)))
(defun gdb-goto-info ()
"Go to Emacs info node: GDB Graphical Interface."
***************
*** 276,282 ****
(goto-char (point-min))
(re-search-forward ".*value=\"\\(.*?\\)\"" nil t)
(catch 'var-found
! (let ((var-list nil) (num 0))
(dolist (var gdb-var-list)
(if (string-equal varnum (cadr var))
(progn
--- 311,317 ----
(goto-char (point-min))
(re-search-forward ".*value=\"\\(.*?\\)\"" nil t)
(catch 'var-found
! (let ((num 0))
(dolist (var gdb-var-list)
(if (string-equal varnum (cadr var))
(progn
***************
*** 412,457 ****
(if (string-match (concat token "\\.") (nth 1 var))
(setq gdb-var-list (delq var gdb-var-list))))
(setq gdb-var-changed t))))
-
- (defvar gdb-buffer-type nil
- "One of the symbols bound in `gdb-buffer-rules'.")
-
- (defvar gdb-input-queue ()
- "A list of gdb command objects.")
-
- (defvar gdb-prompting nil
- "True when gdb is idle with no pending input.")
-
- (defvar gdb-output-sink 'user
- "The disposition of the output of the current gdb command.
- Possible values are these symbols:
-
- `user' -- gdb output should be copied to the GUD buffer
- for the user to see.
-
- `inferior' -- gdb output should be copied to the inferior-io buffer
-
- `pre-emacs' -- output should be ignored util the post-prompt
- annotation is received. Then the output-sink
- becomes:...
- `emacs' -- output should be collected in the partial-output-buffer
- for subsequent processing by a command. This is the
- disposition of output generated by commands that
- gdb mode sends to gdb on its own behalf.
- `post-emacs' -- ignore output until the prompt annotation is
- received, then go to USER disposition.
-
- gdba (gdb-ui.el) uses all five values, gdbmi (gdb-mi.el) only two
- \(`user' and `emacs').")
-
- (defvar gdb-current-item nil
- "The most recent command item sent to gdb.")
-
- (defvar gdb-pending-triggers '()
- "A list of trigger functions that have run later than their output
- handlers.")
-
- ;; end of gdb variables
(defun gdb-get-target-string ()
(with-current-buffer gud-comint-buffer
--- 447,452 ----
***************
*** 644,649 ****
--- 639,665 ----
(let ((last (car (last queue))))
(unless (nbutlast queue) (setq gdb-input-queue '()))
last))))
+
+ (defun gdb-send-item (item)
+ (setq gdb-flush-pending-output nil)
+ (if gdb-enable-debug-log (push (cons 'send item) gdb-debug-log))
+ (setq gdb-current-item item)
+ (with-current-buffer gud-comint-buffer
+ (if (eq gud-minor-mode 'gdba)
+ (if (stringp item)
+ (progn
+ (setq gdb-output-sink 'user)
+ (process-send-string (get-buffer-process gud-comint-buffer) item))
+ (progn
+ (gdb-clear-partial-output)
+ (setq gdb-output-sink 'pre-emacs)
+ (process-send-string (get-buffer-process gud-comint-buffer)
+ (car item))))
+ ;; case: eq gud-minor-mode 'gdbmi
+ (gdb-clear-partial-output)
+ (setq gdb-output-sink 'emacs)
+ (process-send-string (get-buffer-process gud-comint-buffer)
+ (car item)))))
;;
;; output -- things gdb prints to emacs
***************
*** 688,693 ****
--- 704,717 ----
("stopped" gdb-stopped)
) "An assoc mapping annotation tags to functions which process them.")
+ (defun gdb-resync()
+ (setq gdb-flush-pending-output t)
+ (setq gud-running nil)
+ (setq gdb-output-sink 'user)
+ (setq gdb-input-queue nil)
+ (setq gdb-pending-triggers nil)
+ (setq gdb-prompting t))
+
(defconst gdb-source-spec-regexp
"\\(.*\\):\\([0-9]*\\):[0-9]*:[a-z]*:\\(0x[a-f0-9]*\\)")
***************
*** 700,730 ****
(match-string 1 args)
(string-to-int (match-string 2 args))))
(setq gdb-current-address (match-string 3 args))
- (setq gdb-view-source t)
;; cover for auto-display output which comes *before*
;; stopped annotation
(if (eq gdb-output-sink 'inferior) (setq gdb-output-sink 'user)))
- (defun gdb-send-item (item)
- (if gdb-enable-debug-log (push (cons 'send item) gdb-debug-log))
- (setq gdb-current-item item)
- (with-current-buffer gud-comint-buffer
- (if (eq gud-minor-mode 'gdba)
- (if (stringp item)
- (progn
- (setq gdb-output-sink 'user)
- (process-send-string (get-buffer-process gud-comint-buffer) item))
- (progn
- (gdb-clear-partial-output)
- (setq gdb-output-sink 'pre-emacs)
- (process-send-string (get-buffer-process gud-comint-buffer)
- (car item))))
- ;; case: eq gud-minor-mode 'gdbmi
- (gdb-clear-partial-output)
- (setq gdb-output-sink 'emacs)
- (process-send-string (get-buffer-process gud-comint-buffer)
- (car item)))))
-
(defun gdb-pre-prompt (ignored)
"An annotation handler for `pre-prompt'.
This terminates the collection of output from a previous command if that
--- 724,733 ----
***************
*** 735,741 ****
((eq sink 'emacs)
(setq gdb-output-sink 'post-emacs))
(t
! (setq gdb-output-sink 'user)
(error "Phase error in gdb-pre-prompt (got %s)" sink)))))
(defun gdb-prompt (ignored)
--- 738,744 ----
((eq sink 'emacs)
(setq gdb-output-sink 'post-emacs))
(t
! (gdb-resync)
(error "Phase error in gdb-pre-prompt (got %s)" sink)))))
(defun gdb-prompt (ignored)
***************
*** 752,758 ****
(with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
(funcall handler))))
(t
! (setq gdb-output-sink 'user)
(error "Phase error in gdb-prompt (got %s)" sink))))
(let ((input (gdb-dequeue-input)))
(if input
--- 755,761 ----
(with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
(funcall handler))))
(t
! (gdb-resync)
(error "Phase error in gdb-prompt (got %s)" sink))))
(let ((input (gdb-dequeue-input)))
(if input
***************
*** 776,782 ****
(setq gud-running t)
(if gdb-use-inferior-io-buffer
(setq gdb-output-sink 'inferior))))
! (t (error "Unexpected `starting' annotation")))))
(defun gdb-stopping (ignored)
"An annotation handler for `exited' and other annotations.
--- 779,787 ----
(setq gud-running t)
(if gdb-use-inferior-io-buffer
(setq gdb-output-sink 'inferior))))
! (t
! (gdb-resync)
! (error "Unexpected `starting' annotation")))))
(defun gdb-stopping (ignored)
"An annotation handler for `exited' and other annotations.
***************
*** 787,793 ****
(cond
((eq sink 'inferior)
(setq gdb-output-sink 'user))
! (t (error "Unexpected stopping annotation"))))))
(defun gdb-frame-begin (ignored)
(let ((sink gdb-output-sink))
--- 792,800 ----
(cond
((eq sink 'inferior)
(setq gdb-output-sink 'user))
! (t
! (gdb-resync)
! (error "Unexpected stopping annotation"))))))
(defun gdb-frame-begin (ignored)
(let ((sink gdb-output-sink))
***************
*** 796,802 ****
(setq gdb-output-sink 'user))
((eq sink 'user) t)
((eq sink 'emacs) t)
! (t (error "Unexpected frame-begin annotation (%S)" sink)))))
(defun gdb-stopped (ignored)
"An annotation handler for `stopped'.
--- 803,811 ----
(setq gdb-output-sink 'user))
((eq sink 'user) t)
((eq sink 'emacs) t)
! (t
! (gdb-resync)
! (error "Unexpected frame-begin annotation (%S)" sink)))))
(defun gdb-stopped (ignored)
"An annotation handler for `stopped'.
***************
*** 808,814 ****
((eq sink 'inferior)
(setq gdb-output-sink 'user))
((eq sink 'user) t)
! (t (error "Unexpected stopped annotation")))))
(defun gdb-post-prompt (ignored)
"An annotation handler for `post-prompt'.
--- 817,825 ----
((eq sink 'inferior)
(setq gdb-output-sink 'user))
((eq sink 'user) t)
! (t
! (gdb-resync)
! (error "Unexpected stopped annotation")))))
(defun gdb-post-prompt (ignored)
"An annotation handler for `post-prompt'.
***************
*** 837,902 ****
((eq sink 'pre-emacs)
(setq gdb-output-sink 'emacs))
(t
! (setq gdb-output-sink 'user)
(error "Phase error in gdb-post-prompt (got %s)" sink)))))
(defun gud-gdba-marker-filter (string)
"A gud marker filter for gdb. Handle a burst of output from GDB."
! (if gdb-enable-debug-log (push (cons 'recv string) gdb-debug-log))
! ;; Recall the left over gud-marker-acc from last time
! (setq gud-marker-acc (concat gud-marker-acc string))
! ;; Start accumulating output for the GUD buffer
! (let ((output ""))
! ;;
! ;; Process all the complete markers in this chunk.
! (while (string-match "\n\032\032\\(.*\\)\n" gud-marker-acc)
! (let ((annotation (match-string 1 gud-marker-acc)))
! ;;
! ;; Stuff prior to the match is just ordinary output.
! ;; It is either concatenated to OUTPUT or directed
! ;; elsewhere.
! (setq output
! (gdb-concat-output
! output
! (substring gud-marker-acc 0 (match-beginning 0))))
! ;;
! ;; Take that stuff off the gud-marker-acc.
! (setq gud-marker-acc (substring gud-marker-acc (match-end 0)))
! ;;
! ;; Parse the tag from the annotation, and maybe its arguments.
! (string-match "\\(\\S-*\\) ?\\(.*\\)" annotation)
! (let* ((annotation-type (match-string 1 annotation))
! (annotation-arguments (match-string 2 annotation))
! (annotation-rule (assoc annotation-type
! gdb-annotation-rules)))
! ;; Call the handler for this annotation.
! (if annotation-rule
! (funcall (car (cdr annotation-rule))
! annotation-arguments)
! ;; Else the annotation is not recognized. Ignore it silently,
! ;; so that GDB can add new annotations without causing
! ;; us to blow up.
! ))))
! ;;
! ;; Does the remaining text end in a partial line?
! ;; If it does, then keep part of the gud-marker-acc until we get more.
! (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'"
! gud-marker-acc)
! (progn
! ;; Everything before the potential marker start can be output.
(setq output
! (gdb-concat-output output
! (substring gud-marker-acc 0
! (match-beginning 0))))
;;
! ;; Everything after, we save, to combine with later input.
! (setq gud-marker-acc (substring gud-marker-acc (match-beginning 0))))
;;
! ;; In case we know the gud-marker-acc contains no partial annotations:
! (progn
! (setq output (gdb-concat-output output gud-marker-acc))
! (setq gud-marker-acc "")))
! output))
(defun gdb-concat-output (so-far new)
(let ((sink gdb-output-sink))
--- 848,915 ----
((eq sink 'pre-emacs)
(setq gdb-output-sink 'emacs))
(t
! (gdb-resync)
(error "Phase error in gdb-post-prompt (got %s)" sink)))))
(defun gud-gdba-marker-filter (string)
"A gud marker filter for gdb. Handle a burst of output from GDB."
! (if gdb-flush-pending-output
! nil
! (if gdb-enable-debug-log (push (cons 'recv string) gdb-debug-log))
! ;; Recall the left over gud-marker-acc from last time
! (setq gud-marker-acc (concat gud-marker-acc string))
! ;; Start accumulating output for the GUD buffer
! (let ((output ""))
! ;;
! ;; Process all the complete markers in this chunk.
! (while (string-match "\n\032\032\\(.*\\)\n" gud-marker-acc)
! (let ((annotation (match-string 1 gud-marker-acc)))
! ;;
! ;; Stuff prior to the match is just ordinary output.
! ;; It is either concatenated to OUTPUT or directed
! ;; elsewhere.
(setq output
! (gdb-concat-output
! output
! (substring gud-marker-acc 0 (match-beginning 0))))
! ;;
! ;; Take that stuff off the gud-marker-acc.
! (setq gud-marker-acc (substring gud-marker-acc (match-end 0)))
;;
! ;; Parse the tag from the annotation, and maybe its arguments.
! (string-match "\\(\\S-*\\) ?\\(.*\\)" annotation)
! (let* ((annotation-type (match-string 1 annotation))
! (annotation-arguments (match-string 2 annotation))
! (annotation-rule (assoc annotation-type
! gdb-annotation-rules)))
! ;; Call the handler for this annotation.
! (if annotation-rule
! (funcall (car (cdr annotation-rule))
! annotation-arguments)
! ;; Else the annotation is not recognized. Ignore it silently,
! ;; so that GDB can add new annotations without causing
! ;; us to blow up.
! ))))
;;
! ;; Does the remaining text end in a partial line?
! ;; If it does, then keep part of the gud-marker-acc until we get more.
! (if (string-match "\n\\'\\|\n\032\\'\\|\n\032\032.*\\'"
! gud-marker-acc)
! (progn
! ;; Everything before the potential marker start can be output.
! (setq output
! (gdb-concat-output output
! (substring gud-marker-acc 0
! (match-beginning 0))))
! ;;
! ;; Everything after, we save, to combine with later input.
! (setq gud-marker-acc (substring gud-marker-acc (match-beginning
0))))
! ;;
! ;; In case we know the gud-marker-acc contains no partial annotations:
! (progn
! (setq output (gdb-concat-output output gud-marker-acc))
! (setq gud-marker-acc "")))
! output)))
(defun gdb-concat-output (so-far new)
(let ((sink gdb-output-sink))
***************
*** 909,915 ****
((eq sink 'inferior)
(gdb-append-to-inferior-io new)
so-far)
! (t (error "Bogon output sink %S" sink)))))
(defun gdb-append-to-partial-output (string)
(with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
--- 922,930 ----
((eq sink 'inferior)
(gdb-append-to-inferior-io new)
so-far)
! (t
! (gdb-resync)
! (error "Bogon output sink %S" sink)))))
(defun gdb-append-to-partial-output (string)
(with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
***************
*** 1101,1107 ****
;;-put breakpoint icons in relevant margins (even those set in the GUD buffer)
(defun gdb-info-breakpoints-custom ()
! (let ((flag)(address))
;;
;; remove all breakpoint-icons in source buffers but not assembler buffer
(dolist (buffer (buffer-list))
--- 1116,1122 ----
;;-put breakpoint icons in relevant margins (even those set in the GUD buffer)
(defun gdb-info-breakpoints-custom ()
! (let ((flag))
;;
;; remove all breakpoint-icons in source buffers but not assembler buffer
(dolist (buffer (buffer-list))
***************
*** 1168,1174 ****
(gdb-get-create-buffer 'gdb-breakpoints-buffer)))
(defconst gdb-frame-parameters
! '((height . 12) (width . 60)
(unsplittable . t)
(tool-bar-lines . nil)
(menu-bar-lines . nil)
--- 1183,1189 ----
(gdb-get-create-buffer 'gdb-breakpoints-buffer)))
(defconst gdb-frame-parameters
! '((height . 14) (width . 80)
(unsplittable . t)
(tool-bar-lines . nil)
(menu-bar-lines . nil)
***************
*** 1177,1185 ****
(defun gdb-frame-breakpoints-buffer ()
"Display status of user-settable breakpoints in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-breakpoints-buffer))
! (set-window-dedicated-p (selected-window) t))
(defvar gdb-breakpoints-mode-map
(let ((map (make-sparse-keymap))
--- 1192,1200 ----
(defun gdb-frame-breakpoints-buffer ()
"Display status of user-settable breakpoints in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-breakpoints-buffer))))
(defvar gdb-breakpoints-mode-map
(let ((map (make-sparse-keymap))
***************
*** 1192,1197 ****
--- 1207,1213 ----
(define-key map [menu-bar breakpoints] (cons "Breakpoints" menu))
(define-key map " " 'gdb-toggle-breakpoint)
(define-key map "d" 'gdb-delete-breakpoint)
+ (define-key map "q" 'kill-this-buffer)
(define-key map "\r" 'gdb-goto-breakpoint)
(define-key map [mouse-2] 'gdb-mouse-goto-breakpoint)
map))
***************
*** 1256,1262 ****
(let* ((buf (find-file-noselect (if (file-exists-p file)
file
(expand-file-name file
gdb-cdir))))
! (window (gdb-display-buffer buf)))
(with-current-buffer buf
(goto-line (string-to-number line))
(set-window-point window (point))))))
--- 1272,1278 ----
(let* ((buf (find-file-noselect (if (file-exists-p file)
file
(expand-file-name file
gdb-cdir))))
! (window (display-buffer buf)))
(with-current-buffer buf
(goto-line (string-to-number line))
(set-window-point window (point))))))
***************
*** 1313,1325 ****
(defun gdb-frame-stack-buffer ()
"Display backtrace of current stack in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-stack-buffer))
! (set-window-dedicated-p (selected-window) t))
(defvar gdb-frames-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "\r" 'gdb-frames-select)
(define-key map [mouse-2] 'gdb-frames-mouse-select)
map))
--- 1329,1342 ----
(defun gdb-frame-stack-buffer ()
"Display backtrace of current stack in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-stack-buffer))))
(defvar gdb-frames-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
+ (define-key map "q" 'kill-this-buffer)
(define-key map "\r" 'gdb-frames-select)
(define-key map [mouse-2] 'gdb-frames-mouse-select)
map))
***************
*** 1394,1406 ****
(defun gdb-frame-threads-buffer ()
"Display IDs of currently known threads in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-threads-buffer))
! (set-window-dedicated-p (selected-window) t))
(defvar gdb-threads-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "\r" 'gdb-threads-select)
(define-key map [mouse-2] 'gdb-threads-mouse-select)
map))
--- 1411,1424 ----
(defun gdb-frame-threads-buffer ()
"Display IDs of currently known threads in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-threads-buffer))))
(defvar gdb-threads-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
+ (define-key map "q" 'kill-this-buffer)
(define-key map "\r" 'gdb-threads-select)
(define-key map [mouse-2] 'gdb-threads-mouse-select)
map))
***************
*** 1453,1459 ****
(defvar gdb-registers-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! map))
(defun gdb-registers-mode ()
"Major mode for gdb registers.
--- 1471,1478 ----
(defvar gdb-registers-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! (define-key map "q" 'kill-this-buffer)
! map))
(defun gdb-registers-mode ()
"Major mode for gdb registers.
***************
*** 1480,1488 ****
(defun gdb-frame-registers-buffer ()
"Display integer register contents in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-registers-buffer))
! (set-window-dedicated-p (selected-window) t))
;;
;; Locals buffer.
--- 1499,1507 ----
(defun gdb-frame-registers-buffer ()
"Display integer register contents in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-registers-buffer))))
;;
;; Locals buffer.
***************
*** 1529,1535 ****
(defvar gdb-locals-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! map))
(defun gdb-locals-mode ()
"Major mode for gdb locals.
--- 1548,1555 ----
(defvar gdb-locals-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! (define-key map "q" 'kill-this-buffer)
! map))
(defun gdb-locals-mode ()
"Major mode for gdb locals.
***************
*** 1558,1609 ****
(defun gdb-frame-locals-buffer ()
"Display local variables of current stack and their values in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-locals-buffer))
! (set-window-dedicated-p (selected-window) t))
;;;; Window management
-
- ;;; The way we abuse the dedicated-p flag is pretty gross, but seems
- ;;; to do the right thing. Seeing as there is no way for Lisp code to
- ;;; get at the use_time field of a window, I'm not sure there exists a
- ;;; more elegant solution without writing C code.
-
(defun gdb-display-buffer (buf &optional size)
! (let ((must-split nil)
! (answer nil))
! (unwind-protect
! (progn
! (walk-windows
! #'(lambda (win)
! (if (eq gud-comint-buffer (window-buffer win))
! (set-window-dedicated-p win t))))
! (setq answer (get-buffer-window buf 'visible))
! (if (not answer)
! (let ((window (get-lru-window 'visible)))
! (if window
! (progn
! (set-window-buffer window buf)
! (setq answer window))
! (setq must-split t)))))
! (walk-windows
! #'(lambda (win)
! (if (eq gud-comint-buffer (window-buffer win))
! (set-window-dedicated-p win nil)))))
! (if must-split
! (let* ((largest (get-largest-window 'visible))
! (cur-size (window-height largest))
! (new-size (and size (< size cur-size) (- cur-size size))))
! (setq answer (split-window largest new-size))
! (set-window-buffer answer buf)))
! answer))
!
! (defun gdb-display-source-buffer (buffer)
! (if (eq gdb-selected-view 'source)
! (gdb-display-buffer buffer)
! (gdb-display-buffer (gdb-get-buffer 'gdb-assembler-buffer)))
! (get-buffer-window buffer 'visible))
;;; Shared keymap initialization:
--- 1578,1610 ----
(defun gdb-frame-locals-buffer ()
"Display local variables of current stack and their values in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-locals-buffer))))
;;;; Window management
(defun gdb-display-buffer (buf &optional size)
! (let ((answer (get-buffer-window buf 0))
! (must-split nil))
! (if answer
! (display-buffer buf) ;Raise the frame if necessary.
! ;; The buffer is not yet displayed.
! (pop-to-buffer gud-comint-buffer) ;Select the right frame.
! (let ((window (get-lru-window)))
! (if window
! (progn
! (set-window-buffer window buf)
! (setq answer window))
! (setq must-split t)))
! (if must-split
! (let* ((largest (get-largest-window))
! (cur-size (window-height largest))
! (new-size (and size (< size cur-size) (- cur-size size))))
! (setq answer (split-window largest new-size))
! (set-window-buffer answer buf)
! (set-window-dedicated-p answer t)))
! answer)))
;;; Shared keymap initialization:
***************
*** 1630,1648 ****
(define-key menu [frames] '("Stack" . gdb-display-stack-buffer))
(define-key menu [breakpoints] '("Breakpoints" .
gdb-display-breakpoints-buffer)))
- (let ((menu (make-sparse-keymap "View")))
- (define-key gud-menu-map [view]
- `(menu-item "View" ,menu :visible (eq gud-minor-mode 'gdba)))
- ; (define-key menu [both] '(menu-item "Both" gdb-view-both
- ; :help "Display both source and assembler"
- ; :button (:radio . (eq gdb-selected-view 'both))))
- (define-key menu [assembler] '(menu-item "Machine" gdb-view-assembler
- :help "Display assembler only"
- :button (:radio . (eq gdb-selected-view 'assembler))))
- (define-key menu [source] '(menu-item "Source" gdb-view-source-function
- :help "Display source only"
- :button (:radio . (eq gdb-selected-view 'source)))))
-
(let ((menu (make-sparse-keymap "GDB-UI")))
(define-key gud-menu-map [ui]
`(menu-item "GDB-UI" ,menu :visible (eq gud-minor-mode 'gdba)))
--- 1631,1636 ----
***************
*** 1668,1700 ****
(defvar gdb-main-file nil "Source file from which program execution begins.")
- (defun gdb-view-source-function ()
- "Select source view."
- (interactive)
- (if gdb-view-source
- (gdb-display-buffer
- (if gud-last-last-frame
- (gud-find-file (car gud-last-last-frame))
- (gud-find-file gdb-main-file))))
- (setq gdb-selected-view 'source))
-
- (defun gdb-view-assembler()
- "Select disassembly view."
- (interactive)
- (gdb-display-buffer (gdb-get-create-buffer 'gdb-assembler-buffer))
- (gdb-invalidate-assembler)
- (setq gdb-selected-view 'assembler))
-
- ;(defun gdb-view-both()
- ;(interactive)
- ;(setq gdb-selected-view 'both))
-
(defcustom gdb-show-main nil
"Nil means don't display source file containing the main routine."
:type 'boolean
:group 'gud
:version "21.4")
(defun gdb-setup-windows ()
"Layout the window pattern for gdb-many-windows."
(gdb-display-locals-buffer)
--- 1656,1671 ----
(defvar gdb-main-file nil "Source file from which program execution begins.")
(defcustom gdb-show-main nil
"Nil means don't display source file containing the main routine."
:type 'boolean
:group 'gud
:version "21.4")
+ (defun gdb-set-window-buffer (name)
+ (set-window-buffer (selected-window) (get-buffer name))
+ (set-window-dedicated-p (selected-window) t))
+
(defun gdb-setup-windows ()
"Layout the window pattern for gdb-many-windows."
(gdb-display-locals-buffer)
***************
*** 1702,1730 ****
(delete-other-windows)
(gdb-display-breakpoints-buffer)
(delete-other-windows)
! (switch-to-buffer gud-comint-buffer)
(split-window nil ( / ( * (window-height) 3) 4))
(split-window nil ( / (window-height) 3))
(split-window-horizontally)
(other-window 1)
! (switch-to-buffer (gdb-locals-buffer-name))
(other-window 1)
(switch-to-buffer
- (if (and gdb-view-source
- (eq gdb-selected-view 'source))
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
! (gud-find-file gdb-main-file))
! (gdb-get-create-buffer 'gdb-assembler-buffer)))
(when gdb-use-inferior-io-buffer
(split-window-horizontally)
(other-window 1)
! (switch-to-buffer (gdb-inferior-io-name)))
(other-window 1)
! (switch-to-buffer (gdb-stack-buffer-name))
(split-window-horizontally)
(other-window 1)
! (switch-to-buffer (gdb-breakpoints-buffer-name))
(other-window 1))
(defcustom gdb-many-windows nil
--- 1673,1699 ----
(delete-other-windows)
(gdb-display-breakpoints-buffer)
(delete-other-windows)
! ; Don't dedicate.
! (pop-to-buffer gud-comint-buffer)
(split-window nil ( / ( * (window-height) 3) 4))
(split-window nil ( / (window-height) 3))
(split-window-horizontally)
(other-window 1)
! (gdb-set-window-buffer (gdb-locals-buffer-name))
(other-window 1)
(switch-to-buffer
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
! (gud-find-file gdb-main-file)))
(when gdb-use-inferior-io-buffer
(split-window-horizontally)
(other-window 1)
! (gdb-set-window-buffer (gdb-inferior-io-name)))
(other-window 1)
! (gdb-set-window-buffer (gdb-stack-buffer-name))
(split-window-horizontally)
(other-window 1)
! (gdb-set-window-buffer (gdb-breakpoints-buffer-name))
(other-window 1))
(defcustom gdb-many-windows nil
***************
*** 1752,1773 ****
"Restore the basic arrangement of windows used by gdba.
This arrangement depends on the value of `gdb-many-windows'."
(interactive)
! (if gdb-many-windows
! (progn
! (switch-to-buffer gud-comint-buffer)
! (delete-other-windows)
! (gdb-setup-windows))
! (switch-to-buffer gud-comint-buffer)
(delete-other-windows)
(split-window)
(other-window 1)
(switch-to-buffer
- (if (and gdb-view-source
- (eq gdb-selected-view 'source))
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
! (gud-find-file gdb-main-file))
! (gdb-get-create-buffer 'gdb-assembler-buffer)))
(other-window 1)))
(defun gdb-reset ()
--- 1721,1736 ----
"Restore the basic arrangement of windows used by gdba.
This arrangement depends on the value of `gdb-many-windows'."
(interactive)
! (pop-to-buffer gud-comint-buffer) ;Select the right window and frame.
(delete-other-windows)
+ (if gdb-many-windows
+ (gdb-setup-windows)
(split-window)
(other-window 1)
(switch-to-buffer
(if gud-last-last-frame
(gud-find-file (car gud-last-last-frame))
! (gud-find-file gdb-main-file)))
(other-window 1)))
(defun gdb-reset ()
***************
*** 1800,1820 ****
(setq gdb-cdir (match-string 0))))
(if (search-forward "Located in " nil t)
(if (looking-at "\\S-*")
! (setq gdb-main-file (match-string 0)))
! (setq gdb-view-source nil))
! (if gdb-many-windows
(gdb-setup-windows)
(gdb-get-create-buffer 'gdb-breakpoints-buffer)
! (when gdb-show-main
! (switch-to-buffer gud-comint-buffer)
! (delete-other-windows)
! (split-window)
! (other-window 1)
! (switch-to-buffer
! (if gdb-view-source
! (gud-find-file gdb-main-file)
! (gdb-get-create-buffer 'gdb-assembler-buffer)))
! (other-window 1))))
;;from put-image
(defun gdb-put-string (putstring pos &optional dprop)
--- 1763,1775 ----
(setq gdb-cdir (match-string 0))))
(if (search-forward "Located in " nil t)
(if (looking-at "\\S-*")
! (setq gdb-main-file (match-string 0))))
! (if gdb-many-windows
(gdb-setup-windows)
(gdb-get-create-buffer 'gdb-breakpoints-buffer)
! (if gdb-show-main
! (let ((pop-up-windows t))
! (display-buffer (gud-find-file gdb-main-file))))))
;;from put-image
(defun gdb-put-string (putstring pos &optional dprop)
***************
*** 1860,1868 ****
(when (< left-margin-width 2)
(save-current-buffer
(setq left-margin-width 2)
! (if (get-buffer-window (current-buffer) 'visible)
(set-window-margins
! (get-buffer-window (current-buffer) 'visible)
left-margin-width right-margin-width))))
(put-image
(if enabled
--- 1815,1823 ----
(when (< left-margin-width 2)
(save-current-buffer
(setq left-margin-width 2)
! (if (get-buffer-window (current-buffer) 0)
(set-window-margins
! (get-buffer-window (current-buffer) 0)
left-margin-width right-margin-width))))
(put-image
(if enabled
***************
*** 1887,1895 ****
(when (< left-margin-width 2)
(save-current-buffer
(setq left-margin-width 2)
! (if (get-buffer-window (current-buffer) 'visible)
(set-window-margins
! (get-buffer-window (current-buffer) 'visible)
left-margin-width right-margin-width))))
(gdb-put-string (if enabled "B" "b") (1+ start)))))
--- 1842,1850 ----
(when (< left-margin-width 2)
(save-current-buffer
(setq left-margin-width 2)
! (if (get-buffer-window (current-buffer) 0)
(set-window-margins
! (get-buffer-window (current-buffer) 0)
left-margin-width right-margin-width))))
(gdb-put-string (if enabled "B" "b") (1+ start)))))
***************
*** 1899,1907 ****
(remove-images start end))
(when remove-margin
(setq left-margin-width 0)
! (if (get-buffer-window (current-buffer) 'visible)
(set-window-margins
! (get-buffer-window (current-buffer) 'visible)
left-margin-width right-margin-width))))
--- 1854,1862 ----
(remove-images start end))
(when remove-margin
(setq left-margin-width 0)
! (if (get-buffer-window (current-buffer) 0)
(set-window-margins
! (get-buffer-window (current-buffer) 0)
left-margin-width right-margin-width))))
***************
*** 1953,1964 ****
(if (re-search-forward address nil t)
(gdb-put-breakpoint-icon (eq flag ?y))))))))
(if (not (equal gdb-current-address "main"))
! (set-window-point (get-buffer-window buffer 'visible) pos))))
(defvar gdb-assembler-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! map))
(defvar gdb-assembler-font-lock-keywords
'(;; <__function.name+n>
--- 1908,1920 ----
(if (re-search-forward address nil t)
(gdb-put-breakpoint-icon (eq flag ?y))))))))
(if (not (equal gdb-current-address "main"))
! (set-window-point (get-buffer-window buffer 0) pos))))
(defvar gdb-assembler-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
! (define-key map "q" 'kill-this-buffer)
! map))
(defvar gdb-assembler-font-lock-keywords
'(;; <__function.name+n>
***************
*** 2007,2015 ****
(defun gdb-frame-assembler-buffer ()
"Display disassembly view in a new frame."
(interactive)
! (select-frame (make-frame gdb-frame-parameters))
! (switch-to-buffer (gdb-get-create-buffer 'gdb-assembler-buffer))
! (set-window-dedicated-p (selected-window) t))
;; modified because if gdb-current-address has changed value a new command
;; must be enqueued to update the buffer with the new output
--- 1963,1971 ----
(defun gdb-frame-assembler-buffer ()
"Display disassembly view in a new frame."
(interactive)
! (let ((special-display-regexps (append special-display-regexps '(".*")))
! (special-display-frame-alist gdb-frame-parameters))
! (display-buffer (gdb-get-create-buffer 'gdb-assembler-buffer))))
;; modified because if gdb-current-address has changed value a new command
;; must be enqueued to update the buffer with the new output
***************
*** 2024,2030 ****
(progn
;; take previous disassemble command off the queue
(with-current-buffer gud-comint-buffer
! (let ((queue gdb-input-queue) (item))
(dolist (item queue)
(if (equal (cdr item) '(gdb-assembler-handler))
(setq gdb-input-queue
--- 1980,1986 ----
(progn
;; take previous disassemble command off the queue
(with-current-buffer gud-comint-buffer
! (let ((queue gdb-input-queue))
(dolist (item queue)
(if (equal (cdr item) '(gdb-assembler-handler))
(setq gdb-input-queue
***************
*** 2064,2077 ****
(setq gdb-current-address
(concat "0x" (match-string 1 address)))
(setq gdb-current-address (concat "0x" address))))
! (if (or (if (not (re-search-forward "(\\S-*:[0-9]*);" nil t))
! (progn (setq gdb-view-source nil) t))
! (eq gdb-selected-view 'assembler))
! (progn
! (gdb-display-buffer
! (gdb-get-create-buffer 'gdb-assembler-buffer))
;;update with new frame for machine code if necessary
! (gdb-invalidate-assembler))))))
(if (re-search-forward " source language \\(\\S-*\\)\." nil t)
(setq gdb-current-language (match-string 1))))
--- 2020,2028 ----
(setq gdb-current-address
(concat "0x" (match-string 1 address)))
(setq gdb-current-address (concat "0x" address))))
! (if (not (re-search-forward "(\\S-*:[0-9]*);" nil t))
;;update with new frame for machine code if necessary
! (gdb-invalidate-assembler)))))
(if (re-search-forward " source language \\(\\S-*\\)\." nil t)
(setq gdb-current-language (match-string 1))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/progmodes/gdb-ui.el [lexbind],
Miles Bader <=