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