GNU bug report logs - #635
Adding font-lock keywords results in no font-lock at all

Previous Next

Package: emacs;

Reported by: Klaus Zeitler <kzeitler <at> alcatel-lucent.com>

Date: Fri, 1 Aug 2008 06:35:03 UTC

Severity: normal

Done: Chong Yidong <cyd <at> stupidchicken.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: martin rudalics <rudalics <at> gmx.at>
To: Klaus Zeitler <kzeitler <at> alcatel-lucent.com>,
        635 <at> debbugs.gnu.org
Cc: bug-gnu-emacs <at> gnu.org
Subject: bug#635: Adding font-lock keywords results in no font-lock at all
Date: Tue, 05 Aug 2008 15:12:46 +0200
> For many years I had the following statement in my .emacs file:
>
> (defun show-tabs () "Show tabs with a slightly changed background"
>   (font-lock-add-keywords nil '(("\t"  (0 'tab-face t))) t))
> (add-hook 'font-lock-mode-hook 'show-tabs)
>
> This has worked without any problems up to 22.1.
> In version 22.2 and 23 I do have problems with syntax highlighting due
> to these few lines above in some modes, e.g. when I try M-x list-faces-display
> all colors are gone.

The behavior you observe seems due to the change

2007-06-11  Stefan Monnier  <monnier <at> iro.umontreal.ca>

	* font-lock.el (font-lock-add-keywords): In case font-lock was only
	half-activated, forcefully activate it completely.

which added the following lines to `font-lock-add-keywords'

         (when (and font-lock-mode
                    (not (or font-lock-keywords font-lock-defaults)))
           ;; The major mode has not set any keywords, so when we enabled
           ;; font-lock-mode it only enabled the font-core.el part, not the
           ;; font-lock-mode-internal.  Try again.
           (font-lock-mode -1)
           (set (make-local-variable 'font-lock-defaults) '(nil t))
           (font-lock-mode 1))

What happens appears to be that in any mode that does not specify
`font-lock-keywords' (like `help-mode' or `view-mode' in your case),
(font-lock-mode -1) unfontifies the entire buffer thus removing any
faces assigned earlier by, for example, `list-faces-display'.  Since
these faces are not reassigned by font-lock you won't get them back
either :-(

AFAICT, this change also broke `hi-lock-mode' in such buffers.


Get your original behavior back by writing something like

(defun show-tabs () "Show tabs with a slightly changed background"
  (unless (or font-lock-keywords font-lock-defaults)
    (set (make-local-variable 'font-lock-defaults) '(nil t)))
  (font-lock-add-keywords nil '(("\t"  (0 'tab-face t))) t))
(add-hook 'font-lock-mode-hook 'show-tabs)

or by removing the offending lines from font-lock.el ;-(

martin





This bug report was last modified 14 years and 226 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.