]> git.eshelyaron.com Git - emacs.git/commitdiff
Provide for customizing default regexp in hi-lock commands (Bug#13892).
authorJambunathan K <kjambunathan@gmail.com>
Fri, 8 Mar 2013 04:18:16 +0000 (09:48 +0530)
committerJambunathan K <kjambunathan@gmail.com>
Fri, 8 Mar 2013 04:18:16 +0000 (09:48 +0530)
* lisp/hi-lock.el (hi-lock-read-regexp-defaults-function): New var.
(hi-lock-read-regexp-defaults):  New defun.
(hi-lock-line-face-buffer, hi-lock-face-buffer)
(hi-lock-face-phrase-buffer): Propagate above change.  Update
docstring.

* lisp/subr.el (find-tag-default-as-regexp): New defun.
* lisp/replace.el (read-regexp): Propagate above change.

lisp/ChangeLog
lisp/hi-lock.el
lisp/replace.el
lisp/subr.el

index c8a4a06f28dbbe921b16608c4e53c24abbaec72e..487d9e611d67a4f0b6b894925c597b8caaa0e400 100644 (file)
@@ -1,3 +1,14 @@
+2013-03-08  Jambunathan K  <kjambunathan@gmail.com>
+
+       * hi-lock.el (hi-lock-read-regexp-defaults-function): New var.
+       (hi-lock-read-regexp-defaults):  New defun.
+       (hi-lock-line-face-buffer, hi-lock-face-buffer)
+       (hi-lock-face-phrase-buffer): Propagate above change.  Update
+       docstring (bug#13892).
+
+       * subr.el (find-tag-default-as-regexp): New defun.
+       * replace.el (read-regexp): Propagate above change.
+
 2013-03-08  Jay Belanger  <jay.p.belanger@gmail.com>
 
        * calc/calc-units.el (calc-convert-units): Fix the way that default
index cbd8ac5ebad08f43105d9659bfd5bdeb060c75f8..38e5e8acb15a61b9ecd6b6dd8d271ce244d4cc6f 100644 (file)
@@ -279,6 +279,26 @@ a library is being loaded.")
     map)
   "Key map for hi-lock.")
 
+(defvar hi-lock-read-regexp-defaults-function
+  'hi-lock-read-regexp-defaults
+  "Function that provides default regexp(s) for highlighting commands.
+This function should take no arguments and return one of nil, a
+regexp or a list of regexps for use with highlighting commands -
+`hi-lock-face-phrase-buffer', `hi-lock-line-face-buffer' and
+`hi-lock-face-buffer'.  The return value of this function is used
+as DEFAULTS param of `read-regexp' while executing the
+highlighting command.  This function is called only during
+interactive use.  
+
+For example, to highlight at symbol at point use
+
+    \(setq hi-lock-read-regexp-defaults-function 
+         'find-tag-default-as-regexp\)
+
+If you need different defaults for different highlighting
+operations, use `this-command' to identify the command under
+execution.")
+
 ;; Visible Functions
 
 ;;;###autoload
@@ -399,17 +419,18 @@ versions before 22 use the following in your init 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.  Use
+`hi-lock-read-regexp-defaults-function' to retrieve default
+value(s) of REGEXP.  Use the global history list for FACE.
 
-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."
+Use Font lock mode, if enabled, to highlight REGEXP.  Otherwise,
+use overlays for highlighting.  If overlays are used, the
+highlighting will not update as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
-     (read-regexp "Regexp to highlight line" (car regexp-history)))
+     (read-regexp "Regexp to highlight line"
+                 (funcall hi-lock-read-regexp-defaults-function)))
     (hi-lock-read-face-name)))
   (or (facep face) (setq face 'hi-yellow))
   (unless hi-lock-mode (hi-lock-mode 1))
@@ -424,17 +445,18 @@ updated as you type."
 ;;;###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.  Use
+`hi-lock-read-regexp-defaults-function' to retrieve default
+value(s) REGEXP.  Use the global history list for FACE.
 
-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."
+Use Font lock mode, if enabled, to highlight REGEXP.  Otherwise,
+use overlays for highlighting.  If overlays are used, the
+highlighting will not update as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
-     (read-regexp "Regexp to highlight" (car regexp-history)))
+     (read-regexp "Regexp to highlight"
+                 (funcall hi-lock-read-regexp-defaults-function)))
     (hi-lock-read-face-name)))
   (or (facep face) (setq face 'hi-yellow))
   (unless hi-lock-mode (hi-lock-mode 1))
@@ -445,18 +467,22 @@ updated as you type."
 ;;;###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.
-
-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."
+Interactively, prompt for REGEXP then FACE.  Use
+`hi-lock-read-regexp-defaults-function' to retrieve default
+value(s) of REGEXP.  Use the global history list for FACE.  When
+called interactively, replace whitespace in user provided regexp
+with arbitrary whitespace and make initial lower-case letters
+case-insensitive before highlighting with `hi-lock-set-pattern'.
+
+Use Font lock mode, if enabled, to highlight REGEXP.  Otherwise,
+use overlays for highlighting.  If overlays are used, the
+highlighting will not update as you type."
   (interactive
    (list
     (hi-lock-regexp-okay
      (hi-lock-process-phrase
-      (read-regexp "Phrase to highlight" (car regexp-history))))
+      (read-regexp "Phrase to highlight"
+                  (funcall hi-lock-read-regexp-defaults-function))))
     (hi-lock-read-face-name)))
   (or (facep face) (setq face 'hi-yellow))
   (unless hi-lock-mode (hi-lock-mode 1))
@@ -622,6 +648,11 @@ not suitable."
       (error "Regexp cannot match an empty string")
     regexp))
 
+(defun hi-lock-read-regexp-defaults ()
+  "Return the latest regexp from `regexp-history'.
+See `hi-lock-read-regexp-defaults-function' for details."
+  (car regexp-history))
+
 (defun hi-lock-read-face-name ()
   "Return face for interactive highlighting.
 When `hi-lock-auto-select-face' is non-nil, just return the next face.
index 86b1aa27069c2868a7f6466c0bb1b6a2acf8bf02..ceb0fe4a63e3b06658dee2d489cbb429a868ae7c 100644 (file)
@@ -603,15 +603,7 @@ If HISTORY is nil, `regexp-history' is used."
          (append
           suggestions
           (list
-           ;; Regexp for tag at point.
-           (let* ((tagf (or find-tag-default-function
-                            (get major-mode 'find-tag-default-function)
-                            'find-tag-default))
-                  (tag (funcall tagf)))
-             (cond ((not tag) "")
-                   ((eq tagf 'find-tag-default)
-                    (format "\\_<%s\\_>" (regexp-quote tag)))
-                   (t (regexp-quote tag))))
+           (find-tag-default-as-regexp)
            (car regexp-search-ring)
            (regexp-quote (or (car search-ring) ""))
            (car (symbol-value query-replace-from-history-variable)))))
index db2b6a8eaad3598274ed630a8425c89f74ccea45..6c7257ad98794b522d9383b2332ae885f8012764 100644 (file)
@@ -2697,6 +2697,22 @@ If there is no plausible default, return nil."
                     (setq to (point)))))
       (buffer-substring-no-properties from to))))
 
+(defun find-tag-default-as-regexp ()
+  "Return regexp that matches the default tag at point.
+If there is no tag at point, return nil.
+
+When in a major mode that does not provide it's own
+`find-tag-default-function', return a regexp that matches the
+symbol at point exactly."
+  (let* ((tagf (or find-tag-default-function
+                  (get major-mode 'find-tag-default-function)
+                  'find-tag-default))
+        (tag (funcall tagf)))
+    (cond ((not tag))
+         ((eq tagf 'find-tag-default)
+          (format "\\_<%s\\_>" (regexp-quote tag)))
+         (t (regexp-quote tag)))))
+
 (defun play-sound (sound)
   "SOUND is a list of the form `(sound KEYWORD VALUE...)'.
 The following keywords are recognized: