aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2012-08-26 17:16:48 +0800
committerChong Yidong2012-08-26 17:16:48 +0800
commitd97af5a07f045ed1de8045bab25af384c21b08dd (patch)
tree6aabcc758b92f8121b679323b808ddd4c6b2309d
parentd5172d4fbc2ca871d18426fb9e84ee6bb87a0e68 (diff)
downloademacs-d97af5a07f045ed1de8045bab25af384c21b08dd.tar.gz
emacs-d97af5a07f045ed1de8045bab25af384c21b08dd.zip
Clean up gdb-mi's usage of display-buffer.
* progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action): New variable, replacing gdb-frame-parameters. (gdb-frame-io-buffer, gdb-frame-breakpoints-buffer) (gdb-frame-threads-buffer, gdb-frame-memory-buffer) (gdb-frame-disassembly-buffer, gdb-frame-stack-buffer) (gdb-frame-locals-buffer, gdb-frame-registers-buffer): Use it. (def-gdb-frame-for-buffer): Macro deleted. It is easier to define the functions directly with gdb-display-buffer-other-frame-action. (gdb-display-breakpoints-buffer, gdb-display-threads-buffer) (gdb-display-memory-buffer, gdb-display-disassembly-buffer) (gdb-display-stack-buffer, gdb-display-locals-buffer) (gdb-display-registers-buffer): Define directly. (def-gdb-display-buffer): Macro deleted. (gdb-display-buffer): Remove second and third args, callers don't use them. Defer to the default display-buffer behavior, apart from making windows dedicated. (gdb-setup-windows): Don't call display-buffer unnecessarily. * window.el (display-buffer-pop-up-frame): Handle a pop-up-frame-parameters alist entry. (display-buffer): Document it. * progmodes/gud.el (gud-display-line): Just use display-buffer.
-rw-r--r--etc/NEWS3
-rw-r--r--lisp/ChangeLog26
-rw-r--r--lisp/progmodes/gdb-mi.el241
-rw-r--r--lisp/progmodes/gud.el6
-rw-r--r--lisp/window.el23
5 files changed, 155 insertions, 144 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 02bd6410255..13355abe4c4 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -619,6 +619,9 @@ now accept a third argument to avoid choosing the selected window.
619*** New display action alist `inhibit-switch-frame', if non-nil, tells 619*** New display action alist `inhibit-switch-frame', if non-nil, tells
620display action functions to avoid changing which frame is selected. 620display action functions to avoid changing which frame is selected.
621 621
622*** New display action alist `pop-up-frame-parameters', if non-nil,
623specifies frame parameters to give any newly-created frame.
624
622** Completion 625** Completion
623 626
624*** New function `completion-table-with-quoting' to handle completion 627*** New function `completion-table-with-quoting' to handle completion
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2cc41c92210..193665f908b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,31 @@
12012-08-26 Chong Yidong <cyd@gnu.org> 12012-08-26 Chong Yidong <cyd@gnu.org>
2 2
3 * progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action): New
4 variable, replacing gdb-frame-parameters.
5 (gdb-frame-io-buffer, gdb-frame-breakpoints-buffer)
6 (gdb-frame-threads-buffer, gdb-frame-memory-buffer)
7 (gdb-frame-disassembly-buffer, gdb-frame-stack-buffer)
8 (gdb-frame-locals-buffer, gdb-frame-registers-buffer): Use it.
9 (def-gdb-frame-for-buffer): Macro deleted. It is easier to define
10 the functions directly with gdb-display-buffer-other-frame-action.
11 (gdb-display-breakpoints-buffer, gdb-display-threads-buffer)
12 (gdb-display-memory-buffer, gdb-display-disassembly-buffer)
13 (gdb-display-stack-buffer, gdb-display-locals-buffer)
14 (gdb-display-registers-buffer): Define directly.
15 (def-gdb-display-buffer): Macro deleted.
16 (gdb-display-buffer): Remove second and third args, callers don't
17 use them. Defer to the default display-buffer behavior, apart
18 from making windows dedicated.
19 (gdb-setup-windows): Don't call display-buffer unnecessarily.
20
21 * progmodes/gud.el (gud-display-line): Just use display-buffer.
22
23 * window.el (display-buffer-pop-up-frame): Handle a
24 pop-up-frame-parameters alist entry.
25 (display-buffer): Document it.
26
272012-08-26 Chong Yidong <cyd@gnu.org>
28
3 * isearch.el (search-whitespace-regexp): Make string and nil 29 * isearch.el (search-whitespace-regexp): Make string and nil
4 values apply to both ordinary and regexp search. Allow a cons 30 values apply to both ordinary and regexp search. Allow a cons
5 cell value to distinguish between the two. 31 cell value to distinguish between the two.
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 0a99c2f5c24..59c419abfc3 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1413,29 +1413,6 @@ this trigger is subscribed to `gdb-buf-publisher' and called with
1413 (with-current-buffer ,buffer 1413 (with-current-buffer ,buffer
1414 (apply ',expr args)))) 1414 (apply ',expr args))))
1415 1415
1416;; Used to define all gdb-frame-*-buffer functions except
1417;; `gdb-frame-io-buffer'
1418(defmacro def-gdb-frame-for-buffer (name buffer &optional doc)
1419 "Define a function NAME which shows gdb BUFFER in a separate frame.
1420
1421DOC is an optional documentation string."
1422 `(defun ,name (&optional thread)
1423 ,(when doc doc)
1424 (interactive)
1425 (let ((special-display-regexps (append special-display-regexps '(".*")))
1426 (special-display-frame-alist gdb-frame-parameters))
1427 (display-buffer (gdb-get-buffer-create ,buffer thread)))))
1428
1429(defmacro def-gdb-display-buffer (name buffer &optional doc)
1430 "Define a function NAME which shows gdb BUFFER.
1431
1432DOC is an optional documentation string."
1433 `(defun ,name (&optional thread)
1434 ,(when doc doc)
1435 (interactive)
1436 (gdb-display-buffer
1437 (gdb-get-buffer-create ,buffer thread) t)))
1438
1439;; Used to display windows with thread-bound buffers 1416;; Used to display windows with thread-bound buffers
1440(defmacro def-gdb-preempt-display-buffer (name buffer &optional doc 1417(defmacro def-gdb-preempt-display-buffer (name buffer &optional doc
1441 split-horizontal) 1418 split-horizontal)
@@ -1511,8 +1488,7 @@ DOC is an optional documentation string."
1511(defun gdb-display-io-buffer () 1488(defun gdb-display-io-buffer ()
1512 "Display IO of debugged program in a separate window." 1489 "Display IO of debugged program in a separate window."
1513 (interactive) 1490 (interactive)
1514 (gdb-display-buffer 1491 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io)))
1515 (gdb-get-buffer-create 'gdb-inferior-io) t))
1516 1492
1517(defun gdb-inferior-io--init-proc (proc) 1493(defun gdb-inferior-io--init-proc (proc)
1518 ;; Set up inferior I/O. Needs GDB 6.4 onwards. 1494 ;; Set up inferior I/O. Needs GDB 6.4 onwards.
@@ -1540,19 +1516,24 @@ DOC is an optional documentation string."
1540 (comint-exec io-buffer "gdb-inferior" nil nil nil) 1516 (comint-exec io-buffer "gdb-inferior" nil nil nil)
1541 (gdb-inferior-io--init-proc (get-buffer-process io-buffer)))))) 1517 (gdb-inferior-io--init-proc (get-buffer-process io-buffer))))))
1542 1518
1543(defconst gdb-frame-parameters 1519(defvar gdb-display-buffer-other-frame-action
1544 '((height . 14) (width . 80) 1520 `((display-buffer-reuse-window display-buffer-pop-up-frame)
1545 (unsplittable . t) 1521 (reusable-frames . 0)
1546 (tool-bar-lines . nil) 1522 (inhibit-same-window . t)
1547 (menu-bar-lines . nil) 1523 (pop-up-frame-parameters (height . 14)
1548 (minibuffer . nil))) 1524 (width . 80)
1525 (unsplittable . t)
1526 (tool-bar-lines . nil)
1527 (menu-bar-lines . nil)
1528 (minibuffer . nil)))
1529 "A `display-buffer' action for displaying GDB utility frames.")
1530(put 'gdb-display-buffer-other-frame-action 'risky-local-variable t)
1549 1531
1550(defun gdb-frame-io-buffer () 1532(defun gdb-frame-io-buffer ()
1551 "Display IO of debugged program in a new frame." 1533 "Display IO of debugged program in another frame."
1552 (interactive) 1534 (interactive)
1553 (let ((special-display-regexps (append special-display-regexps '(".*"))) 1535 (display-buffer (gdb-get-buffer-create 'gdb-inferior-io)
1554 (special-display-frame-alist gdb-frame-parameters)) 1536 gdb-display-buffer-other-frame-action))
1555 (display-buffer (gdb-get-buffer-create 'gdb-inferior-io))))
1556 1537
1557(defvar gdb-inferior-io-mode-map 1538(defvar gdb-inferior-io-mode-map
1558 (let ((map (make-sparse-keymap))) 1539 (let ((map (make-sparse-keymap)))
@@ -1571,7 +1552,7 @@ DOC is an optional documentation string."
1571 1552
1572(defun gdb-inferior-filter (proc string) 1553(defun gdb-inferior-filter (proc string)
1573 (unless (string-equal string "") 1554 (unless (string-equal string "")
1574 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io) t)) 1555 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io)))
1575 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) 1556 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io)
1576 (comint-output-filter proc string))) 1557 (comint-output-filter proc string)))
1577 1558
@@ -2615,15 +2596,16 @@ If not in a source or disassembly buffer just set point."
2615(defun gdb-breakpoints-buffer-name () 2596(defun gdb-breakpoints-buffer-name ()
2616 (concat "*breakpoints of " (gdb-get-target-string) "*")) 2597 (concat "*breakpoints of " (gdb-get-target-string) "*"))
2617 2598
2618(def-gdb-display-buffer 2599(defun gdb-display-breakpoints-buffer (&optional thread)
2619 gdb-display-breakpoints-buffer 2600 "Display GDB breakpoints."
2620 'gdb-breakpoints-buffer 2601 (interactive)
2621 "Display status of user-settable breakpoints.") 2602 (gdb-display-buffer (gdb-get-buffer-create 'gdb-breakpoints-buffer thread)))
2622 2603
2623(def-gdb-frame-for-buffer 2604(defun gdb-frame-breakpoints-buffer (&optional thread)
2624 gdb-frame-breakpoints-buffer 2605 "Display GDB breakpoints in another frame."
2625 'gdb-breakpoints-buffer 2606 (interactive)
2626 "Display status of user-settable breakpoints in a new frame.") 2607 (display-buffer (gdb-get-buffer-create 'gdb-breakpoints-buffer thread)
2608 gdb-display-buffer-other-frame-action))
2627 2609
2628(defvar gdb-breakpoints-mode-map 2610(defvar gdb-breakpoints-mode-map
2629 (let ((map (make-sparse-keymap)) 2611 (let ((map (make-sparse-keymap))
@@ -2684,15 +2666,16 @@ corresponding to the mode line clicked."
2684(defun gdb-threads-buffer-name () 2666(defun gdb-threads-buffer-name ()
2685 (concat "*threads of " (gdb-get-target-string) "*")) 2667 (concat "*threads of " (gdb-get-target-string) "*"))
2686 2668
2687(def-gdb-display-buffer 2669(defun gdb-display-threads-buffer (&optional thread)
2688 gdb-display-threads-buffer 2670 "Display GDB threads."
2689 'gdb-threads-buffer 2671 (interactive)
2690 "Display GDB threads.") 2672 (gdb-display-buffer (gdb-get-buffer-create 'gdb-threads-buffer thread)))
2691 2673
2692(def-gdb-frame-for-buffer 2674(defun gdb-frame-threads-buffer (&optional thread)
2693 gdb-frame-threads-buffer 2675 "Display GDB threads in another frame."
2694 'gdb-threads-buffer 2676 (interactive)
2695 "Display GDB threads in a new frame.") 2677 (display-buffer (gdb-get-buffer-create 'gdb-threads-buffer thread)
2678 gdb-display-buffer-other-frame-action))
2696 2679
2697(def-gdb-trigger-and-handler 2680(def-gdb-trigger-and-handler
2698 gdb-invalidate-threads (gdb-current-context-command "-thread-info") 2681 gdb-invalidate-threads (gdb-current-context-command "-thread-info")
@@ -2868,26 +2851,22 @@ on the current line."
2868(def-gdb-thread-buffer-simple-command 2851(def-gdb-thread-buffer-simple-command
2869 gdb-frame-stack-for-thread 2852 gdb-frame-stack-for-thread
2870 gdb-frame-stack-buffer 2853 gdb-frame-stack-buffer
2871 "Display a new frame with stack buffer for the thread at 2854 "Display another frame with stack buffer for thread at current line.")
2872current line.")
2873 2855
2874(def-gdb-thread-buffer-simple-command 2856(def-gdb-thread-buffer-simple-command
2875 gdb-frame-locals-for-thread 2857 gdb-frame-locals-for-thread
2876 gdb-frame-locals-buffer 2858 gdb-frame-locals-buffer
2877 "Display a new frame with locals buffer for the thread at 2859 "Display another frame with locals buffer for thread at current line.")
2878current line.")
2879 2860
2880(def-gdb-thread-buffer-simple-command 2861(def-gdb-thread-buffer-simple-command
2881 gdb-frame-registers-for-thread 2862 gdb-frame-registers-for-thread
2882 gdb-frame-registers-buffer 2863 gdb-frame-registers-buffer
2883 "Display a new frame with registers buffer for the thread at 2864 "Display another frame with registers buffer for the thread at current line.")
2884current line.")
2885 2865
2886(def-gdb-thread-buffer-simple-command 2866(def-gdb-thread-buffer-simple-command
2887 gdb-frame-disassembly-for-thread 2867 gdb-frame-disassembly-for-thread
2888 gdb-frame-disassembly-buffer 2868 gdb-frame-disassembly-buffer
2889 "Display a new frame with disassembly buffer for the thread at 2869 "Display another frame with disassembly buffer for the thread at current line.")
2890current line.")
2891 2870
2892(defmacro def-gdb-thread-buffer-gud-command (name gud-command &optional doc) 2871(defmacro def-gdb-thread-buffer-gud-command (name gud-command &optional doc)
2893 "Define a NAME which will execute GUD-COMMAND with 2872 "Define a NAME which will execute GUD-COMMAND with
@@ -3290,21 +3269,16 @@ DOC is an optional documentation string."
3290(defun gdb-memory-buffer-name () 3269(defun gdb-memory-buffer-name ()
3291 (concat "*memory of " (gdb-get-target-string) "*")) 3270 (concat "*memory of " (gdb-get-target-string) "*"))
3292 3271
3293(def-gdb-display-buffer 3272(defun gdb-display-memory-buffer (&optional thread)
3294 gdb-display-memory-buffer 3273 "Display GDB memory contents."
3295 'gdb-memory-buffer 3274 (interactive)
3296 "Display memory contents.") 3275 (gdb-display-buffer (gdb-get-buffer-create 'gdb-memory-buffer thread)))
3297 3276
3298(defun gdb-frame-memory-buffer () 3277(defun gdb-frame-memory-buffer ()
3299 "Display memory contents in a new frame." 3278 "Display memory contents in another frame."
3300 (interactive) 3279 (interactive)
3301 (let* ((special-display-regexps (append special-display-regexps '(".*"))) 3280 (display-buffer (gdb-get-buffer-create 'gdb-memory-buffer)
3302 (special-display-frame-alist 3281 gdb-display-buffer-other-frame-action))
3303 `((left-fringe . 0)
3304 (right-fringe . 0)
3305 (width . 83)
3306 ,@gdb-frame-parameters)))
3307 (display-buffer (gdb-get-buffer-create 'gdb-memory-buffer))))
3308 3282
3309 3283
3310;;; Disassembly view 3284;;; Disassembly view
@@ -3313,19 +3287,20 @@ DOC is an optional documentation string."
3313 (gdb-current-context-buffer-name 3287 (gdb-current-context-buffer-name
3314 (concat "disassembly of " (gdb-get-target-string)))) 3288 (concat "disassembly of " (gdb-get-target-string))))
3315 3289
3316(def-gdb-display-buffer 3290(defun gdb-display-disassembly-buffer (&optional thread)
3317 gdb-display-disassembly-buffer 3291 "Display GDB disassembly information."
3318 'gdb-disassembly-buffer 3292 (interactive)
3319 "Display disassembly for current stack frame.") 3293 (gdb-display-buffer (gdb-get-buffer-create 'gdb-disassembly-buffer thread)))
3320 3294
3321(def-gdb-preempt-display-buffer 3295(def-gdb-preempt-display-buffer
3322 gdb-preemptively-display-disassembly-buffer 3296 gdb-preemptively-display-disassembly-buffer
3323 'gdb-disassembly-buffer) 3297 'gdb-disassembly-buffer)
3324 3298
3325(def-gdb-frame-for-buffer 3299(defun gdb-frame-disassembly-buffer (&optional thread)
3326 gdb-frame-disassembly-buffer 3300 "Display GDB disassembly information in another frame."
3327 'gdb-disassembly-buffer 3301 (interactive)
3328 "Display disassembly in a new frame.") 3302 (display-buffer (gdb-get-buffer-create 'gdb-disassembly-buffer thread)
3303 gdb-display-buffer-other-frame-action))
3329 3304
3330(def-gdb-auto-update-trigger gdb-invalidate-disassembly 3305(def-gdb-auto-update-trigger gdb-invalidate-disassembly
3331 (let* ((frame (gdb-current-buffer-frame)) 3306 (let* ((frame (gdb-current-buffer-frame))
@@ -3560,19 +3535,20 @@ member."
3560 (gdb-current-context-buffer-name 3535 (gdb-current-context-buffer-name
3561 (concat "stack frames of " (gdb-get-target-string)))) 3536 (concat "stack frames of " (gdb-get-target-string))))
3562 3537
3563(def-gdb-display-buffer 3538(defun gdb-display-stack-buffer (&optional thread)
3564 gdb-display-stack-buffer 3539 "Display GDB backtrace for current stack."
3565 'gdb-stack-buffer 3540 (interactive)
3566 "Display backtrace of current stack.") 3541 (gdb-display-buffer (gdb-get-buffer-create 'gdb-stack-buffer thread)))
3567 3542
3568(def-gdb-preempt-display-buffer 3543(def-gdb-preempt-display-buffer
3569 gdb-preemptively-display-stack-buffer 3544 gdb-preemptively-display-stack-buffer
3570 'gdb-stack-buffer nil t) 3545 'gdb-stack-buffer nil t)
3571 3546
3572(def-gdb-frame-for-buffer 3547(defun gdb-frame-stack-buffer (&optional thread)
3573 gdb-frame-stack-buffer 3548 "Display GDB backtrace for current stack in another frame."
3574 'gdb-stack-buffer 3549 (interactive)
3575 "Display backtrace of current stack in a new frame.") 3550 (display-buffer (gdb-get-buffer-create 'gdb-stack-buffer thread)
3551 gdb-display-buffer-other-frame-action))
3576 3552
3577(defvar gdb-frames-mode-map 3553(defvar gdb-frames-mode-map
3578 (let ((map (make-sparse-keymap))) 3554 (let ((map (make-sparse-keymap)))
@@ -3719,19 +3695,20 @@ member."
3719 (gdb-current-context-buffer-name 3695 (gdb-current-context-buffer-name
3720 (concat "locals of " (gdb-get-target-string)))) 3696 (concat "locals of " (gdb-get-target-string))))
3721 3697
3722(def-gdb-display-buffer 3698(defun gdb-display-locals-buffer (&optional thread)
3723 gdb-display-locals-buffer 3699 "Display the local variables of current GDB stack."
3724 'gdb-locals-buffer 3700 (interactive)
3725 "Display local variables of current stack and their values.") 3701 (gdb-display-buffer (gdb-get-buffer-create 'gdb-locals-buffer thread)))
3726 3702
3727(def-gdb-preempt-display-buffer 3703(def-gdb-preempt-display-buffer
3728 gdb-preemptively-display-locals-buffer 3704 gdb-preemptively-display-locals-buffer
3729 'gdb-locals-buffer nil t) 3705 'gdb-locals-buffer nil t)
3730 3706
3731(def-gdb-frame-for-buffer 3707(defun gdb-frame-locals-buffer (&optional thread)
3732 gdb-frame-locals-buffer 3708 "Display the local variables of the current GDB stack in another frame."
3733 'gdb-locals-buffer 3709 (interactive)
3734 "Display local variables of current stack and their values in a new frame.") 3710 (display-buffer (gdb-get-buffer-create 'gdb-locals-buffer thread)
3711 gdb-display-buffer-other-frame-action))
3735 3712
3736 3713
3737;; Registers buffer. 3714;; Registers buffer.
@@ -3818,19 +3795,20 @@ member."
3818 (gdb-current-context-buffer-name 3795 (gdb-current-context-buffer-name
3819 (concat "registers of " (gdb-get-target-string)))) 3796 (concat "registers of " (gdb-get-target-string))))
3820 3797
3821(def-gdb-display-buffer 3798(defun gdb-display-registers-buffer (&optional thread)
3822 gdb-display-registers-buffer 3799 "Display GDB register contents."
3823 'gdb-registers-buffer 3800 (interactive)
3824 "Display integer register contents.") 3801 (gdb-display-buffer (gdb-get-buffer-create 'gdb-registers-buffer thread)))
3825 3802
3826(def-gdb-preempt-display-buffer 3803(def-gdb-preempt-display-buffer
3827 gdb-preemptively-display-registers-buffer 3804 gdb-preemptively-display-registers-buffer
3828 'gdb-registers-buffer nil t) 3805 'gdb-registers-buffer nil t)
3829 3806
3830(def-gdb-frame-for-buffer 3807(defun gdb-frame-registers-buffer (&optional thread)
3831 gdb-frame-registers-buffer 3808 "Display GDB register contents in another frame."
3832 'gdb-registers-buffer 3809 (interactive)
3833 "Display integer register contents in a new frame.") 3810 (display-buffer (gdb-get-buffer-create 'gdb-registers-buffer thread)
3811 gdb-display-buffer-other-frame-action))
3834 3812
3835;; Needs GDB 6.4 onwards (used to fail with no stack). 3813;; Needs GDB 6.4 onwards (used to fail with no stack).
3836(defun gdb-get-changed-registers () 3814(defun gdb-get-changed-registers ()
@@ -3917,26 +3895,26 @@ overlay arrow in source buffer."
3917 (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name))) 3895 (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name)))
3918 3896
3919;;;; Window management 3897;;;; Window management
3920(defun gdb-display-buffer (buf dedicated &optional frame) 3898(defun gdb-display-buffer (buf)
3921 "Show buffer BUF. 3899 "Show buffer BUF, and make that window dedicated."
3922 3900 (let ((window (display-buffer buf)))
3923If BUF is already displayed in some window, show it, deiconifying 3901 (set-window-dedicated-p window t)
3924the frame if necessary. Otherwise, find least recently used 3902 window))
3925window and show BUF there, if the window is not used for GDB 3903
3926already, in which case that window is split first." 3904 ;; (let ((answer (get-buffer-window buf 0)))
3927 (let ((answer (get-buffer-window buf (or frame 0)))) 3905 ;; (if answer
3928 (if answer 3906 ;; (display-buffer buf nil 0) ;Deiconify frame if necessary.
3929 (display-buffer buf nil (or frame 0)) ;Deiconify frame if necessary. 3907 ;; (let ((window (get-lru-window)))
3930 (let ((window (get-lru-window))) 3908 ;; (if (eq (buffer-local-value 'gud-minor-mode (window-buffer window))
3931 (if (eq (buffer-local-value 'gud-minor-mode (window-buffer window)) 3909 ;; 'gdbmi)
3932 'gdbmi) 3910 ;; (let ((largest (get-largest-window)))
3933 (let ((largest (get-largest-window))) 3911 ;; (setq answer (split-window largest))
3934 (setq answer (split-window largest)) 3912 ;; (set-window-buffer answer buf)
3935 (set-window-buffer answer buf) 3913 ;; (set-window-dedicated-p answer t)
3936 (set-window-dedicated-p answer dedicated) 3914 ;; answer)
3937 answer) 3915 ;; (set-window-buffer window buf)
3938 (set-window-buffer window buf) 3916 ;; window)))))
3939 window))))) 3917
3940 3918
3941(defun gdb-preempt-existing-or-display-buffer (buf &optional split-horizontal) 3919(defun gdb-preempt-existing-or-display-buffer (buf &optional split-horizontal)
3942 "Find window displaying a buffer with the same 3920 "Find window displaying a buffer with the same
@@ -3963,7 +3941,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
3963 (if dedicated-window 3941 (if dedicated-window
3964 (set-window-buffer 3942 (set-window-buffer
3965 (split-window dedicated-window nil split-horizontal) buf) 3943 (split-window dedicated-window nil split-horizontal) buf)
3966 (gdb-display-buffer buf t)))))) 3944 (gdb-display-buffer buf))))))
3967 (error "Null buffer"))) 3945 (error "Null buffer")))
3968 3946
3969;;; Shared keymap initialization: 3947;;; Shared keymap initialization:
@@ -4067,7 +4045,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
4067 'all-threads) 4045 'all-threads)
4068 4046
4069(defun gdb-frame-gdb-buffer () 4047(defun gdb-frame-gdb-buffer ()
4070 "Display GUD buffer in a new frame." 4048 "Display GUD buffer in another frame."
4071 (interactive) 4049 (interactive)
4072 (display-buffer-other-frame gud-comint-buffer)) 4050 (display-buffer-other-frame gud-comint-buffer))
4073 4051
@@ -4089,13 +4067,12 @@ window is dedicated."
4089 4067
4090(defun gdb-setup-windows () 4068(defun gdb-setup-windows ()
4091 "Layout the window pattern for `gdb-many-windows'." 4069 "Layout the window pattern for `gdb-many-windows'."
4092 (gdb-display-locals-buffer) 4070 (gdb-get-buffer-create 'gdb-locals-buffer)
4093 (gdb-display-stack-buffer) 4071 (gdb-get-buffer-create 'gdb-stack-buffer)
4094 (delete-other-windows) 4072 (gdb-get-buffer-create 'gdb-breakpoints-buffer)
4095 (gdb-display-breakpoints-buffer) 4073 (set-window-dedicated-p (selected-window) nil)
4096 (delete-other-windows)
4097 ;; Don't dedicate.
4098 (switch-to-buffer gud-comint-buffer) 4074 (switch-to-buffer gud-comint-buffer)
4075 (delete-other-windows)
4099 (let ((win0 (selected-window)) 4076 (let ((win0 (selected-window))
4100 (win1 (split-window nil ( / ( * (window-height) 3) 4))) 4077 (win1 (split-window nil ( / ( * (window-height) 3) 4)))
4101 (win2 (split-window nil ( / (window-height) 3))) 4078 (win2 (split-window nil ( / (window-height) 3)))
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 5946e93f34d..2e3858b2cc5 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -2685,7 +2685,6 @@ Obeying it means displaying in another window the specified file and line."
2685(declare-function global-hl-line-highlight "hl-line" ()) 2685(declare-function global-hl-line-highlight "hl-line" ())
2686(declare-function hl-line-highlight "hl-line" ()) 2686(declare-function hl-line-highlight "hl-line" ())
2687(declare-function gdb-display-source-buffer "gdb-mi" (buffer)) 2687(declare-function gdb-display-source-buffer "gdb-mi" (buffer))
2688(declare-function gdb-display-buffer "gdb-mi" (buf dedicated &optional size))
2689 2688
2690;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen 2689;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen
2691;; and that its line LINE is visible. 2690;; and that its line LINE is visible.
@@ -2702,10 +2701,7 @@ Obeying it means displaying in another window the specified file and line."
2702 (window (and buffer 2701 (window (and buffer
2703 (or (get-buffer-window buffer) 2702 (or (get-buffer-window buffer)
2704 (if (eq gud-minor-mode 'gdbmi) 2703 (if (eq gud-minor-mode 'gdbmi)
2705 (or (if (get-buffer-window buffer 'visible) 2704 (display-buffer buffer nil 'visible))
2706 (display-buffer buffer nil 'visible))
2707 (unless (gdb-display-source-buffer buffer)
2708 (gdb-display-buffer buffer nil 'visible))))
2709 (display-buffer buffer)))) 2705 (display-buffer buffer))))
2710 (pos)) 2706 (pos))
2711 (if buffer 2707 (if buffer
diff --git a/lisp/window.el b/lisp/window.el
index 8aee27f44e8..16230003751 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -4369,12 +4369,11 @@ of the window used."
4369 (function :tag "function")) 4369 (function :tag "function"))
4370 :group 'windows) 4370 :group 'windows)
4371 4371
4372;; Eventually, we want to turn this into a defvar; instead of
4373;; customizing this, the user should use a `pop-up-frame-parameters'
4374;; alist entry in `display-buffer-base-action'.
4372(defcustom pop-up-frame-alist nil 4375(defcustom pop-up-frame-alist nil
4373 "Alist of parameters for automatically generated new frames. 4376 "Alist of parameters for automatically generated new frames.
4374You can set this in your init file; for example,
4375
4376 (setq pop-up-frame-alist '((width . 80) (height . 20)))
4377
4378If non-nil, the value you specify here is used by the default 4377If non-nil, the value you specify here is used by the default
4379`pop-up-frame-function' for the creation of new frames. 4378`pop-up-frame-function' for the creation of new frames.
4380 4379
@@ -5108,6 +5107,10 @@ Recognized alist entries include:
5108 window that already displays the buffer. 5107 window that already displays the buffer.
5109 See `display-buffer-reuse-window'. 5108 See `display-buffer-reuse-window'.
5110 5109
5110 `pop-up-frame-parameters' -- Value specifies an alist of frame
5111 parameters to give a new frame, if
5112 one is created.
5113
5111The ACTION argument to `display-buffer' can also have a non-nil 5114The ACTION argument to `display-buffer' can also have a non-nil
5112and non-list value. This means to display the buffer in a window 5115and non-list value. This means to display the buffer in a window
5113other than the selected one, even if it is already displayed in 5116other than the selected one, even if it is already displayed in
@@ -5250,9 +5253,15 @@ This works by calling `pop-up-frame-function'. If successful,
5250return the window used; otherwise return nil. 5253return the window used; otherwise return nil.
5251 5254
5252If ALIST has a non-nil `inhibit-switch-frame' entry, avoid 5255If ALIST has a non-nil `inhibit-switch-frame' entry, avoid
5253raising the new frame." 5256raising the new frame.
5254 (let ((fun pop-up-frame-function) 5257
5255 frame window) 5258If ALIST has a non-nil `pop-up-frame-parameters' entry, the
5259corresponding value is an alist of frame parameters to give the
5260new frame."
5261 (let* ((params (cdr (assq 'pop-up-frame-parameters alist)))
5262 (pop-up-frame-alist (append params pop-up-frame-alist))
5263 (fun pop-up-frame-function)
5264 frame window)
5256 (when (and fun 5265 (when (and fun
5257 (setq frame (funcall fun)) 5266 (setq frame (funcall fun))
5258 (setq window (frame-selected-window frame))) 5267 (setq window (frame-selected-window frame)))