[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: First fontification of a buffer happens before font lock is fully in
From: |
Alan Mackenzie |
Subject: |
Re: First fontification of a buffer happens before font lock is fully initialised. |
Date: |
Wed, 8 Feb 2012 21:43:18 +0000 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hello, Stefan.
On Tue, Feb 07, 2012 at 01:02:07PM -0500, Stefan Monnier wrote:
> > Can we not trust the good taste and sense of hackers generally?
> Have you ever looked at the Elisp code out there ;-)?
_Looked_ at it? ;-)
> > We can certainly trust the Emacs developers.
> I certainly wouldn't. Especially not the maintainers.
Hey, thanks!! :-)
> >> But maybe we can have an :after-hook. Some major modes would also
> >> appreciate such a feature, so maybe this same arg can be added to
> >> both define-minor-mode and define-derived-mode.
> > Or, perhaps, even (defmacro run-hooks-here () ...), which would preserve
> > the order of the initialisation forms in the mode. But I'd be happy
> > enough with :after-hook. Would you like me to implement it?
> Ah, yes, some way to force "run it here rather than elsewhere" would
> be elegant. The problem, is how to implement it in a way that's not
> completely disgusting.
Having tried this this afternoon, I don't see how it can be done
elegantly this way.
> The :after-hook has the advantage of being straightforward.
> If we want to fix it for 24.1, "straightforward" is important.
> Patch welcome, either way,
OK, Here goes:
=== modified file 'lisp/emacs-lisp/easy-mmode.el'
*** lisp/emacs-lisp/easy-mmode.el 2012-02-07 08:26:54 +0000
--- lisp/emacs-lisp/easy-mmode.el 2012-02-08 21:22:45 +0000
***************
*** 135,140 ****
--- 135,142 ----
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-hooks A single lisp form which is evaluated after the mode hooks
+ have been run. It should be quoted.
For example, you could write
(define-minor-mode foo-mode \"If enabled, foo on you!\"
***************
*** 170,175 ****
--- 172,178 ----
(setter nil) ;The function (if any) to set the mode var.
(modefun mode) ;The minor mode function name we're defining.
(require t)
+ (after-hooks nil)
(hook (intern (concat mode-name "-hook")))
(hook-on (intern (concat mode-name "-on-hook")))
(hook-off (intern (concat mode-name "-off-hook")))
***************
*** 197,202 ****
--- 200,206 ----
(setq mode variable)
(setq mode (car variable))
(setq setter (cdr variable))))
+ (:after-hooks (setq after-hooks (pop body)))
(t (push keyw extra-keywords) (push (pop body) extra-keywords))))
(setq keymap-sym (if (and keymap (symbolp keymap)) keymap
***************
*** 265,271 ****
,@body
;; The on/off hooks are here for backward compatibility only.
(run-hooks ',hook (if ,mode ',hook-on ',hook-off))
! (if (called-interactively-p 'any)
(progn
,(if (and globalp (symbolp mode))
`(customize-mark-as-set ',mode))
--- 269,276 ----
,@body
;; The on/off hooks are here for backward compatibility only.
(run-hooks ',hook (if ,mode ',hook-on ',hook-off))
! ,@(when after-hooks `(,(eval after-hooks)))
! (if (called-interactively-p 'any)
(progn
,(if (and globalp (symbolp mode))
`(customize-mark-as-set ',mode))
> Stefan
--
Alan Mackenzie (Nuremberg, Germany).