[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 ****
             ;; The on/off hooks are here for backward compatibility only.
             (run-hooks ',hook (if ,mode ',hook-on ',hook-off))
!            (if (called-interactively-p 'any)
                   ,(if (and globalp (symbolp mode))
                        `(customize-mark-as-set ',mode))
--- 269,276 ----
             ;; 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)
                   ,(if (and globalp (symbolp mode))
                        `(customize-mark-as-set ',mode))

>         Stefan

Alan Mackenzie (Nuremberg, Germany).

reply via email to

[Prev in Thread] Current Thread [Next in Thread]