From: Stefan Monnier Date: Tue, 5 Jul 2011 18:26:33 +0000 (-0400) Subject: * lisp/emacs-lisp/lisp-mode.el (lisp-interaction-mode-abbrev-table): X-Git-Tag: emacs-pretest-24.0.90~104^2~419^2~29 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=450a0f09279df347a10d6c1e4b809a5082daf9c8;p=emacs.git * lisp/emacs-lisp/lisp-mode.el (lisp-interaction-mode-abbrev-table): Let define-derived-mode define it. * lisp/emacs-lisp/derived.el (define-derived-mode): Try to avoid creating cycles of abbrev-table inheritance. Fixes: debbugs:8998 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 05fbbfa89fc..66215266bdb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2011-07-05 Stefan Monnier + + * emacs-lisp/lisp-mode.el (lisp-interaction-mode-abbrev-table): + Let define-derived-mode define it. + * emacs-lisp/derived.el (define-derived-mode): Try to avoid creating + cycles of abbrev-table inheritance (bug#8998). + 2011-07-05 Roland Winkler * textmodes/bibtex.el: Add support for biblatex. @@ -10,15 +17,15 @@ (bibtex-entry-alist, bibtex-field-alist): New widgets. (bibtex-set-dialect): New command. (bibtex-entry-type, bibtex-entry-head) - (bibtex-entry-maybe-empty-head, bibtex-any-valid-entry-type): Bind - via bibtex-set-dialect. + (bibtex-entry-maybe-empty-head, bibtex-any-valid-entry-type): + Bind via bibtex-set-dialect. (bibtex-Article, bibtex-Book, bibtex-Booklet, bibtex-InBook) (bibtex-InCollection, bibtex-InProceedings, bibtex-Manual) (bibtex-MastersThesis, bibtex-Misc, bibtex-PhdThesis) (bibtex-Proceedings, bibtex-TechReport, bibtex-Unpublished): Define via bibtex-set-dialect. - (bibtex-name-in-field, bibtex-remove-OPT-or-ALT): Obey - bibtex-no-opt-remove-re. + (bibtex-name-in-field, bibtex-remove-OPT-or-ALT): + Obey bibtex-no-opt-remove-re. (bibtex-vec-push, bibtex-vec-incr): New functions. (bibtex-format-entry, bibtex-field-list) (bibtex-print-help-message, bibtex-validate) diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el index e8f799b9afc..4fda2bf1d52 100644 --- a/lisp/emacs-lisp/derived.el +++ b/lisp/emacs-lisp/derived.el @@ -255,7 +255,10 @@ No problems result if this variable is not bound. (not (eq parent (standard-syntax-table)))) (set-char-table-parent ,syntax (syntax-table))))) ,(when declare-abbrev - `(unless (abbrev-table-get ,abbrev :parents) + `(unless (or (abbrev-table-get ,abbrev :parents) + ;; This can happen if the major mode defines + ;; the abbrev-table to be its parent's. + (eq ,abbrev local-abbrev-table)) (abbrev-table-put ,abbrev :parents (list local-abbrev-table)))))) (use-local-map ,map) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 114e9755039..32f67a173f9 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -525,7 +525,6 @@ if that value is non-nil." "Keymap for Lisp Interaction mode. All commands in `lisp-mode-shared-map' are inherited by this map.") -(defvar lisp-interaction-mode-abbrev-table lisp-mode-abbrev-table) (define-derived-mode lisp-interaction-mode emacs-lisp-mode "Lisp Interaction" "Major mode for typing and evaluating Lisp forms. Like Lisp mode except that \\[eval-print-last-sexp] evals the Lisp expression