]> code.delx.au - gnu-emacs/blobdiff - lisp/hi-lock.el
* lisp/replace.el (perform-replace): Move let-bindings of isearch-*
[gnu-emacs] / lisp / hi-lock.el
index a0b5844582bc9d6f1c5dc33a5d507a1f91ca2d7a..476399225f4855d58a1144cf69903941b21a2259 100644 (file)
@@ -1,6 +1,6 @@
 ;;; hi-lock.el --- minor mode for interactive automatic highlighting
 
-;; Copyright (C) 2000-2011 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2013 Free Software Foundation, Inc.
 
 ;; Author: David M. Koppelman <koppel@ece.lsu.edu>
 ;; Keywords: faces, minor-mode, matching, display
 ;;
 ;;  Setup:
 ;;
-;;    Put the following code in your .emacs file.  This turns on
+;;    Put the following code in your init file.  This turns on
 ;;    hi-lock mode and adds a "Regexp Highlighting" entry
 ;;    to the edit menu.
 ;;
 ;;    (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:
+;;    there by hi-lock) include the following in your init file:
 ;;
 ;;    (setq hi-lock-file-patterns-policy 'ask)
 ;;
@@ -204,16 +204,15 @@ patterns."
 (defvar hi-lock-interactive-patterns nil
   "Patterns provided to hi-lock by user.  Should not be changed.")
 
+(define-obsolete-variable-alias 'hi-lock-face-history
+                                'hi-lock-face-defaults "23.1")
 (defvar hi-lock-face-defaults
   '("hi-yellow" "hi-pink" "hi-green" "hi-blue" "hi-black-b"
     "hi-blue-b" "hi-red-b" "hi-green-b" "hi-black-hb")
   "Default faces for hi-lock interactive functions.")
 
-;(dolist (f hi-lock-face-defaults) (unless (facep f) (error "%s not a face" f)))
-
-(define-obsolete-variable-alias 'hi-lock-face-history
-                                'hi-lock-face-defaults
-                                "23.1")
+;;(dolist (f hi-lock-face-defaults)
+;;  (unless (facep f) (error "%s not a face" f)))
 
 (define-obsolete-variable-alias 'hi-lock-regexp-history
                                 'regexp-history
@@ -283,14 +282,24 @@ a library is being loaded.")
 
 ;;;###autoload
 (define-minor-mode hi-lock-mode
-  "Toggle minor mode for interactively adding font-lock highlighting patterns.
+  "Toggle selective highlighting of patterns (Hi Lock mode).
+With a prefix argument ARG, enable Hi Lock mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil.
 
-If ARG positive, turn hi-lock on.  Issuing a hi-lock command will also
-turn hi-lock on.  To turn hi-lock on in all buffers use
-`global-hi-lock-mode' or in your .emacs file (global-hi-lock-mode 1).
-When hi-lock is turned on, a \"Regexp Highlighting\" submenu is added
-to the \"Edit\" menu.  The commands in the submenu, which can be
-called interactively, are:
+Hi Lock mode is automatically enabled when you invoke any of the
+highlighting commands listed below, such as \\[highlight-regexp].
+To enable Hi Lock mode in all buffers, use `global-hi-lock-mode'
+or add (global-hi-lock-mode 1) to your init file.
+
+In buffers where Font Lock mode is enabled, patterns are
+highlighted using font lock.  In buffers where Font Lock mode is
+disabled, patterns are applied using overlays; in this case, the
+highlighting will not be updated as you type.
+
+When Hi Lock mode is enabled, a \"Regexp Highlighting\" submenu
+is added to the \"Edit\" menu.  The commands in the submenu,
+which can be called interactively, are:
 
 \\[highlight-regexp] REGEXP FACE
   Highlight matches of pattern REGEXP in current buffer with FACE.
@@ -324,12 +333,12 @@ 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
-\(number of characters into buffer) `hi-lock-file-patterns-range'.
-Patterns will be read until
- Hi-lock: end
-is found.  A mode is excluded if it's in the list `hi-lock-exclude-modes'."
+
+where FOO is a list of patterns.  The patterns must start before
+position \(number of characters into buffer)
+`hi-lock-file-patterns-range'.  Patterns will be read until
+Hi-lock: end is found.  A mode is excluded if it's in the list
+`hi-lock-exclude-modes'."
   :group 'hi-lock
   :lighter (:eval (if (or hi-lock-interactive-patterns
                          hi-lock-file-patterns)
@@ -347,7 +356,7 @@ is found.  A mode is excluded if it's in the list `hi-lock-exclude-modes'."
        "Possible archaic use of (hi-lock-mode).
 Use (global-hi-lock-mode 1) in .emacs to enable hi-lock for all buffers,
 use (hi-lock-mode 1) for individual buffers.  For compatibility with Emacs
-versions before 22 use the following in your .emacs file:
+versions before 22 use the following in your init file:
 
         (if (functionp 'global-hi-lock-mode)
             (global-hi-lock-mode 1)
@@ -356,7 +365,6 @@ versions before 22 use the following in your .emacs file:
   (if hi-lock-mode
       ;; Turned on.
       (progn
-       (unless font-lock-mode (font-lock-mode 1))
        (define-key-after menu-bar-edit-menu [hi-lock]
          (cons "Regexp Highlighting" hi-lock-menu))
        (hi-lock-find-patterns)
@@ -390,12 +398,13 @@ versions before 22 use the following in your .emacs file:
 ;;;###autoload
 (defun hi-lock-line-face-buffer (regexp &optional face)
   "Set face of all lines containing a match of REGEXP to FACE.
+Interactively, prompt for REGEXP then FACE, using a buffer-local
+history list for REGEXP and a global history list for FACE.
 
-Interactively, prompt for REGEXP then FACE.  Buffer-local history
-list maintained for regexps, global history maintained for faces.
-\\<minibuffer-local-map>Use \\[previous-history-element] to retrieve previous history items,
-and \\[next-history-element] to retrieve default values.
-\(See info node `Minibuffer History'.)"
+If Font Lock mode is enabled in the buffer, it is used to
+highlight REGEXP.  If Font Lock mode is disabled, overlays are
+used for highlighting; in this case, the highlighting will not be
+updated as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
@@ -414,12 +423,13 @@ and \\[next-history-element] to retrieve default values.
 ;;;###autoload
 (defun hi-lock-face-buffer (regexp &optional face)
   "Set face of each match of REGEXP to FACE.
+Interactively, prompt for REGEXP then FACE, using a buffer-local
+history list for REGEXP and a global history list for FACE.
 
-Interactively, prompt for REGEXP then FACE.  Buffer-local history
-list maintained for regexps, global history maintained for faces.
-\\<minibuffer-local-map>Use \\[previous-history-element] to retrieve previous history items,
-and \\[next-history-element] to retrieve default values.
-\(See info node `Minibuffer History'.)"
+If Font Lock mode is enabled in the buffer, it is used to
+highlight REGEXP.  If Font Lock mode is disabled, overlays are
+used for highlighting; in this case, the highlighting will not be
+updated as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
@@ -434,9 +444,13 @@ and \\[next-history-element] to retrieve default values.
 ;;;###autoload
 (defun hi-lock-face-phrase-buffer (regexp &optional face)
   "Set face of each match of phrase REGEXP to FACE.
+If called interactively, replaces whitespace in REGEXP with
+arbitrary whitespace and makes initial lower-case letters case-insensitive.
 
-Whitespace in REGEXP converted to arbitrary whitespace and initial
-lower-case letters made case insensitive."
+If Font Lock mode is enabled in the buffer, it is used to
+highlight REGEXP.  If Font Lock mode is disabled, overlays are
+used for highlighting; in this case, the highlighting will not be
+updated as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
@@ -454,14 +468,12 @@ lower-case letters made case insensitive."
 ;;;###autoload
 (defun hi-lock-unface-buffer (regexp)
   "Remove highlighting of each match to REGEXP set by hi-lock.
-
-Interactively, prompt for REGEXP.  Buffer-local history of inserted
-regexp's maintained.  Will accept only regexps inserted by hi-lock
-interactive functions.  \(See `hi-lock-interactive-patterns'.\)
-\\<minibuffer-local-must-match-map>Use \\[minibuffer-complete] to complete a partially typed regexp.
-\(See info node `Minibuffer History'.\)"
+Interactively, prompt for REGEXP, accepting only regexps
+previously inserted by hi-lock interactive functions."
   (interactive
-   (if (and (display-popup-menus-p) (not last-nonmenu-event))
+   (if (and (display-popup-menus-p)
+           (listp last-nonmenu-event)
+           use-dialog-box)
        (catch 'snafu
         (or
          (x-popup-menu
@@ -532,9 +544,15 @@ be found in variable `hi-lock-interactive-patterns'."
 Blanks in PHRASE replaced by regexp that matches arbitrary whitespace
 and initial lower-case letters made case insensitive."
   (let ((mod-phrase nil))
+    ;; FIXME fragile; better to just bind case-fold-search?  (Bug#7161)
     (setq mod-phrase
           (replace-regexp-in-string
-           "\\<[a-z]" (lambda (m) (format "[%s%s]" (upcase m) m)) phrase))
+           "\\(^\\|\\s-\\)\\([a-z]\\)"
+           (lambda (m) (format "%s[%s%s]"
+                               (match-string 1 m)
+                               (upcase (match-string 2 m))
+                               (match-string 2 m))) phrase))
+    ;; FIXME fragile; better to use search-spaces-regexp?
     (setq mod-phrase
           (replace-regexp-in-string
            "\\s-+" "[ \t\n]+" mod-phrase nil t))))
@@ -569,7 +587,7 @@ not suitable."
   (let ((pattern (list regexp (list 0 (list 'quote face) t))))
     (unless (member pattern hi-lock-interactive-patterns)
       (push pattern hi-lock-interactive-patterns)
-      (if font-lock-fontified
+      (if font-lock-mode
          (progn
            (font-lock-add-keywords nil (list pattern) t)
            (font-lock-fontify-buffer))