X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0a7114a4e535e70b237b15817988344a03fe7ab1..f67b40b3d890918f1e856a5052f86c3c724f0658:/lisp/hi-lock.el diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el index f028bd1f46..7226433c80 100644 --- a/lisp/hi-lock.el +++ b/lisp/hi-lock.el @@ -1,17 +1,17 @@ ;;; hi-lock.el --- minor mode for interactive automatic highlighting ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -;; Author: David M. Koppelman, koppel@ee.lsu.edu +;; Author: David M. Koppelman, koppel@ece.lsu.edu ;; Keywords: faces, minor-mode, matching, display ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +19,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: ;; @@ -33,7 +31,8 @@ ;; will remove the highlighting. Any existing face can be used for ;; highlighting and a set of appropriate faces is provided. The ;; regexps can be written into the current buffer in a form that will -;; be recognized the next time the corresponding file is read. +;; be recognized the next time the corresponding file is read (when +;; file patterns is turned on). ;; ;; Applications: ;; @@ -60,6 +59,14 @@ ;; ;; (global-hi-lock-mode 1) ;; +;; To enable the use of patterns found in files (presumably placed +;; there by hi-lock) include the following in your .emacs file: +;; +;; (setq hi-lock-file-patterns-policy 'ask) +;; +;; If you get tired of being asked each time a file is loaded replace +;; `ask' with a function that returns t if patterns should be read. +;; ;; You might also want to bind the hi-lock commands to more ;; finger-friendly sequences: @@ -115,6 +122,20 @@ calls." :type '(repeat symbol) :group 'hi-lock) +(defcustom hi-lock-file-patterns-policy 'ask + "Specify when hi-lock should use patterns found in file. +If `ask', prompt when patterns found in buffer; if bound to a function, +use patterns when function returns t (function is called with patterns +as first argument); if nil or `never' or anything else, don't use file +patterns." + :type '(choice (const :tag "Do not use file patterns" never) + (const :tag "Ask about file patterns" ask) + (function :tag "Function to check file patterns")) + :group 'hi-lock + :version "22.1") + +;; It can have a function value. +(put 'hi-lock-file-patterns-policy 'risky-local-variable t) (defgroup hi-lock-faces nil "Faces for hi-lock." @@ -196,7 +217,7 @@ calls." "History of regexps used for interactive fontification.") (defvar hi-lock-file-patterns-prefix "Hi-lock" - "Regexp for finding hi-lock patterns at top of file.") + "Search target for finding hi-lock patterns at top of file.") (defvar hi-lock-archaic-interface-message-used nil "True if user alerted that `global-hi-lock-mode' is now the global switch. @@ -283,17 +304,22 @@ called interactively, are: Remove highlighting on matches of REGEXP in current buffer. \\[hi-lock-write-interactive-patterns] - Write active REGEXPs into buffer as comments (if possible). They will + Write active REGEXPs into buffer as comments (if possible). They may be read the next time file is loaded or when the \\[hi-lock-find-patterns] command is issued. The inserted regexps are in the form of font lock keywords. (See `font-lock-keywords'.) They may be edited and re-loaded with \\[hi-lock-find-patterns], - any valid `font-lock-keywords' form is acceptable. + any valid `font-lock-keywords' form is acceptable. When a file is + loaded the patterns are read if `hi-lock-file-patterns-policy' is + 'ask and the user responds y to the prompt, or if + `hi-lock-file-patterns-policy' is bound to a function and that + function returns t. \\[hi-lock-find-patterns] Re-read patterns stored in buffer (in the format produced by \\[hi-lock-write-interactive-patterns]). -When hi-lock is started and if the mode is not excluded, the -beginning of the buffer is searched for lines of the form: +When hi-lock is started and if the mode is not excluded or patterns +rejected, the beginning of the buffer is searched for lines of the +form: Hi-lock: FOO where FOO is a list of patterns. These are added to the font lock keywords already present. The patterns must start before position @@ -347,7 +373,7 @@ versions before 22 use the following in your .emacs file: (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook t))) ;;;###autoload -(define-global-minor-mode global-hi-lock-mode +(define-globalized-minor-mode global-hi-lock-mode hi-lock-mode turn-on-hi-lock-if-enabled :group 'hi-lock) @@ -434,7 +460,7 @@ interactive functions. \(See `hi-lock-interactive-patterns'.\) \\Use \\[minibuffer-complete] to complete a partially typed regexp. \(See info node `Minibuffer History'.\)" (interactive - (if (and (display-popup-menus-p) (vectorp (this-command-keys))) + (if (and (display-popup-menus-p) (not last-nonmenu-event)) (catch 'snafu (or (x-popup-menu @@ -487,7 +513,7 @@ be found in variable `hi-lock-interactive-patterns'." (if (null hi-lock-interactive-patterns) (error "There are no interactive patterns")) (let ((beg (point))) - (mapcar + (mapc (lambda (pattern) (insert (format "%s: (%s)\n" hi-lock-file-patterns-prefix @@ -590,9 +616,18 @@ not suitable." (setq all-patterns (append (read (current-buffer)) all-patterns)) (error (message "Invalid pattern list expression at %d" (line-number-at-pos))))))) - (when hi-lock-mode (hi-lock-set-file-patterns all-patterns)) - (if (interactive-p) - (message "Hi-lock added %d patterns." (length all-patterns)))))) + (when (and all-patterns + hi-lock-mode + (cond + ((eq this-command 'hi-lock-find-patterns) t) + ((functionp hi-lock-file-patterns-policy) + (funcall hi-lock-file-patterns-policy all-patterns)) + ((eq hi-lock-file-patterns-policy 'ask) + (y-or-n-p "Add patterns from this buffer to hi-lock? ")) + (t nil))) + (hi-lock-set-file-patterns all-patterns) + (if (interactive-p) + (message "Hi-lock added %d patterns." (length all-patterns))))))) (defun hi-lock-font-lock-hook () "Add hi-lock patterns to font-lock's." @@ -622,6 +657,12 @@ A string is considered new if it had not previously been used in a call to hi-lock-string-serialize-hash) hi-lock-string-serialize-serial))) +(defun hi-lock-unload-function () + "Unload the Hi-Lock library." + (global-hi-lock-mode -1) + ;; continue standard unloading + nil) + (provide 'hi-lock) ;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066