Mercurial > emacs
changeset 74435:b18d856c25f1
(Qforce): New Lisp_Object.
(Fdefine_abbrev): Do not overwrite non-system abbrevs with system
abbrevs, unless 'force is applied.
(syms_of_abbrev): Add Qforce.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 05 Dec 2006 05:29:21 +0000 |
parents | 2b464ae7b20e |
children | 3272b45bb643 |
files | src/abbrev.c |
diffstat | 1 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/abbrev.c Tue Dec 05 05:26:08 2006 +0000 +++ b/src/abbrev.c Tue Dec 05 05:29:21 2006 +0000 @@ -83,7 +83,7 @@ Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook; -Lisp_Object Qsystem_type, Qcount; +Lisp_Object Qsystem_type, Qcount, Qforce; DEFUN ("make-abbrev-table", Fmake_abbrev_table, Smake_abbrev_table, 0, 0, 0, doc: /* Create a new, empty abbrev table object. */) @@ -107,7 +107,7 @@ XVECTOR (table)->contents[i] = make_number (0); return Qnil; } - + DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_abbrev, 3, 6, 0, doc: /* Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK. NAME must be a string. @@ -123,7 +123,9 @@ \(The default is zero.) SYSTEM-FLAG, if non-nil, says that this is a "system" abbreviation -which should not be saved in the user's abbreviation file. */) +which should not be saved in the user's abbreviation file. +Unless SYSTEM-FLAG is `force', a system abbreviation will not +overwrite a non-system abbreviation of the same name. */) (table, name, expansion, hook, count, system_flag) Lisp_Object table, name, expansion, hook, count, system_flag; { @@ -131,6 +133,16 @@ CHECK_VECTOR (table); CHECK_STRING (name); + /* If defining a system abbrev, do not overwrite a non-system abbrev + of the same name, unless 'force is used. */ + if (!NILP (system_flag) && !EQ (system_flag, Qforce)) + { + sym = Fintern_soft (name, table); + + if (!NILP (SYMBOL_VALUE (sym)) && + NILP (Fplist_get (XSYMBOL (sym)->plist, Qsystem_type))) return Qnil; + } + if (NILP (count)) count = make_number (0); else @@ -640,6 +652,9 @@ Qcount = intern ("count"); staticpro (&Qcount); + Qforce = intern ("force"); + staticpro (&Qforce); + DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_table_name_list, doc: /* List of symbols whose values are abbrev tables. */); Vabbrev_table_name_list = Fcons (intern ("fundamental-mode-abbrev-table"),