Function: font-lock-remove-keywords
font-lock-remove-keywords is a byte-compiled function defined in
font-lock.el.gz.
Signature
(font-lock-remove-keywords MODE KEYWORDS)
Documentation
Remove highlighting KEYWORDS for MODE.
MODE should be a symbol, the major mode command name, such as
c-mode or nil. If nil, highlighting keywords are removed for
the current buffer.
For a description of KEYWORDS, see font-lock-add-keywords.
To make the removal apply to modes derived from MODE as well, pass nil for MODE and add the call to MODE-hook. This may fail for some derived modes if some involved major mode does not follow the standard conventions. File a bug report if this happens, so the major mode can be corrected.
Probably introduced at or before Emacs version 21.1.
Source Code
;; Defined in /usr/src/emacs/lisp/font-lock.el.gz
;; Written by Anders Lindgren
;;
;; Case study:
;; (I) The keywords are removed from a major mode.
;; In this case the keyword could be local (i.e. added earlier by
;; `font-lock-add-keywords'), global, or both.
;;
;; (a) In the local case we remove the keywords from the variable
;; `font-lock-keywords-alist'.
;;
;; (b) The actual global keywords are not known at this time.
;; All keywords are added to `font-lock-removed-keywords-alist',
;; when font-lock is enabled those keywords are removed.
;;
;; Note that added keywords are taken out of the list of removed
;; keywords. This ensure correct operation when the same keyword
;; is added and removed several times.
;;
;; (II) The keywords are removed from the current buffer.
(defun font-lock-remove-keywords (mode keywords)
"Remove highlighting KEYWORDS for MODE.
MODE should be a symbol, the major mode command name, such as
`c-mode' or nil. If nil, highlighting keywords are removed for
the current buffer.
For a description of KEYWORDS, see `font-lock-add-keywords'.
To make the removal apply to modes derived from MODE as well,
pass nil for MODE and add the call to MODE-hook. This may fail
for some derived modes if some involved major mode does not
follow the standard conventions. File a bug report if this
happens, so the major mode can be corrected."
(cond (mode
;; Remove one keyword at the time.
(dolist (keyword keywords)
(let ((top-cell (assq mode font-lock-keywords-alist)))
;; If MODE is non-nil, remove the KEYWORD from
;; `font-lock-keywords-alist'.
(when top-cell
(dolist (keyword-list-how-pair (cdr top-cell))
;; `keyword-list-how-pair' is a cons with a list of
;; keywords in the car top-cell and the original how
;; argument in the cdr top-cell.
(setcar keyword-list-how-pair
(delete keyword (car keyword-list-how-pair))))
;; Remove keyword list/how pair when the keyword list
;; is empty and how doesn't specify `set'. (If it
;; should be deleted then previously deleted keywords
;; would appear again.)
(let ((cell top-cell))
(while (cdr cell)
(if (and (null (car (car (cdr cell))))
(not (eq (cdr (car (cdr cell))) 'set)))
(setcdr cell (cdr (cdr cell)))
(setq cell (cdr cell)))))
;; Final cleanup, remove major mode cell if last keyword
;; was deleted.
(if (null (cdr top-cell))
(setq font-lock-keywords-alist
(delq top-cell font-lock-keywords-alist))))
;; Remember the keyword in case it is not local.
(let ((cell (assq mode font-lock-removed-keywords-alist)))
(if cell
(unless (member keyword (cdr cell))
(nconc cell (list keyword)))
(push (cons mode (list keyword))
font-lock-removed-keywords-alist))))))
(t
;; Otherwise remove it immediately.
(font-lock-set-defaults)
(let ((was-compiled (eq (car font-lock-keywords) t)))
;; Bring back the user-level (uncompiled) keywords.
(if was-compiled
(setq font-lock-keywords (cadr font-lock-keywords)))
;; Edit them.
(setq font-lock-keywords (copy-sequence font-lock-keywords))
(dolist (keyword keywords)
(setq font-lock-keywords
(delete keyword font-lock-keywords)))
;; If the keywords were compiled before, compile them again.
(if was-compiled
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords)))))))