summaryrefslogtreecommitdiff
path: root/lisp/font-lock.el
diff options
context:
space:
mode:
authorSimon Marshall <simon@gnu.org>1997-04-23 07:10:09 +0000
committerSimon Marshall <simon@gnu.org>1997-04-23 07:10:09 +0000
commit1e38e8487e9fa8dc4f39430d6e3f2a9476dfb99d (patch)
tree92138868494ed868500f10ff343d4693fb36f5d5 /lisp/font-lock.el
parent2917491a9b9b8c252a6293c22edd36b53e8046b2 (diff)
downloademacs-1e38e8487e9fa8dc4f39430d6e3f2a9476dfb99d.tar.gz
Respect font-lock-face-attributes and custom fixes.
Diffstat (limited to 'lisp/font-lock.el')
-rw-r--r--lisp/font-lock.el115
1 files changed, 88 insertions, 27 deletions
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index b532edb1eff..43a3029625e 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -183,15 +183,32 @@
;;; Code:
+;; Define core `font-lock' group.
(defgroup font-lock nil
"Font Lock mode text highlighting package."
:link '(custom-manual "(emacs)Font Lock")
:group 'faces)
-(defgroup font-lock-faces nil
- "Font Lock mode faces."
+(defgroup font-lock-highlighting-faces nil
+ "Faces for highlighting text."
:prefix "font-lock-"
- :link '(custom-manual "(emacs)Font Lock")
+ :group 'font-lock)
+
+(defgroup font-lock-extra-types nil
+ "Extra mode-specific type names for highlighting declarations."
+ :group 'font-lock)
+
+;; Define support mode groups here for nicer `font-lock' group order.
+(defgroup fast-lock nil
+ "Font Lock support mode to cache fontification."
+ :link '(custom-manual "(emacs)Support Modes")
+ :load 'fast-lock
+ :group 'font-lock)
+
+(defgroup lazy-lock nil
+ "Font Lock support mode to fontify lazily."
+ :link '(custom-manual "(emacs)Support Modes")
+ :load 'lazy-lock
:group 'font-lock)
;; User variables.
@@ -283,7 +300,7 @@ call to make the search (called with one argument, the limit of the search).
MATCH is the subexpression of MATCHER to be highlighted. MATCH can be
calculated via the function `font-lock-keyword-depth'. FACENAME is an
expression whose value is the face name to use. FACENAME's default attributes
-can be defined via the variable `font-lock-face-attributes'.
+can be modified via \\[customize].
OVERRIDE and LAXMATCH are flags. If OVERRIDE is t, existing fontification can
be overwritten. If `keep', only parts not already fontified are highlighted.
@@ -608,11 +625,9 @@ To fontify a block (the function or paragraph containing point, or a number of
lines around point), perhaps because modification on the current line caused
syntactic change on other lines, you can use \\[font-lock-fontify-block].
-The default Font Lock mode faces and their attributes are defined in the
-variable `font-lock-face-attributes', and Font Lock mode default settings in
-the variable `font-lock-defaults-alist'. You can set your own default settings
-for some mode, by setting a buffer local value for `font-lock-defaults', via
-its mode hook."
+See the variable `font-lock-defaults-alist' for the Font Lock mode default
+settings. You can set your own default settings for some mode, by setting a
+buffer local value for `font-lock-defaults', via its mode hook."
(interactive "P")
;; Don't turn on Font Lock mode if we don't have a display (we're running a
;; batch job) or if the buffer is invisible (the name starts with a space).
@@ -1432,6 +1447,37 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(defvar font-lock-warning-face 'font-lock-warning-face
"Face name to use for things that should stand out.")
+;; Originally face attributes were specified via `font-lock-face-attributes'.
+;; Users then changed the default face attributes by setting this variable.
+;; However, we try and be back-compatible and respect its value if set except
+;; for faces where M-x customize has been used to save changes for the face.
+(when (boundp 'font-lock-face-attributes)
+ (let ((face-attributes font-lock-face-attributes))
+ (while face-attributes
+ (let* ((face-attribute (pop face-attributes))
+ (face (car face-attribute)))
+ ;; Rustle up a `defface' SPEC from a `font-lock-face-attributes' entry.
+ (unless (get face 'saved-face)
+ (let ((foreground (nth 1 face-attribute))
+ (background (nth 2 face-attribute))
+ (bold-p (nth 3 face-attribute))
+ (italic-p (nth 4 face-attribute))
+ (underline-p (nth 5 face-attribute))
+ face-spec)
+ (when foreground
+ (setq face-spec (cons ':foreground (cons foreground face-spec))))
+ (when background
+ (setq face-spec (cons ':background (cons background face-spec))))
+ (when bold-p
+ (setq face-spec (append '(:bold t) face-spec)))
+ (when italic-p
+ (setq face-spec (append '(:italic t) face-spec)))
+ (when underline-p
+ (setq face-spec (append '(:underline t) face-spec)))
+ (custom-declare-face face (list (list t face-spec)) nil)))))))
+
+;; But now we do it the custom way. Note that `defface' will not overwrite any
+;; faces declared above via `custom-declare-face'.
(defface font-lock-comment-face
'((((class grayscale) (background light))
(:foreground "DimGray" :bold t :italic t))
@@ -1441,7 +1487,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "OrangeRed"))
(t (:bold t :italic t)))
"Font Lock mode face used to highlight comments."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-string-face
'((((class grayscale) (background light)) (:foreground "DimGray" :italic t))
@@ -1450,7 +1496,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "LightSalmon"))
(t (:italic t)))
"Font Lock mode face used to highlight strings."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-keyword-face
'((((class grayscale) (background light)) (:foreground "LightGray" :bold t))
@@ -1459,7 +1505,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "Cyan"))
(t (:bold t)))
"Font Lock mode face used to highlight keywords."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-builtin-face
'((((class grayscale) (background light)) (:foreground "LightGray" :bold t))
@@ -1468,7 +1514,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "LightSteelBlue"))
(t (:bold t)))
"Font Lock mode face used to highlight builtins."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-function-name-face
;; Currently, Emacs/Custom does not support a :reverse or :invert spec.
@@ -1477,7 +1523,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(t ;(:reverse t :bold t)
(:italic t :bold t)))
"Font Lock mode face used to highlight function names."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-variable-name-face
'((((class grayscale) (background light))
@@ -1488,7 +1534,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "LightGoldenrod"))
(t (:bold t :italic t)))
"Font Lock mode face used to highlight variable names."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-type-face
'((((class grayscale) (background light)) (:foreground "Gray90" :bold t))
@@ -1497,7 +1543,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "PaleGreen"))
(t (:bold t :underline t)))
"Font Lock mode face used to highlight types."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-reference-face
'((((class grayscale) (background light))
@@ -1508,7 +1554,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(((class color) (background dark)) (:foreground "Aquamarine"))
(t (:bold t :underline t)))
"Font Lock mode face used to highlight references."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
(defface font-lock-warning-face
;; Currently, Emacs/Custom does not support a :reverse or :invert spec.
@@ -1517,7 +1563,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
(t ;(:reverse t :bold t)
(:italic t :bold t)))
"Font Lock mode face used to highlight warnings."
- :group 'font-lock-faces)
+ :group 'font-lock-highlighting-faces)
;;; End of Colour etc. support.
@@ -1679,7 +1725,7 @@ This means the number of parenthesized expressions."
(list (concat "(\\(def\\("
;; Function declarations.
"\\(advice\\|alias\\|"
- "ine-\\(derived-mode\\|function\\|skeleton\\)\\|"
+ "ine-\\(derived-mode\\|function\\|skeleton\\|widget\\)\\|"
"macro\\|subst\\|un\\)\\|"
;; Variable declarations.
"\\(const\\|custom\\|face\\|var\\)\\|"
@@ -1855,37 +1901,52 @@ This means the number of parenthesized expressions."
;; types might be the user's own or they might be generally accepted and used.
;; Generally accepted types are used to provide default variable values.
-(defvar c-font-lock-extra-types '("FILE" "\\sw+_t")
+(define-widget 'font-lock-extra-types-widget 'radio
+ "Widget `:type' for members of the custom group `font-lock-extra-types'.
+Members should `:load' the package `font-lock' to use this widget."
+ :args '((const :tag "none" nil)
+ (repeat :tag "types"
+ (string :tag "regexp"))))
+
+(defcustom c-font-lock-extra-types '("FILE" "\\sw+_t")
"*List of extra types to fontify in C mode.
Each list item should be a regexp not containing word-delimiters.
For example, a value of (\"FILE\" \"\\\\sw+_t\") means the word FILE and words
ending in _t are treated as type names.
-The value of this variable is used when Font Lock mode is turned on.")
+The value of this variable is used when Font Lock mode is turned on."
+ :type 'font-lock-extra-types-widget
+ :group 'font-lock-extra-types)
-(defvar c++-font-lock-extra-types '("string")
+(defcustom c++-font-lock-extra-types '("string")
"*List of extra types to fontify in C++ mode.
Each list item should be a regexp not containing word-delimiters.
For example, a value of (\"string\") means the word string is treated as a type
name.
-The value of this variable is used when Font Lock mode is turned on.")
+The value of this variable is used when Font Lock mode is turned on."
+ :type 'font-lock-extra-types-widget
+ :group 'font-lock-extra-types)
-(defvar objc-font-lock-extra-types '("Class" "BOOL" "IMP" "SEL")
+(defcustom objc-font-lock-extra-types '("Class" "BOOL" "IMP" "SEL")
"*List of extra types to fontify in Objective-C mode.
Each list item should be a regexp not containing word-delimiters.
For example, a value of (\"Class\" \"BOOL\" \"IMP\" \"SEL\") means the words
Class, BOOL, IMP and SEL are treated as type names.
-The value of this variable is used when Font Lock mode is turned on.")
+The value of this variable is used when Font Lock mode is turned on."
+ :type 'font-lock-extra-types-widget
+ :group 'font-lock-extra-types)
-(defvar java-font-lock-extra-types '("[A-Z\300-\326\330-\337]\\sw+")
+(defcustom java-font-lock-extra-types '("[A-Z\300-\326\330-\337]\\sw+")
"*List of extra types to fontify in Java mode.
Each list item should be a regexp not containing word-delimiters.
For example, a value of (\"[A-Z\300-\326\330-\337]\\\\sw+\") means capitalised
words (and words conforming to the Java id spec) are treated as type names.
-The value of this variable is used when Font Lock mode is turned on.")
+The value of this variable is used when Font Lock mode is turned on."
+ :type 'font-lock-extra-types-widget
+ :group 'font-lock-extra-types)
;;; C.