Mercurial > emacs
annotate lisp/window.el @ 45470:adebb58b0c5e
(x_write_glyphs): Clear phys_cursor_on_p if current
phys_cursor's hpos is overwritten. This is still not completely
correct, as it doesn't really make sense to use hpos at all to
get the cursor glyph (as that is relative to the width of the
characters on the line, which may have changed during the update).
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 22 May 2002 21:17:45 +0000 |
parents | f98d54034759 |
children | 549bdeb52a93 |
rev | line source |
---|---|
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
36666
diff
changeset
|
1 ;;; window.el --- GNU Emacs window commands aside from those written in C |
773
9c89fd7ddd41
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
707
diff
changeset
|
2 |
44297 | 3 ;; Copyright (C) 1985, 1989, 1992, 1993, 1994, 2000, 2001, 2002 |
28655
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
841 | 5 |
773
9c89fd7ddd41
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
707
diff
changeset
|
6 ;; Maintainer: FSF |
39117 | 7 ;; Keywords: internal |
36 | 8 |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
707 | 13 ;; the Free Software Foundation; either version 2, or (at your option) |
36 | 14 ;; any later version. |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
36 | 25 |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
26 ;;; Commentary: |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
27 |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
28 ;; Window tree functions. |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
29 |
773
9c89fd7ddd41
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
707
diff
changeset
|
30 ;;; Code: |
36 | 31 |
43093
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
32 (defmacro save-selected-window (&rest body) |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
33 "Execute BODY, then select the window that was selected before BODY. |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
34 However, if that window has become dead, don't get an error, |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
35 just refrain from switching to it." |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
36 `(let ((save-selected-window-window (selected-window))) |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
37 (unwind-protect |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
38 (progn ,@body) |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
39 (if (window-live-p save-selected-window-window) |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
40 (select-window save-selected-window-window))))) |
5b046c8a20a6
(save-selected-window): Move macro before first use.
Andreas Schwab <schwab@suse.de>
parents:
42876
diff
changeset
|
41 |
42818
55ed8ccce828
(window-body-height): New function.
Richard M. Stallman <rms@gnu.org>
parents:
42307
diff
changeset
|
42 (defun window-body-height (&optional window) |
55ed8ccce828
(window-body-height): New function.
Richard M. Stallman <rms@gnu.org>
parents:
42307
diff
changeset
|
43 "Return number of lines in window WINDOW for actual buffer text. |
55ed8ccce828
(window-body-height): New function.
Richard M. Stallman <rms@gnu.org>
parents:
42307
diff
changeset
|
44 This does not include the mode line (if any) or the header line (if any)." |
55ed8ccce828
(window-body-height): New function.
Richard M. Stallman <rms@gnu.org>
parents:
42307
diff
changeset
|
45 (or window (setq window (selected-window))) |
42876
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
46 (if (window-minibuffer-p window) |
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
47 (window-height window) |
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
48 (with-current-buffer (window-buffer window) |
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
49 (max 1 (- (window-height window) |
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
50 (if mode-line-format 1 0) |
869e78e96e2a
(window-body-height): Handle minibuffer window specially.
Richard M. Stallman <rms@gnu.org>
parents:
42818
diff
changeset
|
51 (if header-line-format 1 0)))))) |
42818
55ed8ccce828
(window-body-height): New function.
Richard M. Stallman <rms@gnu.org>
parents:
42307
diff
changeset
|
52 |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
53 (defun one-window-p (&optional nomini all-frames) |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
54 "Return non-nil if the selected window is the only window (in its frame). |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
55 Optional arg NOMINI non-nil means don't count the minibuffer |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
56 even if it is active. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
57 |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
58 The optional arg ALL-FRAMES t means count windows on all frames. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
59 If it is `visible', count windows on all visible frames. |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
60 ALL-FRAMES nil or omitted means count only the selected frame, |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
61 plus the minibuffer it uses (which may be on another frame). |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
62 If ALL-FRAMES is neither nil nor t, count only the selected frame." |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
63 (let ((base-window (selected-window))) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
64 (if (and nomini (eq base-window (minibuffer-window))) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
65 (setq base-window (next-window base-window))) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
66 (eq base-window |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
67 (next-window base-window (if nomini 'arg) all-frames)))) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
68 |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
69 (defun walk-windows (proc &optional minibuf all-frames) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
70 "Cycle through all visible windows, calling PROC for each one. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
71 PROC is called with a window as argument. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
72 |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
73 Optional second arg MINIBUF t means count the minibuffer window even |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
74 if not active. MINIBUF nil or omitted means count the minibuffer iff |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
75 it is active. MINIBUF neither t nor nil means not to count the |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
76 minibuffer even if it is active. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
77 |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
78 Several frames may share a single minibuffer; if the minibuffer |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
79 counts, all windows on all frames that share that minibuffer count |
15057
3f71523422e9
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14836
diff
changeset
|
80 too. Therefore, if you are using a separate minibuffer frame |
3f71523422e9
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14836
diff
changeset
|
81 and the minibuffer is active and MINIBUF says it counts, |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
82 `walk-windows' includes the windows in the frame from which you |
15057
3f71523422e9
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14836
diff
changeset
|
83 entered the minibuffer, as well as the minibuffer window. |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
84 |
11302
a9b5c1d727b7
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11149
diff
changeset
|
85 ALL-FRAMES is the optional third argument. |
a9b5c1d727b7
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11149
diff
changeset
|
86 ALL-FRAMES nil or omitted means cycle within the frames as specified above. |
a9b5c1d727b7
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11149
diff
changeset
|
87 ALL-FRAMES = `visible' means include windows on all visible frames. |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
88 ALL-FRAMES = 0 means include windows on all visible and iconified frames. |
11302
a9b5c1d727b7
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11149
diff
changeset
|
89 ALL-FRAMES = t means include windows on all frames including invisible frames. |
26268
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
90 If ALL-FRAMES is a frame, it means include windows on that frame. |
15076
5e9132ff1d88
(walk-windows): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
15057
diff
changeset
|
91 Anything else means restrict to the selected frame." |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
92 ;; If we start from the minibuffer window, don't fail to come back to it. |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
93 (if (window-minibuffer-p (selected-window)) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
94 (setq minibuf t)) |
26268
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
95 (save-selected-window |
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
96 (if (framep all-frames) |
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
97 (select-window (frame-first-window all-frames))) |
30005
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
98 (let* (walk-windows-already-seen |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
99 (walk-windows-current (selected-window))) |
26268
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
100 (while (progn |
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
101 (setq walk-windows-current |
6e6ad5d67263
(walk-windows): If ALL-FRAMES is a frame,
Gerd Moellmann <gerd@gnu.org>
parents:
25263
diff
changeset
|
102 (next-window walk-windows-current minibuf all-frames)) |
30005
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
103 (not (memq walk-windows-current walk-windows-already-seen))) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
104 (setq walk-windows-already-seen |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
105 (cons walk-windows-current walk-windows-already-seen)) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
106 (funcall proc walk-windows-current))))) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
107 |
39172
9ba7895e6ad2
(get-window-with-predicate): Renamed from some-window.
Gerd Moellmann <gerd@gnu.org>
parents:
39117
diff
changeset
|
108 (defun get-window-with-predicate (predicate &optional minibuf |
9ba7895e6ad2
(get-window-with-predicate): Renamed from some-window.
Gerd Moellmann <gerd@gnu.org>
parents:
39117
diff
changeset
|
109 all-frames default) |
30005
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
110 "Return a window satisfying PREDICATE. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
111 |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
112 This function cycles through all visible windows using `walk-windows', |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
113 calling PREDICATE on each one. PREDICATE is called with a window as |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
114 argument. The first window for which PREDICATE returns a non-nil |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
115 value is returned. If no window satisfies PREDICATE, DEFAULT is |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
116 returned. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
117 |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
118 Optional second arg MINIBUF t means count the minibuffer window even |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
119 if not active. MINIBUF nil or omitted means count the minibuffer iff |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
120 it is active. MINIBUF neither t nor nil means not to count the |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
121 minibuffer even if it is active. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
122 |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
123 Several frames may share a single minibuffer; if the minibuffer |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
124 counts, all windows on all frames that share that minibuffer count |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
125 too. Therefore, if you are using a separate minibuffer frame |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
126 and the minibuffer is active and MINIBUF says it counts, |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
127 `walk-windows' includes the windows in the frame from which you |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
128 entered the minibuffer, as well as the minibuffer window. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
129 |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
130 ALL-FRAMES is the optional third argument. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
131 ALL-FRAMES nil or omitted means cycle within the frames as specified above. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
132 ALL-FRAMES = `visible' means include windows on all visible frames. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
133 ALL-FRAMES = 0 means include windows on all visible and iconified frames. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
134 ALL-FRAMES = t means include windows on all frames including invisible frames. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
135 If ALL-FRAMES is a frame, it means include windows on that frame. |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
136 Anything else means restrict to the selected frame." |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
137 (catch 'found |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
138 (walk-windows #'(lambda (window) |
30005
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
139 (when (funcall predicate window) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
140 (throw 'found window))) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
141 minibuf all-frames) |
766caf49d6a9
(some-window): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28655
diff
changeset
|
142 default)) |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
143 |
39172
9ba7895e6ad2
(get-window-with-predicate): Renamed from some-window.
Gerd Moellmann <gerd@gnu.org>
parents:
39117
diff
changeset
|
144 (defalias 'some-window 'get-window-with-predicate) |
9ba7895e6ad2
(get-window-with-predicate): Renamed from some-window.
Gerd Moellmann <gerd@gnu.org>
parents:
39117
diff
changeset
|
145 |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
146 (defun minibuffer-window-active-p (window) |
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
147 "Return t if WINDOW (a minibuffer window) is now active." |
11149
8904c26c2182
(minibuffer-window-active-p): Use active-minibuffer-window.
Richard M. Stallman <rms@gnu.org>
parents:
11086
diff
changeset
|
148 (eq window (active-minibuffer-window))) |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
149 |
36 | 150 (defun count-windows (&optional minibuf) |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
151 "Return the number of visible windows. |
22328
874f007a7d9c
(shrink-window-if-larger-than-buffer):
Karl Heuer <kwzh@gnu.org>
parents:
22216
diff
changeset
|
152 This counts the windows in the selected frame and (if the minibuffer is |
874f007a7d9c
(shrink-window-if-larger-than-buffer):
Karl Heuer <kwzh@gnu.org>
parents:
22216
diff
changeset
|
153 to be counted) its minibuffer frame (if that's not the same frame). |
874f007a7d9c
(shrink-window-if-larger-than-buffer):
Karl Heuer <kwzh@gnu.org>
parents:
22216
diff
changeset
|
154 The optional arg MINIBUF non-nil means count the minibuffer |
14836 | 155 even if it is inactive." |
36 | 156 (let ((count 0)) |
3375
13ddc81f0b43
(count-windows): PROC argument of walk-windows takes an argument.
Richard M. Stallman <rms@gnu.org>
parents:
3342
diff
changeset
|
157 (walk-windows (function (lambda (w) |
36 | 158 (setq count (+ count 1)))) |
159 minibuf) | |
160 count)) | |
161 | |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
162 (defun window-safely-shrinkable-p (&optional window) |
36366
62272f68e460
(fit-window-to-buffer, window-safely-shrinkable-p)
Eli Zaretskii <eliz@gnu.org>
parents:
34580
diff
changeset
|
163 "Non-nil if the WINDOW can be shrunk without shrinking other windows. |
62272f68e460
(fit-window-to-buffer, window-safely-shrinkable-p)
Eli Zaretskii <eliz@gnu.org>
parents:
34580
diff
changeset
|
164 If WINDOW is nil or omitted, it defaults to the currently selected window." |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
165 (save-selected-window |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
166 (when window (select-window window)) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
167 (or (and (not (eq window (frame-first-window))) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
168 (= (car (window-edges)) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
169 (car (window-edges (previous-window))))) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
170 (= (car (window-edges)) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
171 (car (window-edges (next-window))))))) |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
172 |
36 | 173 (defun balance-windows () |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
174 "Make all visible windows the same height (approximately)." |
36 | 175 (interactive) |
42307
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
176 (let ((count -1) levels newsizes level-size |
13523
75c6a5e1ee7a
(balance-windows): Don't count the menu bar's lines in the frame height.
Richard M. Stallman <rms@gnu.org>
parents:
12184
diff
changeset
|
177 ;; Don't count the lines that are above the uppermost windows. |
75c6a5e1ee7a
(balance-windows): Don't count the menu bar's lines in the frame height.
Richard M. Stallman <rms@gnu.org>
parents:
12184
diff
changeset
|
178 ;; (These are the menu bar lines, if any.) |
42307
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
179 (mbl (nth 1 (window-edges (frame-first-window (selected-frame))))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
180 (last-window (previous-window (frame-first-window (selected-frame)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
181 ;; Don't count the lines that are past the lowest main window. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
182 total) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
183 ;; Bottom edge of last window determines what size we have to work with. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
184 (setq total |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
185 (+ (window-height last-window) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
186 (nth 1 (window-edges last-window)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
187 |
3724
dc73f3152d2f
(balance-windows): Total rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
3375
diff
changeset
|
188 ;; Find all the different vpos's at which windows start, |
dc73f3152d2f
(balance-windows): Total rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
3375
diff
changeset
|
189 ;; then count them. But ignore levels that differ by only 1. |
42307
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
190 (let (tops (prev-top -2)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
191 (walk-windows (function (lambda (w) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
192 (setq tops (cons (nth 1 (window-edges w)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
193 tops)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
194 'nomini) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
195 (setq tops (sort tops '<)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
196 (while tops |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
197 (if (> (car tops) (1+ prev-top)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
198 (setq prev-top (car tops) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
199 count (1+ count))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
200 (setq levels (cons (cons (car tops) count) levels)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
201 (setq tops (cdr tops))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
202 (setq count (1+ count))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
203 ;; Subdivide the frame into desired number of vertical levels. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
204 (setq level-size (/ (- total mbl) count)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
205 (save-selected-window |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
206 ;; Set up NEWSIZES to map windows to their desired sizes. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
207 ;; If a window ends at the bottom level, don't include |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
208 ;; it in NEWSIZES. Those windows get the right sizes |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
209 ;; by adjusting the ones above them. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
210 (walk-windows (function |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
211 (lambda (w) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
212 (let ((newtop (cdr (assq (nth 1 (window-edges w)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
213 levels))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
214 (newbot (cdr (assq (+ (window-height w) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
215 (nth 1 (window-edges w))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
216 levels)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
217 (if newbot |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
218 (setq newsizes |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
219 (cons (cons w (* level-size (- newbot newtop))) |
43095
917bf04536ab
(balance-windows): Fix misplaced parenthesis.
Andreas Schwab <schwab@suse.de>
parents:
43093
diff
changeset
|
220 newsizes)))))) |
42307
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
221 'nomini) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
222 ;; Make walk-windows start with the topmost window. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
223 (select-window (previous-window (frame-first-window (selected-frame)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
224 (let (done (count 0)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
225 ;; Give each window its precomputed size, or at least try. |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
226 ;; Keep trying until they all get the intended sizes, |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
227 ;; but not more than 3 times (to prevent infinite loop). |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
228 (while (and (not done) (< count 3)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
229 (setq done t) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
230 (setq count (1+ count)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
231 (walk-windows (function (lambda (w) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
232 (select-window w) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
233 (let ((newsize (cdr (assq w newsizes)))) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
234 (when newsize |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
235 (enlarge-window (- newsize |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
236 (window-height)) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
237 nil t) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
238 (unless (= (window-height) newsize) |
922f0ef2951b
(balance-windows): Use new PRESERVE-BEFORE arg
Richard M. Stallman <rms@gnu.org>
parents:
41541
diff
changeset
|
239 (setq done nil)))))) |
43095
917bf04536ab
(balance-windows): Fix misplaced parenthesis.
Andreas Schwab <schwab@suse.de>
parents:
43093
diff
changeset
|
240 'nomini)))))) |
11086
22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
Richard M. Stallman <rms@gnu.org>
parents:
11029
diff
changeset
|
241 |
698
793483bd29fe
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
656
diff
changeset
|
242 ;;; I think this should be the default; I think people will prefer it--rms. |
17665 | 243 (defcustom split-window-keep-point t |
3724
dc73f3152d2f
(balance-windows): Total rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
3375
diff
changeset
|
244 "*If non-nil, split windows keeps the original point in both children. |
dc73f3152d2f
(balance-windows): Total rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
3375
diff
changeset
|
245 This is often more convenient for editing. |
dc73f3152d2f
(balance-windows): Total rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
3375
diff
changeset
|
246 If nil, adjust point in each of the two windows to minimize redisplay. |
17665 | 247 This is convenient on slow terminals, but point can move strangely." |
248 :type 'boolean | |
249 :group 'windows) | |
382 | 250 |
36 | 251 (defun split-window-vertically (&optional arg) |
252 "Split current window into two windows, one above the other. | |
108 | 253 The uppermost window gets ARG lines and the other gets the rest. |
6670
b2c5fca3c10c
(split-window-vertically): If size is negative, measure from bottom.
Karl Heuer <kwzh@gnu.org>
parents:
6019
diff
changeset
|
254 Negative arg means select the size of the lowermost window instead. |
108 | 255 With no argument, split equally or close to it. |
256 Both windows display the same buffer now current. | |
382 | 257 |
22216
5750539e01e7
(split-window-vertically): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
21970
diff
changeset
|
258 If the variable `split-window-keep-point' is non-nil, both new windows |
382 | 259 will get the same value of point as the current window. This is often |
260 more convenient for editing. | |
108 | 261 |
382 | 262 Otherwise, we chose window starts so as to minimize the amount of |
263 redisplay; this is convenient on slow terminals. The new selected | |
264 window is the one that the current value of point appears in. The | |
265 value of point can change if the text around point is hidden by the | |
266 new mode line." | |
36 | 267 (interactive "P") |
268 (let ((old-w (selected-window)) | |
108 | 269 (old-point (point)) |
6670
b2c5fca3c10c
(split-window-vertically): If size is negative, measure from bottom.
Karl Heuer <kwzh@gnu.org>
parents:
6019
diff
changeset
|
270 (size (and arg (prefix-numeric-value arg))) |
13854
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
271 (window-full-p nil) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
272 new-w bottom switch moved) |
6670
b2c5fca3c10c
(split-window-vertically): If size is negative, measure from bottom.
Karl Heuer <kwzh@gnu.org>
parents:
6019
diff
changeset
|
273 (and size (< size 0) (setq size (+ (window-height) size))) |
b2c5fca3c10c
(split-window-vertically): If size is negative, measure from bottom.
Karl Heuer <kwzh@gnu.org>
parents:
6019
diff
changeset
|
274 (setq new-w (split-window nil size)) |
419 | 275 (or split-window-keep-point |
108 | 276 (progn |
382 | 277 (save-excursion |
278 (set-buffer (window-buffer)) | |
279 (goto-char (window-start)) | |
13854
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
280 (setq moved (vertical-motion (window-height))) |
382 | 281 (set-window-start new-w (point)) |
282 (if (> (point) (window-point new-w)) | |
283 (set-window-point new-w (point))) | |
13854
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
284 (and (= moved (window-height)) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
285 (progn |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
286 (setq window-full-p t) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
287 (vertical-motion -1))) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
288 (setq bottom (point))) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
289 (and window-full-p |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
290 (<= bottom (point)) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
291 (set-window-point old-w (1- bottom))) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
292 (and window-full-p |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
293 (<= (window-start new-w) old-point) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
294 (progn |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
295 (set-window-point new-w old-point) |
84de7ffae8ae
(split-window-vertically): Don't change point in old
Richard M. Stallman <rms@gnu.org>
parents:
13523
diff
changeset
|
296 (select-window new-w))))) |
18279
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
297 (split-window-save-restore-data new-w old-w))) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
298 |
21118
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
299 ;; This is to avoid compiler warnings. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
300 (defvar view-return-to-alist) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
301 |
18279
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
302 (defun split-window-save-restore-data (new-w old-w) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
303 (save-excursion |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
304 (set-buffer (window-buffer)) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
305 (if view-mode |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
306 (let ((old-info (assq old-w view-return-to-alist))) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
307 (setq view-return-to-alist |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
308 (cons (cons new-w (cons (and old-info (car (cdr old-info))) t)) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
309 view-return-to-alist)))) |
3253
f4d37be94734
(split-window-vertically): Return the new window.
Richard M. Stallman <rms@gnu.org>
parents:
2529
diff
changeset
|
310 new-w)) |
36 | 311 |
312 (defun split-window-horizontally (&optional arg) | |
313 "Split current window into two windows side by side. | |
8565
2a2208286955
(split-window-horizontally): If size is negative, measure from the right.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
314 This window becomes the leftmost of the two, and gets ARG columns. |
2a2208286955
(split-window-horizontally): If size is negative, measure from the right.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
315 Negative arg means select the size of the rightmost window instead. |
22924
13888875bea1
(split-window-horizontally): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
22328
diff
changeset
|
316 The argument includes the width of the window's scroll bar; if there |
13888875bea1
(split-window-horizontally): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
22328
diff
changeset
|
317 are no scroll bars, it includes the width of the divider column |
13888875bea1
(split-window-horizontally): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
22328
diff
changeset
|
318 to the window's right, if any. No arg means split equally." |
36 | 319 (interactive "P") |
18279
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
320 (let ((old-w (selected-window)) |
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
321 (size (and arg (prefix-numeric-value arg)))) |
8565
2a2208286955
(split-window-horizontally): If size is negative, measure from the right.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
322 (and size (< size 0) |
2a2208286955
(split-window-horizontally): If size is negative, measure from the right.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
323 (setq size (+ (window-width) size))) |
18279
a9c40a80c9b1
(split-window-save-restore-data): New function that
Richard M. Stallman <rms@gnu.org>
parents:
17665
diff
changeset
|
324 (split-window-save-restore-data (split-window nil size t) old-w))) |
32689
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
325 |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
326 |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
327 (defun set-window-text-height (window height) |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
328 "Sets the height in lines of the text display area of WINDOW to HEIGHT. |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
329 This doesn't include the mode-line (or header-line if any) or any |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
330 partial-height lines in the text display area. |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
331 |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
332 If WINDOW is nil, the selected window is used. |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
333 |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
334 Note that the current implementation of this function cannot always set |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
335 the height exactly, but attempts to be conservative, by allocating more |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
336 lines than are actually needed in the case where some error may be present." |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
337 (let ((delta (- height (window-text-height window)))) |
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
338 (unless (zerop delta) |
32695
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
339 (let ((window-min-height 1)) |
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
340 (if (and window (not (eq window (selected-window)))) |
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
341 (save-selected-window |
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
342 (select-window window) |
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
343 (enlarge-window delta)) |
5a4f1fbd4ed7
(set-window-text-height): Force window-min-height to 1.
Miles Bader <miles@gnu.org>
parents:
32689
diff
changeset
|
344 (enlarge-window delta)))))) |
32689
9f29610841ca
(window-text-height, set-window-text-height): New functions.
Miles Bader <miles@gnu.org>
parents:
32684
diff
changeset
|
345 |
32681
569ef1445e17
(mode-line-window-height-fudge): New variable.
Miles Bader <miles@gnu.org>
parents:
31790
diff
changeset
|
346 |
36 | 347 (defun enlarge-window-horizontally (arg) |
348 "Make current window ARG columns wider." | |
349 (interactive "p") | |
350 (enlarge-window arg t)) | |
351 | |
352 (defun shrink-window-horizontally (arg) | |
353 "Make current window ARG columns narrower." | |
354 (interactive "p") | |
355 (shrink-window arg t)) | |
356 | |
23748
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
357 (defun window-buffer-height (window) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
358 "Return the height (in screen lines) of the buffer that WINDOW is displaying." |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
359 (save-excursion |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
360 (set-buffer (window-buffer window)) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
361 (goto-char (point-min)) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
362 (let ((ignore-final-newline |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
363 ;; If buffer ends with a newline, ignore it when counting height |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
364 ;; unless point is after it. |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
365 (and (not (eobp)) (eq ?\n (char-after (1- (point-max))))))) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
366 (+ 1 (nth 2 (compute-motion (point-min) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
367 '(0 . 0) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
368 (- (point-max) (if ignore-final-newline 1 0)) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
369 (cons 0 100000000) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
370 (window-width window) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
371 nil |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
372 window)))))) |
19e23f0e3cd3
(window-buffer-height): New function, split from
Richard M. Stallman <rms@gnu.org>
parents:
22924
diff
changeset
|
373 |
28655
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
374 (defun count-screen-lines (&optional beg end count-final-newline window) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
375 "Return the number of screen lines in the region. |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
376 The number of screen lines may be different from the number of actual lines, |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
377 due to line breaking, display table, etc. |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
378 |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
379 Optional arguments BEG and END default to `point-min' and `point-max' |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
380 respectively. |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
381 |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
382 If region ends with a newline, ignore it unless optional third argument |
28655
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
383 COUNT-FINAL-NEWLINE is non-nil. |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
384 |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
385 The optional fourth argument WINDOW specifies the window used for obtaining |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
386 parameters such as width, horizontal scrolling, and so on. The default is |
28655
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
387 to use the selected window's parameters. |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
388 |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
389 Like `vertical-motion', `count-screen-lines' always uses the current buffer, |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
390 regardless of which buffer is displayed in WINDOW. This makes possible to use |
28655
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
391 `count-screen-lines' in any buffer, whether or not it is currently displayed |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
392 in some window." |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
393 (unless beg |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
394 (setq beg (point-min))) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
395 (unless end |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
396 (setq end (point-max))) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
397 (if (= beg end) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
398 0 |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
399 (save-excursion |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
400 (save-restriction |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
401 (widen) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
402 (narrow-to-region (min beg end) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
403 (if (and (not count-final-newline) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
404 (= ?\n (char-before (max beg end)))) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
405 (1- (max beg end)) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
406 (max beg end))) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
407 (goto-char (point-min)) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
408 (1+ (vertical-motion (buffer-size) window)))))) |
2ea744c8844a
(count-screen-lines): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26268
diff
changeset
|
409 |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
410 (defun fit-window-to-buffer (&optional window max-height min-height) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
411 "Make WINDOW the right size to display its contents exactly. |
36366
62272f68e460
(fit-window-to-buffer, window-safely-shrinkable-p)
Eli Zaretskii <eliz@gnu.org>
parents:
34580
diff
changeset
|
412 If WINDOW is omitted or nil, it defaults to the selected window. |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
413 If the optional argument MAX-HEIGHT is supplied, it is the maximum height |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
414 the window is allowed to be, defaulting to the frame height. |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
415 If the optional argument MIN-HEIGHT is supplied, it is the minimum |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
416 height the window is allowed to be, defaulting to `window-min-height'. |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
417 |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
418 The heights in MAX-HEIGHT and MIN-HEIGHT include the mode-line and/or |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
419 header-line." |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
420 (interactive) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
421 |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
422 (when (null window) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
423 (setq window (selected-window))) |
32737
29a87f28cd51
(fit-window-to-buffer): Change defaulting of MAX-HEIGHT slightly.
Miles Bader <miles@gnu.org>
parents:
32736
diff
changeset
|
424 (when (null max-height) |
29a87f28cd51
(fit-window-to-buffer): Change defaulting of MAX-HEIGHT slightly.
Miles Bader <miles@gnu.org>
parents:
32736
diff
changeset
|
425 (setq max-height (frame-height (window-frame window)))) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
426 |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
427 (let* ((buf |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
428 ;; Buffer that is displayed in WINDOW |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
429 (window-buffer window)) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
430 (window-height |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
431 ;; The current height of WINDOW |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
432 (window-height window)) |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
433 (desired-height |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
434 ;; The height necessary to show the buffer displayed by WINDOW |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
435 ;; (`count-screen-lines' always works on the current buffer). |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
436 (with-current-buffer buf |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
437 (+ (count-screen-lines) |
33536
035e7b097577
(fit-window-to-buffer): Be sure to acquire at least
Kenichi Handa <handa@m17n.org>
parents:
33478
diff
changeset
|
438 ;; If the buffer is empty, (count-screen-lines) is |
035e7b097577
(fit-window-to-buffer): Be sure to acquire at least
Kenichi Handa <handa@m17n.org>
parents:
33478
diff
changeset
|
439 ;; zero. But, even in that case, we need one text line |
035e7b097577
(fit-window-to-buffer): Be sure to acquire at least
Kenichi Handa <handa@m17n.org>
parents:
33478
diff
changeset
|
440 ;; for cursor. |
035e7b097577
(fit-window-to-buffer): Be sure to acquire at least
Kenichi Handa <handa@m17n.org>
parents:
33478
diff
changeset
|
441 (if (= (point-min) (point-max)) |
035e7b097577
(fit-window-to-buffer): Be sure to acquire at least
Kenichi Handa <handa@m17n.org>
parents:
33478
diff
changeset
|
442 1 0) |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
443 ;; For non-minibuffers, count the mode-line, if any |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
444 (if (and (not (window-minibuffer-p window)) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
445 mode-line-format) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
446 1 0) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
447 ;; Count the header-line, if any |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
448 (if header-line-format 1 0)))) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
449 (delta |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
450 ;; Calculate how much the window height has to change to show |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
451 ;; desired-height lines, constrained by MIN-HEIGHT and MAX-HEIGHT. |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
452 (- (max (min desired-height max-height) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
453 (or min-height window-min-height)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
454 window-height)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
455 ;; We do our own height checking, so avoid any restrictions due to |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
456 ;; window-min-height. |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
457 (window-min-height 1)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
458 |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
459 ;; Don't try to redisplay with the cursor at the end |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
460 ;; on its own line--that would force a scroll and spoil things. |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
461 (when (with-current-buffer buf |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
462 (and (eobp) (bolp) (not (bobp)))) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
463 (set-window-point window (1- (window-point window)))) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
464 |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
465 (save-selected-window |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
466 (select-window window) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
467 |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
468 ;; Adjust WINDOW to the nominally correct size (which may actually |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
469 ;; be slightly off because of variable height text, etc). |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
470 (unless (zerop delta) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
471 (enlarge-window delta)) |
33475
b18c7c71cf2e
(fit-window-to-buffer): Don't check
Kenichi Handa <handa@m17n.org>
parents:
32811
diff
changeset
|
472 |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
473 ;; Check if the last line is surely fully visible. If not, |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
474 ;; enlarge the window. |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
475 (let ((end (with-current-buffer buf |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
476 (save-excursion |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
477 (goto-char (point-max)) |
34079
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
478 (when (and (bolp) (not (bobp))) |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
479 ;; Don't include final newline |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
480 (backward-char 1)) |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
481 (when truncate-lines |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
482 ;; If line-wrapping is turned off, test the |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
483 ;; beginning of the last line for visibility |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
484 ;; instead of the end, as the end of the line |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
485 ;; could be invisible by virtue of extending past |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
486 ;; the edge of the window. |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
487 (forward-line 0)) |
6316cacc1e16
(fit-window-to-buffer): Handle non-nil `truncate-lines'.
Miles Bader <miles@gnu.org>
parents:
33708
diff
changeset
|
488 (point))))) |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
489 (set-window-vscroll window 0) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
490 (while (and (< desired-height max-height) |
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
491 (= desired-height (window-height window)) |
34383
87e249cf993b
(fit-window-to-buffer): Don't pass last argument to
Miles Bader <miles@gnu.org>
parents:
34079
diff
changeset
|
492 (not (pos-visible-in-window-p end window))) |
33478
05a649280be2
(fit-window-to-buffer): Handle windows without mode-lines.
Miles Bader <miles@gnu.org>
parents:
33475
diff
changeset
|
493 (enlarge-window 1) |
33537
53c51fd75027
(fit-window-to-buffer): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
33536
diff
changeset
|
494 (setq desired-height (1+ desired-height))))))) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
495 |
2529
bb127c1081af
(shrink-window-if-larger-than-buffer): Moved from electric.el to windows.el,
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
841
diff
changeset
|
496 (defun shrink-window-if-larger-than-buffer (&optional window) |
3342
ce8aa0ba8b08
(shrink-window-if-larger-than-buffer): Add `interactive'.
Richard M. Stallman <rms@gnu.org>
parents:
3253
diff
changeset
|
497 "Shrink the WINDOW to be as small as possible to display its contents. |
36366
62272f68e460
(fit-window-to-buffer, window-safely-shrinkable-p)
Eli Zaretskii <eliz@gnu.org>
parents:
34580
diff
changeset
|
498 If WINDOW is omitted or nil, it defaults to the selected window. |
8721
c94f87ea8a1b
(shrink-window-if-larger-than-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8672
diff
changeset
|
499 Do not shrink to less than `window-min-height' lines. |
3342
ce8aa0ba8b08
(shrink-window-if-larger-than-buffer): Add `interactive'.
Richard M. Stallman <rms@gnu.org>
parents:
3253
diff
changeset
|
500 Do nothing if the buffer contains more lines than the present window height, |
4364
69e5c2373d37
(shrink-window-if-larger-than-buffer): Do nothing if the
Richard M. Stallman <rms@gnu.org>
parents:
3724
diff
changeset
|
501 or if some of the window's contents are scrolled out of view, |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
502 or if shrinking this window would also shrink another window. |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
503 or if the window is the only window of its frame. |
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
504 Return non-nil if the window was shrunk." |
3342
ce8aa0ba8b08
(shrink-window-if-larger-than-buffer): Add `interactive'.
Richard M. Stallman <rms@gnu.org>
parents:
3253
diff
changeset
|
505 (interactive) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
506 (when (null window) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
507 (setq window (selected-window))) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
508 (let* ((frame (window-frame window)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
509 (mini (frame-parameter frame 'minibuffer)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
510 (edges (window-edges window))) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
511 (if (and (not (eq window (frame-root-window frame))) |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
512 (window-safely-shrinkable-p) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
513 (pos-visible-in-window-p (point-min) window) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
514 (not (eq mini 'only)) |
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
515 (or (not mini) |
36666
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
516 (let ((mini-window (minibuffer-window frame))) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
517 (or (null mini-window) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
518 (not (eq frame (window-frame mini-window))) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
519 (< (nth 3 edges) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
520 (nth 1 (window-edges mini-window))) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
521 (> (nth 1 edges) |
2b284278da9c
(shrink-window-if-larger-than-buffer): Handle frame
Gerd Moellmann <gerd@gnu.org>
parents:
36366
diff
changeset
|
522 (frame-parameter frame 'menu-bar-lines)))))) |
32705
7d93bad80655
(fit-window-to-buffer): New function.
Miles Bader <miles@gnu.org>
parents:
32695
diff
changeset
|
523 (fit-window-to-buffer window (window-height window))))) |
16469
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
524 |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
525 (defun kill-buffer-and-window () |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
526 "Kill the current buffer and delete the selected window." |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
527 (interactive) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
528 (if (yes-or-no-p (format "Kill buffer `%s'? " (buffer-name))) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
529 (let ((buffer (current-buffer))) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
530 (delete-window (selected-window)) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
531 (kill-buffer buffer)) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
532 (error "Aborted"))) |
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
533 |
21118
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
534 (defun quit-window (&optional kill window) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
535 "Quit the current buffer. Bury it, and maybe delete the selected frame. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
536 \(The frame is deleted if it is contains a dedicated window for the buffer.) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
537 With a prefix argument, kill the buffer instead. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
538 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
539 Noninteractively, if KILL is non-nil, then kill the current buffer, |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
540 otherwise bury it. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
541 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
542 If WINDOW is non-nil, it specifies a window; we delete that window, |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
543 and the buffer that is killed or buried is the one in that window." |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
544 (interactive "P") |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
545 (let ((buffer (window-buffer window)) |
21970
3c8d5ab91f84
(quit-window): Fixed FRAME to be the frame and never window.
Richard M. Stallman <rms@gnu.org>
parents:
21860
diff
changeset
|
546 (frame (window-frame (or window (selected-window)))) |
21118
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
547 (window-solitary |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
548 (save-selected-window |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
549 (if window |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
550 (select-window window)) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
551 (one-window-p t))) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
552 window-handled) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
553 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
554 (save-selected-window |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
555 (if window |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
556 (select-window window)) |
21860
58d299618042
(quit-window): Don't try to switch buffers
Richard M. Stallman <rms@gnu.org>
parents:
21118
diff
changeset
|
557 (or (window-minibuffer-p) |
58d299618042
(quit-window): Don't try to switch buffers
Richard M. Stallman <rms@gnu.org>
parents:
21118
diff
changeset
|
558 (window-dedicated-p (selected-window)) |
58d299618042
(quit-window): Don't try to switch buffers
Richard M. Stallman <rms@gnu.org>
parents:
21118
diff
changeset
|
559 (switch-to-buffer (other-buffer)))) |
21118
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
560 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
561 ;; Get rid of the frame, if it has just one dedicated window |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
562 ;; and other visible frames exist. |
21860
58d299618042
(quit-window): Don't try to switch buffers
Richard M. Stallman <rms@gnu.org>
parents:
21118
diff
changeset
|
563 (and (or (window-minibuffer-p) (window-dedicated-p window)) |
21118
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
564 (delq frame (visible-frame-list)) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
565 window-solitary |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
566 (if (and (eq default-minibuffer-frame frame) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
567 (= 1 (length (minibuffer-frame-list)))) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
568 (setq window nil) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
569 (delete-frame frame) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
570 (setq window-handled t))) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
571 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
572 ;; Deal with the buffer. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
573 (if kill |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
574 (kill-buffer buffer) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
575 (bury-buffer buffer)) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
576 |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
577 ;; Maybe get rid of the window. |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
578 (and window (not window-handled) (not window-solitary) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
579 (delete-window window)))) |
2aa0dc203036
(quit-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
18517
diff
changeset
|
580 |
44296
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
581 (defun handle-select-window (event) |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
582 "Handle select-window events." |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
583 (interactive "e") |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
584 (let ((window (posn-window (event-start event)))) |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
585 (if (or (not (window-minibuffer-p window)) |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
586 (minibuffer-window-active-p window)) |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
587 (select-window window)))) |
915a76139f37
(handle-select-window): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
43095
diff
changeset
|
588 |
36 | 589 (define-key ctl-x-map "2" 'split-window-vertically) |
707 | 590 (define-key ctl-x-map "3" 'split-window-horizontally) |
36 | 591 (define-key ctl-x-map "}" 'enlarge-window-horizontally) |
592 (define-key ctl-x-map "{" 'shrink-window-horizontally) | |
2529
bb127c1081af
(shrink-window-if-larger-than-buffer): Moved from electric.el to windows.el,
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
841
diff
changeset
|
593 (define-key ctl-x-map "-" 'shrink-window-if-larger-than-buffer) |
bb127c1081af
(shrink-window-if-larger-than-buffer): Moved from electric.el to windows.el,
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
841
diff
changeset
|
594 (define-key ctl-x-map "+" 'balance-windows) |
16469
479c96f4be3a
(kill-buffer-and-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
15076
diff
changeset
|
595 (define-key ctl-x-4-map "0" 'kill-buffer-and-window) |
656
d74e65773062
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
419
diff
changeset
|
596 |
33708
7c2b5397acbc
General comment and spacing fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
33537
diff
changeset
|
597 ;;; window.el ends here |