Revert merge that re-required rx.
[emacs.git] / doc / lispref / abbrevs.texi
blob8415bdca2be0d2e253b4992bd25ec56019a2f937
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  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".
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.
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.
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}).
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}.
37   For the user-level commands for abbrevs, see @ref{Abbrevs,, Abbrev
38 Mode, emacs, The GNU Emacs Manual}.
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
53 @node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
54 @comment  node-name,  next,  previous,  up
55 @section Setting Up Abbrev Mode
57   Abbrev mode is a minor mode controlled by the value of the variable
58 @code{abbrev-mode}.
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.
66 This variable automatically becomes buffer-local when set in any fashion.
67 @end defvar
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
74 @node Abbrev Tables, Defining Abbrevs, Abbrev Mode, Abbrevs
75 @section Abbrev Tables
77   This section describes how to create and manipulate abbrev tables.
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
86 @defun abbrev-table-p table
87 Return non-@code{nil} is @var{table} is an abbrev table.
88 @end defun
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
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
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}.
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}).
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
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
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}.
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
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.
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.
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}.
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.
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.
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
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
195 @node Abbrev Files, Abbrev Expansion, Defining Abbrevs, Abbrevs
196 @section Saving Abbrevs in Files
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.
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.
209 @defopt abbrev-file-name
210 This is the default file name for reading and saving abbrevs.
211 @end defopt
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.
220 This function does not display any messages.  It returns @code{nil}.
221 @end defun
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
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
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
244 @node Abbrev Expansion, Standard Abbrev Tables, Abbrev Files, Abbrevs
245 @comment  node-name,  next,  previous,  up
246 @section Looking Up and Expanding Abbreviations
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.
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
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
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.
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
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.
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
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
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
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
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
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
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
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
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}.
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))))
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
372 @node Standard Abbrev Tables, Abbrev Properties, Abbrev Expansion, Abbrevs
373 @comment  node-name,  next,  previous,  up
374 @section Standard Abbrev Tables
376   Here we list the variables that hold the abbrev tables for the
377 preloaded major modes of Emacs.
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
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
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
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
405 @defvar text-mode-abbrev-table
406 This is the local abbrev table used in Text mode.
407 @end defvar
409 @defvar lisp-mode-abbrev-table
410 This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
411 @end defvar
413 @node Abbrev Properties, Abbrev Table Properties, Standard Abbrev Tables, Abbrevs
414 @section Abbrev Properties
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:
420 @defun abbrev-put abbrev prop val
421 Set the property @var{prop} of abbrev @var{abbrev} to value @var{val}.
422 @end defun
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
429 The following properties have special meaning:
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}.
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}.
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.
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
453 @node Abbrev Table Properties,  , Abbrev Properties, Abbrevs
454 @section Abbrev Table Properties
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:
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
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
470 The following properties have special meaning:
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.
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.
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.
492 @item :parents
493 This property holds the list of tables from which to inherit
494 other abbrevs.
496 @item :abbrev-table-modiff
497 This property holds a counter incremented each time a new abbrev is
498 added to the table.
500 @end table
503 @ignore
504    arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
505 @end ignore