Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

please help with font-lock-add-keywords

3 views
Skip to first unread message

bufie

unread,
Dec 30, 2009, 8:06:19 PM12/30/09
to
(originally posted to comp.emacs, but moved here since it seems more
appropriate...)

Hi all,

I'd like to fontify a whole bunch of function names for a project I'm
working on (which uses lisp mode, not emacs-lisp-mode -- for reference,
I'm using GNU emacs 23.1.1).

Almost all of the functions start with the same prefix "qbb-" so that
shouldn't be too hard (though for the examples I've just tried to use
some actual function names to get it to work). I've done a bunch of web
searching, and haven't figured out a way to make this work.

I've tried all of the following, and none of them work for me... I
don't claim to be a wizard at this stuff, but thought I had followed the
examples correctly

(font-lock-add-keywords
'lisp-mode
'(("\\<\\(qbb-create-image\\|qbb-destroy-image\\)\\>" .
font-lock-keyword-face)))

(font-lock-add-keywords
'lisp-mode
'(("\\<\\qbb-create-image\\)" 2 font-lock-keyword-face t)))

(add-hook 'lisp-mode-hook
(lambda ()
(font-lock-add-keywords
nil
'(("\\<\\(qbb-create-image\\|qbb-destroy-image\\)\\>" .
font-lock-keyword-face)))))

I'm sure this can't be as hard as I'm making it -- help, please!

Thanks in advance!

b

Tassilo Horn

unread,
Dec 31, 2009, 8:08:46 AM12/31/09
to help-gn...@gnu.org
bufie <bu...@spamneggs.com> writes:

Hi!

> I'd like to fontify a whole bunch of function names for a project I'm
> working on (which uses lisp mode, not emacs-lisp-mode -- for
> reference, I'm using GNU emacs 23.1.1).

This works for me and highlights any symbol starting with qbb- in the
keyword face.

--8<---------------cut here---------------start------------->8---
(font-lock-add-keywords
'lisp-mode
'(("\\<qbb-[[:alnum:]-]+\\>" . font-lock-keyword-face)))
--8<---------------cut here---------------end--------------->8---

> (font-lock-add-keywords
> 'lisp-mode
> '(("\\<\\(qbb-create-image\\|qbb-destroy-image\\)\\>" .
> font-lock-keyword-face)))

Looks ok to me.

> (font-lock-add-keywords
> 'lisp-mode
> '(("\\<\\qbb-create-image\\)" 2 font-lock-keyword-face t)))

^
I think a paren is missing there. And if there was one, you would like
to highlight the first group, so the 2 has to be replaced with 1.

> (add-hook 'lisp-mode-hook
> (lambda ()
> (font-lock-add-keywords
> nil
> '(("\\<\\(qbb-create-image\\|qbb-destroy-image\\)\\>" .
> font-lock-keyword-face)))))

Looks correct. But when using the ("regexp" . face) form, you can use
shy groups for performance reasons, because here you refer to the whole
match anyway and not to a group by number.

Hm, if your first and last solutions don't work, I'd guess you are not
in lisp-mode...

Bye,
Tassilo

bufie

unread,
Dec 31, 2009, 6:14:24 PM12/31/09
to
Tassilo Horn wrote:
> bufie <bu...@spamneggs.com> writes:
>
> Hi!
>
>> I'd like to fontify a whole bunch of function names for a project I'm
>> working on (which uses lisp mode, not emacs-lisp-mode -- for
>> reference, I'm using GNU emacs 23.1.1).
>
> This works for me and highlights any symbol starting with qbb- in the
> keyword face.
>
> --8<---------------cut here---------------start------------->8---
> (font-lock-add-keywords
> 'lisp-mode
> '(("\\<qbb-[[:alnum:]-]+\\>" . font-lock-keyword-face)))
> --8<---------------cut here---------------end--------------->8---

Thanks! This is perfect -- it seems to do exactly what I needed! (and
thanks for the help on the other possibilities as well -- that's great
and may come in handy in the future!)

Thanks again, and Happy New Year!

-b

David Combs

unread,
Jan 6, 2010, 7:39:06 PM1/6/10
to
In article <mailman.477.126226496...@gnu.org>,

Please, what is a "shy group"? Some math thing?

Thanks,

David

Lennart Borgman

unread,
Jan 6, 2010, 8:01:40 PM1/6/10
to David Combs, help-gn...@gnu.org
On Thu, Jan 7, 2010 at 1:39 AM, David Combs <dkc...@panix.com> wrote:
>>> (add-hook 'lisp-mode-hook
>>>        (lambda ()
>>>          (font-lock-add-keywords
>>>           nil
>>>              '(("\\<\\(qbb-create-image\\|qbb-destroy-image\\)\\>" .
>>>                 font-lock-keyword-face)))))
>>
>>Looks correct.  But when using the ("regexp" . face) form, you can use
>>shy groups for performance reasons, because here you refer to the whole
>
> Please, what is a "shy group"?   Some math thing?


It is a group that does not record sub expressions in the match.
Written with (?: ...) like

'(("\\<\\(?:qbb-create-image\\|qbb-destroy-image\\)\\>" .


0 new messages