From: Chong Yidong Date: Thu, 18 Oct 2012 19:46:18 +0000 (+0800) Subject: Fix how gdb-mi calls display-buffer to avoid switching frames. X-Git-Tag: emacs-24.2.90~219 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8c27235eadcdde07da4d037aa523fd9af065f865;p=emacs.git 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 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 51e6b67b86c..46336af6e71 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-10-18 Chong Yidong + + * 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 * emacs-lisp/advice.el: Clean up commentary a bit. diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 59c419abfc3..805ffa36e4e 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -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))) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 2e3858b2cc5..719471278a8 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -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)