unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* font-lock basics?
@ 2005-01-31  4:03 Miles Bader
  2005-01-31 13:36 ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Miles Bader @ 2005-01-31  4:03 UTC (permalink / raw)


Is there some trick to using font-lock?

I tried the simplest thing I could think of:

  (progn
    (font-lock-mode -1)
    (kill-all-local-variables)
    (font-lock-add-keywords nil '(("high" . font-lock-keyword-face)))
    (font-lock-mode t))

on the following text in a buffer:

   Oh how I love high society.

... and .... no highlighted keywords.

What's up?

Here's the resulting value of font-lock-keywords:

   font-lock-keywords's value is 
   (t
    (("high" . font-lock-keyword-face))
    ("high"
     (0 font-lock-keyword-face)))

   Local in buffer asdf; global value is nil

-Miles
-- 
.Numeric stability is probably not all that important when you're guessing.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: font-lock basics?
  2005-01-31  4:03 font-lock basics? Miles Bader
@ 2005-01-31 13:36 ` Stefan Monnier
  2005-01-31 15:43   ` Francis Litterio
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2005-01-31 13:36 UTC (permalink / raw)
  Cc: emacs-devel

>   (progn
>     (font-lock-mode -1)
>     (kill-all-local-variables)
>     (font-lock-add-keywords nil '(("high" . font-lock-keyword-face)))
>     (font-lock-mode t))

Try to set font-lock-defaults instead.


        Stefan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: font-lock basics?
  2005-01-31 13:36 ` Stefan Monnier
@ 2005-01-31 15:43   ` Francis Litterio
  2005-01-31 16:14     ` Francis Litterio
  2005-01-31 16:29     ` Stefan Monnier
  0 siblings, 2 replies; 6+ messages in thread
From: Francis Litterio @ 2005-01-31 15:43 UTC (permalink / raw)


Stefan Monnier wrote:

>>   (progn
>>     (font-lock-mode -1)
>>     (kill-all-local-variables)
>>     (font-lock-add-keywords nil '(("high" . font-lock-keyword-face)))
>>     (font-lock-mode t))
>
> Try to set font-lock-defaults instead.

That begs the question: What is wrong with the above code?  According to
the docstrings for the functions called above, it should work.  Why
doesn't it?
--
Francis Litterio
franl <at> world . std . com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: font-lock basics?
  2005-01-31 15:43   ` Francis Litterio
@ 2005-01-31 16:14     ` Francis Litterio
  2005-01-31 16:29     ` Stefan Monnier
  1 sibling, 0 replies; 6+ messages in thread
From: Francis Litterio @ 2005-01-31 16:14 UTC (permalink / raw)


I wrote:

> Stefan Monnier wrote:
>
>>>   (progn
>>>     (font-lock-mode -1)
>>>     (kill-all-local-variables)
>>>     (font-lock-add-keywords nil '(("high" . font-lock-keyword-face)))
>>>     (font-lock-mode t))
>>
>> Try to set font-lock-defaults instead.
>
> That begs the question: What is wrong with the above code?  According to
> the docstrings for the functions called above, it should work.  Why
> doesn't it?

I think this code in function font-lock-default-function is preventing
the fontification from happening:

  ;; Only do hard work if the mode has specified stuff in
  ;; `font-lock-defaults'.
  (when (or font-lock-defaults
	    (cdr (assq major-mode font-lock-defaults-alist)))
    (font-lock-mode-internal mode)))

In a newly-created fundamental-mode buffer, font-lock-defaults is nil if
the user has not explicitly assigned it a value (and the font-lock
documentation does not state that one _must_ set font-lock-defaults for
font-lock-mode to work).

This patch to font-core.el fixes the problem:

--- font-core.el	01 Sep 2003 11:45:12 -0400	1.23
+++ font-core.el	31 Jan 2005 11:18:03 -0500	
@@ -200,8 +200,10 @@
 		(delq elt char-property-alias-alist))))))
 
   ;; Only do hard work if the mode has specified stuff in
-  ;; `font-lock-defaults'.
+  ;; `font-lock-defaults' or if `font-lock-keywords' is non-nil
+  ;; in this buffer.
   (when (or font-lock-defaults
+	    font-lock-keywords
 	    (cdr (assq major-mode font-lock-defaults-alist)))
     (font-lock-mode-internal mode)))
 
I hope this helps.
--
Francis Litterio
franl <at> world . std . com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: font-lock basics?
  2005-01-31 15:43   ` Francis Litterio
  2005-01-31 16:14     ` Francis Litterio
@ 2005-01-31 16:29     ` Stefan Monnier
  2005-01-31 17:31       ` Francis Litterio
  1 sibling, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2005-01-31 16:29 UTC (permalink / raw)
  Cc: emacs-devel

>>> (progn
>>> (font-lock-mode -1)
>>> (kill-all-local-variables)
>>> (font-lock-add-keywords nil '(("high" . font-lock-keyword-face)))
>>> (font-lock-mode t))
>> 
>> Try to set font-lock-defaults instead.

> That begs the question: What is wrong with the above code?  According to
> the docstrings for the functions called above, it should work.  Why
> doesn't it?

Actually the docstrings are sufficiently vague that it's not clear whether
it should work or not.  In any case one of the problems is that
font-lock-add-keywords is meant to add to a *preexisting* list of keywords.
So the above only makes sense if the font-lock-add-keywords is called from
some minor mode which simply assumes that the major mode has setup
font-lock-defaults.  And even that doesn't work so well because the minor
mode has no control over font-lock-case-fold-search.

Maybe the patch below papers over this particular manifestation of the more
general problem.

Miles, what is the context of your question?


        Stefan


Index: font-core.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/font-core.el,v
retrieving revision 1.23
diff -u -u -b -r1.23 font-core.el
--- font-core.el	1 Sep 2003 15:45:12 -0000	1.23
+++ font-core.el	31 Jan 2005 16:24:56 -0000
@@ -1,7 +1,7 @@
 ;;; font-core.el --- Core interface to font-lock
 
-;; Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999, 2000, 2001, 02, 2003
-;;  Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+;;   2002, 2003, 2005  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: languages, faces
@@ -202,6 +202,7 @@
   ;; Only do hard work if the mode has specified stuff in
   ;; `font-lock-defaults'.
   (when (or font-lock-defaults
+	    (and (boundp 'font-lock-keywords) font-lock-keywords)
 	    (cdr (assq major-mode font-lock-defaults-alist)))
     (font-lock-mode-internal mode)))
 
@@ -295,6 +296,5 @@
 
 (provide 'font-core)
 
+;; arch-tag: f8c286e1-02f7-41d9-b89b-1b67780aed71
 ;;; font-core.el ends here
-
-;;; arch-tag: f8c286e1-02f7-41d9-b89b-1b67780aed71

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: font-lock basics?
  2005-01-31 16:29     ` Stefan Monnier
@ 2005-01-31 17:31       ` Francis Litterio
  0 siblings, 0 replies; 6+ messages in thread
From: Francis Litterio @ 2005-01-31 17:31 UTC (permalink / raw)


Stefan Monnier wrote:

> Maybe the patch below papers over this particular manifestation of the more
> general problem.

It does.  Your patch is preferable to mine (in another message) -- I
didn't realize that font-lock-keywords might not be bound when this code
executes.

> Index: font-core.el
> ===================================================================
> RCS file: /cvsroot/emacs/emacs/lisp/font-core.el,v
> retrieving revision 1.23
> diff -u -u -b -r1.23 font-core.el
> --- font-core.el	1 Sep 2003 15:45:12 -0000	1.23
> +++ font-core.el	31 Jan 2005 16:24:56 -0000
> @@ -1,7 +1,7 @@
>  ;;; font-core.el --- Core interface to font-lock
>  
> -;; Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999, 2000, 2001, 02, 2003
> -;;  Free Software Foundation, Inc.
> +;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
> +;;   2002, 2003, 2005  Free Software Foundation, Inc.
>  
>  ;; Maintainer: FSF
>  ;; Keywords: languages, faces
> @@ -202,6 +202,7 @@
>    ;; Only do hard work if the mode has specified stuff in
>    ;; `font-lock-defaults'.
>    (when (or font-lock-defaults
> +	    (and (boundp 'font-lock-keywords) font-lock-keywords)
>  	    (cdr (assq major-mode font-lock-defaults-alist)))
>      (font-lock-mode-internal mode)))
>  
> @@ -295,6 +296,5 @@
>  
>  (provide 'font-core)
>  
> +;; arch-tag: f8c286e1-02f7-41d9-b89b-1b67780aed71
>  ;;; font-core.el ends here
> -
> -;;; arch-tag: f8c286e1-02f7-41d9-b89b-1b67780aed71

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2005-01-31 17:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-31  4:03 font-lock basics? Miles Bader
2005-01-31 13:36 ` Stefan Monnier
2005-01-31 15:43   ` Francis Litterio
2005-01-31 16:14     ` Francis Litterio
2005-01-31 16:29     ` Stefan Monnier
2005-01-31 17:31       ` Francis Litterio

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).