[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6227: Color isearch regexp submatches differently
From: |
Juri Linkov |
Subject: |
bug#6227: Color isearch regexp submatches differently |
Date: |
Thu, 10 Jun 2010 23:52:39 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (x86_64-pc-linux-gnu) |
>> I agree, your approach is probably better. But check for more
>> submatches. Maybe upto the value of some variable, say
>> isearch-max-submatch-num.
>
> Good idea.
Maybe something like this:
=== modified file 'lisp/isearch.el'
--- lisp/isearch.el 2010-06-10 14:32:41 +0000
+++ lisp/isearch.el 2010-06-10 20:51:43 +0000
@@ -223,6 +223,15 @@ (defcustom search-highlight t
:type 'boolean
:group 'isearch)
+(defcustom search-highlight-submatches 0
+ "Highlight regexp subexpressions of the current regexp match.
+An integer means highlight regexp subexpressions up to the
+specified maximal number.
+When 0, do not highlight regexp subexpressions."
+ :type 'integer
+ :version "24.1"
+ :group 'isearch)
+
(defface isearch
'((((class color) (min-colors 88) (background light))
;; The background must not be too dark, for that means
@@ -2526,6 +2535,23 @@ (defun isearch-unread (&rest char-or-eve
;; Highlighting
(defvar isearch-overlay nil)
+(defvar isearch-submatches-overlays nil)
+
+(defface isearch-1
+ '((((class color) (min-colors 88) (background light))
+ :background "magenta2" :foreground "lightskyblue1")
+ (((class color) (min-colors 88) (background dark))
+ :background "palevioletred3" :foreground "brown4"))
+ "Used for displaying the first matching subexpression."
+ :group 'isearch)
+
+(defface isearch-2
+ '((((class color) (min-colors 88) (background light))
+ :background "magenta1" :foreground "lightskyblue1")
+ (((class color) (min-colors 88) (background dark))
+ :background "palevioletred4" :foreground "brown4"))
+ "Used for displaying the second matching subexpression."
+ :group 'isearch)
(defun isearch-highlight (beg end)
(if search-highlight
@@ -2536,11 +2562,28 @@ (defun isearch-highlight (beg end)
(setq isearch-overlay (make-overlay beg end))
;; 1001 is higher than lazy's 1000 and ediff's 100+
(overlay-put isearch-overlay 'priority 1001)
- (overlay-put isearch-overlay 'face isearch))))
+ (overlay-put isearch-overlay 'face isearch)))
+ (when (and (integerp search-highlight-submatches)
+ (> search-highlight-submatches 0)
+ isearch-regexp)
+ (mapc 'delete-overlay isearch-submatches-overlays)
+ (setq isearch-submatches-overlays nil)
+ (let ((i 0) ov)
+ (while (<= i search-highlight-submatches)
+ (when (match-beginning i)
+ (setq ov (make-overlay (match-beginning i) (match-end i)))
+ (overlay-put ov 'face (intern-soft (format "isearch-%d" i)))
+ (overlay-put ov 'priority 1002)
+ (push ov isearch-submatches-overlays))
+ (setq i (1+ i))))))
(defun isearch-dehighlight ()
(when isearch-overlay
- (delete-overlay isearch-overlay)))
+ (delete-overlay isearch-overlay))
+ (when search-highlight-submatches
+ (mapc 'delete-overlay isearch-submatches-overlays)
+ (setq isearch-submatches-overlays nil)))
+
;; isearch-lazy-highlight feature
;; by Bob Glickstein <http://www.zanshin.com/~bobg/>
--
Juri Linkov
http://www.jurta.org/emacs/
- bug#6227: Color isearch regexp submatches differently, Lennart Borgman, 2010/06/08
- bug#6227: Color isearch regexp submatches differently, Juri Linkov, 2010/06/09
- bug#6227: Color isearch regexp submatches differently, Lennart Borgman, 2010/06/09
- bug#6227: Color isearch regexp submatches differently, Juri Linkov, 2010/06/10
- bug#6227: Color isearch regexp submatches differently, Lennart Borgman, 2010/06/10
- bug#6227: Color isearch regexp submatches differently,
Juri Linkov <=
- bug#6227: Color isearch regexp submatches differently, Lennart Borgman, 2010/06/10
- bug#6227: Color isearch regexp submatches differently, Stefan Monnier, 2010/06/10
- bug#6227: Color isearch regexp submatches differently, Juri Linkov, 2010/06/11