Mercurial > emacs
annotate lisp/rsz-mini.el @ 21979:ce6e1fa2fefc
(list-input-methods): Doc fix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 07 May 1998 19:15:43 +0000 |
parents | 808ecc2eaa84 |
children | 2319cdbf38e5 |
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 |
21670
808ecc2eaa84
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21269
diff
changeset
|
10 ;; $Id: rsz-mini.el,v 1.19 1998/03/23 13:18:54 schwab Exp done $ |
18418
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 |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
64 (defcustom resize-minibuffer-mode nil |
20581
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
65 "*If non-`nil', resize the minibuffer so its entire contents are visible. |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
66 You must modify via \\[customize] for this variable to have an effect." |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
67 :set (lambda (symbol value) |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
68 (resize-minibuffer-mode (if value 1 -1))) |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
69 :initialize 'custom-initialize-default |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
70 :type 'boolean |
20581
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
71 :group 'resize-minibuffer |
21670
808ecc2eaa84
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21269
diff
changeset
|
72 :require 'rsz-mini |
808ecc2eaa84
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21269
diff
changeset
|
73 :version "20.3") |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
74 |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
75 ;;;###autoload |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
76 (defcustom resize-minibuffer-window-max-height nil |
7267 | 77 "*Maximum size the minibuffer window is allowed to become. |
78 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
|
79 which the active minibuffer window resides." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
80 :type '(choice (const nil) integer) |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
81 :group 'resize-minibuffer) |
7267 | 82 |
83 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
84 (defcustom resize-minibuffer-window-exactly t |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
85 "*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
|
86 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
|
87 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
|
88 resizing." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
89 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
90 :group 'resize-minibuffer) |
7267 | 91 |
92 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
93 (defcustom resize-minibuffer-frame nil |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
94 "*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
|
95 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
|
96 allow changing the frame height." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
97 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
98 :group 'resize-minibuffer) |
7267 | 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-max-height nil |
7267 | 102 "*Maximum size the minibuffer frame is allowed to become. |
103 If less than 1 or not a number, there is no limit.") | |
104 | |
105 ;;;###autoload | |
17423
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
106 (defcustom resize-minibuffer-frame-exactly t |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
107 "*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
|
108 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
|
109 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
|
110 resizing." |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
111 :type 'boolean |
43e483167dd3
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16741
diff
changeset
|
112 :group 'resize-minibuffer) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
113 |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
114 ;; 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
|
115 ;; 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
|
116 ;; modified. Do not use it yourself. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
117 (defvar resize-minibuffer-frame-original-height nil) |
7267 | 118 |
119 | |
120 ;;;###autoload | |
121 (defun resize-minibuffer-mode (&optional prefix) | |
21269
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
122 "Toggle resize-minibuffer mode. |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
123 With argument, enable resize-minibuffer mode if and only if argument |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
124 is positive. |
7267 | 125 |
126 When this minor mode is enabled, the minibuffer is dynamically resized to | |
127 contain the entire region of text put in it as you type. | |
128 | |
129 The variable `resize-minibuffer-mode' is set to t or nil depending on | |
130 whether this mode is active or not. | |
131 | |
132 The maximum height to which the minibuffer can grow is controlled by the | |
133 variable `resize-minibuffer-window-max-height'. | |
134 | |
135 The variable `resize-minibuffer-window-exactly' determines whether the | |
136 minibuffer window should ever be shrunk to make it no larger than needed to | |
137 display its contents. | |
138 | |
7512 | 139 When using a window system, it is possible for a minibuffer to be the sole |
7267 | 140 window in a frame. Since that window is already its maximum size, the only |
141 way to make more text visible at once is to increase the size of the frame. | |
142 The variable `resize-minibuffer-frame' controls whether this should be | |
143 done. The variables `resize-minibuffer-frame-max-height' and | |
144 `resize-minibuffer-frame-exactly' are analogous to their window | |
145 counterparts." | |
21269
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
146 (interactive "P") |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
147 (setq resize-minibuffer-mode |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
148 (if prefix |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
149 (> (prefix-numeric-value prefix) 0) |
b25d5f1dd2de
(resize-minibuffer-mode): Make it a proper minor
Andreas Schwab <schwab@suse.de>
parents:
20581
diff
changeset
|
150 (not resize-minibuffer-mode))) |
18418
da941474d947
Update copyright year.
Noah Friedman <friedman@splode.com>
parents:
17423
diff
changeset
|
151 (add-hook 'minibuffer-setup-hook 'resize-minibuffer-setup)) |
7267 | 152 |
153 (defun resize-minibuffer-setup () | |
154 (cond | |
155 (resize-minibuffer-mode | |
156 (cond | |
157 ((and window-system | |
158 (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
|
159 ;; 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
|
160 ;; 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
|
161 ;; frame; it just shouldn't do anything if this flag is nil. |
7267 | 162 (and resize-minibuffer-frame |
163 (progn | |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
164 ;; 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
|
165 ;; 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
|
166 ;; that variable isn't updated. |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
167 (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
|
168 (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
|
169 |
12762
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
170 (make-local-hook 'post-command-hook) |
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
171 (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
|
172 |
12762
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
173 (make-local-hook 'minibuffer-exit-hook) |
b616982e679b
(resize-minibuffer-setup): Use make-local-hook.
Richard M. Stallman <rms@gnu.org>
parents:
11297
diff
changeset
|
174 (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
|
175 nil t) |
8240
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
176 |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
177 (resize-minibuffer-frame)))) |
7267 | 178 (t |
179 (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
|
180 ;; 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
|
181 (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
|
182 (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
|
183 |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
184 (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
|
185 (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
|
186 |
363f719d47a5
(resize-minibuffer-setup): Copy post-command-hook when handling minibuffer
Noah Friedman <friedman@splode.com>
parents:
8226
diff
changeset
|
187 (resize-minibuffer-window)))))) |
7267 | 188 |
189 (defun resize-minibuffer-count-window-lines (&optional start end) | |
190 "Return number of window lines occupied by text in region. | |
191 The number of window lines may be greater than the number of actual lines | |
192 in the buffer if any wrap on the display due to their length. | |
193 | |
194 Optional arguments START and END default to point-min and point-max, | |
195 respectively." | |
196 (or start (setq start (point-min))) | |
197 (or end (setq end (point-max))) | |
198 (if (= start end) | |
199 0 | |
200 (save-excursion | |
201 (save-restriction | |
202 (widen) | |
203 (narrow-to-region start end) | |
204 (goto-char start) | |
205 (vertical-motion (buffer-size)))))) | |
206 | |
207 | |
208 ;; Resize the minibuffer window to contain the minibuffer's contents. | |
209 (defun resize-minibuffer-window () | |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
210 (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
|
211 (let ((height (window-height)) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
212 (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
|
213 (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
|
214 (> 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
|
215 (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
|
216 (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
|
217 (= lines height) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
218 (<= lines height)) |
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
219 (enlarge-window (- lines height)))))) |
7267 | 220 |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
221 ;; 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
|
222 ;; (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
|
223 ;; 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
|
224 ;; 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
|
225 ;; |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
226 ;; 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
|
227 ;; 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
|
228 ;; completions by complete.el showing their completion. |
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
229 ;; 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
|
230 ;; 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
|
231 ;; 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
|
232 ;; (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
|
233 ;; 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
|
234 ;; 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
|
235 (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
|
236 (cond |
11297
056c7266a614
(resize-minibuffer-window): Make sure minibuffer window is selected.
Noah Friedman <friedman@splode.com>
parents:
8240
diff
changeset
|
237 ((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
|
238 ((> (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
|
239 (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
|
240 (sit-for 0)))) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
241 |
7267 | 242 |
243 ;; Resize the minibuffer frame to contain the minibuffer's contents. | |
244 ;; The minibuffer frame must be the current frame. | |
245 (defun resize-minibuffer-frame () | |
246 (let ((height (frame-height)) | |
247 (lines (1+ (resize-minibuffer-count-window-lines)))) | |
248 (and (numberp resize-minibuffer-frame-max-height) | |
249 (> resize-minibuffer-frame-max-height 0) | |
250 (setq lines (min lines resize-minibuffer-frame-max-height))) | |
251 (cond | |
252 ((> lines height) | |
16597
ebdcc5509856
(resize-minibuffer-frame): Don't assume minibuffer frame is selected.
Karl Heuer <kwzh@gnu.org>
parents:
16577
diff
changeset
|
253 (set-frame-size (window-frame (minibuffer-window)) (frame-width) lines)) |
7267 | 254 ((and resize-minibuffer-frame-exactly |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
255 (> height resize-minibuffer-frame-original-height) |
7267 | 256 (< lines height)) |
16597
ebdcc5509856
(resize-minibuffer-frame): Don't assume minibuffer frame is selected.
Karl Heuer <kwzh@gnu.org>
parents:
16577
diff
changeset
|
257 (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
|
258 (frame-width) lines))))) |
7267 | 259 |
260 ;; 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
|
261 ;; 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
|
262 ;; resize-minibuffer-setup. |
7267 | 263 (defun resize-minibuffer-frame-restore () |
16577
15cf729665be
(resize-minibuffer-frame-restore): Don't assume
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
264 (set-frame-size (window-frame (minibuffer-window)) |
7267 | 265 (frame-width) |
8012
df03bfa5b694
(resize-minibuffer-window-exactly, resize-minibuffer-frame,
Noah Friedman <friedman@splode.com>
parents:
7590
diff
changeset
|
266 resize-minibuffer-frame-original-height)) |
7267 | 267 |
20581
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
268 (if resize-minibuffer-mode |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
269 (resize-minibuffer-mode 1)) |
9b78b337e8bf
(resize-minibuffer-mode): Variable customized to
Richard M. Stallman <rms@gnu.org>
parents:
18418
diff
changeset
|
270 |
7267 | 271 (provide 'rsz-mini) |
272 | |
273 ;; rsz-mini.el ends here |