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