]> git.eshelyaron.com Git - emacs.git/commitdiff
Interactive Highlighting: prefix argument to select subexp
authorGrégory Mounié <Gregory.Mounie@imag.fr>
Fri, 3 Aug 2018 21:08:10 +0000 (23:08 +0200)
committerNoam Postavsky <npostavs@gmail.com>
Tue, 14 Aug 2018 23:38:21 +0000 (19:38 -0400)
* doc/emacs/display.texi (Highlight Interactively):
* etc/NEWS: Document the change.
* lisp/hi-lock.el (hi-lock-face-buffer, hi-lock-set-pattern): Use
the prefix argument to highlight only the corresponding sub-expression
of the regexp (Bug#32365).

Copyright-paperwork-exempt: yes

doc/emacs/display.texi
etc/NEWS
lisp/hi-lock.el

index 2f5ce80d607c866eaf32af9d0e3a7b7a29b7efd4..fe4936d85a161a97d229070034215acc72566753 100644 (file)
@@ -975,7 +975,8 @@ the word ``whim'' using the default face (a yellow background), type
 @kbd{M-s h r whim @key{RET} @key{RET}}.  Any face can be used for
 highlighting, Hi Lock provides several of its own and these are
 pre-loaded into a list of default values.  While being prompted
-for a face use @kbd{M-n} and @kbd{M-p} to cycle through them.
+for a face use @kbd{M-n} and @kbd{M-p} to cycle through them.  A prefix
+argument limits the highlighting to the corresponding subexpression.
 
 @vindex hi-lock-auto-select-face
 Setting the option @code{hi-lock-auto-select-face} to a non-@code{nil}
index 3ae956c7880b9e89492266a1499daa3bca643cdc..5146e756d0002969b4e8e6d3595ab8c19a8057b4 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -716,6 +716,12 @@ A symbol 'uuid' can be passed to thing-at-point and it returns the
 UUID at point.
 
 
+** Interactive automatic highlighting
+
++++
+*** 'highlight-regexp' can now highlight subexpressions.
+The command accepts a prefix argument to choose the subexpression.
+
 \f
 * New Modes and Packages in Emacs 27.1
 
index 13ebffb1afce1839c18af14070c22188cf3d2e5d..23820cda587e3dce5825a20c2bda1bc1b1033cd5 100644 (file)
@@ -429,10 +429,11 @@ highlighting will not update as you type."
 ;;;###autoload
 (defalias 'highlight-regexp 'hi-lock-face-buffer)
 ;;;###autoload
-(defun hi-lock-face-buffer (regexp &optional face)
+(defun hi-lock-face-buffer (regexp &optional face subexp)
   "Set face of each match of REGEXP to FACE.
 Interactively, prompt for REGEXP using `read-regexp', then FACE.
-Use the global history list for FACE.
+Use the global history list for FACE.  Limit face setting to the
+corresponding SUBEXP of REGEXP.
 
 Use Font lock mode, if enabled, to highlight REGEXP.  Otherwise,
 use overlays for highlighting.  If overlays are used, the
@@ -441,10 +442,11 @@ highlighting will not update as you type."
    (list
     (hi-lock-regexp-okay
      (read-regexp "Regexp to highlight" 'regexp-history-last))
-    (hi-lock-read-face-name)))
+    (hi-lock-read-face-name)
+    current-prefix-arg))
   (or (facep face) (setq face 'hi-yellow))
   (unless hi-lock-mode (hi-lock-mode 1))
-  (hi-lock-set-pattern regexp face))
+  (hi-lock-set-pattern regexp face subexp))
 
 ;;;###autoload
 (defalias 'highlight-phrase 'hi-lock-face-phrase-buffer)
@@ -686,11 +688,12 @@ with completion and history."
       (add-to-list 'hi-lock-face-defaults face t))
     (intern face)))
 
-(defun hi-lock-set-pattern (regexp face)
-  "Highlight REGEXP with face FACE."
+(defun hi-lock-set-pattern (regexp face &optional subexp)
+  "Highlight SUBEXP of REGEXP with face FACE."
   ;; Hashcons the regexp, so it can be passed to remove-overlays later.
   (setq regexp (hi-lock--hashcons regexp))
-  (let ((pattern (list regexp (list 0 (list 'quote face) 'prepend)))
+  (setq subexp (or subexp 0))
+  (let ((pattern (list regexp (list subexp (list 'quote face) 'prepend)))
         (no-matches t))
     ;; Refuse to highlight a text that is already highlighted.
     (if (assoc regexp hi-lock-interactive-patterns)
@@ -712,7 +715,8 @@ with completion and history."
             (goto-char search-start)
             (while (re-search-forward regexp search-end t)
               (when no-matches (setq no-matches nil))
-              (let ((overlay (make-overlay (match-beginning 0) (match-end 0))))
+              (let ((overlay (make-overlay (match-beginning subexp)
+                                           (match-end subexp))))
                 (overlay-put overlay 'hi-lock-overlay t)
                 (overlay-put overlay 'hi-lock-overlay-regexp regexp)
                 (overlay-put overlay 'face face))