From a48b49413891e9e2be389ed6992a45d204093cad Mon Sep 17 00:00:00 2001 From: Randy Taylor Date: Fri, 28 Oct 2022 22:39:50 -0400 Subject: [PATCH] Add more font-lock faces (Bug#58940) * lisp/font-lock.el (font-lock-bracket-face, font-lock-delimiter-face, font-lock-escape-face, font-lock-number-face, font-lock-misc-punctuation-face, font-lock-operator-face, font-lock-property-face, font-lock-punctuation-face): Define new faces. * lisp/cus-theme.el (custom-theme--listed-faces): Add them to the list. * doc/lispref/modes.texi (Faces for Font Lock): Document them. * etc/NEWS: Mention them. --- doc/lispref/modes.texi | 65 +++++++++++++++++++++++++++++++++++++ etc/NEWS | 8 +++++ lisp/cus-theme.el | 16 +++++---- lisp/font-lock.el | 73 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 6 deletions(-) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index c1b092247b..3f3e7037cf 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -3653,6 +3653,71 @@ Faces for Font Lock @item font-lock-negation-char-face @vindex font-lock-negation-char-face for easily-overlooked negation characters. + +@item font-lock-escape-face +@vindex font-lock-escape-face +for escape sequences in strings. +This face inherits, by default, from @code{font-lock-regexp-grouping-backslash}. + +Here is an example in Python, where the escape sequence @code{\n} is used: + +@smallexample +@group +print('Hello world!\n') +@end group +@end smallexample + +@item font-lock-number-face +@vindex font-lock-number-face +for numbers. + +@item font-lock-operator-face +@vindex font-lock-operator-face +for operators. + +@item font-lock-property-face +@vindex font-lock-property-face +for properties of an object, such as the declaration and use of fields +in a struct. +This face inherits, by default, from @code{font-lock-variable-name-face}. + +For example, + +@smallexample +@group +typedef struct +@{ + int prop; +// ^ property +@} obj; + +int main() +@{ + obj o; + o.prop = 3; +// ^ property +@} +@end group +@end smallexample + +@item font-lock-punctuation-face +@vindex font-lock-punctuation-face +for punctuation such as brackets and delimiters. + +@item font-lock-bracket-face +@vindex font-lock-bracket-face +for brackets (e.g., @code{()}, @code{[]}, @code{@{@}}). +This face inherits, by default, from @code{font-lock-punctuation-face}. + +@item font-lock-delimiter-face +@vindex font-lock-delimiter-face +for delimiters (e.g., @code{;}, @code{:}, @code{,}). +This face inherits, by default, from @code{font-lock-punctuation-face}. + +@item font-lock-misc-punctuation-face +@vindex font-lock-misc-punctuation-face +for punctuation that is not a bracket or delimiter. +This face inherits, by default, from @code{font-lock-punctuation-face}. @end table @node Syntactic Font Lock diff --git a/etc/NEWS b/etc/NEWS index c5a142b500..74f1948569 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -732,6 +732,14 @@ If the current buffer is visiting a file that is executable, the This determines how long to pause Emacs after a process filter/sentinel error has been handled. ++++ +** New faces for font-lock. +These faces are primarily meant for use with tree-sitter. They are: +'font-lock-bracket-face', 'font-lock-delimiter-face', +'font-lock-escape-face', 'font-lock-number-face', +'font-lock-misc-punctuation-face', 'font-lock-operator-face', +'font-lock-property-face', 'font-lock-punctuation-face'. + +++ ** New face 'variable-pitch-text'. This face is like 'variable-pitch' (from which it inherits), but is diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el index 90680ff68f..1df2ab8db7 100644 --- a/lisp/cus-theme.el +++ b/lisp/cus-theme.el @@ -66,13 +66,17 @@ custom-theme--listed-faces variable-pitch escape-glyph homoglyph minibuffer-prompt highlight region shadow secondary-selection trailing-whitespace - font-lock-builtin-face font-lock-comment-delimiter-face - font-lock-comment-face font-lock-constant-face - font-lock-doc-face font-lock-doc-markup-face font-lock-function-name-face + font-lock-bracket-face font-lock-builtin-face + font-lock-comment-delimiter-face font-lock-comment-face + font-lock-constant-face font-lock-delimiter-face + font-lock-doc-face font-lock-doc-markup-face + font-lock-escape-face font-lock-function-name-face font-lock-keyword-face font-lock-negation-char-face - font-lock-preprocessor-face font-lock-regexp-grouping-backslash - font-lock-regexp-grouping-construct font-lock-string-face - font-lock-type-face font-lock-variable-name-face + font-lock-number-face font-lock-misc-punctuation-face + font-lock-operator-face font-lock-preprocessor-face + font-lock-property-face font-lock-punctuation-face + font-lock-regexp-grouping-backslash font-lock-regexp-grouping-construct + font-lock-string-face font-lock-type-face font-lock-variable-name-face font-lock-warning-face button link link-visited fringe header-line tooltip mode-line mode-line-buffer-id mode-line-emphasis mode-line-highlight mode-line-inactive diff --git a/lisp/font-lock.el b/lisp/font-lock.el index e88dc1d3b7..6e284dd3e5 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -359,6 +359,30 @@ font-lock-negation-char-face (defvar font-lock-preprocessor-face 'font-lock-preprocessor-face "Face name to use for preprocessor directives.") +(defvar font-lock-escape-face 'font-lock-escape-face + "Face name to use for escape sequences in strings.") + +(defvar font-lock-number-face 'font-lock-number-face + "Face name to use for numbers.") + +(defvar font-lock-operator-face 'font-lock-operator-face + "Face name to use for operators.") + +(defvar font-lock-property-face 'font-lock-property-face + "Face name to use for properties.") + +(defvar font-lock-punctuation-face 'font-lock-punctuation-face + "Face name to use for punctuation.") + +(defvar font-lock-bracket-face 'font-lock-bracket-face + "Face name to use for brackets.") + +(defvar font-lock-delimiter-face 'font-lock-delimiter-face + "Face name to use for delimiters.") + +(defvar font-lock-misc-punctuation-face 'font-lock-misc-punctuation-face + "Face name to use for miscellaneous punctuation.") + ;; Fontification variables: (defvar font-lock-keywords nil @@ -2095,6 +2119,55 @@ font-lock-regexp-grouping-construct "Font Lock mode face used to highlight grouping constructs in Lisp regexps." :group 'font-lock-faces) +(defface font-lock-escape-face + '((t :inherit font-lock-regexp-grouping-backslash)) + "Font Lock mode face used to highlight escape sequences in strings." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-number-face + '((t nil)) + "Font Lock mode face used to highlight numbers." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-operator-face + '((t nil)) + "Font Lock mode face used to highlight operators." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-property-face + '((t :inherit font-lock-variable-name-face)) + "Font Lock mode face used to highlight properties of an object, such +as the declaration and use of fields in a struct." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-punctuation-face + '((t nil)) + "Font Lock mode face used to highlight punctuation." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-bracket-face + '((t :inherit font-lock-punctuation-face)) + "Font Lock mode face used to highlight brackets." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-delimiter-face + '((t :inherit font-lock-punctuation-face)) + "Font Lock mode face used to highlight delimiters." + :group 'font-lock-faces + :version "29.1") + +(defface font-lock-misc-punctuation-face + '((t :inherit font-lock-punctuation-face)) + "Font Lock mode face used to highlight miscellaneous punctuation." + :group 'font-lock-faces + :version "29.1") + ;; End of Color etc. support. ;;; Menu support. -- 2.38.1