diff options
| author | Martin Rudalics | 2012-09-22 14:56:08 +0200 |
|---|---|---|
| committer | Martin Rudalics | 2012-09-22 14:56:08 +0200 |
| commit | 8e17c9ba1443c2f21c5801f0c4660ac08dccc837 (patch) | |
| tree | 440766cd6249af19144f114626180568c5ece697 | |
| parent | aa1fe812d3e77ed65a5226a42e5dc081eab22b18 (diff) | |
| download | emacs-8e17c9ba1443c2f21c5801f0c4660ac08dccc837.tar.gz emacs-8e17c9ba1443c2f21c5801f0c4660ac08dccc837.zip | |
Make Temp Buffer Resize Mode less intrusive (Bug#1806).
* window.c (Fsplit_window_internal): Handle only Qt value of
Vwindow_combination_limit separately.
(Qtemp_buffer_resize): New symbol.
(Vwindow_combination_limit): New default value. Rewrite
doc-string.
* cus-start.el (window-combination-limit): Add new optional
values.
* window.el (temp-buffer-window-show)
(window--try-to-split-window): Obey new values of
window-combination-limit.
(split-window): Test window-combination-limit for t instead of
non-nil.
(display-buffer-at-bottom): New buffer display action function.
* help.el (temp-buffer-resize-regexps): New option.
(temp-buffer-resize-mode): Rewrite doc-string.
(resize-temp-buffer-window): Obey temp-buffer-resize-regexps.
Don't resize reused window. Suggested by Glen Morris.
| -rw-r--r-- | etc/NEWS | 14 | ||||
| -rw-r--r-- | lisp/ChangeLog | 15 | ||||
| -rw-r--r-- | lisp/cus-start.el | 12 | ||||
| -rw-r--r-- | lisp/help.el | 63 | ||||
| -rw-r--r-- | lisp/window.el | 65 | ||||
| -rw-r--r-- | src/ChangeLog | 8 | ||||
| -rw-r--r-- | src/window.c | 63 |
7 files changed, 178 insertions, 62 deletions
| @@ -719,15 +719,21 @@ recursive invocations. | |||
| 719 | *** The functions get-lru-window, get-mru-window and get-largest-window | 719 | *** The functions get-lru-window, get-mru-window and get-largest-window |
| 720 | now accept a third argument to avoid choosing the selected window. | 720 | now accept a third argument to avoid choosing the selected window. |
| 721 | 721 | ||
| 722 | *** Additional values recognized for option `window-combination-limit'. | ||
| 723 | |||
| 722 | *** New macro `with-temp-buffer-window'. | 724 | *** New macro `with-temp-buffer-window'. |
| 723 | 725 | ||
| 724 | *** New option `temp-buffer-resize-frames'. | 726 | *** New options `temp-buffer-resize-frames' and |
| 727 | `temp-buffer-resize-regexps'. | ||
| 728 | |||
| 729 | *** `temp-buffer-resize-mode' no longer resizes windows that have been | ||
| 730 | reused. | ||
| 725 | 731 | ||
| 726 | *** New function `fit-frame-to-buffer' and new option | 732 | *** New function `fit-frame-to-buffer' and new option |
| 727 | `fit-frame-to-buffer-bottom-margin'. | 733 | `fit-frame-to-buffer-bottom-margin'. |
| 728 | 734 | ||
| 729 | *** New display action functions `display-buffer-below-selected' and | 735 | *** New display action functions `display-buffer-below-selected', |
| 730 | `display-buffer-in-previous-window'. | 736 | `display-buffer-at-bottom' and `display-buffer-in-previous-window'. |
| 731 | 737 | ||
| 732 | *** New display action alist entry `inhibit-switch-frame', if non-nil, | 738 | *** New display action alist entry `inhibit-switch-frame', if non-nil, |
| 733 | tells display action functions to avoid changing which frame is | 739 | tells display action functions to avoid changing which frame is |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7f9044e4f36..f18bfd73611 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,18 @@ | |||
| 1 | 2012-09-22 Martin Rudalics <rudalics@gmx.at> | ||
| 2 | |||
| 3 | * cus-start.el (window-combination-limit): Add new optional | ||
| 4 | values. | ||
| 5 | * window.el (temp-buffer-window-show) | ||
| 6 | (window--try-to-split-window): Handle new values of | ||
| 7 | window-combination-limit (Bug#1806). | ||
| 8 | (split-window): Test window-combination-limit for t instead of | ||
| 9 | non-nil. | ||
| 10 | (display-buffer-at-bottom): New buffer display action function. | ||
| 11 | * help.el (temp-buffer-resize-regexps): New option. | ||
| 12 | (temp-buffer-resize-mode): Rewrite doc-string. | ||
| 13 | (resize-temp-buffer-window): Obey temp-buffer-resize-regexps. | ||
| 14 | Don't resize reused window. Suggested by Glen Morris. | ||
| 15 | |||
| 1 | 2012-09-22 Stefan Merten <smerten@oekonux.de> | 16 | 2012-09-22 Stefan Merten <smerten@oekonux.de> |
| 2 | 17 | ||
| 3 | * rst.el: Revamp section title faces. | 18 | * rst.el: Revamp section title faces. |
diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 0eb8b2d63c3..a91a479b054 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el | |||
| @@ -422,7 +422,17 @@ since it could result in memory overflow and make Emacs crash." | |||
| 422 | (const :tag "Only on ttys" :value tty) | 422 | (const :tag "Only on ttys" :value tty) |
| 423 | (other :tag "Always" t)) "23.1") | 423 | (other :tag "Always" t)) "23.1") |
| 424 | (window-combination-resize windows boolean "24.1") | 424 | (window-combination-resize windows boolean "24.1") |
| 425 | (window-combination-limit windows boolean "24.1") | 425 | (window-combination-limit |
| 426 | windows (choice | ||
| 427 | (const :tag "Never (nil)" :value nil) | ||
| 428 | (const :tag "For Temp Buffer Resize mode (temp-buffer-resize)" | ||
| 429 | :value temp-buffer-resize) | ||
| 430 | (const :tag "For temporary buffers (temp-buffer)" | ||
| 431 | :value temp-buffer) | ||
| 432 | (const :tag "For buffer display (display-buffer)" | ||
| 433 | :value display-buffer) | ||
| 434 | (other :tag "Always (t)" :value t)) | ||
| 435 | "24.3") | ||
| 426 | ;; xdisp.c | 436 | ;; xdisp.c |
| 427 | (show-trailing-whitespace whitespace-faces boolean nil | 437 | (show-trailing-whitespace whitespace-faces boolean nil |
| 428 | :safe booleanp) | 438 | :safe booleanp) |
diff --git a/lisp/help.el b/lisp/help.el index da11389d87c..707c8e3c84f 100644 --- a/lisp/help.el +++ b/lisp/help.el | |||
| @@ -990,6 +990,17 @@ window. The height of the root window is subject to the values of | |||
| 990 | :version "24.2" | 990 | :version "24.2" |
| 991 | :group 'help) | 991 | :group 'help) |
| 992 | 992 | ||
| 993 | (defcustom temp-buffer-resize-regexps nil | ||
| 994 | "List of regexps that inhibit Temp Buffer Resize mode. | ||
| 995 | Any window of a buffer whose name matches one of these regular | ||
| 996 | expressions is left alone by Temp Buffer Resize mode." | ||
| 997 | :type '(repeat | ||
| 998 | :tag "Buffer" | ||
| 999 | :value "" | ||
| 1000 | (regexp :format "%v")) | ||
| 1001 | :version "24.3" | ||
| 1002 | :group 'help) | ||
| 1003 | |||
| 993 | (define-minor-mode temp-buffer-resize-mode | 1004 | (define-minor-mode temp-buffer-resize-mode |
| 994 | "Toggle auto-resizing temporary buffer windows (Temp Buffer Resize Mode). | 1005 | "Toggle auto-resizing temporary buffer windows (Temp Buffer Resize Mode). |
| 995 | With a prefix argument ARG, enable Temp Buffer Resize mode if ARG | 1006 | With a prefix argument ARG, enable Temp Buffer Resize mode if ARG |
| @@ -1001,6 +1012,12 @@ show a temporary buffer are automatically resized in height to | |||
| 1001 | fit the buffer's contents, but never more than | 1012 | fit the buffer's contents, but never more than |
| 1002 | `temp-buffer-max-height' nor less than `window-min-height'. | 1013 | `temp-buffer-max-height' nor less than `window-min-height'. |
| 1003 | 1014 | ||
| 1015 | A window is resized only if it has been specially created for the | ||
| 1016 | buffer. Windows that have shown another buffer before are not | ||
| 1017 | resized. A window showing a buffer whose name matches any of the | ||
| 1018 | expressions in `temp-buffer-resize-regexps' is not resized. A | ||
| 1019 | frame is resized only if `temp-buffer-resize-frames' is non-nil. | ||
| 1020 | |||
| 1004 | This mode is used by `help', `apropos' and `completion' buffers, | 1021 | This mode is used by `help', `apropos' and `completion' buffers, |
| 1005 | and some others." | 1022 | and some others." |
| 1006 | :global t :group 'help | 1023 | :global t :group 'help |
| @@ -1017,27 +1034,33 @@ WINDOW can be any live window and defaults to the selected one. | |||
| 1017 | Do not make WINDOW higher than `temp-buffer-max-height' nor | 1034 | Do not make WINDOW higher than `temp-buffer-max-height' nor |
| 1018 | smaller than `window-min-height'. Do nothing if WINDOW is not | 1035 | smaller than `window-min-height'. Do nothing if WINDOW is not |
| 1019 | vertically combined or some of its contents are scrolled out of | 1036 | vertically combined or some of its contents are scrolled out of |
| 1020 | view." | 1037 | view. Do nothing if the name of WINDOW's buffer matches an |
| 1038 | expression in `temp-buffer-resize-regexps'." | ||
| 1021 | (setq window (window-normalize-window window t)) | 1039 | (setq window (window-normalize-window window t)) |
| 1022 | (let ((height (if (functionp temp-buffer-max-height) | 1040 | (let ((buffer-name (buffer-name (window-buffer window)))) |
| 1023 | (with-selected-window window | 1041 | (unless (catch 'found |
| 1024 | (funcall temp-buffer-max-height (window-buffer))) | 1042 | (dolist (regexp temp-buffer-resize-regexps) |
| 1025 | temp-buffer-max-height))) | 1043 | (when (string-match regexp buffer-name) |
| 1026 | (cond | 1044 | (throw 'found t)))) |
| 1027 | ((and (pos-visible-in-window-p (point-min) window) | 1045 | (let ((height (if (functionp temp-buffer-max-height) |
| 1028 | (window-combined-p window)) | 1046 | (with-selected-window window |
| 1029 | (fit-window-to-buffer window height)) | 1047 | (funcall temp-buffer-max-height (window-buffer))) |
| 1030 | ((and temp-buffer-resize-frames | 1048 | temp-buffer-max-height)) |
| 1031 | (eq window (frame-root-window window)) | 1049 | (quit-cadr (cadr (window-parameter window 'quit-restore)))) |
| 1032 | (memq (car (window-parameter window 'quit-restore)) | 1050 | (cond |
| 1033 | ;; If 'same is too strong, we might additionally check | 1051 | ;; Don't resize WINDOW if it showed another buffer before. |
| 1034 | ;; whether the second element is 'frame. | 1052 | ((and (eq quit-cadr 'window) |
| 1035 | '(same frame))) | 1053 | (pos-visible-in-window-p (point-min) window) |
| 1036 | (let ((frame (window-frame window))) | 1054 | (window-combined-p window)) |
| 1037 | (fit-frame-to-buffer | 1055 | (fit-window-to-buffer window height)) |
| 1038 | frame (+ (frame-height frame) | 1056 | ((and temp-buffer-resize-frames |
| 1039 | (- (window-total-size window)) | 1057 | (eq quit-cadr 'frame) |
| 1040 | height))))))) | 1058 | (eq window (frame-root-window window))) |
| 1059 | (let ((frame (window-frame window))) | ||
| 1060 | (fit-frame-to-buffer | ||
| 1061 | frame (+ (frame-height frame) | ||
| 1062 | (- (window-total-size window)) | ||
| 1063 | height))))))))) | ||
| 1041 | 1064 | ||
| 1042 | ;;; Help windows. | 1065 | ;;; Help windows. |
| 1043 | (defcustom help-window-select 'other | 1066 | (defcustom help-window-select 'other |
diff --git a/lisp/window.el b/lisp/window.el index fccb68bd94a..87817fb8773 100644 --- a/lisp/window.el +++ b/lisp/window.el | |||
| @@ -111,7 +111,19 @@ to `display-buffer'." | |||
| 111 | (set-buffer-modified-p nil) | 111 | (set-buffer-modified-p nil) |
| 112 | (setq buffer-read-only t) | 112 | (setq buffer-read-only t) |
| 113 | (goto-char (point-min)) | 113 | (goto-char (point-min)) |
| 114 | (when (setq window (display-buffer buffer action)) | 114 | (when (let ((window-combination-limit |
| 115 | ;; When `window-combination-limit' equals | ||
| 116 | ;; `temp-buffer' or `temp-buffer-resize' and | ||
| 117 | ;; `temp-buffer-resize-mode' is enabled in this | ||
| 118 | ;; buffer bind it to t so resizing steals space | ||
| 119 | ;; preferably from the window that was split. | ||
| 120 | (if (or (eq window-combination-limit 'temp-buffer) | ||
| 121 | (and (eq window-combination-limit | ||
| 122 | 'temp-buffer-resize) | ||
| 123 | temp-buffer-resize-mode)) | ||
| 124 | t | ||
| 125 | window-combination-limit))) | ||
| 126 | (setq window (display-buffer buffer action))) | ||
| 115 | (setq frame (window-frame window)) | 127 | (setq frame (window-frame window)) |
| 116 | (unless (eq frame (selected-frame)) | 128 | (unless (eq frame (selected-frame)) |
| 117 | (raise-frame frame)) | 129 | (raise-frame frame)) |
| @@ -3678,9 +3690,8 @@ frame. The selected window is not changed by this function." | |||
| 3678 | (parent (window-parent window)) | 3690 | (parent (window-parent window)) |
| 3679 | (function (window-parameter window 'split-window)) | 3691 | (function (window-parameter window 'split-window)) |
| 3680 | (window-side (window-parameter window 'window-side)) | 3692 | (window-side (window-parameter window 'window-side)) |
| 3681 | ;; Rebind `window-combination-limit' and | 3693 | ;; Rebind the following two variables since in some cases we |
| 3682 | ;; `window-combination-resize' since in some cases we may have | 3694 | ;; have to override their value. |
| 3683 | ;; to override their value. | ||
| 3684 | (window-combination-limit window-combination-limit) | 3695 | (window-combination-limit window-combination-limit) |
| 3685 | (window-combination-resize window-combination-resize) | 3696 | (window-combination-resize window-combination-resize) |
| 3686 | atom-root) | 3697 | atom-root) |
| @@ -3738,7 +3749,7 @@ frame. The selected window is not changed by this function." | |||
| 3738 | (and window-combination-resize | 3749 | (and window-combination-resize |
| 3739 | (or (window-parameter window 'window-side) | 3750 | (or (window-parameter window 'window-side) |
| 3740 | (not (eq window-combination-resize 'side))) | 3751 | (not (eq window-combination-resize 'side))) |
| 3741 | (not window-combination-limit) | 3752 | (not (eq window-combination-limit t)) |
| 3742 | ;; Resize makes sense in iso-combinations only. | 3753 | ;; Resize makes sense in iso-combinations only. |
| 3743 | (window-combined-p window horizontal))) | 3754 | (window-combined-p window horizontal))) |
| 3744 | ;; `old-size' is the current size of WINDOW. | 3755 | ;; `old-size' is the current size of WINDOW. |
| @@ -3818,7 +3829,7 @@ frame. The selected window is not changed by this function." | |||
| 3818 | ;; Make new-parent non-nil if we need a new parent window; | 3829 | ;; Make new-parent non-nil if we need a new parent window; |
| 3819 | ;; either because we want to nest or because WINDOW is not | 3830 | ;; either because we want to nest or because WINDOW is not |
| 3820 | ;; iso-combined. | 3831 | ;; iso-combined. |
| 3821 | (or window-combination-limit | 3832 | (or (eq window-combination-limit t) |
| 3822 | (not (window-combined-p window horizontal)))) | 3833 | (not (window-combined-p window horizontal)))) |
| 3823 | (setq new-normal | 3834 | (setq new-normal |
| 3824 | ;; Make new-normal the normal size of the new window. | 3835 | ;; Make new-normal the normal size of the new window. |
| @@ -5066,12 +5077,19 @@ Return value returned by `split-window-preferred-function' if it | |||
| 5066 | represents a live window, nil otherwise." | 5077 | represents a live window, nil otherwise." |
| 5067 | (and (window-live-p window) | 5078 | (and (window-live-p window) |
| 5068 | (not (frame-parameter (window-frame window) 'unsplittable)) | 5079 | (not (frame-parameter (window-frame window) 'unsplittable)) |
| 5069 | (let ((new-window | 5080 | (let* ((window-combination-limit |
| 5070 | ;; Since `split-window-preferred-function' might | 5081 | ;; When `window-combination-limit' equals |
| 5071 | ;; throw an error use `condition-case'. | 5082 | ;; `display-buffer' bind it to t so resizing steals |
| 5072 | (condition-case nil | 5083 | ;; space preferably from the window that was split. |
| 5073 | (funcall split-window-preferred-function window) | 5084 | (if (eq window-combination-limit 'display-buffer) |
| 5074 | (error nil)))) | 5085 | t |
| 5086 | window-combination-limit)) | ||
| 5087 | (new-window | ||
| 5088 | ;; Since `split-window-preferred-function' might | ||
| 5089 | ;; throw an error use `condition-case'. | ||
| 5090 | (condition-case nil | ||
| 5091 | (funcall split-window-preferred-function window) | ||
| 5092 | (error nil)))) | ||
| 5075 | (and (window-live-p new-window) new-window)))) | 5093 | (and (window-live-p new-window) new-window)))) |
| 5076 | 5094 | ||
| 5077 | (defun window--frame-usable-p (frame) | 5095 | (defun window--frame-usable-p (frame) |
| @@ -5524,6 +5542,29 @@ the selected one." | |||
| 5524 | (window--display-buffer | 5542 | (window--display-buffer |
| 5525 | buffer window 'reuse display-buffer-mark-dedicated))))) | 5543 | buffer window 'reuse display-buffer-mark-dedicated))))) |
| 5526 | 5544 | ||
| 5545 | (defun display-buffer-at-bottom (buffer _alist) | ||
| 5546 | "Try displaying BUFFER in a window at the botom of the selected frame. | ||
| 5547 | This either splits the window at the bottom of the frame or the | ||
| 5548 | frame's root window, or reuses an existing window at the bottom | ||
| 5549 | of the selected frame." | ||
| 5550 | (let (bottom-window window) | ||
| 5551 | (walk-window-tree (lambda (window) (setq bottom-window window))) | ||
| 5552 | (or (and (not (frame-parameter nil 'unsplittable)) | ||
| 5553 | (setq window (window--try-to-split-window bottom-window)) | ||
| 5554 | (window--display-buffer | ||
| 5555 | buffer window 'window display-buffer-mark-dedicated)) | ||
| 5556 | (and (not (frame-parameter nil 'unsplittable)) | ||
| 5557 | (setq window | ||
| 5558 | (condition-case nil | ||
| 5559 | (split-window (frame-root-window)) | ||
| 5560 | (error nil))) | ||
| 5561 | (window--display-buffer | ||
| 5562 | buffer window 'window display-buffer-mark-dedicated)) | ||
| 5563 | (and (setq window bottom-window) | ||
| 5564 | (not (window-dedicated-p window)) | ||
| 5565 | (window--display-buffer | ||
| 5566 | buffer window 'reuse display-buffer-mark-dedicated))))) | ||
| 5567 | |||
| 5527 | (defun display-buffer-in-previous-window (buffer alist) | 5568 | (defun display-buffer-in-previous-window (buffer alist) |
| 5528 | "Display BUFFER in a window previously showing it. | 5569 | "Display BUFFER in a window previously showing it. |
| 5529 | If ALIST has a non-nil `inhibit-same-window' entry, the selected | 5570 | If ALIST has a non-nil `inhibit-same-window' entry, the selected |
diff --git a/src/ChangeLog b/src/ChangeLog index 4033f51ca1a..6ea40b3f122 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,11 @@ | |||
| 1 | 2012-09-22 Martin Rudalics <rudalics@gmx.at> | ||
| 2 | |||
| 3 | * window.c (Fsplit_window_internal): Handle only Qt value of | ||
| 4 | Vwindow_combination_limit separately. | ||
| 5 | (Qtemp_buffer_resize): New symbol. | ||
| 6 | (Vwindow_combination_limit): New default value. Rewrite | ||
| 7 | doc-string. | ||
| 8 | |||
| 1 | 2012-09-22 Eli Zaretskii <eliz@gnu.org> | 9 | 2012-09-22 Eli Zaretskii <eliz@gnu.org> |
| 2 | 10 | ||
| 3 | * xdisp.c (next_overlay_string): Initialize it->end_charpos for | 11 | * xdisp.c (next_overlay_string): Initialize it->end_charpos for |
diff --git a/src/window.c b/src/window.c index a6f1104587e..6798be8231c 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -60,8 +60,7 @@ static Lisp_Object Qwindow_deletable_p, Qdelete_window, Qdisplay_buffer; | |||
| 60 | static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window; | 60 | static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window; |
| 61 | static Lisp_Object Qwindow_resize_root_window, Qwindow_resize_root_window_vertically; | 61 | static Lisp_Object Qwindow_resize_root_window, Qwindow_resize_root_window_vertically; |
| 62 | static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command; | 62 | static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command; |
| 63 | static Lisp_Object Qsafe, Qabove, Qbelow; | 63 | static Lisp_Object Qsafe, Qabove, Qbelow, Qtemp_buffer_resize, Qclone_of; |
| 64 | static Lisp_Object Qclone_of; | ||
| 65 | 64 | ||
| 66 | static int displayed_window_lines (struct window *); | 65 | static int displayed_window_lines (struct window *); |
| 67 | static int count_windows (struct window *); | 66 | static int count_windows (struct window *); |
| @@ -613,10 +612,10 @@ WINDOW are never \(re-)combined with WINDOW's siblings. */) | |||
| 613 | DEFUN ("set-window-combination-limit", Fset_window_combination_limit, Sset_window_combination_limit, 2, 2, 0, | 612 | DEFUN ("set-window-combination-limit", Fset_window_combination_limit, Sset_window_combination_limit, 2, 2, 0, |
| 614 | doc: /* Set combination limit of window WINDOW to LIMIT; return LIMIT. | 613 | doc: /* Set combination limit of window WINDOW to LIMIT; return LIMIT. |
| 615 | WINDOW must be a valid window and defaults to the selected one. | 614 | WINDOW must be a valid window and defaults to the selected one. |
| 616 | If LIMIT is nil, child windows of WINDOW can be recombined with | 615 | If LIMIT is nil, child windows of WINDOW can be recombined with WINDOW's |
| 617 | WINDOW's siblings. LIMIT t means that child windows of WINDOW are | 616 | siblings. LIMIT t means that child windows of WINDOW are never |
| 618 | never \(re-)combined with WINDOW's siblings. Other values are reserved | 617 | \(re-)combined with WINDOW's siblings. Other values are reserved for |
| 619 | for future use. */) | 618 | future use. */) |
| 620 | (Lisp_Object window, Lisp_Object limit) | 619 | (Lisp_Object window, Lisp_Object limit) |
| 621 | { | 620 | { |
| 622 | wset_combination_limit (decode_valid_window (window), limit); | 621 | wset_combination_limit (decode_valid_window (window), limit); |
| @@ -3466,7 +3465,7 @@ make_window (void) | |||
| 3466 | allocate_window. */ | 3465 | allocate_window. */ |
| 3467 | wset_prev_buffers (w, Qnil); | 3466 | wset_prev_buffers (w, Qnil); |
| 3468 | wset_next_buffers (w, Qnil); | 3467 | wset_next_buffers (w, Qnil); |
| 3469 | 3468 | ||
| 3470 | /* Initialize non-Lisp data. Note that allocate_window zeroes out all | 3469 | /* Initialize non-Lisp data. Note that allocate_window zeroes out all |
| 3471 | non-Lisp data, so do it only for slots which should not be zero. */ | 3470 | non-Lisp data, so do it only for slots which should not be zero. */ |
| 3472 | w->nrows_scale_factor = w->ncols_scale_factor = 1; | 3471 | w->nrows_scale_factor = w->ncols_scale_factor = 1; |
| @@ -3848,7 +3847,7 @@ set correctly. See the code of `split-window' for how this is done. */) | |||
| 3848 | We do that if either `window-combination-limit' is t, or OLD has no | 3847 | We do that if either `window-combination-limit' is t, or OLD has no |
| 3849 | parent, or OLD is ortho-combined. */ | 3848 | parent, or OLD is ortho-combined. */ |
| 3850 | combination_limit = | 3849 | combination_limit = |
| 3851 | !NILP (Vwindow_combination_limit) | 3850 | EQ (Vwindow_combination_limit, Qt) |
| 3852 | || NILP (o->parent) | 3851 | || NILP (o->parent) |
| 3853 | || NILP (horflag | 3852 | || NILP (horflag |
| 3854 | ? (XWINDOW (o->parent)->hchild) | 3853 | ? (XWINDOW (o->parent)->hchild) |
| @@ -3903,9 +3902,9 @@ set correctly. See the code of `split-window' for how this is done. */) | |||
| 3903 | 3902 | ||
| 3904 | make_parent_window (old, horflag); | 3903 | make_parent_window (old, horflag); |
| 3905 | p = XWINDOW (o->parent); | 3904 | p = XWINDOW (o->parent); |
| 3906 | /* Store value of `window-combination-limit' in new parent's | 3905 | /* Store t in the new parent's combination_limit slot to avoid |
| 3907 | combination_limit slot. */ | 3906 | that its children get merged into another window. */ |
| 3908 | wset_combination_limit (p, Vwindow_combination_limit); | 3907 | wset_combination_limit (p, Qt); |
| 3909 | /* These get applied below. */ | 3908 | /* These get applied below. */ |
| 3910 | wset_new_total (p, horflag ? o->total_cols : o->total_lines); | 3909 | wset_new_total (p, horflag ? o->total_cols : o->total_lines); |
| 3911 | wset_new_normal (p, new_normal); | 3910 | wset_new_normal (p, new_normal); |
| @@ -6705,6 +6704,7 @@ syms_of_window (void) | |||
| 6705 | DEFSYM (Qreplace_buffer_in_windows, "replace-buffer-in-windows"); | 6704 | DEFSYM (Qreplace_buffer_in_windows, "replace-buffer-in-windows"); |
| 6706 | DEFSYM (Qrecord_window_buffer, "record-window-buffer"); | 6705 | DEFSYM (Qrecord_window_buffer, "record-window-buffer"); |
| 6707 | DEFSYM (Qget_mru_window, "get-mru-window"); | 6706 | DEFSYM (Qget_mru_window, "get-mru-window"); |
| 6707 | DEFSYM (Qtemp_buffer_resize, "temp-buffer-resize"); | ||
| 6708 | DEFSYM (Qtemp_buffer_show_hook, "temp-buffer-show-hook"); | 6708 | DEFSYM (Qtemp_buffer_show_hook, "temp-buffer-show-hook"); |
| 6709 | DEFSYM (Qabove, "above"); | 6709 | DEFSYM (Qabove, "above"); |
| 6710 | DEFSYM (Qbelow, "below"); | 6710 | DEFSYM (Qbelow, "below"); |
| @@ -6800,23 +6800,36 @@ This variable takes no effect if `window-combination-limit' is non-nil. */); | |||
| 6800 | Vwindow_combination_resize = Qnil; | 6800 | Vwindow_combination_resize = Qnil; |
| 6801 | 6801 | ||
| 6802 | DEFVAR_LISP ("window-combination-limit", Vwindow_combination_limit, | 6802 | DEFVAR_LISP ("window-combination-limit", Vwindow_combination_limit, |
| 6803 | doc: /* If t, splitting a window makes a new parent window. | 6803 | doc: /* If non-nil, splitting a window makes a new parent window. |
| 6804 | If this variable is nil, splitting a window will create a new parent | 6804 | The following values are recognized: |
| 6805 | window only if the window has no parent window or the window shall | ||
| 6806 | become a combination orthogonal to the one it is part of. | ||
| 6807 | 6805 | ||
| 6808 | If this variable is t, splitting a window always creates a new parent | 6806 | nil means splitting a window will create a new parent window only if the |
| 6809 | window. If all splits behave this way, each frame's window tree is a | 6807 | window has no parent window or the window shall become a combination |
| 6810 | binary tree and every window but the frame's root window has exactly one | 6808 | orthogonal to the one it is part of. |
| 6811 | sibling. | ||
| 6812 | 6809 | ||
| 6813 | Other values are reserved for future use. | 6810 | `temp-buffer-resize' means that splitting a window for displaying a |
| 6811 | temporary buffer makes a new parent window provided | ||
| 6812 | `temp-buffer-resize-mode' is enabled. Otherwise, this value is | ||
| 6813 | handled like nil. | ||
| 6814 | |||
| 6815 | `temp-buffer' means that splitting a window for displaying a temporary | ||
| 6816 | buffer always makes a new parent window. Otherwise, this value is | ||
| 6817 | handled like nil. | ||
| 6818 | |||
| 6819 | |||
| 6820 | `display-buffer' means that splitting a window for displaying a buffer | ||
| 6821 | always makes a new parent window. Since temporary buffers are | ||
| 6822 | displayed by the function `display-buffer', this value is stronger | ||
| 6823 | than `temp-buffer'. Splitting a window for other purpose makes a | ||
| 6824 | new parent window only if needed. | ||
| 6825 | |||
| 6826 | t means that splitting a window always creates a new parent window. If | ||
| 6827 | all splits behave this way, each frame's window tree is a binary | ||
| 6828 | tree and every window but the frame's root window has exactly one | ||
| 6829 | sibling. | ||
| 6814 | 6830 | ||
| 6815 | The value of this variable is also assigned to the combination limit of | 6831 | Other values are reserved for future use. */); |
| 6816 | the new parent window. The combination limit of a window can be | 6832 | Vwindow_combination_limit = Qtemp_buffer_resize; |
| 6817 | retrieved via the function `window-combination-limit' and altered by the | ||
| 6818 | function `set-window-combination-limit'. */); | ||
| 6819 | Vwindow_combination_limit = Qnil; | ||
| 6820 | 6833 | ||
| 6821 | DEFVAR_LISP ("window-persistent-parameters", Vwindow_persistent_parameters, | 6834 | DEFVAR_LISP ("window-persistent-parameters", Vwindow_persistent_parameters, |
| 6822 | doc: /* Alist of persistent window parameters. | 6835 | doc: /* Alist of persistent window parameters. |