Mercurial > emacs
annotate src/abbrev.c @ 69478:e8bb5df2ba7a
Add index entries around each paragraph rather than depend on entries
from beginning of node. Doing so ensures that index entries are less
likely to be forgotten if text is cut and pasted, and are necessary
anyway if the references are on a separate page. It seems that
makeinfo is now (v. 4.8) only producing one index entry per node, so
there is no longer any excuse not to. Use subheading instead of
heading. The incorrect use of heading produced very large fonts in
Info--as large as the main heading.
(From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6
and 7 appeared *around* the time of these Emacs releases.
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Wed, 15 Mar 2006 00:26:12 +0000 |
parents | 3bd95f4f2941 |
children | bf366f314d5b c5406394f567 |
rev | line source |
---|---|
146 | 1 /* Primitives for word-abbrev mode. |
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1985, 1986, 1993, 1996, 1998, 2001, 2002, 2003, 2004, |
68651
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64770
diff
changeset
|
3 2005, 2006 Free Software Foundation, Inc. |
146 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
1023
d31e1e0844aa
* abbrev.c (syms_of_abbrev): Call DEFVAR_PER_BUFFER with the new
Jim Blandy <jimb@redhat.com>
parents:
1021
diff
changeset
|
9 the Free Software Foundation; either version 2, or (at your option) |
146 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
64084 | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 Boston, MA 02110-1301, USA. */ | |
146 | 21 |
22 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
2961
diff
changeset
|
23 #include <config.h> |
146 | 24 #include <stdio.h> |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
25 |
146 | 26 #include "lisp.h" |
27 #include "commands.h" | |
28 #include "buffer.h" | |
29 #include "window.h" | |
23715 | 30 #include "charset.h" |
9054
ddb22c22a80d
(Fexpand_abbrev): Instead of Fcapitalize_region,
Richard M. Stallman <rms@gnu.org>
parents:
4717
diff
changeset
|
31 #include "syntax.h" |
146 | 32 |
33 /* An abbrev table is an obarray. | |
34 Each defined abbrev is represented by a symbol in that obarray | |
35 whose print name is the abbreviation. | |
36 The symbol's value is a string which is the expansion. | |
37 If its function definition is non-nil, it is called | |
38 after the expansion is done. | |
39 The plist slot of the abbrev symbol is its usage count. */ | |
40 | |
41 /* List of all abbrev-table name symbols: | |
42 symbols whose values are abbrev tables. */ | |
43 | |
44 Lisp_Object Vabbrev_table_name_list; | |
45 | |
46 /* The table of global abbrevs. These are in effect | |
47 in any buffer in which abbrev mode is turned on. */ | |
48 | |
49 Lisp_Object Vglobal_abbrev_table; | |
50 | |
51 /* The local abbrev table used by default (in Fundamental Mode buffers) */ | |
52 | |
53 Lisp_Object Vfundamental_mode_abbrev_table; | |
54 | |
55 /* Set nonzero when an abbrev definition is changed */ | |
56 | |
57 int abbrevs_changed; | |
58 | |
59 int abbrev_all_caps; | |
60 | |
61 /* Non-nil => use this location as the start of abbrev to expand | |
62 (rather than taking the word before point as the abbrev) */ | |
63 | |
64 Lisp_Object Vabbrev_start_location; | |
65 | |
66 /* Buffer that Vabbrev_start_location applies to */ | |
67 Lisp_Object Vabbrev_start_location_buffer; | |
68 | |
69 /* The symbol representing the abbrev most recently expanded */ | |
70 | |
71 Lisp_Object Vlast_abbrev; | |
72 | |
73 /* A string for the actual text of the abbrev most recently expanded. | |
74 This has more info than Vlast_abbrev since case is significant. */ | |
75 | |
76 Lisp_Object Vlast_abbrev_text; | |
77 | |
78 /* Character address of start of last abbrev expanded */ | |
79 | |
43713
f92c4d87863a
Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43671
diff
changeset
|
80 EMACS_INT last_abbrev_point; |
146 | 81 |
458
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
82 /* Hook to run before expanding any abbrev. */ |
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
83 |
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
84 Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook; |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
85 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
86 Lisp_Object Qsystem_type, Qcount; |
146 | 87 |
88 DEFUN ("make-abbrev-table", Fmake_abbrev_table, Smake_abbrev_table, 0, 0, 0, | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
89 doc: /* Create a new, empty abbrev table object. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
90 () |
146 | 91 { |
44739
31151cf0eb43
Add comment of arbitrary chosen constant 59.
Pavel Janík <Pavel@Janik.cz>
parents:
43713
diff
changeset
|
92 /* The value 59 is arbitrary chosen prime number. */ |
146 | 93 return Fmake_vector (make_number (59), make_number (0)); |
94 } | |
95 | |
96 DEFUN ("clear-abbrev-table", Fclear_abbrev_table, Sclear_abbrev_table, 1, 1, 0, | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
97 doc: /* Undefine all abbrevs in abbrev table TABLE, leaving it empty. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
98 (table) |
146 | 99 Lisp_Object table; |
100 { | |
101 int i, size; | |
102 | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
103 CHECK_VECTOR (table); |
146 | 104 size = XVECTOR (table)->size; |
105 abbrevs_changed = 1; | |
106 for (i = 0; i < size; i++) | |
107 XVECTOR (table)->contents[i] = make_number (0); | |
108 return Qnil; | |
109 } | |
110 | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
111 DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_abbrev, 3, 6, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
112 doc: /* Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
113 NAME must be a string. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
114 EXPANSION should usually be a string. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
115 To undefine an abbrev, define it with EXPANSION = nil. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
116 If HOOK is non-nil, it should be a function of no arguments; |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
117 it is called after EXPANSION is inserted. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
118 If EXPANSION is not a string, the abbrev is a special one, |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
119 which does not expand in the usual way but only runs HOOK. |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
120 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
121 COUNT, if specified, gives the initial value for the abbrev's |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
122 usage-count, which is incremented each time the abbrev is used. |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
123 \(The default is zero.) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
124 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
125 SYSTEM-FLAG, if non-nil, says that this is a "system" abbreviation |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
126 which should not be saved in the user's abbreviation file. */) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
127 (table, name, expansion, hook, count, system_flag) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
128 Lisp_Object table, name, expansion, hook, count, system_flag; |
146 | 129 { |
130 Lisp_Object sym, oexp, ohook, tem; | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
131 CHECK_VECTOR (table); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
132 CHECK_STRING (name); |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
133 |
484 | 134 if (NILP (count)) |
146 | 135 count = make_number (0); |
136 else | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
137 CHECK_NUMBER (count); |
146 | 138 |
139 sym = Fintern (name, table); | |
140 | |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
141 oexp = SYMBOL_VALUE (sym); |
146 | 142 ohook = XSYMBOL (sym)->function; |
143 if (!((EQ (oexp, expansion) | |
9140
3e7833a8e16f
(Fdefine_abbrev, Fexpand_abbrev, Funexpand_abbrev): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9054
diff
changeset
|
144 || (STRINGP (oexp) && STRINGP (expansion) |
484 | 145 && (tem = Fstring_equal (oexp, expansion), !NILP (tem)))) |
146 | 146 && |
147 (EQ (ohook, hook) | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
148 || (tem = Fequal (ohook, hook), !NILP (tem)))) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
149 && NILP (system_flag)) |
146 | 150 abbrevs_changed = 1; |
151 | |
152 Fset (sym, expansion); | |
153 Ffset (sym, hook); | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
154 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
155 if (! NILP (system_flag)) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
156 Fsetplist (sym, list4 (Qcount, count, Qsystem_type, system_flag)); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
157 else |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
158 Fsetplist (sym, count); |
146 | 159 |
160 return name; | |
161 } | |
162 | |
163 DEFUN ("define-global-abbrev", Fdefine_global_abbrev, Sdefine_global_abbrev, 2, 2, | |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
164 "sDefine global abbrev: \nsExpansion for %s: ", |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
165 doc: /* Define ABBREV as a global abbreviation for EXPANSION. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
166 (abbrev, expansion) |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
167 Lisp_Object abbrev, expansion; |
146 | 168 { |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
169 Fdefine_abbrev (Vglobal_abbrev_table, Fdowncase (abbrev), |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
170 expansion, Qnil, make_number (0), Qnil); |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
171 return abbrev; |
146 | 172 } |
173 | |
174 DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, Sdefine_mode_abbrev, 2, 2, | |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
175 "sDefine mode abbrev: \nsExpansion for %s: ", |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
176 doc: /* Define ABBREV as a mode-specific abbreviation for EXPANSION. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
177 (abbrev, expansion) |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
178 Lisp_Object abbrev, expansion; |
146 | 179 { |
484 | 180 if (NILP (current_buffer->abbrev_table)) |
146 | 181 error ("Major mode has no abbrev table"); |
182 | |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
183 Fdefine_abbrev (current_buffer->abbrev_table, Fdowncase (abbrev), |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
184 expansion, Qnil, make_number (0), Qnil); |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
185 return abbrev; |
146 | 186 } |
187 | |
188 DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_symbol, 1, 2, 0, | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
189 doc: /* Return the symbol representing abbrev named ABBREV. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
190 This symbol's name is ABBREV, but it is not the canonical symbol of that name; |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
191 it is interned in an abbrev-table rather than the normal obarray. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
192 The value is nil if that abbrev is not defined. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
193 Optional second arg TABLE is abbrev table to look it up in. |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
194 The default is to try buffer's mode-specific abbrev table, then global table. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
195 (abbrev, table) |
146 | 196 Lisp_Object abbrev, table; |
197 { | |
198 Lisp_Object sym; | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
199 CHECK_STRING (abbrev); |
484 | 200 if (!NILP (table)) |
146 | 201 sym = Fintern_soft (abbrev, table); |
202 else | |
203 { | |
204 sym = Qnil; | |
484 | 205 if (!NILP (current_buffer->abbrev_table)) |
146 | 206 sym = Fintern_soft (abbrev, current_buffer->abbrev_table); |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
207 if (NILP (SYMBOL_VALUE (sym))) |
146 | 208 sym = Qnil; |
484 | 209 if (NILP (sym)) |
146 | 210 sym = Fintern_soft (abbrev, Vglobal_abbrev_table); |
211 } | |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
212 if (NILP (SYMBOL_VALUE (sym))) |
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
213 return Qnil; |
146 | 214 return sym; |
215 } | |
216 | |
217 DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabbrev_expansion, 1, 2, 0, | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
218 doc: /* Return the string that ABBREV expands into in the current buffer. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
219 Optionally specify an abbrev table as second arg; |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
220 then ABBREV is looked up in that table only. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
221 (abbrev, table) |
146 | 222 Lisp_Object abbrev, table; |
223 { | |
224 Lisp_Object sym; | |
225 sym = Fabbrev_symbol (abbrev, table); | |
484 | 226 if (NILP (sym)) return sym; |
146 | 227 return Fsymbol_value (sym); |
228 } | |
229 | |
230 /* Expand the word before point, if it is an abbrev. | |
231 Returns 1 if an expansion is done. */ | |
232 | |
233 DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_abbrev, 0, 0, "", | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
234 doc: /* Expand the abbrev before point, if there is an abbrev there. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
235 Effective when explicitly called even when `abbrev-mode' is nil. |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
236 Returns the abbrev symbol, if expansion took place. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
237 () |
146 | 238 { |
239 register char *buffer, *p; | |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
240 int wordstart, wordend; |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
241 register int wordstart_byte, wordend_byte, idx, idx_byte; |
146 | 242 int whitecnt; |
243 int uccount = 0, lccount = 0; | |
244 register Lisp_Object sym; | |
245 Lisp_Object expansion, hook, tem; | |
1021
22f807391bec
(Fexpand_abbrev): If pre-expand hook changes the buffer,
Richard M. Stallman <rms@gnu.org>
parents:
988
diff
changeset
|
246 Lisp_Object value; |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
247 int multibyte = ! NILP (current_buffer->enable_multibyte_characters); |
146 | 248 |
16747
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
249 value = Qnil; |
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
250 |
56564
c35c8a6e6baa
(Fexpand_abbrev): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
56523
diff
changeset
|
251 Frun_hooks (1, &Qpre_abbrev_expand_hook); |
c35c8a6e6baa
(Fexpand_abbrev): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
56523
diff
changeset
|
252 |
11503
9d8bb1074fd8
(Fexpand_abbrev): Add some error checking.
Karl Heuer <kwzh@gnu.org>
parents:
9294
diff
changeset
|
253 wordstart = 0; |
16747
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
254 if (!(BUFFERP (Vabbrev_start_location_buffer) |
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
255 && XBUFFER (Vabbrev_start_location_buffer) == current_buffer)) |
146 | 256 Vabbrev_start_location = Qnil; |
484 | 257 if (!NILP (Vabbrev_start_location)) |
146 | 258 { |
259 tem = Vabbrev_start_location; | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
260 CHECK_NUMBER_COERCE_MARKER (tem); |
146 | 261 wordstart = XINT (tem); |
262 Vabbrev_start_location = Qnil; | |
11503
9d8bb1074fd8
(Fexpand_abbrev): Add some error checking.
Karl Heuer <kwzh@gnu.org>
parents:
9294
diff
changeset
|
263 if (wordstart < BEGV || wordstart > ZV) |
9d8bb1074fd8
(Fexpand_abbrev): Add some error checking.
Karl Heuer <kwzh@gnu.org>
parents:
9294
diff
changeset
|
264 wordstart = 0; |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
265 if (wordstart && wordstart != ZV) |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
266 { |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
267 wordstart_byte = CHAR_TO_BYTE (wordstart); |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
268 if (FETCH_BYTE (wordstart_byte) == '-') |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
269 del_range (wordstart, wordstart + 1); |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
270 } |
146 | 271 } |
11503
9d8bb1074fd8
(Fexpand_abbrev): Add some error checking.
Karl Heuer <kwzh@gnu.org>
parents:
9294
diff
changeset
|
272 if (!wordstart) |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
273 wordstart = scan_words (PT, -1); |
146 | 274 |
275 if (!wordstart) | |
1021
22f807391bec
(Fexpand_abbrev): If pre-expand hook changes the buffer,
Richard M. Stallman <rms@gnu.org>
parents:
988
diff
changeset
|
276 return value; |
146 | 277 |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
278 wordstart_byte = CHAR_TO_BYTE (wordstart); |
146 | 279 wordend = scan_words (wordstart, 1); |
280 if (!wordend) | |
1021
22f807391bec
(Fexpand_abbrev): If pre-expand hook changes the buffer,
Richard M. Stallman <rms@gnu.org>
parents:
988
diff
changeset
|
281 return value; |
146 | 282 |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
283 if (wordend > PT) |
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
284 wordend = PT; |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
285 |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
286 wordend_byte = CHAR_TO_BYTE (wordend); |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
287 whitecnt = PT - wordend; |
146 | 288 if (wordend <= wordstart) |
1021
22f807391bec
(Fexpand_abbrev): If pre-expand hook changes the buffer,
Richard M. Stallman <rms@gnu.org>
parents:
988
diff
changeset
|
289 return value; |
146 | 290 |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
291 p = buffer = (char *) alloca (wordend_byte - wordstart_byte); |
146 | 292 |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
293 for (idx = wordstart, idx_byte = wordstart_byte; idx < wordend; ) |
146 | 294 { |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
295 register int c; |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
296 |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
297 if (multibyte) |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
298 { |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
299 FETCH_CHAR_ADVANCE (c, idx, idx_byte); |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
300 } |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
301 else |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
302 { |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
303 c = FETCH_BYTE (idx_byte); |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
304 idx++, idx_byte++; |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
305 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
46965
diff
changeset
|
306 |
146 | 307 if (UPPERCASEP (c)) |
308 c = DOWNCASE (c), uccount++; | |
309 else if (! NOCASEP (c)) | |
310 lccount++; | |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
311 if (multibyte) |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
312 p += CHAR_STRING (c, p); |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
313 else |
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
314 *p++ = c; |
146 | 315 } |
316 | |
9140
3e7833a8e16f
(Fdefine_abbrev, Fexpand_abbrev, Funexpand_abbrev): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9054
diff
changeset
|
317 if (VECTORP (current_buffer->abbrev_table)) |
20590
bf079eb81bd3
(Fexpand_abbrev): Pass both kinds of size to oblookup.
Richard M. Stallman <rms@gnu.org>
parents:
20554
diff
changeset
|
318 sym = oblookup (current_buffer->abbrev_table, buffer, |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
319 wordend - wordstart, p - buffer); |
146 | 320 else |
9294
4d083b72b3b1
(Fexpand_abbrev): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9260
diff
changeset
|
321 XSETFASTINT (sym, 0); |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
322 |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
323 if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym))) |
20590
bf079eb81bd3
(Fexpand_abbrev): Pass both kinds of size to oblookup.
Richard M. Stallman <rms@gnu.org>
parents:
20554
diff
changeset
|
324 sym = oblookup (Vglobal_abbrev_table, buffer, |
46965
711ccca26771
(Fexpand_abbrev): Fix for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents:
46370
diff
changeset
|
325 wordend - wordstart, p - buffer); |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
326 if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym))) |
1021
22f807391bec
(Fexpand_abbrev): If pre-expand hook changes the buffer,
Richard M. Stallman <rms@gnu.org>
parents:
988
diff
changeset
|
327 return value; |
146 | 328 |
329 if (INTERACTIVE && !EQ (minibuf_window, selected_window)) | |
330 { | |
11554 | 331 /* Add an undo boundary, in case we are doing this for |
332 a self-inserting command which has avoided making one so far. */ | |
146 | 333 SET_PT (wordend); |
334 Fundo_boundary (); | |
335 } | |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
336 |
146 | 337 Vlast_abbrev_text |
338 = Fbuffer_substring (make_number (wordstart), make_number (wordend)); | |
339 | |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
340 /* Now sym is the abbrev symbol. */ |
146 | 341 Vlast_abbrev = sym; |
16747
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
342 value = sym; |
146 | 343 last_abbrev_point = wordstart; |
344 | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
345 /* Increment use count. */ |
9140
3e7833a8e16f
(Fdefine_abbrev, Fexpand_abbrev, Funexpand_abbrev): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9054
diff
changeset
|
346 if (INTEGERP (XSYMBOL (sym)->plist)) |
146 | 347 XSETINT (XSYMBOL (sym)->plist, |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
348 XINT (XSYMBOL (sym)->plist) + 1); |
43671
b6abb8a7ea89
(Fexpand_abbrev): Increment plist as use count only if it is an integer.
Richard M. Stallman <rms@gnu.org>
parents:
42410
diff
changeset
|
349 else if (INTEGERP (tem = Fget (sym, Qcount))) |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
350 Fput (sym, Qcount, make_number (XINT (tem) + 1)); |
146 | 351 |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
352 /* If this abbrev has an expansion, delete the abbrev |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
353 and insert the expansion. */ |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
354 expansion = SYMBOL_VALUE (sym); |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
355 if (STRINGP (expansion)) |
146 | 356 { |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
357 SET_PT (wordstart); |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
358 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45391
diff
changeset
|
359 insert_from_string (expansion, 0, 0, SCHARS (expansion), |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45391
diff
changeset
|
360 SBYTES (expansion), 1); |
52373
ddaae63bd193
(Fexpand_abbrev): Insert before deleting.
Richard M. Stallman <rms@gnu.org>
parents:
50625
diff
changeset
|
361 del_range_both (PT, PT_BYTE, |
ddaae63bd193
(Fexpand_abbrev): Insert before deleting.
Richard M. Stallman <rms@gnu.org>
parents:
50625
diff
changeset
|
362 wordend + (PT - wordstart), |
ddaae63bd193
(Fexpand_abbrev): Insert before deleting.
Richard M. Stallman <rms@gnu.org>
parents:
50625
diff
changeset
|
363 wordend_byte + (PT_BYTE - wordstart_byte), |
ddaae63bd193
(Fexpand_abbrev): Insert before deleting.
Richard M. Stallman <rms@gnu.org>
parents:
50625
diff
changeset
|
364 1); |
ddaae63bd193
(Fexpand_abbrev): Insert before deleting.
Richard M. Stallman <rms@gnu.org>
parents:
50625
diff
changeset
|
365 |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
366 SET_PT (PT + whitecnt); |
397 | 367 |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
368 if (uccount && !lccount) |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
369 { |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
370 /* Abbrev was all caps */ |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
371 /* If expansion is multiple words, normally capitalize each word */ |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
372 /* This used to be if (!... && ... >= ...) Fcapitalize; else Fupcase |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
373 but Megatest 68000 compiler can't handle that */ |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
374 if (!abbrev_all_caps) |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
375 if (scan_words (PT, -1) > scan_words (wordstart, 1)) |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
376 { |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
377 Fupcase_initials_region (make_number (wordstart), |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
378 make_number (PT)); |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
379 goto caped; |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
380 } |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
381 /* If expansion is one word, or if user says so, upcase it all. */ |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
382 Fupcase_region (make_number (wordstart), make_number (PT)); |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
383 caped: ; |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
384 } |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
385 else if (uccount) |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
386 { |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
387 /* Abbrev included some caps. Cap first initial of expansion */ |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
388 int pos = wordstart_byte; |
397 | 389 |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
390 /* Find the initial. */ |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
391 while (pos < PT_BYTE |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
392 && SYNTAX (*BUF_BYTE_ADDRESS (current_buffer, pos)) != Sword) |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
393 pos++; |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
394 |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
395 /* Change just that. */ |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
396 pos = BYTE_TO_CHAR (pos); |
16565
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
397 Fupcase_initials_region (make_number (pos), make_number (pos + 1)); |
0bef6ef9964b
(Fexpand_abbrev): If the abbrev's expansion is nil,
Richard M. Stallman <rms@gnu.org>
parents:
16485
diff
changeset
|
398 } |
146 | 399 } |
400 | |
401 hook = XSYMBOL (sym)->function; | |
484 | 402 if (!NILP (hook)) |
27043
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
403 { |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
404 Lisp_Object expanded, prop; |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
405 |
27379 | 406 /* If the abbrev has a hook function, run it. */ |
27043
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
407 expanded = call0 (hook); |
27379 | 408 |
44851
ceafe18856c7
(abbrev-start-location): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents:
44739
diff
changeset
|
409 /* In addition, if the hook function is a symbol with |
ceafe18856c7
(abbrev-start-location): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents:
44739
diff
changeset
|
410 a non-nil `no-self-insert' property, let the value it returned |
27379 | 411 specify whether we consider that an expansion took place. If |
412 it returns nil, no expansion has been done. */ | |
413 | |
27043
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
414 if (SYMBOLP (hook) |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
415 && NILP (expanded) |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
416 && (prop = Fget (hook, intern ("no-self-insert")), |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
417 !NILP (prop))) |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
418 value = Qnil; |
b5ce0c450409
(Fexpand_abbrev): If expanding an abbrev which has only
Gerd Moellmann <gerd@gnu.org>
parents:
25766
diff
changeset
|
419 } |
146 | 420 |
16747
126a42ee62ac
(Fexpand_abbrev): Return the abbrev symbol, or nil if no expansion.
Richard M. Stallman <rms@gnu.org>
parents:
16565
diff
changeset
|
421 return value; |
146 | 422 } |
423 | |
424 DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexpand_abbrev, 0, 0, "", | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
425 doc: /* Undo the expansion of the last abbrev that expanded. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
426 This differs from ordinary undo in that other editing done since then |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
427 is not undone. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
428 () |
146 | 429 { |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
430 int opoint = PT; |
146 | 431 int adjust = 0; |
432 if (last_abbrev_point < BEGV | |
433 || last_abbrev_point > ZV) | |
434 return Qnil; | |
435 SET_PT (last_abbrev_point); | |
9140
3e7833a8e16f
(Fdefine_abbrev, Fexpand_abbrev, Funexpand_abbrev): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9054
diff
changeset
|
436 if (STRINGP (Vlast_abbrev_text)) |
146 | 437 { |
438 /* This isn't correct if Vlast_abbrev->function was used | |
439 to do the expansion */ | |
440 Lisp_Object val; | |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
441 int zv_before; |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
442 |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
443 val = SYMBOL_VALUE (Vlast_abbrev); |
9140
3e7833a8e16f
(Fdefine_abbrev, Fexpand_abbrev, Funexpand_abbrev): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9054
diff
changeset
|
444 if (!STRINGP (val)) |
63693
3b481dca1cd5
(Funexpand_abbrev): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
56564
diff
changeset
|
445 error ("Value of `abbrev-symbol' must be a string"); |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
446 zv_before = ZV; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45391
diff
changeset
|
447 del_range_byte (PT_BYTE, PT_BYTE + SBYTES (val), 1); |
4717
5297e155e1d2
(Funexpand_abbrev, Fexpand_abbrev): Pass new arg to insert_from_string.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
448 /* Don't inherit properties here; just copy from old contents. */ |
20590
bf079eb81bd3
(Fexpand_abbrev): Pass both kinds of size to oblookup.
Richard M. Stallman <rms@gnu.org>
parents:
20554
diff
changeset
|
449 insert_from_string (Vlast_abbrev_text, 0, 0, |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45391
diff
changeset
|
450 SCHARS (Vlast_abbrev_text), |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45391
diff
changeset
|
451 SBYTES (Vlast_abbrev_text), 0); |
146 | 452 Vlast_abbrev_text = Qnil; |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
453 /* Total number of characters deleted. */ |
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
454 adjust = ZV - zv_before; |
146 | 455 } |
22909
c8e47ec53eb6
(Funexpand_abbrev): Add ADJUST instead of subtracting.
Richard M. Stallman <rms@gnu.org>
parents:
21514
diff
changeset
|
456 SET_PT (last_abbrev_point < opoint ? opoint + adjust : opoint); |
146 | 457 return Qnil; |
458 } | |
459 | |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
460 static void |
146 | 461 write_abbrev (sym, stream) |
462 Lisp_Object sym, stream; | |
463 { | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
464 Lisp_Object name, count, system_flag; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
465 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
466 if (INTEGERP (XSYMBOL (sym)->plist)) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
467 { |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
468 count = XSYMBOL (sym)->plist; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
469 system_flag = Qnil; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
470 } |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
471 else |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
472 { |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
473 count = Fget (sym, Qcount); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
474 system_flag = Fget (sym, Qsystem_type); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
475 } |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
476 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
477 if (NILP (SYMBOL_VALUE (sym)) || ! NILP (system_flag)) |
146 | 478 return; |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
479 |
146 | 480 insert (" (", 5); |
45391
6c875925d507
* abbrev.c (write_abbrev): Use SYMBOL_NAME instead of XSYMBOL and
Ken Raeburn <raeburn@raeburn.org>
parents:
44851
diff
changeset
|
481 name = SYMBOL_NAME (sym); |
146 | 482 Fprin1 (name, stream); |
483 insert (" ", 1); | |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
484 Fprin1 (SYMBOL_VALUE (sym), stream); |
146 | 485 insert (" ", 1); |
486 Fprin1 (XSYMBOL (sym)->function, stream); | |
487 insert (" ", 1); | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
488 Fprin1 (count, stream); |
146 | 489 insert (")\n", 2); |
490 } | |
491 | |
20529
4b3fc2cda7fc
(describe_abbrev): Return void.
Richard M. Stallman <rms@gnu.org>
parents:
17059
diff
changeset
|
492 static void |
146 | 493 describe_abbrev (sym, stream) |
494 Lisp_Object sym, stream; | |
495 { | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
496 Lisp_Object one, count, system_flag; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
497 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
498 if (INTEGERP (XSYMBOL (sym)->plist)) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
499 { |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
500 count = XSYMBOL (sym)->plist; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
501 system_flag = Qnil; |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
502 } |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
503 else |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
504 { |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
505 count = Fget (sym, Qcount); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
506 system_flag = Fget (sym, Qsystem_type); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
507 } |
146 | 508 |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
509 if (NILP (SYMBOL_VALUE (sym))) |
146 | 510 return; |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
511 |
146 | 512 one = make_number (1); |
513 Fprin1 (Fsymbol_name (sym), stream); | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
514 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
515 if (!NILP (system_flag)) |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
516 { |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
517 insert_string (" (sys)"); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
518 Findent_to (make_number (20), one); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
519 } |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
520 else |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
521 Findent_to (make_number (15), one); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
522 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
523 Fprin1 (count, stream); |
146 | 524 Findent_to (make_number (20), one); |
39584
6145836b795c
Use SYMBOL_VALUE/ SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents:
29742
diff
changeset
|
525 Fprin1 (SYMBOL_VALUE (sym), stream); |
484 | 526 if (!NILP (XSYMBOL (sym)->function)) |
146 | 527 { |
528 Findent_to (make_number (45), one); | |
529 Fprin1 (XSYMBOL (sym)->function, stream); | |
530 } | |
531 Fterpri (stream); | |
532 } | |
533 | |
16485
9b919c5464a4
Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents:
16039
diff
changeset
|
534 DEFUN ("insert-abbrev-table-description", Finsert_abbrev_table_description, |
40109
d641fcc16219
(Finsert_abbrev_table_description): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents:
39988
diff
changeset
|
535 Sinsert_abbrev_table_description, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
536 doc: /* Insert before point a full description of abbrev table named NAME. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
537 NAME is a symbol whose value is an abbrev table. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
538 If optional 2nd arg READABLE is non-nil, a human-readable description |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
539 is inserted. Otherwise the description is an expression, |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
540 a call to `define-abbrev-table', which would |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
541 define the abbrev table NAME exactly as it is currently defined. |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
542 |
54135
bd296510f5b7
(Finsert_abbrev_table_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
543 Abbrevs marked as "system abbrevs" are normally omitted. However, if |
bd296510f5b7
(Finsert_abbrev_table_description): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
544 READABLE is non-nil, they are listed. */) |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
545 (name, readable) |
146 | 546 Lisp_Object name, readable; |
547 { | |
548 Lisp_Object table; | |
549 Lisp_Object stream; | |
550 | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
551 CHECK_SYMBOL (name); |
146 | 552 table = Fsymbol_value (name); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
553 CHECK_VECTOR (table); |
146 | 554 |
9260
945ddb4e9e24
(write_abbrev, Finsert_abbrev_table_description): Use new accessor macros
Karl Heuer <kwzh@gnu.org>
parents:
9140
diff
changeset
|
555 XSETBUFFER (stream, current_buffer); |
146 | 556 |
484 | 557 if (!NILP (readable)) |
146 | 558 { |
559 insert_string ("("); | |
560 Fprin1 (name, stream); | |
561 insert_string (")\n\n"); | |
562 map_obarray (table, describe_abbrev, stream); | |
563 insert_string ("\n\n"); | |
564 } | |
565 else | |
566 { | |
567 insert_string ("(define-abbrev-table '"); | |
568 Fprin1 (name, stream); | |
569 insert_string (" '(\n"); | |
570 map_obarray (table, write_abbrev, stream); | |
571 insert_string (" ))\n\n"); | |
572 } | |
573 | |
574 return Qnil; | |
575 } | |
576 | |
577 DEFUN ("define-abbrev-table", Fdefine_abbrev_table, Sdefine_abbrev_table, | |
578 2, 2, 0, | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
579 doc: /* Define TABLENAME (a symbol) as an abbrev table name. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
580 Define abbrevs in it according to DEFINITIONS, which is a list of elements |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
581 of the form (ABBREVNAME EXPANSION HOOK USECOUNT SYSTEMFLAG). |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
582 \(If the list is shorter than that, omitted elements default to nil). */) |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
583 (tablename, definitions) |
14098
aa682cae5c89
(Fdefine_abbrev_table): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
14059
diff
changeset
|
584 Lisp_Object tablename, definitions; |
146 | 585 { |
586 Lisp_Object name, exp, hook, count; | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
587 Lisp_Object table, elt, sys; |
146 | 588 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
589 CHECK_SYMBOL (tablename); |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
590 table = Fboundp (tablename); |
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
591 if (NILP (table) || (table = Fsymbol_value (tablename), NILP (table))) |
146 | 592 { |
593 table = Fmake_abbrev_table (); | |
14059
1303d585443b
(Fdefine_global_abbrev, Fdefine_mode_abbrev, Fabbrev_symbol,
Erik Naggum <erik@naggum.no>
parents:
12091
diff
changeset
|
594 Fset (tablename, table); |
14098
aa682cae5c89
(Fdefine_abbrev_table): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
14059
diff
changeset
|
595 Vabbrev_table_name_list = Fcons (tablename, Vabbrev_table_name_list); |
146 | 596 } |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40109
diff
changeset
|
597 CHECK_VECTOR (table); |
146 | 598 |
50625
804e6ed7ce2c
(Fdefine_abbrev_table): Use XCAR, XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49600
diff
changeset
|
599 for (; CONSP (definitions); definitions = XCDR (definitions)) |
146 | 600 { |
50625
804e6ed7ce2c
(Fdefine_abbrev_table): Use XCAR, XCDR.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49600
diff
changeset
|
601 elt = XCAR (definitions); |
988
341171b49f96
* abbrev.c (Fdefine_abbrev_table): Fiddled with formatting.
Jim Blandy <jimb@redhat.com>
parents:
484
diff
changeset
|
602 name = Fcar (elt); elt = Fcdr (elt); |
341171b49f96
* abbrev.c (Fdefine_abbrev_table): Fiddled with formatting.
Jim Blandy <jimb@redhat.com>
parents:
484
diff
changeset
|
603 exp = Fcar (elt); elt = Fcdr (elt); |
341171b49f96
* abbrev.c (Fdefine_abbrev_table): Fiddled with formatting.
Jim Blandy <jimb@redhat.com>
parents:
484
diff
changeset
|
604 hook = Fcar (elt); elt = Fcdr (elt); |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
605 count = Fcar (elt); elt = Fcdr (elt); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
606 sys = Fcar (elt); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
607 Fdefine_abbrev (table, name, exp, hook, count, sys); |
146 | 608 } |
609 return Qnil; | |
610 } | |
611 | |
21514 | 612 void |
146 | 613 syms_of_abbrev () |
614 { | |
42388
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
615 Qsystem_type = intern ("system-type"); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
616 staticpro (&Qsystem_type); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
617 |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
618 Qcount = intern ("count"); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
619 staticpro (&Qcount); |
b46d482b6ed2
Use the plist of an abbrev for multiple params if nec.
Richard M. Stallman <rms@gnu.org>
parents:
41522
diff
changeset
|
620 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
621 DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_table_name_list, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
622 doc: /* List of symbols whose values are abbrev tables. */); |
146 | 623 Vabbrev_table_name_list = Fcons (intern ("fundamental-mode-abbrev-table"), |
624 Fcons (intern ("global-abbrev-table"), | |
625 Qnil)); | |
626 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
627 DEFVAR_LISP ("global-abbrev-table", &Vglobal_abbrev_table, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
628 doc: /* The abbrev table whose abbrevs affect all buffers. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
629 Each buffer may also have a local abbrev table. |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
630 If it does, the local table overrides the global one |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
631 for any particular abbrev defined in both. */); |
146 | 632 Vglobal_abbrev_table = Fmake_abbrev_table (); |
633 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
634 DEFVAR_LISP ("fundamental-mode-abbrev-table", &Vfundamental_mode_abbrev_table, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
635 doc: /* The abbrev table of mode-specific abbrevs for Fundamental Mode. */); |
146 | 636 Vfundamental_mode_abbrev_table = Fmake_abbrev_table (); |
637 current_buffer->abbrev_table = Vfundamental_mode_abbrev_table; | |
29742
47ad175d6357
(syms_of_abbrev): Set buffer_default's abbrev table
Gerd Moellmann <gerd@gnu.org>
parents:
27379
diff
changeset
|
638 buffer_defaults.abbrev_table = Vfundamental_mode_abbrev_table; |
146 | 639 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
640 DEFVAR_LISP ("last-abbrev", &Vlast_abbrev, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
641 doc: /* The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'. */); |
146 | 642 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
643 DEFVAR_LISP ("last-abbrev-text", &Vlast_abbrev_text, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
644 doc: /* The exact text of the last abbrev expanded. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
645 nil if the abbrev has already been unexpanded. */); |
146 | 646 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
647 DEFVAR_INT ("last-abbrev-location", &last_abbrev_point, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
648 doc: /* The location of the start of the last abbrev expanded. */); |
146 | 649 |
650 Vlast_abbrev = Qnil; | |
651 Vlast_abbrev_text = Qnil; | |
652 last_abbrev_point = 0; | |
653 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
654 DEFVAR_LISP ("abbrev-start-location", &Vabbrev_start_location, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
655 doc: /* Buffer position for `expand-abbrev' to use as the start of the abbrev. |
44851
ceafe18856c7
(abbrev-start-location): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents:
44739
diff
changeset
|
656 When nil, use the word before point as the abbrev. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
657 Calling `expand-abbrev' sets this to nil. */); |
146 | 658 Vabbrev_start_location = Qnil; |
659 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
660 DEFVAR_LISP ("abbrev-start-location-buffer", &Vabbrev_start_location_buffer, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
661 doc: /* Buffer that `abbrev-start-location' has been set for. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
662 Trying to expand an abbrev in any other buffer clears `abbrev-start-location'. */); |
146 | 663 Vabbrev_start_location_buffer = Qnil; |
664 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
665 DEFVAR_PER_BUFFER ("local-abbrev-table", ¤t_buffer->abbrev_table, Qnil, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
666 doc: /* Local (mode-specific) abbrev table of current buffer. */); |
146 | 667 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
668 DEFVAR_BOOL ("abbrevs-changed", &abbrevs_changed, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
669 doc: /* Set non-nil by defining or altering any word abbrevs. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
670 This causes `save-some-buffers' to offer to save the abbrevs. */); |
146 | 671 abbrevs_changed = 0; |
672 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
673 DEFVAR_BOOL ("abbrev-all-caps", &abbrev_all_caps, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
674 doc: /* *Set non-nil means expand multi-word abbrevs all caps if abbrev was so. */); |
146 | 675 abbrev_all_caps = 0; |
676 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
677 DEFVAR_LISP ("pre-abbrev-expand-hook", &Vpre_abbrev_expand_hook, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39960
diff
changeset
|
678 doc: /* Function or functions to be called before abbrev expansion is done. |
39960
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
679 This is the first thing that `expand-abbrev' does, and so this may change |
d0d7ddac8c5e
Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents:
39584
diff
changeset
|
680 the current abbrev table before abbrev lookup happens. */); |
458
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
681 Vpre_abbrev_expand_hook = Qnil; |
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
682 Qpre_abbrev_expand_hook = intern ("pre-abbrev-expand-hook"); |
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
683 staticpro (&Qpre_abbrev_expand_hook); |
8f18e7e89008
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
397
diff
changeset
|
684 |
146 | 685 defsubr (&Smake_abbrev_table); |
686 defsubr (&Sclear_abbrev_table); | |
687 defsubr (&Sdefine_abbrev); | |
688 defsubr (&Sdefine_global_abbrev); | |
689 defsubr (&Sdefine_mode_abbrev); | |
690 defsubr (&Sabbrev_expansion); | |
691 defsubr (&Sabbrev_symbol); | |
692 defsubr (&Sexpand_abbrev); | |
693 defsubr (&Sunexpand_abbrev); | |
694 defsubr (&Sinsert_abbrev_table_description); | |
695 defsubr (&Sdefine_abbrev_table); | |
696 } | |
52401 | 697 |
698 /* arch-tag: b721db69-f633-44a8-a361-c275acbdad7d | |
699 (do not change this comment) */ |