Mercurial > emacs
comparison lisp/rsz-mini.el @ 25696:f541d471520a
Remove code, keep the interface.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 13 Sep 1999 20:49:05 +0000 |
parents | 03b96765f4b4 |
children | dd613770eb0f |
comparison
equal
deleted
inserted
replaced
25695:9e6edb8bc242 | 25696:f541d471520a |
---|---|
5 ;; Author: Noah Friedman <friedman@splode.com> | 5 ;; Author: Noah Friedman <friedman@splode.com> |
6 ;; Roland McGrath <roland@gnu.org> | 6 ;; Roland McGrath <roland@gnu.org> |
7 ;; Maintainer: Noah Friedman <friedman@splode.com> | 7 ;; Maintainer: Noah Friedman <friedman@splode.com> |
8 ;; Keywords: minibuffer, window, frame, display | 8 ;; Keywords: minibuffer, window, frame, display |
9 | 9 |
10 ;; $Id: rsz-mini.el,v 1.25 1999/03/30 21:36:35 kwzh Exp fx $ | 10 ;; $Id: rsz-mini.el,v 1.2 1999/09/13 13:00:24 gerd Exp $ |
11 | 11 |
12 ;; This file is part of GNU Emacs. | 12 ;; This file is part of GNU Emacs. |
13 | 13 |
14 ;; GNU Emacs is free software; you can redistribute it and/or modify | 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 | 15 ;; it under the terms of the GNU General Public License as published by |
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
27 ;; Boston, MA 02111-1307, USA. | 27 ;; Boston, MA 02111-1307, USA. |
28 | 28 |
29 ;;; Commentary: | 29 ;;; Commentary: |
30 | 30 |
31 ;; This package allows the entire contents (or as much as possible) of the | 31 ;; This package is obsolete. Emacs now resizes mini-windows |
32 ;; minibuffer to be visible at once when typing. As the end of a line is | 32 ;; automatically. |
33 ;; reached, the minibuffer will resize itself. When the user is done | |
34 ;; typing, the minibuffer will return to its original size. | |
35 | |
36 ;; In window systems where it is possible to have a frame in which the | |
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 | |
39 ;; its original size after it ceases to be active because | |
40 ;; `minibuffer-exit-hook' didn't exist until version 19.23. | |
41 ;; | |
42 ;; Prior to Emacs 19.26, minibuffer-exit-hook wasn't called after exiting | |
43 ;; from the minibuffer by hitting the quit char. That meant that the | |
44 ;; frame size restoration function wasn't being called in that case. In | |
45 ;; 19.26 or later, minibuffer-exit-hook should be called anyway. | |
46 | |
47 ;; Note that the minibuffer and echo area are not the same! They simply | |
48 ;; happen to occupy roughly the same place on the frame. Messages put in | |
49 ;; the echo area will not cause any resizing by this package. | |
50 | |
51 ;; This package is considered a minor mode but it doesn't put anything in | |
52 ;; minor-mode-alist because this mode is specific to the minibuffer, which | |
53 ;; has no mode line. | |
54 | |
55 ;; To enable or disable this mode, use M-x resize-minibuffer-mode. | |
56 | 33 |
57 ;;; Code: | 34 ;;; Code: |
58 | 35 |
59 | 36 |
60 (defgroup resize-minibuffer nil | 37 (defgroup resize-minibuffer nil |
61 "Dynamically resize minibuffer to display entire contents" | 38 "This customization group is obsolete." |
62 :group 'frames) | 39 :group 'frames) |
63 | 40 |
64 ;;;###autoload | 41 ;;;###autoload |
65 (defcustom resize-minibuffer-mode nil | 42 (defcustom resize-minibuffer-mode nil |
66 "Toggle resizing the minibuffer so its entire contents are visible. | 43 "*This variable is obsolete." |
67 Setting this variable directly does not take effect; | |
68 use either \\[customize] or the function `resize-minibuffer-mode'." | |
69 :set (lambda (symbol value) | |
70 (resize-minibuffer-mode (if value 1 -1))) | |
71 :initialize 'custom-initialize-default | |
72 :type 'boolean | 44 :type 'boolean |
73 :group 'resize-minibuffer | 45 :group 'resize-minibuffer |
74 :require 'rsz-mini) | 46 :require 'rsz-mini) |
75 | 47 |
76 ;;;###autoload | 48 ;;;###autoload |
77 (defcustom resize-minibuffer-window-max-height nil | 49 (defcustom resize-minibuffer-window-max-height nil |
78 "*Maximum size the minibuffer window is allowed to become. | 50 "*This variable is obsolete." |
79 If less than 1 or not a number, the limit is the height of the frame in | |
80 which the active minibuffer window resides." | |
81 :type '(choice (const nil) integer) | 51 :type '(choice (const nil) integer) |
82 :group 'resize-minibuffer) | 52 :group 'resize-minibuffer) |
83 | 53 |
84 ;;;###autoload | 54 ;;;###autoload |
85 (defcustom resize-minibuffer-window-exactly t | 55 (defcustom resize-minibuffer-window-exactly t |
86 "*Allow making minibuffer exactly the size to display all its contents. | 56 "*This variable is obsolete." |
87 If `nil', the minibuffer window can temporarily increase in size but | |
88 never get smaller while it is active. Any other value allows exact | |
89 resizing." | |
90 :type 'boolean | 57 :type 'boolean |
91 :group 'resize-minibuffer) | 58 :group 'resize-minibuffer) |
92 | 59 |
93 ;;;###autoload | 60 ;;;###autoload |
94 (defcustom resize-minibuffer-frame nil | 61 (defcustom resize-minibuffer-frame nil |
95 "*Allow changing the frame height of minibuffer frames. | 62 "*This variable is obsolete." |
96 If non-`nil' and the active minibuffer is the sole window in its frame, | |
97 allow changing the frame height." | |
98 :type 'boolean | 63 :type 'boolean |
99 :group 'resize-minibuffer) | 64 :group 'resize-minibuffer) |
100 | 65 |
101 ;;;###autoload | 66 ;;;###autoload |
102 (defcustom resize-minibuffer-frame-max-height nil | 67 (defcustom resize-minibuffer-frame-max-height nil |
103 "*Maximum size the minibuffer frame is allowed to become. | 68 "*This variable is obsolete.") |
104 If less than 1 or not a number, there is no limit.") | |
105 | 69 |
106 ;;;###autoload | 70 ;;;###autoload |
107 (defcustom resize-minibuffer-frame-exactly t | 71 (defcustom resize-minibuffer-frame-exactly t |
108 "*Allow making minibuffer frame exactly the size to display all its contents. | 72 "*This variable is obsolete." |
109 If `nil', the minibuffer frame can temporarily increase in size but | |
110 never get smaller while it is active. Any other value allows exact | |
111 resizing." | |
112 :type 'boolean | 73 :type 'boolean |
113 :group 'resize-minibuffer) | 74 :group 'resize-minibuffer) |
114 | |
115 ;; Variable used to store the height of the minibuffer frame | |
116 ;; on entry, so it can be restored on exit. It is made local before it is | |
117 ;; modified. Do not use it yourself. | |
118 (defvar resize-minibuffer-frame-original-height nil) | |
119 | 75 |
120 | 76 |
121 ;;;###autoload | 77 ;;;###autoload |
122 (defun resize-minibuffer-mode (&optional prefix) | 78 (defun resize-minibuffer-mode (&optional prefix) |
123 "Toggle resize-minibuffer mode. | 79 "This function is obsolete." |
124 With argument, enable resize-minibuffer mode if and only if argument | 80 (interactive "P")) |
125 is positive. | |
126 | |
127 When this minor mode is enabled, the minibuffer is dynamically resized to | |
128 contain the entire region of text put in it as you type. | |
129 | |
130 The variable `resize-minibuffer-mode' is set to t or nil depending on | |
131 whether this mode is active or not. | |
132 | |
133 The maximum height to which the minibuffer can grow is controlled by the | |
134 variable `resize-minibuffer-window-max-height'. | |
135 | |
136 The variable `resize-minibuffer-window-exactly' determines whether the | |
137 minibuffer window should ever be shrunk to make it no larger than needed to | |
138 display its contents. | |
139 | |
140 When using a window system, it is possible for a minibuffer to be the sole | |
141 window in a frame. Since that window is already its maximum size, the only | |
142 way to make more text visible at once is to increase the size of the frame. | |
143 The variable `resize-minibuffer-frame' controls whether this should be | |
144 done. The variables `resize-minibuffer-frame-max-height' and | |
145 `resize-minibuffer-frame-exactly' are analogous to their window | |
146 counterparts." | |
147 (interactive "P") | |
148 (setq resize-minibuffer-mode | |
149 (if prefix | |
150 (> (prefix-numeric-value prefix) 0) | |
151 (not resize-minibuffer-mode))) | |
152 (add-hook 'minibuffer-setup-hook 'resize-minibuffer-setup)) | |
153 | |
154 (defun resize-minibuffer-setup () | |
155 (cond | |
156 (resize-minibuffer-mode | |
157 (cond | |
158 ((and window-system | |
159 (eq 'only (cdr (assq 'minibuffer (frame-parameters))))) | |
160 ;; Checking for resize-minibuffer-frame is done outside the cond | |
161 ;; predicate because that should always be t if this is a minibuffer | |
162 ;; frame; it just shouldn't do anything if this flag is nil. | |
163 (and resize-minibuffer-frame | |
164 (progn | |
165 ;; Can't trust the height stored in minibuffer-frame-alist | |
166 ;; since the frame can be resized by the window manager and | |
167 ;; that variable isn't updated. | |
168 (make-local-variable 'resize-minibuffer-frame-original-height) | |
169 (setq resize-minibuffer-frame-original-height (frame-height)) | |
170 | |
171 (make-local-hook 'post-command-hook) | |
172 (add-hook 'post-command-hook 'resize-minibuffer-frame 'append t) | |
173 | |
174 (make-local-hook 'minibuffer-exit-hook) | |
175 (add-hook 'minibuffer-exit-hook 'resize-minibuffer-frame-restore | |
176 nil t) | |
177 | |
178 (resize-minibuffer-frame)))) | |
179 (t | |
180 (make-local-variable 'post-command-hook) | |
181 ;; Copy this because add-hook modifies the list structure. | |
182 (setq post-command-hook (copy-sequence post-command-hook)) | |
183 (add-hook 'post-command-hook 'resize-minibuffer-window 'append) | |
184 | |
185 (make-local-variable 'minibuffer-exit-hook) | |
186 (add-hook 'minibuffer-exit-hook 'resize-minibuffer-window-restore) | |
187 | |
188 (resize-minibuffer-window)))))) | |
189 | |
190 (defun resize-minibuffer-count-window-lines (&optional start end) | |
191 "Return number of window lines occupied by text in region. | |
192 The number of window lines may be greater than the number of actual lines | |
193 in the buffer if any wrap on the display due to their length. | |
194 | |
195 Optional arguments START and END default to point-min and point-max, | |
196 respectively." | |
197 (or start (setq start (point-min))) | |
198 (or end (setq end (point-max))) | |
199 (if (= start end) | |
200 0 | |
201 (save-excursion | |
202 (save-restriction | |
203 (widen) | |
204 (narrow-to-region start end) | |
205 (goto-char start) | |
206 (vertical-motion (buffer-size)))))) | |
207 | |
208 | |
209 ;; Resize the minibuffer window to contain the minibuffer's contents. | |
210 (defun resize-minibuffer-window () | |
211 (and (eq (selected-window) (minibuffer-window)) | |
212 (let ((height (window-height)) | |
213 (lines (1+ (resize-minibuffer-count-window-lines)))) | |
214 (and (numberp resize-minibuffer-window-max-height) | |
215 (> resize-minibuffer-window-max-height 0) | |
216 (setq lines (min lines resize-minibuffer-window-max-height))) | |
217 (or (if resize-minibuffer-window-exactly | |
218 (= lines height) | |
219 (<= lines height)) | |
220 (enlarge-window (- lines height)))))) | |
221 | |
222 ;; This resizes the minibuffer back to one line as soon as it is exited | |
223 ;; (e.g. when the user hits RET). This way, subsequent messages put in the | |
224 ;; echo area aren't cluttered with leftover minibuffer text. | |
225 ;; It should be called by minibuffer-exit-hook. | |
226 ;; | |
227 ;; Note that because it calls sit-for to force a screen update, strange | |
228 ;; things may happen in the minibuffer, such as unexpanded partial | |
229 ;; completions by complete.el showing their completion. | |
230 ;; If this bothers you, just redefine this function to do nothing, in, say, | |
231 ;; your after-load-alist. Perhaps there should be an option variable, | |
232 ;; but I don't know if there's really any demand for it. | |
233 ;; (Clobbering this definition is harmless because eventually emacs restores | |
234 ;; its idea of the minibuffer window size when the minibuffer isn't in use | |
235 ;; anyway; this is just a kludge because of the timing for that update). | |
236 (defun resize-minibuffer-window-restore () | |
237 (cond | |
238 ((not (eq (minibuffer-window) (selected-window)))) | |
239 ((> (window-height) 1) | |
240 (enlarge-window (- 1 (window-height))) | |
241 (sit-for 0)))) | |
242 | |
243 | |
244 ;; Resize the minibuffer frame to contain the minibuffer's contents. | |
245 ;; The minibuffer frame must be the current frame. | |
246 (defun resize-minibuffer-frame () | |
247 (let ((height (frame-height)) | |
248 (lines (1+ (resize-minibuffer-count-window-lines)))) | |
249 (and (numberp resize-minibuffer-frame-max-height) | |
250 (> resize-minibuffer-frame-max-height 0) | |
251 (setq lines (min lines resize-minibuffer-frame-max-height))) | |
252 (cond | |
253 ((> lines height) | |
254 (set-frame-size (window-frame (minibuffer-window)) (frame-width) lines)) | |
255 ((and resize-minibuffer-frame-exactly | |
256 (> height resize-minibuffer-frame-original-height) | |
257 (< lines height)) | |
258 (set-frame-size (window-frame (minibuffer-window)) | |
259 (frame-width) lines))))) | |
260 | |
261 ;; Restore the original height of the frame. | |
262 ;; resize-minibuffer-frame-original-height is set in | |
263 ;; resize-minibuffer-setup. | |
264 (defun resize-minibuffer-frame-restore () | |
265 (set-frame-size (window-frame (minibuffer-window)) | |
266 (frame-width) | |
267 resize-minibuffer-frame-original-height)) | |
268 | |
269 (if resize-minibuffer-mode | |
270 (resize-minibuffer-mode 1)) | |
271 | 81 |
272 (provide 'rsz-mini) | 82 (provide 'rsz-mini) |
273 | 83 |
274 ;; rsz-mini.el ends here | 84 ;; rsz-mini.el ends here |