bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#15219: Emacs Lisp mode and Lisp mode font-locking


From: Bozhidar Batsov
Subject: bug#15219: Emacs Lisp mode and Lisp mode font-locking
Date: Fri, 30 Aug 2013 16:23:37 +0300

On Friday, August 30, 2013 at 3:45 PM, Stefan Monnier wrote:
I've noticed something odd about the font-locking in Emacs Lisp mode and
Lisp mode - keyword args are highlighted using the font-lock-builtin-face
and constructs like &optional are highlighted using
font-lock-type-face. I guess this was was done way back and hasn't been
updated in a while, but I think it might a good idea to revise this. Pretty
sure those font faces are intended for different usage. I think it would be
great if all Emacs programming modes used the built-in font-lock faces
consistently, so that the meaning of certain faces doesn't change from mode
to mode. I guess that the two modes might also start using the
font-lock-built-in face to highlight their core functions (like car, cdr,
mapcar, mapc, etc) - as Clojure mode does. Personally I feel that uses of
the keyword face for things that are not special forms (like the when macro)
should be replaced with uses of the built-in face.

Which things are special forms and which things are macros is
somewhat arbitrary. The important thing to know about them is that
they're not functions, so their arguments may not be evaluated in the
usual way.
Fair point. I guess it makes sense to some extend to consider some macros to be "keywords". 
Also macros are used to introduce new syntactic constructs: in normal
programming languages, something like `when' would be highlighted as
a `keyword', not as a `builtin'.

I'm not completely sure what the `builtin' is used for, usually.
What information is it meant to provide?
Generally the idea behind fontifying built-ins (AFAIK) is to remind programmers that something is part of the core of the language and it'd be unwise to redefine or shadow it. For instance in Clojure mode all methods from the clojure.core namespace are font-locked with the built-in face.
I mean, do you consider
`mapcar' "builtin" because it's fast? Because it's implemented in C?
Because it's predefined (no need for any kind of autoloading/require)?
Is `car' builtin because "if you didn't have it, you'd have to invent
it" (IOW can't be implemented in Elisp)?

Normally built-in functions would be those that came with the standard library of the language and are pretty generic in nature.  I guess in Emacs Lisp that would be functions like mapcar, mapc, vector, car, cdr - the building blocks on which everything else rests upon. I guess there are not that much of those and they haven't changed much in a long while. And as the Emacs manual itself states "font-lock-builtin-face is for the names of built-in functions". 

Stefan
Anyways, I'd be happy to get just a fix for the keywords and &optional (and related) faces, since those are definitely off.


reply via email to

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