502
|
1 ;;; behavior-defs.el --- definitions of specific behaviors
|
|
2
|
|
3 ;; Copyright (C) 2000, 2001 Ben Wing.
|
|
4
|
|
5 ;; Author: Ben Wing
|
|
6 ;; Maintainer: XEmacs Development Team
|
|
7 ;; Keywords: internal, dumped
|
|
8
|
|
9 ;; This file is part of XEmacs.
|
|
10
|
|
11 ;; XEmacs is free software; you can redistribute it and/or modify it
|
|
12 ;; under the terms of the GNU General Public License as published by
|
|
13 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
14 ;; any later version.
|
|
15
|
|
16 ;; XEmacs is distributed in the hope that it will be useful, but
|
|
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19 ;; General Public License for more details.
|
|
20
|
|
21 ;; You should have received a copy of the GNU General Public License
|
|
22 ;; along with XEmacs; see the file COPYING. If not, write to the
|
|
23 ;; Free Software Foundation, 59 Temple Place - Suite 330,
|
|
24 ;; Boston, MA 02111-1307, USA.
|
|
25
|
|
26 ;;; Synched up with: Not in FSF.
|
|
27
|
|
28 ;;; Authorship:
|
|
29
|
|
30 ;; Created July 2000 by Ben Wing.
|
|
31
|
|
32 ;;; Commentary:
|
|
33
|
|
34 ;; This file will be dumped with XEmacs.
|
|
35
|
|
36 ;;; Code:
|
|
37
|
|
38 (require 'behavior)
|
|
39
|
|
40 (define-behavior 'mouse-avoidance
|
|
41 "Mouse avoidance mode"
|
|
42 :title "Mouse Avoidance"
|
|
43 :enable #'(lambda ()
|
|
44 (mouse-avoidance-mode 'animate))
|
|
45 :disable #'(lambda ()
|
|
46 (mouse-avoidance-mode 'none)))
|
|
47
|
|
48 (define-behavior 'resize-minibuffer
|
|
49 "When this behavior is enabled, the minibuffer is dynamically resized to
|
|
50 contain the entire region of text put in it as you type.
|
|
51
|
|
52 The maximum height to which the minibuffer can grow is controlled by the
|
|
53 variable `resize-minibuffer-window-max-height'.
|
|
54
|
|
55 The variable `resize-minibuffer-window-exactly' determines whether the
|
|
56 minibuffer window should ever be shrunk to make it no larger than needed to
|
|
57 display its contents.
|
|
58
|
|
59 When using a window system, it is possible for a minibuffer to be the sole
|
|
60 window in a frame. Since that window is already its maximum size, the only
|
|
61 way to make more text visible at once is to increase the size of the frame.
|
|
62 The variable `resize-minibuffer-frame' controls whether this should be
|
|
63 done. The variables `resize-minibuffer-frame-max-height' and
|
|
64 `resize-minibuffer-frame-exactly' are analogous to their window
|
|
65 counterparts."
|
|
66 :title "Resize Minibuffer Automatically"
|
|
67 :enable #'(lambda ()
|
|
68 (resize-minibuffer-mode 1))
|
|
69 :disable #'(lambda ()
|
|
70 (resize-minibuffer-mode -1)))
|
|
71
|
|
72 (define-behavior 'func-menu
|
|
73 "Suppose you have a file with a lot of functions in it. Well, this
|
|
74 package makes it easy to jump to any of those functions. The names of
|
|
75 the functions in the current buffer are automatically put into menubar
|
|
76 menu, you select one of the function-names and the point is moved to
|
|
77 that very function. The mark is pushed on the mark-ring, so you can
|
|
78 easily go back to where you were. Alternatively, you can use enter the
|
|
79 name of the desired function via the minibuffer which offers
|
|
80 completing read input. In addition, the name of the function before
|
|
81 point is optionally displayed in the modeline."
|
|
82 :title "Function Menu"
|
|
83 :require 'func-menu
|
|
84 :enable #'(lambda ()
|
|
85 (add-hook 'find-file-hooks 'fume-add-menubar-entry)
|
|
86 (mapc #'(lambda (buffer)
|
|
87 (with-current-buffer buffer
|
|
88 (setq fume-display-in-modeline-p t)
|
|
89 (fume-add-menubar-entry)))
|
|
90 (buffer-list)))
|
|
91 :disable #'(lambda ()
|
|
92 (remove-hook 'find-file-hooks 'fume-add-menubar-entry)
|
|
93 (fset 'widen (symbol-function 'fume-widen))
|
|
94 (fset 'narrow-to-region (symbol-function 'narrow-to-region))
|
|
95 (mapc #'(lambda (buffer)
|
|
96 (with-current-buffer buffer
|
|
97 (fume-remove-menubar-entry)
|
|
98 (setq fume-display-in-modeline-p nil)
|
|
99 (fume-remove-post-command-hook
|
|
100 'fume-tickle-modeline)
|
|
101 (fume-remove-post-command-hook
|
|
102 'fume-maybe-install-modeline-feature)
|
|
103 (fume-remove-post-command-hook
|
|
104 'fume-rescan-buffer-trigger)))
|
|
105 (buffer-list))))
|
|
106
|
|
107 (define-behavior 'mwheel
|
|
108 "This code enables the use of the infamous 'wheel' on the new
|
|
109 crop of mice. Under XFree86 and the XSuSE X Servers, the wheel
|
|
110 events are sent as button4/button5 events, which are automatically
|
|
111 set up to do scrolling in the expected way. The actual way that the
|
|
112 scrolling works can be controlled by `mwheel-scroll-amount' and
|
|
113 `mwheel-follow-mouse'."
|
|
114 :title "Mouse Wheel Support"
|
|
115 :enable 'mwheel-install)
|
|
116
|
|
117 (define-behavior 'recent-files
|
|
118 "Recent-files adds the menu \"Recent Files\" (or whatever name you
|
|
119 choose, see \"Customization:\" below) to Emacs's menubar. Its
|
|
120 entries are the files (and directories) that have recently been
|
|
121 opened by Emacs. You can open one of these files again by
|
|
122 selecting its entry in the \"Recent Files\" menu. The list of file
|
|
123 entries in this menu is preserved from one Emacs session to
|
|
124 another. You can prevent Emacs from saving this list by selecting
|
|
125 \"Don't save recent-files list on exit\" from the menu. If you have
|
|
126 disabled saving, you can re-enable it by selecting \"Save
|
|
127 recent-files list on exit\".
|
|
128
|
|
129 The menu has permanent and non-permanent entries. Permanent
|
|
130 entries are marked with an asterisk in front of the filename. The
|
|
131 non-permanent entries are hidden in a submenu.
|
|
132
|
|
133 Each time you open a file in Emacs, it is added as a non-permanent
|
|
134 entry to the menu. The value of `recent-files-number-of-entries'
|
|
135 determines how many non-permanent entries are held in the
|
|
136 menu. When the number of non-permanent entries reaches this value,
|
|
137 the least recently added non-permanent entry is removed from the
|
|
138 menu when another non-permanent entry is added. It is not removed
|
|
139 from the list, though; it may reappear when entries are deleted
|
|
140 from the list. The number of entries saved to disk is the value of
|
|
141 the variable `recent-files-number-of-saved-entries'.
|
|
142
|
|
143 Permanent entries are not removed from the menu. You can make a
|
|
144 file entry permanent by selecting \"Make <buffer> permanent\" (where
|
|
145 <buffer> is the name of the current buffer) when the current
|
|
146 buffer holds this file. \"Make <buffer> non-permanent\" makes the
|
|
147 file entry of the current buffer non-permanent.
|
|
148
|
|
149 The command \"Kill buffer <buffer> and delete entry\" is handy when
|
|
150 you have accidently opened a file but want to keep neither the
|
|
151 buffer nor the entry.
|
|
152
|
|
153 You can erase the list of non-permanent entries by selecting
|
|
154 \"Erase non-permanent entries\" from the menu.
|
|
155
|
|
156 Customization:
|
|
157
|
|
158 There are lots of variables to control the behaviour of
|
|
159 recent-files. You do not have to change any of them if you like it
|
|
160 as it comes out of the box. However, you may want to look at these
|
|
161 options to make it behave different.
|
|
162
|
|
163 `recent-files-number-of-entries'
|
|
164 Controls how many non-permanent entries are shown in the
|
|
165 recent-files list. The default is 15.
|
|
166
|
|
167 `recent-files-number-of-saved-entries'
|
|
168 Controls how many non-permanent entries are saved to disk when
|
|
169 Emacs exits or recent-files-save-the-list is called. The
|
|
170 default is 50.
|
|
171
|
|
172 `recent-files-save-file'
|
|
173 The name of the file where the recent-files list is saved
|
|
174 between Emacs session. You probably don't need to change this.
|
|
175 The default is \".recent-files.el\" in your home directory.
|
|
176
|
|
177 `recent-files-dont-include'
|
|
178 A list of regular expressions for files that should not be
|
|
179 included into the recent-files list. This list is empty by
|
|
180 default. For instance, a list to exclude all .newsrc
|
|
181 files, all auto-save-files, and all files in the /tmp
|
|
182 directory (but not the /tmp directory itself) would look
|
|
183 like this:
|
|
184 (setq recent-files-dont-include
|
|
185 '(\"/\\.newsrc\" \"~$\" \"^/tmp/.\"))
|
|
186 The default is empty.
|
|
187
|
|
188 `recent-files-use-full-names'
|
|
189 If the value of this variable is non-nil, the full pathnames of
|
|
190 the files are shown in the recent-files menu. Otherwise only
|
|
191 the filename part (or the last name component if it is a
|
|
192 directory) is shown in the menu. The default it t, i.e. show
|
|
193 full names.
|
|
194
|
|
195 `recent-files-filename-replacements'
|
|
196 This is a list of pairs of regular expressions and replacement
|
|
197 strings. If a filename matches one of the regular expressions,
|
|
198 the matching part is replaced by the replacement string for
|
|
199 display in the recent-files menu.
|
|
200 Example: My home directory is \"/users/mmc/nickel/\". I want to
|
|
201 replace it with \"~/\". I also want to replace the directory
|
|
202 \"/imports/teleservices/mmc/avc2/\", where I work a lot, with
|
|
203 \".../avc2/\". The list then looks like
|
|
204 (setq recent-files-filename-replacements
|
|
205 '((\"/users/mmc/nickel/\" . \"~/\")
|
|
206 (\"/imports/teleservices/mmc/avc2/\" . \".../avc2/\")))
|
|
207 Only the first match is replaced. So, if you have several
|
|
208 entries in this list that may match a filename simultaneously,
|
|
209 put the one you want to match (usually the most special) in
|
|
210 front of the others. The default is to replace the home
|
|
211 directory with \"~\".
|
|
212
|
|
213 `recent-files-sort-function'
|
|
214 Contains a function symbol to sort the display of filenames in
|
|
215 the recent-files menu. Supplied are two functions,
|
|
216 'recent-files-dont-sort and 'recent-files-sort-alphabetically.
|
|
217 The first, which is the default, preserves the order of \"most
|
|
218 recent on top\".
|
|
219
|
|
220 `recent-files-permanent-submenu'
|
|
221 If this variable is non-nil, the permanent entries are put into
|
|
222 a separate submenu of the recent-files menu. The default is
|
|
223 nil.
|
|
224
|
|
225 `recent-files-non-permanent-submenu'
|
|
226 If this variable is non-nil, the non-permanent entries are put
|
|
227 into a separate submenu of the recent-files menu. The default
|
|
228 is nil. (You can set both `recent-files-permanent-submenu' and
|
|
229 `recent-files-non-permanent-submenu' to t to have both lists in
|
|
230 separate submenus.)
|
|
231
|
|
232 `recent-files-commands-submenu'
|
|
233 If this variable is non-nil, the commands if recent-files are
|
|
234 placed in a submenu of the recent-files menu. The default is
|
|
235 nil.
|
|
236
|
|
237 `recent-files-commands-submenu-title'
|
|
238 If the commands are placed in a submenu, this string is used as
|
|
239 the title of the submenu. The default is \"Commands...\".
|
|
240
|
|
241 `recent-files-actions-on-top'
|
|
242 If this variable is non-nil, the \"action\" menu entries (\"Make
|
|
243 <buffer> permanent\" etc.) are put on top of the menu. Otherwise
|
|
244 they appear below the file entries or submenus. The default is
|
|
245 nil.
|
|
246
|
|
247 `recent-files-permanent-first'
|
|
248 If this variable is t, the permanent entries are put first in
|
|
249 the recent-files menu, i.e. above the non-permanent entries. If
|
|
250 the value is nil, non-permanent entries appear first. If the
|
|
251 value is neither t nor nil, the entries are sorted according to
|
|
252 recent-files-sort-function. The default is 'sort.
|
|
253
|
|
254 `recent-files-find-file-command'
|
|
255 This variable contains to commandto execute when a file entry
|
|
256 is selected from the menu. Usually this will be `find-file',
|
|
257 which is the default.
|
|
258
|
|
259 KNOWN BUG:
|
|
260 - recent-files overwrites the recent-files-save-file
|
|
261 unconditionally when Emacs exits. If you have two Emacs
|
|
262 processes running, the one exiting later will overwrite the
|
|
263 file without merging in the new entries from the other Emacs
|
|
264 process. This can be avoided by disabling the save on exit from
|
|
265 the menu."
|
|
266 :title "Recent Files Menu"
|
|
267 :enable 'recent-files-initialize)
|
|
268
|
|
269 (define-behavior 'filladapt
|
|
270 "These functions enhance the default behavior of Emacs' Auto Fill
|
|
271 mode and the commands `fill-paragraph', `lisp-fill-paragraph',
|
|
272 `fill-region-as-paragraph' and `fill-region'.
|
|
273
|
|
274 The chief improvement is that the beginning of a line to be
|
|
275 filled is examined and, based on information gathered, an
|
|
276 appropriate value for fill-prefix is constructed. Also the
|
|
277 boundaries of the current paragraph are located. This occurs
|
|
278 only if the fill prefix is not already non-nil.
|
|
279
|
|
280 The net result of this is that blurbs of text that are offset
|
|
281 from left margin by asterisks, dashes, and/or spaces, numbered
|
|
282 examples, included text from USENET news articles, etc. are
|
|
283 generally filled correctly with no fuss."
|
|
284 :title "Adaptive Filling"
|
|
285 :require 'filladapt
|
|
286 :enable #'(lambda ()
|
|
287 (setq-default filladapt-mode t)
|
|
288 (mapc #'(lambda (buffer)
|
|
289 (with-current-buffer buffer
|
|
290 (unless filladapt-mode
|
|
291 (filladapt-mode 1))))
|
|
292 (buffer-list)))
|
|
293 :disable #'(lambda ()
|
|
294 (setq-default filladapt-mode nil)
|
|
295 (mapc #'(lambda (buffer)
|
|
296 (with-current-buffer buffer
|
|
297 (when filladapt-mode
|
|
298 (filladapt-mode -1))))
|
|
299 (buffer-list))))
|