]> code.delx.au - gnu-emacs/blob - doc/lispref/abbrevs.texi
Add 2009 to copyright years.
[gnu-emacs] / doc / lispref / abbrevs.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1999, 2001, 2002, 2003,
4 @c 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @setfilename ../../info/abbrevs
7 @node Abbrevs, Processes, Syntax Tables, Top
8 @chapter Abbrevs and Abbrev Expansion
9 @cindex abbrev
10 @c @cindex abbrev table Redundant with "abbrev".
11
12 An abbreviation or @dfn{abbrev} is a string of characters that may be
13 expanded to a longer string. The user can insert the abbrev string and
14 find it replaced automatically with the expansion of the abbrev. This
15 saves typing.
16
17 The set of abbrevs currently in effect is recorded in an @dfn{abbrev
18 table}. Each buffer has a local abbrev table, but normally all buffers
19 in the same major mode share one abbrev table. There is also a global
20 abbrev table. Normally both are used.
21
22 An abbrev table is represented as an obarray containing a symbol for
23 each abbreviation. The symbol's name is the abbreviation; its value
24 is the expansion; its function definition is the hook function to do
25 the expansion (@pxref{Defining Abbrevs}); its property list cell
26 typically contains various additional properties such as the use
27 count, the number of times the abbreviation has been expanded, or
28 whether the abbrev is a so-called ``system'' abbrev defined by a major
29 mode rather than by the user (@pxref{Abbrev Properties}).
30
31 Because the symbols used for abbrevs are not interned in the usual
32 obarray, they will never appear as the result of reading a Lisp
33 expression; in fact, normally they are never used except by the code
34 that handles abbrevs. Therefore, it is safe to use them in an
35 extremely nonstandard way. @xref{Creating Symbols}.
36
37 For the user-level commands for abbrevs, see @ref{Abbrevs,, Abbrev
38 Mode, emacs, The GNU Emacs Manual}.
39
40 @menu
41 * Abbrev Mode:: Setting up Emacs for abbreviation.
42 * Tables: Abbrev Tables. Creating and working with abbrev tables.
43 * Defining Abbrevs:: Specifying abbreviations and their expansions.
44 * Files: Abbrev Files. Saving abbrevs in files.
45 * Expansion: Abbrev Expansion. Controlling expansion; expansion subroutines.
46 * Standard Abbrev Tables:: Abbrev tables used by various major modes.
47 * Abbrev Properties:: How to read and set abbrev properties.
48 Which properties have which effect.
49 * Abbrev Table Properties:: How to read and set abbrev table properties.
50 Which properties have which effect.
51 @end menu
52
53 @node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
54 @comment node-name, next, previous, up
55 @section Setting Up Abbrev Mode
56
57 Abbrev mode is a minor mode controlled by the value of the variable
58 @code{abbrev-mode}.
59
60 @defvar abbrev-mode
61 A non-@code{nil} value of this variable turns on the automatic expansion
62 of abbrevs when their abbreviations are inserted into a buffer.
63 If the value is @code{nil}, abbrevs may be defined, but they are not
64 expanded automatically.
65
66 This variable automatically becomes buffer-local when set in any fashion.
67 @end defvar
68
69 @defvar default-abbrev-mode
70 This is the value of @code{abbrev-mode} for buffers that do not override it.
71 This is the same as @code{(default-value 'abbrev-mode)}.
72 @end defvar
73
74 @node Abbrev Tables, Defining Abbrevs, Abbrev Mode, Abbrevs
75 @section Abbrev Tables
76
77 This section describes how to create and manipulate abbrev tables.
78
79 @defun make-abbrev-table &rest props
80 This function creates and returns a new, empty abbrev table---an obarray
81 containing no symbols. It is a vector filled with zeros. @var{props}
82 is a property list that is applied to the new table
83 (@pxref{Abbrev Table Properties}).
84 @end defun
85
86 @defun abbrev-table-p table
87 Return non-@code{nil} is @var{table} is an abbrev table.
88 @end defun
89
90 @defun clear-abbrev-table table
91 This function undefines all the abbrevs in abbrev table @var{table},
92 leaving it empty. It always returns @code{nil}.
93 @end defun
94
95 @defun copy-abbrev-table table
96 This function returns a copy of abbrev table @var{table}---a new
97 abbrev table that contains the same abbrev definitions. The only
98 difference between @var{table} and the returned copy is that this
99 function sets the property lists of all copied abbrevs to 0.
100 @end defun
101
102 @defun define-abbrev-table tabname definitions &optional docstring &rest props
103 This function defines @var{tabname} (a symbol) as an abbrev table
104 name, i.e., as a variable whose value is an abbrev table. It defines
105 abbrevs in the table according to @var{definitions}, a list of
106 elements of the form @code{(@var{abbrevname} @var{expansion}
107 [@var{hook}] [@var{props}...])}. These elements are passed as
108 arguments to @code{define-abbrev}. The return value is always
109 @code{nil}.
110
111 The optional string @var{docstring} is the documentation string of the
112 variable @var{tabname}. The property list @var{props} is applied to
113 the abbrev table (@pxref{Abbrev Table Properties}).
114
115 If this function is called more than once for the same @var{tabname},
116 subsequent calls add the definitions in @var{definitions} to
117 @var{tabname}, rather than overriding the entire original contents.
118 (A subsequent call only overrides abbrevs explicitly redefined or
119 undefined in @var{definitions}.)
120 @end defun
121
122 @defvar abbrev-table-name-list
123 This is a list of symbols whose values are abbrev tables.
124 @code{define-abbrev-table} adds the new abbrev table name to this list.
125 @end defvar
126
127 @defun insert-abbrev-table-description name &optional human
128 This function inserts before point a description of the abbrev table
129 named @var{name}. The argument @var{name} is a symbol whose value is an
130 abbrev table. The return value is always @code{nil}.
131
132 If @var{human} is non-@code{nil}, the description is human-oriented.
133 System abbrevs are listed and identified as such. Otherwise the
134 description is a Lisp expression---a call to @code{define-abbrev-table}
135 that would define @var{name} as it is currently defined, but without
136 the system abbrevs. (The mode or package using @var{name} is supposed
137 to add these to @var{name} separately.)
138 @end defun
139
140 @node Defining Abbrevs, Abbrev Files, Abbrev Tables, Abbrevs
141 @comment node-name, next, previous, up
142 @section Defining Abbrevs
143 @code{define-abbrev} is the low-level basic function for defining an
144 abbrev in a specified abbrev table. When major modes predefine standard
145 abbrevs, they should call @code{define-abbrev} and specify a @code{t} for
146 the @code{:system} property.
147 Be aware that any saved non-``system'' abbrevs are
148 restored at startup, i.e. before some major modes are loaded. Major modes
149 should therefore not assume that when they are first loaded their abbrev
150 tables are empty.
151
152 @defun define-abbrev table name expansion &optional hook &rest props
153 This function defines an abbrev named @var{name}, in @var{table}, to
154 expand to @var{expansion} and call @var{hook}, with properties
155 @var{props} (@pxref{Abbrev Properties}). The return value is @var{name}.
156 The @code{:system} property in @var{props} is treated specially here:
157 if it has the value @code{force}, then it will overwrite an existing
158 definition even for a non-``system'' abbrev of the same name.
159
160 The argument @var{name} should be a string. The argument
161 @var{expansion} is normally the desired expansion (a string), or
162 @code{nil} to undefine the abbrev. If it is anything but a string or
163 @code{nil}, then the abbreviation ``expands'' solely by running
164 @var{hook}.
165
166 The argument @var{hook} is a function or @code{nil}. If @var{hook} is
167 non-@code{nil}, then it is called with no arguments after the abbrev is
168 replaced with @var{expansion}; point is located at the end of
169 @var{expansion} when @var{hook} is called.
170
171 @cindex @code{no-self-insert} property
172 If @var{hook} is a non-@code{nil} symbol whose @code{no-self-insert}
173 property is non-@code{nil}, @var{hook} can explicitly control whether
174 to insert the self-inserting input character that triggered the
175 expansion. If @var{hook} returns non-@code{nil} in this case, that
176 inhibits insertion of the character. By contrast, if @var{hook}
177 returns @code{nil}, @code{expand-abbrev} also returns @code{nil}, as
178 if expansion had not really occurred.
179
180 Normally the function @code{define-abbrev} sets the variable
181 @code{abbrevs-changed} to @code{t}, if it actually changes the abbrev.
182 (This is so that some commands will offer to save the abbrevs.) It
183 does not do this for a ``system'' abbrev, since those won't be saved
184 anyway.
185 @end defun
186
187 @defopt only-global-abbrevs
188 If this variable is non-@code{nil}, it means that the user plans to use
189 global abbrevs only. This tells the commands that define mode-specific
190 abbrevs to define global ones instead. This variable does not alter the
191 behavior of the functions in this section; it is examined by their
192 callers.
193 @end defopt
194
195 @node Abbrev Files, Abbrev Expansion, Defining Abbrevs, Abbrevs
196 @section Saving Abbrevs in Files
197
198 A file of saved abbrev definitions is actually a file of Lisp code.
199 The abbrevs are saved in the form of a Lisp program to define the same
200 abbrev tables with the same contents. Therefore, you can load the file
201 with @code{load} (@pxref{How Programs Do Loading}). However, the
202 function @code{quietly-read-abbrev-file} is provided as a more
203 convenient interface.
204
205 User-level facilities such as @code{save-some-buffers} can save
206 abbrevs in a file automatically, under the control of variables
207 described here.
208
209 @defopt abbrev-file-name
210 This is the default file name for reading and saving abbrevs.
211 @end defopt
212
213 @defun quietly-read-abbrev-file &optional filename
214 This function reads abbrev definitions from a file named @var{filename},
215 previously written with @code{write-abbrev-file}. If @var{filename} is
216 omitted or @code{nil}, the file specified in @code{abbrev-file-name} is
217 used. @code{save-abbrevs} is set to @code{t} so that changes will be
218 saved.
219
220 This function does not display any messages. It returns @code{nil}.
221 @end defun
222
223 @defopt save-abbrevs
224 A non-@code{nil} value for @code{save-abbrevs} means that Emacs should
225 offer the user to save abbrevs when files are saved. If the value is
226 @code{silently}, Emacs saves the abbrevs without asking the user.
227 @code{abbrev-file-name} specifies the file to save the abbrevs in.
228 @end defopt
229
230 @defvar abbrevs-changed
231 This variable is set non-@code{nil} by defining or altering any
232 abbrevs (except ``system'' abbrevs). This serves as a flag for
233 various Emacs commands to offer to save your abbrevs.
234 @end defvar
235
236 @deffn Command write-abbrev-file &optional filename
237 Save all abbrev definitions (except ``system'' abbrevs), for all abbrev
238 tables listed in @code{abbrev-table-name-list}, in the file
239 @var{filename}, in the form of a Lisp program that when loaded will
240 define the same abbrevs. If @var{filename} is @code{nil} or omitted,
241 @code{abbrev-file-name} is used. This function returns @code{nil}.
242 @end deffn
243
244 @node Abbrev Expansion, Standard Abbrev Tables, Abbrev Files, Abbrevs
245 @comment node-name, next, previous, up
246 @section Looking Up and Expanding Abbreviations
247
248 Abbrevs are usually expanded by certain interactive commands,
249 including @code{self-insert-command}. This section describes the
250 subroutines used in writing such commands, as well as the variables they
251 use for communication.
252
253 @defun abbrev-symbol abbrev &optional table
254 This function returns the symbol representing the abbrev named
255 @var{abbrev}. The value returned is @code{nil} if that abbrev is not
256 defined. The optional second argument @var{table} is the abbrev table
257 to look it up in. If @var{table} is @code{nil}, this function tries
258 first the current buffer's local abbrev table, and second the global
259 abbrev table.
260 @end defun
261
262 @defun abbrev-expansion abbrev &optional table
263 This function returns the string that @var{abbrev} would expand into (as
264 defined by the abbrev tables used for the current buffer). If
265 @var{abbrev} is not a valid abbrev, the function returns @code{nil}.
266 The optional argument @var{table} specifies the abbrev table to use,
267 as in @code{abbrev-symbol}.
268 @end defun
269
270 @deffn Command expand-abbrev
271 This command expands the abbrev before point, if any. If point does not
272 follow an abbrev, this command does nothing. The command returns the
273 abbrev symbol if it did expansion, @code{nil} otherwise.
274
275 If the abbrev symbol has a hook function which is a symbol whose
276 @code{no-self-insert} property is non-@code{nil}, and if the hook
277 function returns @code{nil} as its value, then @code{expand-abbrev}
278 returns @code{nil} even though expansion did occur.
279 @end deffn
280
281 @deffn Command abbrev-prefix-mark &optional arg
282 This command marks the current location of point as the beginning of
283 an abbrev. The next call to @code{expand-abbrev} will use the text
284 from here to point (where it is then) as the abbrev to expand, rather
285 than using the previous word as usual.
286
287 First, this command expands any abbrev before point, unless @var{arg}
288 is non-@code{nil}. (Interactively, @var{arg} is the prefix argument.)
289 Then it inserts a hyphen before point, to indicate the start of the
290 next abbrev to be expanded. The actual expansion removes the hyphen.
291 @end deffn
292
293 @defopt abbrev-all-caps
294 When this is set non-@code{nil}, an abbrev entered entirely in upper
295 case is expanded using all upper case. Otherwise, an abbrev entered
296 entirely in upper case is expanded by capitalizing each word of the
297 expansion.
298 @end defopt
299
300 @defvar abbrev-start-location
301 The value of this variable is a buffer position (an integer or a marker)
302 for @code{expand-abbrev} to use as the start of the next abbrev to be
303 expanded. The value can also be @code{nil}, which means to use the
304 word before point instead. @code{abbrev-start-location} is set to
305 @code{nil} each time @code{expand-abbrev} is called. This variable is
306 also set by @code{abbrev-prefix-mark}.
307 @end defvar
308
309 @defvar abbrev-start-location-buffer
310 The value of this variable is the buffer for which
311 @code{abbrev-start-location} has been set. Trying to expand an abbrev
312 in any other buffer clears @code{abbrev-start-location}. This variable
313 is set by @code{abbrev-prefix-mark}.
314 @end defvar
315
316 @defvar last-abbrev
317 This is the @code{abbrev-symbol} of the most recent abbrev expanded. This
318 information is left by @code{expand-abbrev} for the sake of the
319 @code{unexpand-abbrev} command (@pxref{Expanding Abbrevs,, Expanding
320 Abbrevs, emacs, The GNU Emacs Manual}).
321 @end defvar
322
323 @defvar last-abbrev-location
324 This is the location of the most recent abbrev expanded. This contains
325 information left by @code{expand-abbrev} for the sake of the
326 @code{unexpand-abbrev} command.
327 @end defvar
328
329 @defvar last-abbrev-text
330 This is the exact expansion text of the most recent abbrev expanded,
331 after case conversion (if any). Its value is @code{nil} if the abbrev
332 has already been unexpanded. This contains information left by
333 @code{expand-abbrev} for the sake of the @code{unexpand-abbrev} command.
334 @end defvar
335
336 @defvar abbrev-expand-functions
337 This is a special hook run @emph{around} the @code{expand-abbrev}
338 function. Functions on this hook are called with a single argument
339 which is a function that performs the normal abbrev expansion.
340 The hook function can hence do anything it wants before and after
341 performing the expansion. It can also choose not to call its argument
342 and thus override the default behavior, or it may even call it
343 several times. The function should return the abbrev symbol if
344 expansion took place.
345 @end defvar
346
347 The following sample code shows a simple use of
348 @code{abbrev-expand-functions}. It assumes that @code{foo-mode} is a
349 mode for editing certain files in which lines that start with @samp{#}
350 are comments. You want to use Text mode abbrevs for those lines. The
351 regular local abbrev table, @code{foo-mode-abbrev-table} is
352 appropriate for all other lines. Then you can put the following code
353 in your @file{.emacs} file. @xref{Standard Abbrev Tables}, for the
354 definitions of @code{local-abbrev-table} and @code{text-mode-abbrev-table}.
355
356 @smallexample
357 (defun foo-mode-abbrev-expand-function (expand)
358 (if (not (save-excursion (forward-line 0) (eq (char-after) ?#)))
359 ;; Performs normal expansion.
360 (funcall expand)
361 ;; We're inside a comment: use the text-mode abbrevs.
362 (let ((local-abbrev-table text-mode-abbrev-table))
363 (funcall expand))))
364
365 (add-hook 'foo-mode-hook
366 #'(lambda ()
367 (add-hook 'abbrev-expand-functions
368 'foo-mode-abbrev-expand-function
369 nil t)))
370 @end smallexample
371
372 @node Standard Abbrev Tables, Abbrev Properties, Abbrev Expansion, Abbrevs
373 @comment node-name, next, previous, up
374 @section Standard Abbrev Tables
375
376 Here we list the variables that hold the abbrev tables for the
377 preloaded major modes of Emacs.
378
379 @defvar global-abbrev-table
380 This is the abbrev table for mode-independent abbrevs. The abbrevs
381 defined in it apply to all buffers. Each buffer may also have a local
382 abbrev table, whose abbrev definitions take precedence over those in the
383 global table.
384 @end defvar
385
386 @defvar local-abbrev-table
387 The value of this buffer-local variable is the (mode-specific)
388 abbreviation table of the current buffer. It can also be a list of
389 such tables.
390 @end defvar
391
392 @defvar abbrev-minor-mode-table-alist
393 The value of this variable is a list of elements of the form
394 @code{(@var{mode} . @var{abbrev-table})} where @var{mode} is the name
395 of a variable: if the variable is bound to a non-@code{nil} value,
396 then the @var{abbrev-table} is active, otherwise it is ignored.
397 @var{abbrev-table} can also be a list of abbrev tables.
398 @end defvar
399
400 @defvar fundamental-mode-abbrev-table
401 This is the local abbrev table used in Fundamental mode; in other words,
402 it is the local abbrev table in all buffers in Fundamental mode.
403 @end defvar
404
405 @defvar text-mode-abbrev-table
406 This is the local abbrev table used in Text mode.
407 @end defvar
408
409 @defvar lisp-mode-abbrev-table
410 This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
411 @end defvar
412
413 @node Abbrev Properties, Abbrev Table Properties, Standard Abbrev Tables, Abbrevs
414 @section Abbrev Properties
415
416 Abbrevs have properties, some of which influence the way they work.
417 You can provide them as arguments to @code{define-abbrev} and you can
418 manipulate them with the functions:
419
420 @defun abbrev-put abbrev prop val
421 Set the property @var{prop} of abbrev @var{abbrev} to value @var{val}.
422 @end defun
423
424 @defun abbrev-get abbrev prop
425 Return the property @var{prop} of abbrev @var{abbrev}, or @code{nil}
426 if the abbrev has no such property.
427 @end defun
428
429 The following properties have special meaning:
430
431 @table @code
432 @item :count
433 This property counts the number of times the abbrev has
434 been expanded. If not explicitly set, it is initialized to 0 by
435 @code{define-abbrev}.
436
437 @item :system
438 If non-@code{nil}, this property marks the abbrev as a ``system''
439 abbrev. Such abbrevs will not be saved to @var{abbrev-file-name}.
440
441 @item :enable-function
442 If non-@code{nil}, this property should be a function of no
443 arguments which returns @code{nil} if the abbrev should not be used
444 and @code{t} otherwise.
445
446 @item :case-fixed
447 If non-@code{nil}, this property indicates that the case of the
448 abbrev's name is significant and should only match a text with the
449 same pattern of capitalization. It also disables the code that
450 modifies the capitalization of the expansion.
451 @end table
452
453 @node Abbrev Table Properties, , Abbrev Properties, Abbrevs
454 @section Abbrev Table Properties
455
456 Like abbrevs, abble tables have properties, some of which influence
457 the way they work. You can provide them as arguments to
458 @code{define-abbrev-table} and you can manipulate them with the
459 functions:
460
461 @defun abbrev-table-put table prop val
462 Set the property @var{prop} of abbrev table @var{table} to value @var{val}.
463 @end defun
464
465 @defun abbrev-table-get table prop
466 Return the property @var{prop} of abbrev table @var{table}, or @code{nil}
467 if the abbrev has no such property.
468 @end defun
469
470 The following properties have special meaning:
471
472 @table @code
473 @item :enable-function
474 This is like the @code{:enable-function} abbrev property except that
475 it applies to all abbrevs in the table and is used even before trying
476 to find the abbrev before point so it can dynamically modify the
477 abbrev table.
478
479 @item :case-fixed
480 This is like the @code{:case-fixed} abbrev property except that it
481 applies to all abbrevs in the table.
482
483 @item :regexp
484 If non-@code{nil}, this property is a regular expression that
485 indicates how to extract the name of the abbrev before point before
486 looking it up in the table. When the regular expression matches
487 before point, the abbrev name is expected to be in submatch 1.
488 If this property is @code{nil}, @code{expand-function} defaults to
489 @code{"\\<\\(\\w+\\)\\W"}. This property allows the use of abbrevs
490 whose name contains characters of non-word syntax.
491
492 @item :parents
493 This property holds the list of tables from which to inherit
494 other abbrevs.
495
496 @item :abbrev-table-modiff
497 This property holds a counter incremented each time a new abbrev is
498 added to the table.
499
500 @end table
501
502
503 @ignore
504 arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
505 @end ignore