Mercurial > emacs
annotate lisp/rsz-mini.el @ 20457:05d34da4c50c
(telnet-filter): Position comint-last-output-start.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Thu, 11 Dec 1997 07:24:47 +0000 |
parents | da941474d947 |
children | 9b78b337e8bf |
rev | line source |
---|---|
7267 | 1 ;;; rsz-mini.el --- dynamically resize minibuffer to display entire contents |
2 | |
18418
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
3 ;; Copyright (C) 1990, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. |
7267 | 4 |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
5 ;; Author: Noah Friedman <friedman@prep.ai.mit.edu> |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
6 ;; Roland McGrath <roland@prep.ai.mit.edu> |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
7 ;; Maintainer: friedman@prep.ai.mit.edu |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
8 ;; Keywords: minibuffer, window, frame, display |
7267 | 9 |
18418
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
10 ;; $Id$ |
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
11 |
7267 | 12 ;; This file is part of GNU Emacs. |
13 | |
14 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
15 ;; it under the terms of the GNU General Public License as published by | |
16 ;; the Free Software Foundation; either version 2, or (at your option) | |
17 ;; any later version. | |
18 | |
19 ;; GNU Emacs is distributed in the hope that it will be useful, | |
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 ;; GNU General Public License for more details. | |
23 | |
24 ;; You should have received a copy of the GNU General Public License | |
14169 | 25 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
27 ;; Boston, MA 02111-1307, USA. | |
7267 | 28 |
29 ;;; Commentary: | |
30 | |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
31 ;; This package allows the entire contents (or as much as possible) of the |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
32 ;; minibuffer to be visible at once when typing. As the end of a line is |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
33 ;; reached, the minibuffer will resize itself. When the user is done |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
34 ;; typing, the minibuffer will return to its original size. |
7267 | 35 |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
36 ;; In window systems where it is possible to have a frame in which the |
16741 | 37 ;; minibuffer is the only window, the frame itself can be resized. In |
38 ;; Emacs 19.22 and earlier, the frame may not be properly returned to | |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
39 ;; its original size after it ceases to be active because |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
40 ;; `minibuffer-exit-hook' didn't exist until version 19.23. |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
41 ;; |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
42 ;; Prior to Emacs 19.26, minibuffer-exit-hook wasn't called after exiting |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
43 ;; from the minibuffer by hitting the quit char. That meant that the |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
44 ;; frame size restoration function wasn't being called in that case. In |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
45 ;; 19.26 or later, minibuffer-exit-hook should be called anyway. |
7267 | 46 |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
47 ;; Note that the minibuffer and echo area are not the same! They simply |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
48 ;; happen to occupy roughly the same place on the frame. Messages put in |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
49 ;; the echo area will not cause any resizing by this package. |
7267 | 50 |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
51 ;; This package is considered a minor mode but it doesn't put anything in |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
52 ;; minor-mode-alist because this mode is specific to the minibuffer, which |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
53 ;; has no mode line. |
7267 | 54 |
14123 | 55 ;; To enable or disable this mode, use M-x resize-minibuffer-mode. |
7267 | 56 |
57 ;;; Code: | |
58 | |
59 | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
60 (defgroup resize-minibuffer nil |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
61 "Dynamically resize minibuffer to display entire contents" |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
62 :group 'frames) |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
63 |
7267 | 64 ;;;###autoload |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
65 (defcustom resize-minibuffer-mode nil |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
66 "*If non-`nil', resize the minibuffer so its entire contents are visible." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
67 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
68 :group 'resize-minibuffer) |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
69 |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
70 ;;;###autoload |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
71 (defcustom resize-minibuffer-window-max-height nil |
7267 | 72 "*Maximum size the minibuffer window is allowed to become. |
73 If less than 1 or not a number, the limit is the height of the frame in | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
74 which the active minibuffer window resides." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
75 :type '(choice (const nil) integer) |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
76 :group 'resize-minibuffer) |
7267 | 77 |
78 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
79 (defcustom resize-minibuffer-window-exactly t |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
80 "*Allow making minibuffer exactly the size to display all its contents. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
81 If `nil', the minibuffer window can temporarily increase in size but |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
82 never get smaller while it is active. Any other value allows exact |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
83 resizing." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
84 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
85 :group 'resize-minibuffer) |
7267 | 86 |
87 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
88 (defcustom resize-minibuffer-frame nil |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
89 "*Allow changing the frame height of minibuffer frames. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
90 If non-`nil' and the active minibuffer is the sole window in its frame, |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
91 allow changing the frame height." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
92 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
93 :group 'resize-minibuffer) |
7267 | 94 |
95 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
96 (defcustom resize-minibuffer-frame-max-height nil |
7267 | 97 "*Maximum size the minibuffer frame is allowed to become. |
98 If less than 1 or not a number, there is no limit.") | |
99 | |
100 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
101 (defcustom resize-minibuffer-frame-exactly t |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
102 "*Allow making minibuffer frame exactly the size to display all its contents. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
103 If `nil', the minibuffer frame can temporarily increase in size but |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
104 never get smaller while it is active. Any other value allows exact |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
105 resizing." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
106 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
107 :group 'resize-minibuffer) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
108 |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
109 ;; Variable used to store the height of the minibuffer frame |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
110 ;; on entry, so it can be restored on exit. It is made local before it is |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
111 ;; modified. Do not use it yourself. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
112 (defvar resize-minibuffer-frame-original-height nil) |
7267 | 113 |
114 | |
115 ;;;###autoload | |
116 (defun resize-minibuffer-mode (&optional prefix) | |
117 "Enable or disable resize-minibuffer mode. | |
118 A negative prefix argument disables this mode. A positive argument or | |
119 argument of 0 enables it. | |
120 | |
121 When this minor mode is enabled, the minibuffer is dynamically resized to | |
122 contain the entire region of text put in it as you type. | |
123 | |
124 The variable `resize-minibuffer-mode' is set to t or nil depending on | |
125 whether this mode is active or not. | |
126 | |
127 The maximum height to which the minibuffer can grow is controlled by the | |
128 variable `resize-minibuffer-window-max-height'. | |
129 | |
130 The variable `resize-minibuffer-window-exactly' determines whether the | |
131 minibuffer window should ever be shrunk to make it no larger than needed to | |
132 display its contents. | |
133 | |
7512 | 134 When using a window system, it is possible for a minibuffer to be the sole |
7267 | 135 window in a frame. Since that window is already its maximum size, the only |
136 way to make more text visible at once is to increase the size of the frame. | |
137 The variable `resize-minibuffer-frame' controls whether this should be | |
138 done. The variables `resize-minibuffer-frame-max-height' and | |
139 `resize-minibuffer-frame-exactly' are analogous to their window | |
140 counterparts." | |
141 (interactive "p") | |
142 (or prefix (setq prefix 0)) | |
143 (cond | |
144 ((>= prefix 0) | |
145 (setq resize-minibuffer-mode t)) | |
146 (t | |
18418
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
147 (setq resize-minibuffer-mode nil))) |
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
148 (add-hook 'minibuffer-setup-hook 'resize-minibuffer-setup)) |
7267 | 149 |
150 (defun resize-minibuffer-setup () | |
151 (cond | |
152 (resize-minibuffer-mode | |
153 (cond | |
154 ((and window-system | |
155 (eq 'only (cdr (assq 'minibuffer (frame-parameters))))) | |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
156 ;; Checking for resize-minibuffer-frame is done outside the cond |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
157 ;; predicate because that should always be t if this is a minibuffer |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
158 ;; frame; it just shouldn't do anything if this flag is nil. |
7267 | 159 (and resize-minibuffer-frame |
160 (progn | |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
161 ;; Can't trust the height stored in minibuffer-frame-alist |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
162 ;; since the frame can be resized by the window manager and |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
163 ;; that variable isn't updated. |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
164 (make-local-variable 'resize-minibuffer-frame-original-height) |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
165 (setq resize-minibuffer-frame-original-height (frame-height)) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
166 |
12762
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
167 (make-local-hook 'post-command-hook) |
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
168 (add-hook 'post-command-hook 'resize-minibuffer-frame 'append t) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
169 |
12762
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
170 (make-local-hook 'minibuffer-exit-hook) |
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
171 (add-hook 'minibuffer-exit-hook 'resize-minibuffer-frame-restore |
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
172 nil t) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
173 |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
174 (resize-minibuffer-frame)))) |
7267 | 175 (t |
176 (make-local-variable 'post-command-hook) | |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
177 ;; Copy this because add-hook modifies the list structure. |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
178 (setq post-command-hook (copy-sequence post-command-hook)) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
179 (add-hook 'post-command-hook 'resize-minibuffer-window 'append) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
180 |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
181 (make-local-variable 'minibuffer-exit-hook) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
182 (add-hook 'minibuffer-exit-hook 'resize-minibuffer-window-restore) |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
183 |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
184 (resize-minibuffer-window)))))) |
7267 | 185 |
186 (defun resize-minibuffer-count-window-lines (&optional start end) | |
187 "Return number of window lines occupied by text in region. | |
188 The number of window lines may be greater than the number of actual lines | |
189 in the buffer if any wrap on the display due to their length. | |
190 | |
191 Optional arguments START and END default to point-min and point-max, | |
192 respectively." | |
193 (or start (setq start (point-min))) | |
194 (or end (setq end (point-max))) | |
195 (if (= start end) | |
196 0 | |
197 (save-excursion | |
198 (save-restriction | |
199 (widen) | |
200 (narrow-to-region start end) | |
201 (goto-char start) | |
202 (vertical-motion (buffer-size)))))) | |
203 | |
204 | |
205 ;; Resize the minibuffer window to contain the minibuffer's contents. | |
206 (defun resize-minibuffer-window () | |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
207 (and (eq (selected-window) (minibuffer-window)) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
208 (let ((height (window-height)) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
209 (lines (1+ (resize-minibuffer-count-window-lines)))) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
210 (and (numberp resize-minibuffer-window-max-height) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
211 (> resize-minibuffer-window-max-height 0) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
212 (setq lines (min lines resize-minibuffer-window-max-height))) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
213 (or (if resize-minibuffer-window-exactly |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
214 (= lines height) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
215 (<= lines height)) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
216 (enlarge-window (- lines height)))))) |
7267 | 217 |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
218 ;; This resizes the minibuffer back to one line as soon as it is exited |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
219 ;; (e.g. when the user hits RET). This way, subsequent messages put in the |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
220 ;; echo area aren't cluttered with leftover minibuffer text. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
221 ;; It should be called by minibuffer-exit-hook. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
222 ;; |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
223 ;; Note that because it calls sit-for to force a screen update, strange |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
224 ;; things may happen in the minibuffer, such as unexpanded partial |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
225 ;; completions by complete.el showing their completion. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
226 ;; If this bothers you, just redefine this function to do nothing, in, say, |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
227 ;; your after-load-alist. Perhaps there should be an option variable, |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
228 ;; but I don't know if there's really any demand for it. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
229 ;; (Clobbering this definition is harmless because eventually emacs restores |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
230 ;; its idea of the minibuffer window size when the minibuffer isn't in use |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
231 ;; anyway; this is just a kludge because of the timing for that update). |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
232 (defun resize-minibuffer-window-restore () |
8093
1978838b7b6f
(resize-minibuffer-window-restore): Don't do anything if the window height
Noah Friedman <friedman@splode.com>
parents:
8012
diff
changeset
|
233 (cond |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
234 ((not (eq (minibuffer-window) (selected-window)))) |
8093
1978838b7b6f
(resize-minibuffer-window-restore): Don't do anything if the window height
Noah Friedman <friedman@splode.com>
parents:
8012
diff
changeset
|
235 ((> (window-height) 1) |
1978838b7b6f
(resize-minibuffer-window-restore): Don't do anything if the window height
Noah Friedman <friedman@splode.com>
parents:
8012
diff
changeset
|
236 (enlarge-window (- 1 (window-height))) |
1978838b7b6f
(resize-minibuffer-window-restore): Don't do anything if the window height
Noah Friedman <friedman@splode.com>
parents:
8012
diff
changeset
|
237 (sit-for 0)))) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
238 |
7267 | 239 |
240 ;; Resize the minibuffer frame to contain the minibuffer's contents. | |
241 ;; The minibuffer frame must be the current frame. | |
242 (defun resize-minibuffer-frame () | |
243 (let ((height (frame-height)) | |
244 (lines (1+ (resize-minibuffer-count-window-lines)))) | |
245 (and (numberp resize-minibuffer-frame-max-height) | |
246 (> resize-minibuffer-frame-max-height 0) | |
247 (setq lines (min lines resize-minibuffer-frame-max-height))) | |
248 (cond | |
249 ((> lines height) | |
16597
ebdcc5509856
(resize-minibuffer-frame): Don't assume minibuffer frame is selected.
Karl Heuer <kwzh@gnu.org>
parents:
16577
diff
changeset
|
250 (set-frame-size (window-frame (minibuffer-window)) (frame-width) lines)) |
7267 | 251 ((and resize-minibuffer-frame-exactly |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
252 (> height resize-minibuffer-frame-original-height) |
7267 | 253 (< lines height)) |
16597
ebdcc5509856
(resize-minibuffer-frame): Don't assume minibuffer frame is selected.
Karl Heuer <kwzh@gnu.org>
parents:
16577
diff
changeset
|
254 (set-frame-size (window-frame (minibuffer-window)) |
ebdcc5509856
(resize-minibuffer-frame): Don't assume minibuffer frame is selected.
Karl Heuer <kwzh@gnu.org>
parents:
16577
diff
changeset
|
255 (frame-width) lines))))) |
7267 | 256 |
257 ;; Restore the original height of the frame. | |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
258 ;; resize-minibuffer-frame-original-height is set in |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
259 ;; resize-minibuffer-setup. |
7267 | 260 (defun resize-minibuffer-frame-restore () |
16577
15cf729665be
(resize-minibuffer-frame-restore): Don't assume
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
261 (set-frame-size (window-frame (minibuffer-window)) |
7267 | 262 (frame-width) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
263 resize-minibuffer-frame-original-height)) |
7267 | 264 |
265 (provide 'rsz-mini) | |
266 | |
267 ;; rsz-mini.el ends here |