diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ChangeLog | 12 | ||||
-rw-r--r-- | lisp/emacs-lisp/easy-mmode.el | 7 | ||||
-rw-r--r-- | lisp/font-core.el | 1 | ||||
-rw-r--r-- | lisp/font-lock.el | 23 |
4 files changed, 32 insertions, 11 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d5951bbbe2..798df418e7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-02-23 Alan Mackenzie <[email protected]> + + * emacs-lisp/easy-mmode.el (define-minor-mode): Add extra + parameter "after-hook:" to allow the expansion to run code after + the execution of the mode hooks. + + * font-lock.el (font-lock-initial-fontify): New function extracted + from font-lock-mode-interal. + + * font-core.el (font-lock-mode): call font-lock-initial-fontify in + :after-hook. + 2012-02-23 Stefan Monnier <[email protected]> * minibuffer.el: Make sure cycling is reset upon edit with icomplete.el. diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index dbacba6cd2..88698a1f06 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -135,6 +135,8 @@ BODY contains code to execute each time the mode is enabled or disabled. the new state, and sets it. If you specify a :variable, this function does not define a MODE variable (nor any of the terms used in :variable). +:after-hook A single lisp form which is evaluated after the mode hooks + have been run. It should not be quoted. For example, you could write (define-minor-mode foo-mode \"If enabled, foo on you!\" @@ -170,6 +172,7 @@ For example, you could write (setter nil) ;The function (if any) to set the mode var. (modefun mode) ;The minor mode function name we're defining. (require t) + (after-hook nil) (hook (intern (concat mode-name "-hook"))) (hook-on (intern (concat mode-name "-on-hook"))) (hook-off (intern (concat mode-name "-off-hook"))) @@ -197,6 +200,7 @@ For example, you could write (setq mode variable) (setq mode (car variable)) (setq setter (cdr variable)))) + (:after-hook (setq after-hook (pop body))) (t (push keyw extra-keywords) (push (pop body) extra-keywords)))) (setq keymap-sym (if (and keymap (symbolp keymap)) keymap @@ -275,7 +279,8 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. (not (equal ,last-message (current-message)))) (message ,(format "%s %%sabled" pretty-name) - (if ,mode "en" "dis")))))) + (if ,mode "en" "dis"))))) + ,@(when after-hook `(,after-hook))) (force-mode-line-update) ;; Return the new setting. ,mode) diff --git a/lisp/font-core.el b/lisp/font-core.el index f6701c0c79..9b655319bc 100644 --- a/lisp/font-core.el +++ b/lisp/font-core.el @@ -138,6 +138,7 @@ The above is the default behavior of `font-lock-mode'; you may specify your own function which is called when `font-lock-mode' is toggled via `font-lock-function'. " nil nil nil + :after-hook (if font-lock-mode (font-lock-initial-fontify)) ;; Don't turn on Font Lock mode if we don't have a display (we're running a ;; batch job) or if the buffer is invisible (the name starts with a space). (when (or noninteractive (eq (aref (buffer-name) 0) ?\s)) diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 9f9445bdea..a65a2c94c7 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -629,21 +629,24 @@ Major/minor modes can set this variable if they know which option applies.") ;; Shut up the byte compiler. (defvar font-lock-face-attributes)) ; Obsolete but respected if set. +(defun font-lock-initial-fontify () + ;; The first fontification after turning the mode on. This must + ;; only be called after the mode hooks have been run. + (let ((max-size (font-lock-value-in-major-mode font-lock-maximum-size))) + (cond (font-lock-fontified + nil) + ((or (null max-size) (> max-size (buffer-size))) + (font-lock-fontify-buffer)) + (font-lock-verbose + (message "Fontifying %s...buffer size greater than font-lock-maximum-size" + (buffer-name)))))) + (defun font-lock-mode-internal (arg) ;; Turn on Font Lock mode. (when arg (add-hook 'after-change-functions 'font-lock-after-change-function t t) (font-lock-set-defaults) - (font-lock-turn-on-thing-lock) - ;; Fontify the buffer if we have to. - (let ((max-size (font-lock-value-in-major-mode font-lock-maximum-size))) - (cond (font-lock-fontified - nil) - ((or (null max-size) (> max-size (buffer-size))) - (font-lock-fontify-buffer)) - (font-lock-verbose - (message "Fontifying %s...buffer size greater than font-lock-maximum-size" - (buffer-name)))))) + (font-lock-turn-on-thing-lock)) ;; Turn off Font Lock mode. (unless font-lock-mode (remove-hook 'after-change-functions 'font-lock-after-change-function t) |