X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d2fc7e3d0f6f57f962cbd94df3bf4fd15a37bb68..852507f147b4253a8ec265951b70229cfd7c5a64:/lisp/font-core.el diff --git a/lisp/font-core.el b/lisp/font-core.el index fcaaf33b71..b3da897050 100644 --- a/lisp/font-core.el +++ b/lisp/font-core.el @@ -1,8 +1,8 @@ ;;; font-core.el --- Core interface to font-lock -;; Copyright (C) 1992-2011 Free Software Foundation, Inc. +;; Copyright (C) 1992-2016 Free Software Foundation, Inc. -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: languages, faces ;; Package: emacs @@ -30,7 +30,7 @@ "Defaults for Font Lock mode specified by the major mode. Defaults should be of the form: - (KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST [SYNTAX-BEGIN ...]]]]) + (KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST ...]]]) KEYWORDS may be a symbol (a variable or function whose value is the keywords to use for fontification) or a list of symbols (specifying different levels @@ -45,20 +45,9 @@ If SYNTAX-ALIST is non-nil, it should be a list of cons pairs of the form \(CHAR-OR-STRING . STRING) used to set the local Font Lock syntax table, for keyword and syntactic fontification (see `modify-syntax-entry'). -If SYNTAX-BEGIN is non-nil, it should be a function with no args used to move -backwards outside any enclosing syntactic block, for syntactic fontification. -Typical values are `beginning-of-line' (i.e., the start of the line is known to -be outside a syntactic block), or `beginning-of-defun' for programming modes or -`backward-paragraph' for textual modes (i.e., the mode-dependent function is -known to move outside a syntactic block). If nil, the beginning of the buffer -is used as a position outside of a syntactic block, in the worst case. - -\(See also Info node `(elisp)Font Lock Basics'.) - These item elements are used by Font Lock mode to set the variables `font-lock-keywords', `font-lock-keywords-only', -`font-lock-keywords-case-fold-search', `font-lock-syntax-table' and -`font-lock-beginning-of-syntax-function', respectively. +`font-lock-keywords-case-fold-search', `font-lock-syntax-table'. Further item elements are alists of the form (VARIABLE . VALUE) and are in no particular order. Each VARIABLE is made buffer-local before set to VALUE. @@ -86,58 +75,63 @@ It will be passed one argument, which is the current value of ;; The mode for which font-lock was initialized, or nil if none. (defvar font-lock-major-mode) + (define-minor-mode font-lock-mode - "Toggle Font Lock mode. -With arg, turn Font Lock mode off if and only if arg is a non-positive -number; if arg is nil, toggle Font Lock mode; anything else turns Font -Lock on. -\(Font Lock is also known as \"syntax highlighting\".) + "Toggle syntax highlighting in this buffer (Font Lock mode). +With a prefix argument ARG, enable Font Lock mode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil. When Font Lock mode is enabled, text is fontified as you type it: - Comments are displayed in `font-lock-comment-face'; - Strings are displayed in `font-lock-string-face'; - - Certain other expressions are displayed in other faces according to the - value of the variable `font-lock-keywords'. + - Certain other expressions are displayed in other faces + according to the value of the variable `font-lock-keywords'. To customize the faces (colors, fonts, etc.) used by Font Lock for fontifying different parts of buffer text, use \\[customize-face]. -You can enable Font Lock mode in any major mode automatically by turning on in -the major mode's hook. For example, put in your ~/.emacs: +You can enable Font Lock mode in any major mode automatically by +turning on in the major mode's hook. For example, put in your +~/.emacs: - (add-hook 'c-mode-hook 'turn-on-font-lock) + (add-hook \\='c-mode-hook \\='turn-on-font-lock) -Alternatively, you can use Global Font Lock mode to automagically turn on Font -Lock mode in buffers whose major mode supports it and whose major mode is one -of `font-lock-global-modes'. For example, put in your ~/.emacs: +Alternatively, you can use Global Font Lock mode to automagically +turn on Font Lock mode in buffers whose major mode supports it +and whose major mode is one of `font-lock-global-modes'. For +example, put in your ~/.emacs: (global-font-lock-mode t) -Where major modes support different levels of fontification, you can use -the variable `font-lock-maximum-decoration' to specify which level you -generally prefer. When you turn Font Lock mode on/off the buffer is -fontified/defontified, though fontification occurs only if the buffer is -less than `font-lock-maximum-size'. +Where major modes support different levels of fontification, you +can use the variable `font-lock-maximum-decoration' to specify +which level you generally prefer. When you turn Font Lock mode +on/off the buffer is fontified/defontified, though fontification +occurs only if the buffer is less than `font-lock-maximum-size'. -To add your own highlighting for some major mode, and modify the highlighting -selected automatically via the variable `font-lock-maximum-decoration', you can -use `font-lock-add-keywords'. +To add your own highlighting for some major mode, and modify the +highlighting selected automatically via the variable +`font-lock-maximum-decoration', you can use +`font-lock-add-keywords'. -To fontify a buffer, without turning on Font Lock mode and regardless of buffer -size, you can use \\[font-lock-fontify-buffer]. +To fontify a buffer, without turning on Font Lock mode and +regardless of buffer size, you can use \\[font-lock-fontify-buffer]. -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]. +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]. You can set your own default settings for some mode, by setting a buffer local value for `font-lock-defaults', via its mode hook. -The above is the default behavior of `font-lock-mode'; you may specify -your own function which is called when `font-lock-mode' is toggled via -`font-lock-function'. " +The above is the default behavior of `font-lock-mode'; you may +specify your own function which is called when `font-lock-mode' +is toggled via `font-lock-function'. " nil nil nil + :after-hook (font-lock-initial-fontify) ;; 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). (when (or noninteractive (eq (aref (buffer-name) 0) ?\s)) @@ -191,13 +185,7 @@ this function onto `change-major-mode-hook'." ;; Only do hard work if the mode has specified stuff in ;; `font-lock-defaults'. - (when (or font-lock-defaults - (if (boundp 'font-lock-keywords) font-lock-keywords) - (and mode - (boundp 'font-lock-set-defaults) - font-lock-set-defaults - font-lock-major-mode - (not (eq font-lock-major-mode major-mode)))) + (when (font-lock-specified-p mode) (font-lock-mode-internal mode))) (defun turn-on-font-lock () @@ -210,7 +198,7 @@ this function onto `change-major-mode-hook'." ;; A few people have hassled in the past for a way to make it easier to turn on ;; Font Lock mode, without the user needing to know for which modes s/he has to ;; turn it on, perhaps the same way hilit19.el/hl319.el does. I've always -;; balked at that way, as I see it as just re-moulding the same problem in +;; balked at that way, as I see it as just re-molding the same problem in ;; another form. That is; some person would still have to keep track of which ;; modes (which may not even be distributed with Emacs) support Font Lock mode. ;; The list would always be out of date. And that person might have to be me.