X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0d30b33766e277a5bff6eabc9da5afdaebd8b32a..16986fcfcca94e88e620c38775e15f758aa44935:/lisp/font-lock.el diff --git a/lisp/font-lock.el b/lisp/font-lock.el index feed15f18d..645ff17908 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -216,7 +216,7 @@ :link '(custom-manual "(elisp)Font Lock Mode") :group 'faces) -(defgroup font-lock-highlighting-faces nil +(defgroup font-lock-faces nil "Faces for highlighting text." :prefix "font-lock-" :group 'font-lock) @@ -224,17 +224,6 @@ (defgroup font-lock-extra-types nil "Extra mode-specific type names for highlighting declarations." :group 'font-lock) - -;; Define support mode groups here to impose `font-lock' group order. -(defgroup fast-lock nil - "Font Lock support mode to cache fontification." - :load 'fast-lock - :group 'font-lock) - -(defgroup lazy-lock nil - "Font Lock support mode to fontify lazily." - :load 'lazy-lock - :group 'font-lock) ;; User variables. @@ -293,7 +282,7 @@ If a number, only buffers greater than this size have fontification messages." (integer :tag "size")) :group 'font-lock) -(defcustom font-lock-lines-before 1 +(defcustom font-lock-lines-before 0 "*Number of lines before the changed text to include in refontification." :type 'integer :group 'font-lock @@ -364,7 +353,7 @@ contained expressions. You can also alter it by calling Each element in a user-level keywords list should have one of these forms: MATCHER - (MATCHER . MATCH) + (MATCHER . SUBEXP) (MATCHER . FACENAME) (MATCHER . HIGHLIGHT) (MATCHER HIGHLIGHT ...) @@ -390,12 +379,13 @@ word \"bar\" following the word \"anchor\" then MATCH-ANCHORED may be required. MATCH-HIGHLIGHT should be of the form: - (MATCH FACENAME [OVERRIDE [LAXMATCH]]) + (SUBEXP FACENAME [OVERRIDE [LAXMATCH]]) -MATCH is the subexpression of MATCHER to be highlighted. FACENAME is an -expression whose value is the face name to use. Face default attributes -can be modified via \\[customize]. Instead of a face, FACENAME can -evaluate to a property list of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...) +SUBEXP is the number of the subexpression of MATCHER to be highlighted. + +FACENAME is an expression whose value is the face name to use. +Instead of a face, FACENAME can evaluate to a property list +of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...) in which case all the listed text-properties will be set rather than just FACE. In such a case, you will most likely want to put those properties in `font-lock-extra-managed-props' or to override @@ -405,7 +395,8 @@ OVERRIDE and LAXMATCH are flags. If OVERRIDE is t, existing fontification can be overwritten. If `keep', only parts not already fontified are highlighted. If `prepend' or `append', existing fontification is merged with the new, in which the new or existing fontification, respectively, takes precedence. -If LAXMATCH is non-nil, no error is signaled if there is no MATCH in MATCHER. +If LAXMATCH is non-nil, that means don't signal an error if there is +no match for SUBEXP in MATCHER. For example, an element of the form highlights (if not already highlighted): @@ -518,36 +509,35 @@ The function is called with a single parameter (the state as returned by should return a face. This is normally set via `font-lock-defaults'.") (defvar font-lock-syntactic-keywords nil - "A list of the syntactic keywords to highlight. -Can be the list or the name of a function or variable whose value is the list. + "A list of the syntactic keywords to put syntax properties on. +The value can be the list itself, or the name of a function or variable +whose value is the list. + See `font-lock-keywords' for a description of the form of this list; -the differences are listed below. MATCH-HIGHLIGHT should be of the form: +only the differences are stated here. MATCH-HIGHLIGHT should be of the form: - (MATCH SYNTAX OVERRIDE LAXMATCH) + (SUBEXP SYNTAX OVERRIDE LAXMATCH) where SYNTAX can be a string (as taken by `modify-syntax-entry'), a syntax table, a cons cell (as returned by `string-to-syntax') or an expression whose value is such a form. OVERRIDE cannot be `prepend' or `append'. -For example, an element of the form highlights syntactically: +Here are two examples of elements of `font-lock-syntactic-keywords' +and what they do: (\"\\\\$\\\\(#\\\\)\" 1 \".\") - a hash character when following a dollar character, with a SYNTAX of - \".\" (meaning punctuation syntax). Assuming that the buffer syntax table does - specify hash characters to have comment start syntax, the element will only - highlight hash characters that do not follow dollar characters as comments - syntactically. + gives a hash character punctuation syntax (\".\") when following a + dollar-sign character. Hash characters in other contexts will still + follow whatever the syntax table says about the hash character. (\"\\\\('\\\\).\\\\('\\\\)\" (1 \"\\\"\") (2 \"\\\"\")) - both single quotes which surround a single character, with a SYNTAX of - \"\\\"\" (meaning string quote syntax). Assuming that the buffer syntax table - does not specify single quotes to have quote syntax, the element will only - highlight single quotes of the form 'c' as strings syntactically. - Other forms, such as foo'bar or 'fubar', will not be highlighted as strings. + gives a pair single-quotes, which surround a single character, a SYNTAX of + \"\\\"\" (meaning string quote syntax). Single-quote characters in other + contexts will not be affected. This is normally set via `font-lock-defaults'.") @@ -639,7 +629,6 @@ Major/minor modes can set this variable if they know which option applies.") ;; Shut up the byte compiler. (defvar font-lock-face-attributes)) ; Obsolete but respected if set. -;;;###autoload (defun font-lock-mode-internal (arg) ;; Turn on Font Lock mode. (when arg @@ -661,7 +650,6 @@ Major/minor modes can set this variable if they know which option applies.") (font-lock-unfontify-buffer) (font-lock-turn-off-thing-lock))) -;;;###autoload (defun font-lock-add-keywords (mode keywords &optional append) "Add highlighting KEYWORDS for MODE. @@ -780,7 +768,6 @@ see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types', ;; is added and removed several times. ;; ;; (II) The keywords are removed from the current buffer. -;;;###autoload (defun font-lock-remove-keywords (mode keywords) "Remove highlighting KEYWORDS for MODE. @@ -857,9 +844,13 @@ happens, so the major mode can be corrected." (defcustom font-lock-support-mode 'jit-lock-mode "*Support mode for Font Lock mode. Support modes speed up Font Lock mode by being choosy about when fontification -occurs. Known support modes are Fast Lock mode (symbol `fast-lock-mode'), -Lazy Lock mode (symbol `lazy-lock-mode'), and Just-in-time Lock mode (symbol -`jit-lock-mode'. See those modes for more info. +occurs. The default support mode, Just-in-time Lock mode (symbol +`jit-lock-mode'), is recommended. + +Other, older support modes are Fast Lock mode (symbol `fast-lock-mode') and +Lazy Lock mode (symbol `lazy-lock-mode'). See those modes for more info. +However, they are no longer recommended, as Just-in-time Lock mode is better. + If nil, means support for Font Lock mode is never performed. If a symbol, use that support mode. If a list, each element should be of the form (MAJOR-MODE . SUPPORT-MODE), @@ -986,7 +977,6 @@ The value of this variable is used when Font Lock mode is turned on." ;; directives correctly and cleanly. (It is the same problem as fontifying ;; multi-line strings and comments; regexps are not appropriate for the job.) -;;;###autoload (defun font-lock-fontify-buffer () "Fontify the current buffer the way the function `font-lock-mode' would." (interactive) @@ -1049,10 +1039,11 @@ a very meaningful entity to highlight.") ;; Use the fontification syntax table, if any. (when font-lock-syntax-table (set-syntax-table font-lock-syntax-table)) + (goto-char beg) + (setq beg (line-beginning-position (- 1 font-lock-lines-before))) ;; check to see if we should expand the beg/end area for ;; proper multiline matches - (when (and font-lock-multiline - (> beg (point-min)) + (when (and (> beg (point-min)) (get-text-property (1- beg) 'font-lock-multiline)) ;; We are just after or in a multiline match. (setq beg (or (previous-single-property-change @@ -1060,12 +1051,12 @@ a very meaningful entity to highlight.") (point-min))) (goto-char beg) (setq beg (line-beginning-position))) - (when font-lock-multiline - (setq end (or (text-property-any end (point-max) - 'font-lock-multiline nil) - (point-max)))) + (setq end (or (text-property-any end (point-max) + 'font-lock-multiline nil) + (point-max))) (goto-char end) - (setq end (line-beginning-position 2)) + ;; Round up to a whole line. + (unless (bolp) (setq end (line-beginning-position 2))) ;; Now do the fontification. (font-lock-unfontify-region beg end) (when font-lock-syntactic-keywords @@ -1077,12 +1068,12 @@ a very meaningful entity to highlight.") (set-syntax-table old-syntax-table)))) ;; The following must be rethought, since keywords can override fontification. -; ;; Now scan for keywords, but not if we are inside a comment now. -; (or (and (not font-lock-keywords-only) -; (let ((state (parse-partial-sexp beg end nil nil -; font-lock-cache-state))) -; (or (nth 4 state) (nth 7 state)))) -; (font-lock-fontify-keywords-region beg end)) +;; ;; Now scan for keywords, but not if we are inside a comment now. +;; (or (and (not font-lock-keywords-only) +;; (let ((state (parse-partial-sexp beg end nil nil +;; font-lock-cache-state))) +;; (or (nth 4 state) (nth 7 state)))) +;; (font-lock-fontify-keywords-region beg end)) (defvar font-lock-extra-managed-props nil "Additional text properties managed by font-lock. @@ -1105,8 +1096,7 @@ what properties to clear before refontifying a region.") (save-match-data ;; Rescan between start of lines enclosing the region. (font-lock-fontify-region - (progn (goto-char beg) - (forward-line (- font-lock-lines-before)) (point)) + (progn (goto-char beg) (forward-line 0) (point)) (progn (goto-char end) (forward-line 1) (point))))))) (defun font-lock-fontify-block (&optional arg) @@ -1133,8 +1123,9 @@ delimit the region to fontify." (font-lock-fontify-region (point) (mark))) ((error quit) (message "Fontifying block...%s" error-data))))))) -(if (boundp 'facemenu-keymap) - (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)) +(unless (featurep 'facemenu) + (error "facemenu must be loaded before font-lock")) +(define-key facemenu-keymap "\M-o" 'font-lock-fontify-block) ;;; End of Fontification functions. @@ -1187,35 +1178,35 @@ Optional argument OBJECT is the string or buffer containing the text." ;; For completeness: this is to `remove-text-properties' as `put-text-property' ;; is to `add-text-properties', etc. -;(defun remove-text-property (start end property &optional object) -; "Remove a property from text from START to END. -;Argument PROPERTY is the property to remove. -;Optional argument OBJECT is the string or buffer containing the text. -;Return t if the property was actually removed, nil otherwise." -; (remove-text-properties start end (list property) object)) +;;(defun remove-text-property (start end property &optional object) +;; "Remove a property from text from START to END. +;;Argument PROPERTY is the property to remove. +;;Optional argument OBJECT is the string or buffer containing the text. +;;Return t if the property was actually removed, nil otherwise." +;; (remove-text-properties start end (list property) object)) ;; For consistency: maybe this should be called `remove-single-property' like ;; `next-single-property-change' (not `next-single-text-property-change'), etc. -;(defun remove-single-text-property (start end prop value &optional object) -; "Remove a specific property value from text from START to END. -;Arguments PROP and VALUE specify the property and value to remove. The -;resulting property values are not equal to VALUE nor lists containing VALUE. -;Optional argument OBJECT is the string or buffer containing the text." -; (let ((start (text-property-not-all start end prop nil object)) next prev) -; (while start -; (setq next (next-single-property-change start prop object end) -; prev (get-text-property start prop object)) -; (cond ((and (symbolp prev) (eq value prev)) -; (remove-text-property start next prop object)) -; ((and (listp prev) (memq value prev)) -; (let ((new (delq value prev))) -; (cond ((null new) -; (remove-text-property start next prop object)) -; ((= (length new) 1) -; (put-text-property start next prop (car new) object)) -; (t -; (put-text-property start next prop new object)))))) -; (setq start (text-property-not-all next end prop nil object))))) +;;(defun remove-single-text-property (start end prop value &optional object) +;; "Remove a specific property value from text from START to END. +;;Arguments PROP and VALUE specify the property and value to remove. The +;;resulting property values are not equal to VALUE nor lists containing VALUE. +;;Optional argument OBJECT is the string or buffer containing the text." +;; (let ((start (text-property-not-all start end prop nil object)) next prev) +;; (while start +;; (setq next (next-single-property-change start prop object end) +;; prev (get-text-property start prop object)) +;; (cond ((and (symbolp prev) (eq value prev)) +;; (remove-text-property start next prop object)) +;; ((and (listp prev) (memq value prev)) +;; (let ((new (delq value prev))) +;; (cond ((null new) +;; (remove-text-property start next prop object)) +;; ((= (length new) 1) +;; (put-text-property start next prop (car new) object)) +;; (t +;; (put-text-property start next prop new object)))))) +;; (setq start (text-property-not-all next end prop nil object))))) ;;; End of Additional text property functions. @@ -1537,7 +1528,8 @@ If REGEXP is non-nil, it means these keywords are used for (if (memq (get-text-property (match-beginning 0) 'face) '(font-lock-string-face font-lock-doc-face font-lock-comment-face)) - font-lock-warning-face) + (list 'face font-lock-warning-face + 'help-echo "Looks like a toplevel defun: escape the parenthesis")) prepend))))) keywords)) @@ -1605,7 +1597,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (let* ((defaults (or font-lock-defaults (cdr (assq major-mode (with-no-warnings - font-lock-defaults-alist))))) + font-lock-defaults-alist))))) (keywords (font-lock-choose-keywords (nth 0 defaults) (font-lock-value-in-major-mode font-lock-maximum-decoration))) @@ -1655,37 +1647,8 @@ Sets various variables using `font-lock-defaults' (or, if nil, using ;;; Colour etc. support. -;; Originally face attributes were specified via `font-lock-face-attributes'. -;; Users then changed the default face attributes by setting that 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 '(:weight bold) face-spec))) - (when italic-p - (setq face-spec (append '(:slant italic) 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'. +;; 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" :weight bold :slant italic)) @@ -1705,7 +1668,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using ) (t (:weight bold :slant italic))) "Font Lock mode face used to highlight comments." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-comment-delimiter-face '((default :inherit font-lock-comment-face) @@ -1716,7 +1679,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8) (background dark)) :foreground "red1")) "Font Lock mode face used to highlight comment delimiters." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-string-face '((((class grayscale) (background light)) (:foreground "DimGray" :slant italic)) @@ -1728,12 +1691,12 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "green")) (t (:slant italic))) "Font Lock mode face used to highlight strings." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-doc-face '((t :inherit font-lock-string-face)) "Font Lock mode face used to highlight documentation." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-keyword-face '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) @@ -1745,7 +1708,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "cyan" :weight bold)) (t (:weight bold))) "Font Lock mode face used to highlight keywords." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-builtin-face '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) @@ -1757,7 +1720,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "blue" :weight bold)) (t (:weight bold))) "Font Lock mode face used to highlight builtins." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-function-name-face '((((class color) (min-colors 88) (background light)) (:foreground "Blue1")) @@ -1767,7 +1730,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "blue" :weight bold)) (t (:inverse-video t :weight bold))) "Font Lock mode face used to highlight function names." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-variable-name-face '((((class grayscale) (background light)) @@ -1781,7 +1744,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "yellow" :weight light)) (t (:weight bold :slant italic))) "Font Lock mode face used to highlight variable names." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-type-face '((((class grayscale) (background light)) (:foreground "Gray90" :weight bold)) @@ -1793,7 +1756,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "green")) (t (:weight bold :underline t))) "Font Lock mode face used to highlight type and classes." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-constant-face '((((class grayscale) (background light)) @@ -1807,37 +1770,37 @@ Sets various variables using `font-lock-defaults' (or, if nil, using (((class color) (min-colors 8)) (:foreground "magenta")) (t (:weight bold :underline t))) "Font Lock mode face used to highlight constants and labels." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-warning-face '((((class color) (min-colors 88) (background light)) (:foreground "Red1" :weight bold)) (((class color) (min-colors 88) (background dark)) (:foreground "Pink" :weight bold)) - (((class color) (min-colors 16) (background light)) (:foreground "Red" :weight bold)) + (((class color) (min-colors 16) (background light)) (:foreground "Red1" :weight bold)) (((class color) (min-colors 16) (background dark)) (:foreground "Pink" :weight bold)) (((class color) (min-colors 8)) (:foreground "red")) (t (:inverse-video t :weight bold))) "Font Lock mode face used to highlight warnings." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-negation-char-face '((t nil)) "Font Lock mode face used to highlight easy to overlook negation." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-preprocessor-face '((t :inherit font-lock-builtin-face)) "Font Lock mode face used to highlight preprocessor directives." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-regexp-grouping-backslash '((t :inherit bold)) "Font Lock mode face for backslashes in Lisp regexp grouping constructs." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) (defface font-lock-regexp-grouping-construct '((t :inherit bold)) "Font Lock mode face used to highlight grouping constructs in Lisp regexps." - :group 'font-lock-highlighting-faces) + :group 'font-lock-faces) ;;; End of Colour etc. support. @@ -1857,95 +1820,95 @@ Sets various variables using `font-lock-defaults' (or, if nil, using ;; buttons and when they are on or off needs tweaking. I have assumed that the ;; mechanism is via `menu-toggle' and `menu-selected' symbol properties. sm. -;;;;###autoload -;(progn -; ;; Make the Font Lock menu. -; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting")) -; ;; Add the menu items in reverse order. -; (define-key font-lock-menu [fontify-less] -; '("Less In Current Buffer" . font-lock-fontify-less)) -; (define-key font-lock-menu [fontify-more] -; '("More In Current Buffer" . font-lock-fontify-more)) -; (define-key font-lock-menu [font-lock-sep] -; '("--")) -; (define-key font-lock-menu [font-lock-mode] -; '("In Current Buffer" . font-lock-mode)) -; (define-key font-lock-menu [global-font-lock-mode] -; '("In All Buffers" . global-font-lock-mode))) -; -;;;;###autoload -;(progn -; ;; We put the appropriate `menu-enable' etc. symbol property values on when -; ;; font-lock.el is loaded, so we don't need to autoload the three variables. -; (put 'global-font-lock-mode 'menu-toggle t) -; (put 'font-lock-mode 'menu-toggle t) -; (put 'font-lock-fontify-more 'menu-enable '(identity)) -; (put 'font-lock-fontify-less 'menu-enable '(identity))) -; -; ;; Put the appropriate symbol property values on now. See above. -;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode) -;(put 'font-lock-mode 'menu-selected 'font-lock-mode) -;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level)) -;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level)) -; -;(defvar font-lock-fontify-level nil) ; For less/more fontification. -; -;(defun font-lock-fontify-level (level) -; (let ((font-lock-maximum-decoration level)) -; (when font-lock-mode -; (font-lock-mode)) -; (font-lock-mode) -; (when font-lock-verbose -; (message "Fontifying %s... level %d" (buffer-name) level)))) -; -;(defun font-lock-fontify-less () -; "Fontify the current buffer with less decoration. -;See `font-lock-maximum-decoration'." -; (interactive) -; ;; Check in case we get called interactively. -; (if (nth 1 font-lock-fontify-level) -; (font-lock-fontify-level (1- (car font-lock-fontify-level))) -; (error "No less decoration"))) -; -;(defun font-lock-fontify-more () -; "Fontify the current buffer with more decoration. -;See `font-lock-maximum-decoration'." -; (interactive) -; ;; Check in case we get called interactively. -; (if (nth 2 font-lock-fontify-level) -; (font-lock-fontify-level (1+ (car font-lock-fontify-level))) -; (error "No more decoration"))) -; -; ;; This should be called by `font-lock-set-defaults'. -;(defun font-lock-set-menu () -; ;; Activate less/more fontification entries if there are multiple levels for -; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form -; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation. -; (let ((keywords (or (nth 0 font-lock-defaults) -; (nth 1 (assq major-mode font-lock-defaults-alist)))) -; (level (font-lock-value-in-major-mode font-lock-maximum-decoration))) -; (make-local-variable 'font-lock-fontify-level) -; (if (or (symbolp keywords) (= (length keywords) 1)) -; (font-lock-unset-menu) -; (cond ((eq level t) -; (setq level (1- (length keywords)))) -; ((or (null level) (zerop level)) -; ;; The default level is usually, but not necessarily, level 1. -; (setq level (- (length keywords) -; (length (member (eval (car keywords)) -; (mapcar 'eval (cdr keywords)))))))) -; (setq font-lock-fontify-level (list level (> level 1) -; (< level (1- (length keywords)))))))) -; -; ;; This should be called by `font-lock-unset-defaults'. -;(defun font-lock-unset-menu () -; ;; Deactivate less/more fontification entries. -; (setq font-lock-fontify-level nil)) +;;;;;###autoload +;;(progn +;; ;; Make the Font Lock menu. +;; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting")) +;; ;; Add the menu items in reverse order. +;; (define-key font-lock-menu [fontify-less] +;; '("Less In Current Buffer" . font-lock-fontify-less)) +;; (define-key font-lock-menu [fontify-more] +;; '("More In Current Buffer" . font-lock-fontify-more)) +;; (define-key font-lock-menu [font-lock-sep] +;; '("--")) +;; (define-key font-lock-menu [font-lock-mode] +;; '("In Current Buffer" . font-lock-mode)) +;; (define-key font-lock-menu [global-font-lock-mode] +;; '("In All Buffers" . global-font-lock-mode))) +;; +;;;;;###autoload +;;(progn +;; ;; We put the appropriate `menu-enable' etc. symbol property values on when +;; ;; font-lock.el is loaded, so we don't need to autoload the three variables. +;; (put 'global-font-lock-mode 'menu-toggle t) +;; (put 'font-lock-mode 'menu-toggle t) +;; (put 'font-lock-fontify-more 'menu-enable '(identity)) +;; (put 'font-lock-fontify-less 'menu-enable '(identity))) +;; +;; ;; Put the appropriate symbol property values on now. See above. +;;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode) +;;(put 'font-lock-mode 'menu-selected 'font-lock-mode) +;;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level)) +;;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level)) +;; +;;(defvar font-lock-fontify-level nil) ; For less/more fontification. +;; +;;(defun font-lock-fontify-level (level) +;; (let ((font-lock-maximum-decoration level)) +;; (when font-lock-mode +;; (font-lock-mode)) +;; (font-lock-mode) +;; (when font-lock-verbose +;; (message "Fontifying %s... level %d" (buffer-name) level)))) +;; +;;(defun font-lock-fontify-less () +;; "Fontify the current buffer with less decoration. +;;See `font-lock-maximum-decoration'." +;; (interactive) +;; ;; Check in case we get called interactively. +;; (if (nth 1 font-lock-fontify-level) +;; (font-lock-fontify-level (1- (car font-lock-fontify-level))) +;; (error "No less decoration"))) +;; +;;(defun font-lock-fontify-more () +;; "Fontify the current buffer with more decoration. +;;See `font-lock-maximum-decoration'." +;; (interactive) +;; ;; Check in case we get called interactively. +;; (if (nth 2 font-lock-fontify-level) +;; (font-lock-fontify-level (1+ (car font-lock-fontify-level))) +;; (error "No more decoration"))) +;; +;; ;; This should be called by `font-lock-set-defaults'. +;;(defun font-lock-set-menu () +;; ;; Activate less/more fontification entries if there are multiple levels for +;; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form +;; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation. +;; (let ((keywords (or (nth 0 font-lock-defaults) +;; (nth 1 (assq major-mode font-lock-defaults-alist)))) +;; (level (font-lock-value-in-major-mode font-lock-maximum-decoration))) +;; (make-local-variable 'font-lock-fontify-level) +;; (if (or (symbolp keywords) (= (length keywords) 1)) +;; (font-lock-unset-menu) +;; (cond ((eq level t) +;; (setq level (1- (length keywords)))) +;; ((or (null level) (zerop level)) +;; ;; The default level is usually, but not necessarily, level 1. +;; (setq level (- (length keywords) +;; (length (member (eval (car keywords)) +;; (mapcar 'eval (cdr keywords)))))))) +;; (setq font-lock-fontify-level (list level (> level 1) +;; (< level (1- (length keywords)))))))) +;; +;; ;; This should be called by `font-lock-unset-defaults'. +;;(defun font-lock-unset-menu () +;; ;; Deactivate less/more fontification entries. +;; (setq font-lock-fontify-level nil)) ;;; End of Menu support. ;;; Various regexp information shared by several modes. -; ;; Information specific to a single mode should go in its load library. +;; ;; Information specific to a single mode should go in its load library. ;; Font Lock support for C, C++, Objective-C and Java modes is now in ;; cc-fonts.el (and required by cc-mode.el). However, the below function @@ -2004,7 +1967,8 @@ This function could be MATCHER in a MATCH-ANCHORED `font-lock-keywords' item." ;; Function declarations. "\\(advice\\|varalias\\|alias\\|generic\\|macro\\*?\\|method\\|" "setf\\|subst\\*?\\|un\\*?\\|" - "ine-\\(condition\\|\\(?:derived\\|minor\\|generic\\)-mode\\|" + "ine-\\(condition\\|" + "\\(?:derived\\|\\(?:global-\\)?minor\\|generic\\)-mode\\|" "method-combination\\|setf-expander\\|skeleton\\|widget\\|" "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|" ;; Variable declarations. @@ -2039,12 +2003,12 @@ This function could be MATCHER in a MATCH-ANCHORED `font-lock-keywords' item." "save-match-data" "save-current-buffer" "unwind-protect" "condition-case" "track-mouse" "eval-after-load" "eval-and-compile" "eval-when-compile" - "eval-when" + "eval-when" "eval-at-startup" "eval-next-after-load" "with-category-table" "with-current-buffer" "with-electric-help" "with-local-quit" "with-no-warnings" "with-output-to-string" "with-output-to-temp-buffer" - "with-selected-window" "with-syntax-table" + "with-selected-window" "with-selected-frame" "with-syntax-table" "with-temp-buffer" "with-temp-file" "with-temp-message" "with-timeout" "with-timeout-handler") t) "\\>")