* bug#32362: Interactive highlighting of sub-regexp
@ 2018-08-03 14:24 Grégory Mounié
0 siblings, 0 replies; only message in thread
From: Grégory Mounié @ 2018-08-03 14:24 UTC (permalink / raw)
To: 32362
[-- Attachment #1: Type: text/plain, Size: 842 bytes --]
Dear maintainers,
I propose to add to Interactive Highlighting (hi-lock.el) few lines in
order to highlight only the first sub-regexps if it exists.
The use case that interested me was to highlight the column of a CSV file.
EG.:
M-x highlight-regexp then ^\(?:[^,]*,\)\{5\}\([^,]*\),.*$ for
highlighting the 6th column of a clean CSV file
I try to keep it as simple as possible as the function is in the
documentation.
The modified function has two paths: font-lock if enabled or directly
overlay
The sub-regexp detection is a bit rough for font-lock-mode case. I do
not know how to do it perfectly without implementing a regexp engine or
using a much more complex detection regexp.
For overlay-case, the code seems quite straightforward.
Have a nice day,
Grégory Mounié
[-- Attachment #2: 0001-Interactive-Hightlighting-only-the-first-subexp-if-i.patch --]
[-- Type: text/x-patch, Size: 3295 bytes --]
From 1764f0aa16727f510ecfe113aab4b3e689aa0978 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9gory=20Mouni=C3=A9?= <Gregory.Mounie@imag.fr>
Date: Fri, 3 Aug 2018 15:53:34 +0200
Subject: [PATCH] Interactive Hightlighting: only the first subexp if it exists
When interactively highlighting regular expression (highlight-regexp),
if the regular expression contains a subexpression, only the
first sub-expression is highlighted.
* lisp/hi-lock.el (hi-lock-set-pattern):
* doc/emacs/display.texi:
* etc/NEWS:
highlight only the first subexp if the regexp contains subexps
Copyright-paperwork-exempt: yes
---
doc/emacs/display.texi | 2 ++
etc/NEWS | 6 ++++++
lisp/hi-lock.el | 12 +++++++++---
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 2f5ce80d60..ef3d8aab3e 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -986,6 +986,8 @@ Highlight Interactively
You can use this command multiple times, specifying various regular
expressions to highlight in different ways.
+Only the first sub-@var{regexp} is highlighted, if relevant.
+
@item M-s h u @var{regexp} @key{RET}
@itemx C-x w r @var{regexp} @key{RET}
@kindex M-s h u
diff --git a/etc/NEWS b/etc/NEWS
index 6ccf6fc089..44a6f468a0 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -651,6 +651,12 @@ to signal the main thread, e.g., when they encounter an error.
+++
*** 'thread-join' returns the result of the finished thread now.
+** Interactive Highlighting
+
+*** The function 'highlight-regexp' highlights first subexp.
+If the regular expression includes at least a subexp, the
+function highlights only the first subexp.
+
\f
* New Modes and Packages in Emacs 27.1
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 13ebffb1af..62cba0f4d1 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -687,10 +687,12 @@ hi-lock-read-face-name
(intern face)))
(defun hi-lock-set-pattern (regexp face)
- "Highlight REGEXP with face FACE."
+ "Highlight REGEXP (or first SUBEXP) 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)))
+ (let ((pattern (list regexp
+ (list (if (string-match-p "\\\\(.*\\\\)" regexp) 1 0)
+ (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 +714,11 @@ hi-lock-set-pattern
(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
+ (or (match-beginning 1)
+ (match-beginning 0))
+ (or (match-end 1)
+ (match-end 0)))))
(overlay-put overlay 'hi-lock-overlay t)
(overlay-put overlay 'hi-lock-overlay-regexp regexp)
(overlay-put overlay 'face face))
--
2.18.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2018-08-03 14:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-03 14:24 bug#32362: Interactive highlighting of sub-regexp Grégory Mounié
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).