summaryrefslogtreecommitdiff
path: root/src/cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmds.c')
-rw-r--r--src/cmds.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/cmds.c b/src/cmds.c
index 8ca407a2abd..2e6464bf0ce 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -320,10 +320,20 @@ internal_self_insert (c1, noautofill)
&& PT > BEGV && SYNTAX (FETCH_CHAR (PT - 1)) == Sword)
{
int modiff = MODIFF;
- Fexpand_abbrev ();
- /* We can't trust the value of Fexpand_abbrev,
- but if Fexpand_abbrev changed the buffer,
- assume it expanded something. */
+ Lisp_Object sym;
+
+ sym = Fexpand_abbrev ();
+
+ /* If we expanded an abbrev which has only a hook,
+ return right away--don't really self-insert. */
+ if (! NILP (sym) && ! NILP (XSYMBOL (sym)->function))
+ {
+ Lisp_Object prop;
+ prop = Fget (sym, intern ("no-self-insert"));
+ if (! NILP (prop))
+ return Qnil;
+ }
+
if (MODIFF != modiff)
hairy = 2;
}