Fix how gdb-mi calls display-buffer to avoid switching frames.

* lisp/progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action):
Convert to defcustom.
(gdb-get-source-file): Don't bind pop-up-windows.

* lisp/progmodes/gud.el (gud-display-line): Don't specially re-use
other frames for the gdb-mi case.

Fixes: debbugs:12648
This commit is contained in:
Chong Yidong 2012-10-19 03:46:18 +08:00
parent 1a9327d5cd
commit 8c27235ead
3 changed files with 51 additions and 42 deletions

View file

@ -1,3 +1,12 @@
2012-10-18 Chong Yidong <cyd@gnu.org>
* progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action):
Convert to defcustom.
(gdb-get-source-file): Don't bind pop-up-windows.
* progmodes/gud.el (gud-display-line): Don't specially re-use
other frames for the gdb-mi case (Bug#12648).
2012-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/advice.el: Clean up commentary a bit.

View file

@ -1516,9 +1516,9 @@ this trigger is subscribed to `gdb-buf-publisher' and called with
(comint-exec io-buffer "gdb-inferior" nil nil nil)
(gdb-inferior-io--init-proc (get-buffer-process io-buffer))))))
(defvar gdb-display-buffer-other-frame-action
`((display-buffer-reuse-window display-buffer-pop-up-frame)
(reusable-frames . 0)
(defcustom gdb-display-buffer-other-frame-action
'((display-buffer-reuse-window display-buffer-pop-up-frame)
(reusable-frames . visible)
(inhibit-same-window . t)
(pop-up-frame-parameters (height . 14)
(width . 80)
@ -1526,8 +1526,11 @@ this trigger is subscribed to `gdb-buf-publisher' and called with
(tool-bar-lines . nil)
(menu-bar-lines . nil)
(minibuffer . nil)))
"A `display-buffer' action for displaying GDB utility frames.")
(put 'gdb-display-buffer-other-frame-action 'risky-local-variable t)
"`display-buffer' action for displaying GDB utility frames."
:group 'gdb
:type display-buffer--action-custom-type
:risky t
:version "24.3")
(defun gdb-frame-io-buffer ()
"Display IO of debugged program in another frame."
@ -4175,9 +4178,9 @@ buffers, if required."
(if gdb-many-windows
(gdb-setup-windows)
(gdb-get-buffer-create 'gdb-breakpoints-buffer)
(if (and gdb-show-main gdb-main-file)
(let ((pop-up-windows t))
(display-buffer (gud-find-file gdb-main-file)))))
(and gdb-show-main
gdb-main-file
(display-buffer (gud-find-file gdb-main-file))))
(gdb-force-mode-line-update
(propertize "ready" 'face font-lock-variable-name-face)))

View file

@ -2700,42 +2700,39 @@ Obeying it means displaying in another window the specified file and line."
(gud-find-file true-file)))
(window (and buffer
(or (get-buffer-window buffer)
(if (eq gud-minor-mode 'gdbmi)
(display-buffer buffer nil 'visible))
(display-buffer buffer))))
(pos))
(if buffer
(progn
(with-current-buffer buffer
(unless (or (verify-visited-file-modtime buffer) gud-keep-buffer)
(if (yes-or-no-p
(format "File %s changed on disk. Reread from disk? "
(buffer-name)))
(revert-buffer t t)
(setq gud-keep-buffer t)))
(save-restriction
(widen)
(goto-char (point-min))
(forward-line (1- line))
(setq pos (point))
(or gud-overlay-arrow-position
(setq gud-overlay-arrow-position (make-marker)))
(set-marker gud-overlay-arrow-position (point) (current-buffer))
;; If they turned on hl-line, move the hl-line highlight to
;; the arrow's line.
(when (featurep 'hl-line)
(cond
(global-hl-line-mode
(global-hl-line-highlight))
((and hl-line-mode hl-line-sticky-flag)
(hl-line-highlight)))))
(cond ((or (< pos (point-min)) (> pos (point-max)))
(widen)
(goto-char pos))))
(when window
(set-window-point window gud-overlay-arrow-position)
(if (eq gud-minor-mode 'gdbmi)
(setq gdb-source-window window)))))))
(when buffer
(with-current-buffer buffer
(unless (or (verify-visited-file-modtime buffer) gud-keep-buffer)
(if (yes-or-no-p
(format "File %s changed on disk. Reread from disk? "
(buffer-name)))
(revert-buffer t t)
(setq gud-keep-buffer t)))
(save-restriction
(widen)
(goto-char (point-min))
(forward-line (1- line))
(setq pos (point))
(or gud-overlay-arrow-position
(setq gud-overlay-arrow-position (make-marker)))
(set-marker gud-overlay-arrow-position (point) (current-buffer))
;; If they turned on hl-line, move the hl-line highlight to
;; the arrow's line.
(when (featurep 'hl-line)
(cond
(global-hl-line-mode
(global-hl-line-highlight))
((and hl-line-mode hl-line-sticky-flag)
(hl-line-highlight)))))
(cond ((or (< pos (point-min)) (> pos (point-max)))
(widen)
(goto-char pos))))
(when window
(set-window-point window gud-overlay-arrow-position)
(if (eq gud-minor-mode 'gdbmi)
(setq gdb-source-window window))))))
;; The gud-call function must do the right thing whether its invoking
;; keystroke is from the GUD buffer itself (via major-mode binding)