Package: emacs;
Reported by: Dima Kogan <dima <at> secretsauce.net>
Date: Sun, 10 Aug 2014 22:05:01 UTC
Severity: wishlist
Tags: patch
Found in version 24.4.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 18241 in the body.
You can then email your comments to 18241 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Sun, 10 Aug 2014 22:05:01 GMT) Full text and rfc822 format available.Dima Kogan <dima <at> secretsauce.net>
:bug-gnu-emacs <at> gnu.org
.
(Sun, 10 Aug 2014 22:05:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Dima Kogan <dima <at> secretsauce.net> To: bug-gnu-emacs <at> gnu.org Subject: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Sun, 10 Aug 2014 15:04:11 -0700
[Message part 1 (text/plain, inline)]
Hi. Before this patch it was possible to 'M-s h r' during an isearch to highlight the regexp being sought. This patch adds similar functionality for matching lines with 'M-s h l'. This patch moves the previous 'M-s h r' isearch functionality into a macro, and then calls this macro separately for the regex and line cases.
[0001-I-can-now-highlight-lines-matching-regexp-from-isear.patch (text/x-diff, inline)]
From ca3b5261d034b21467f781d7aa2620d0050fea37 Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima <at> secretsauce.net> Date: Sun, 10 Aug 2014 14:57:56 -0700 Subject: [PATCH] I can now highlight-lines-matching-regexp from isearch Before this patch it was possible to 'M-s h r' during an isearch to highlight the regexp being sought. This patch adds similar functionality for matching lines --- lisp/isearch.el | 79 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 29 deletions(-) diff --git a/lisp/isearch.el b/lisp/isearch.el index 20dabdc..710890c 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -524,6 +524,7 @@ This is like `describe-bindings', but displays only Isearch keys." (define-key map [?\C-\M-%] 'isearch-query-replace-regexp) (define-key map "\M-so" 'isearch-occur) (define-key map "\M-shr" 'isearch-highlight-regexp) + (define-key map "\M-shl" 'isearch-highlight-lines-matching-regexp) ;; The key translations defined in the C-x 8 prefix should add ;; characters to the search string. See iso-transl.el. @@ -732,6 +733,8 @@ Type \\[isearch-occur] to run `occur' that shows\ the last search string. Type \\[isearch-highlight-regexp] to run `highlight-regexp'\ that highlights the last search string. +Type \\[isearch-highlight-lines-matching-regexp] to run `highlight-lines-matching-regexp'\ + that highlights lines matching the last search string. Type \\[isearch-describe-bindings] to display all Isearch key bindings. Type \\[isearch-describe-key] to display documentation of Isearch key. @@ -1804,42 +1807,60 @@ characters in that string." (declare-function hi-lock-read-face-name "hi-lock" ()) + +(defmacro isearch--hi-lock (hi-lock-form) + "Backend for isearch-highlight-*. Does all the setup work, and +evaluates the given `hi-lock-form' to actually invoke the +highlighting function" + `(progn + (let ( + ;; Set `isearch-recursive-edit' to nil to prevent calling + ;; `exit-recursive-edit' in `isearch-done' that terminates + ;; the execution of this command when it is non-nil. + ;; We call `exit-recursive-edit' explicitly at the end below. + (isearch-recursive-edit nil)) + (isearch-done nil t) + (isearch-clean-overlays)) + (let ((regexp (cond ((functionp isearch-word) + (funcall isearch-word isearch-string)) + (isearch-word (word-search-regexp isearch-string)) + (isearch-regexp isearch-string) + ((if (and (eq isearch-case-fold-search t) + search-upper-case) + (isearch-no-upper-case-p + isearch-string isearch-regexp) + isearch-case-fold-search) + ;; Turn isearch-string into a case-insensitive + ;; regexp. + (mapconcat + (lambda (c) + (let ((s (string c))) + (if (string-match "[[:alpha:]]" s) + (format "[%s%s]" (upcase s) (downcase s)) + (regexp-quote s)))) + isearch-string "")) + (t (regexp-quote isearch-string))))) + (eval ,hi-lock-form)) + (and isearch-recursive-edit (exit-recursive-edit)))) + (defun isearch-highlight-regexp () "Run `highlight-regexp' with regexp from the current search string. It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp argument from the last search regexp or a quoted search string, and reads its face argument using `hi-lock-read-face-name'." (interactive) - (let ( - ;; Set `isearch-recursive-edit' to nil to prevent calling - ;; `exit-recursive-edit' in `isearch-done' that terminates - ;; the execution of this command when it is non-nil. - ;; We call `exit-recursive-edit' explicitly at the end below. - (isearch-recursive-edit nil)) - (isearch-done nil t) - (isearch-clean-overlays)) (require 'hi-lock nil t) - (let ((regexp (cond ((functionp isearch-word) - (funcall isearch-word isearch-string)) - (isearch-word (word-search-regexp isearch-string)) - (isearch-regexp isearch-string) - ((if (and (eq isearch-case-fold-search t) - search-upper-case) - (isearch-no-upper-case-p - isearch-string isearch-regexp) - isearch-case-fold-search) - ;; Turn isearch-string into a case-insensitive - ;; regexp. - (mapconcat - (lambda (c) - (let ((s (string c))) - (if (string-match "[[:alpha:]]" s) - (format "[%s%s]" (upcase s) (downcase s)) - (regexp-quote s)))) - isearch-string "")) - (t (regexp-quote isearch-string))))) - (hi-lock-face-buffer regexp (hi-lock-read-face-name))) - (and isearch-recursive-edit (exit-recursive-edit))) + (isearch--hi-lock (hi-lock-face-buffer regexp (hi-lock-read-face-name)))) + +(defun isearch-highlight-lines-matching-regexp () + "Run `highlight-lines-matching-regexp' with regexp from the +current search string. It exits Isearch mode and calls +`hi-lock-face-buffer' with its regexp argument from the last +search regexp or a quoted search string, and reads its face +argument using `hi-lock-read-face-name'." + (interactive) + (require 'hi-lock nil t) + (isearch--hi-lock (hi-lock-line-face-buffer regexp (hi-lock-read-face-name)))) (defun isearch-delete-char () -- 2.0.0
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Tue, 25 Jun 2019 22:33:01 GMT) Full text and rfc822 format available.Message #8 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Dima Kogan <dima <at> secretsauce.net> Cc: 18241 <at> debbugs.gnu.org Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Wed, 26 Jun 2019 00:32:03 +0200
Dima Kogan <dima <at> secretsauce.net> writes: > Before this patch it was possible to 'M-s h r' during an isearch to > highlight the regexp being sought. This patch adds similar functionality > for matching lines with 'M-s h l'. This patch moves the previous 'M-s h > r' isearch functionality into a macro, and then calls this macro > separately for the regex and line cases. Hm... Is that a feature that would be used a lot? It's a somewhat awkward interface and keystroke, I think. But here's some comments on the code: > +(defmacro isearch--hi-lock (hi-lock-form) > + "Backend for isearch-highlight-*. Does all the setup work, and > +evaluates the given `hi-lock-form' to actually invoke the > +highlighting function" [...] > + (eval ,hi-lock-form)) I think this should be a function that should just take a function to call that takes the parameters required. And if this is something we want, it needs a NEWS entry and documentation updates. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Tue, 25 Jun 2019 22:59:02 GMT) Full text and rfc822 format available.Message #11 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Dima Kogan <dima <at> secretsauce.net> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: 18241 <at> debbugs.gnu.org Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Tue, 25 Jun 2019 15:58:00 -0700
Lars Ingebrigtsen <larsi <at> gnus.org> writes: > Dima Kogan <dima <at> secretsauce.net> writes: > >> Before this patch it was possible to 'M-s h r' during an isearch to >> highlight the regexp being sought. This patch adds similar functionality >> for matching lines with 'M-s h l'. This patch moves the previous 'M-s h >> r' isearch functionality into a macro, and then calls this macro >> separately for the regex and line cases. > > Hm... Is that a feature that would be used a lot? It's a somewhat > awkward interface and keystroke, I think. I'd use it. If this is already available for "M-s h r", there's a reasonable expectation that "M-s h l" would work too. I don't disagree that the keystroke is awkward, but that's what we've had for a long time, and I'd rather not change it. > I think this should be a function that should just take a function to > call that takes the parameters required. OK > And if this is something we want, it needs a NEWS entry and > documentation updates. I can write them if this is something we want. Is this something we want?
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Wed, 26 Jun 2019 13:50:01 GMT) Full text and rfc822 format available.Message #14 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: Dima Kogan <dima <at> secretsauce.net> Cc: 18241 <at> debbugs.gnu.org Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Wed, 26 Jun 2019 15:49:26 +0200
Dima Kogan <dima <at> secretsauce.net> writes: > I'd use it. If this is already available for "M-s h r", there's a > reasonable expectation that "M-s h l" would work too. I don't disagree > that the keystroke is awkward, but that's what we've had for a long > time, and I'd rather not change it. That does make sense. >> And if this is something we want, it needs a NEWS entry and >> documentation updates. > > I can write them if this is something we want. Is this something we > want? Does anybody else have an opinion here? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Fri, 28 Jun 2019 19:20:03 GMT) Full text and rfc822 format available.Message #17 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Juri Linkov <juri <at> linkov.net> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: 18241 <at> debbugs.gnu.org, Dima Kogan <dima <at> secretsauce.net> Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Fri, 28 Jun 2019 22:12:44 +0300
>> I'd use it. If this is already available for "M-s h r", there's a >> reasonable expectation that "M-s h l" would work too. I don't disagree >> that the keystroke is awkward, but that's what we've had for a long >> time, and I'd rather not change it. > > Does anybody else have an opinion here? It's already possible to do this by typing in isearch: M-s h l M-n M-n M-n RET because the third default value of hi-lock commands is the last isearch string. Its only difference is that it quits isearch, but I wonder is it really useful to keep isearch active after running this hi-lock command?
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Sun, 30 Jun 2019 18:09:02 GMT) Full text and rfc822 format available.Message #20 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Dima Kogan <dima <at> secretsauce.net> To: Juri Linkov <juri <at> linkov.net> Cc: 18241 <at> debbugs.gnu.org, Lars Ingebrigtsen <larsi <at> gnus.org> Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Sun, 30 Jun 2019 11:08:16 -0700
[Message part 1 (text/plain, inline)]
Juri Linkov <juri <at> linkov.net> writes: > It's already possible to do this by typing in isearch: > > M-s h l > M-n M-n M-n RET > > because the third default value of hi-lock commands is > the last isearch string. > > Its only difference is that it quits isearch, but I wonder > is it really useful to keep isearch active after running > this hi-lock command? I guess this is true, but that requires 5 extra keystrokes and extra knowledge: I didn't know about this default, and it didn't even work until I updated my 2-month-old emacs Given that 'M-s h r' is handled specially in isearch already, it only makes sense that 'M-s h l' would be too. And there's no down side to supporting this at all. I'm attaching a new patch. It does away with the weird macro thing I was doing (don't know why I was doing that), and adds notes in the NEWS and the documentation. Thanks.
[0001-Add-ability-to-highlight-lines-matching-regexp-direc.patch (text/x-diff, inline)]
From 7267753901e5a5b61c78c982661d1bb3f92a596e Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima <at> secretsauce.net> Date: Sun, 30 Jun 2019 10:37:53 -0700 Subject: [PATCH] Add ability to highlight-lines-matching-regexp directly from isearch * lisp/isearch.el: Implement the new functionality. (isearch-highlight-lines-matching-regexp): New function bound to M-s h l in isearch. (isearch--highlight-regexp-or-lines-internal): New internal function * etc/NEWS (Search and Replace): Mention this change. * doc/emacs/search.texi: Added this binding to the documentation --- doc/emacs/search.texi | 10 ++++++++++ etc/NEWS | 3 +++ lisp/isearch.el | 26 +++++++++++++++++++++++--- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index c61578bab76..e7cbd3bef82 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -461,6 +461,16 @@ Special Isearch for the face to use for highlighting. To remove the highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). +@kindex M-s h l @r{(Incremental Search)} +@findex isearch-highlight-lines-matching-regexp + Similarly, you can exit the search while highlighting whole lines +containing matches of the last search string. To this end, type +@kbd{M-s h l} (@code{isearch-highlight-lines-matching-regexp}), which +will run @code{highlight-lines-matching-regexp} (@pxref{Highlight +Interactively}) passing it the regexp derived from the last search +string and prompting you for the face to use for highlighting. To +remove the highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). + @cindex incremental search, help on special keys @kindex C-h C-h @r{(Incremental Search)} @findex isearch-help-map diff --git a/etc/NEWS b/etc/NEWS index abbece374a4..72b30373587 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1111,6 +1111,9 @@ highlight in one iteration while processing the full buffer. 'isearch-yank-symbol-or-char'. 'isearch-del-char' is now bound to 'C-M-d'. +'M-s h l' invokes highlight-lines-matching-regexp directly using the +search string, similar to what 'M-s h r' was doing already. + +++ *** New variable 'isearch-yank-on-move' provides options 't' and 'shift' to extend the search string by yanking text that ends at the new diff --git a/lisp/isearch.el b/lisp/isearch.el index f150a3bba4b..e54fdb74783 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -753,6 +753,7 @@ isearch-mode-map (define-key map [?\C-\M-%] 'isearch-query-replace-regexp) (define-key map "\M-so" 'isearch-occur) (define-key map "\M-shr" 'isearch-highlight-regexp) + (define-key map "\M-shl" 'isearch-highlight-lines-matching-regexp) ;; The key translations defined in the C-x 8 prefix should add ;; characters to the search string. See iso-transl.el. @@ -1039,6 +1040,9 @@ isearch-forward the last search string. Type \\[isearch-highlight-regexp] to run `highlight-regexp'\ that highlights the last search string. +Type \\[isearch-highlight-lines-matching-regexp] to run + `highlight-lines-matching-regexp'\ that highlights lines + matching the last search string. Type \\[isearch-describe-bindings] to display all Isearch key bindings. Type \\[isearch-describe-key] to display documentation of Isearch key. @@ -2339,12 +2343,11 @@ isearch-occur (declare-function hi-lock-read-face-name "hi-lock" ()) -(defun isearch-highlight-regexp () +(defun isearch--highlight-regexp-or-lines-internal (hi-lock-func) "Run `highlight-regexp' with regexp from the current search string. It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp argument from the last search regexp or a quoted search string, and reads its face argument using `hi-lock-read-face-name'." - (interactive) (let ( ;; Set `isearch-recursive-edit' to nil to prevent calling ;; `exit-recursive-edit' in `isearch-done' that terminates @@ -2373,9 +2376,26 @@ isearch-highlight-regexp (regexp-quote s)))) isearch-string "")) (t (regexp-quote isearch-string))))) - (hi-lock-face-buffer regexp (hi-lock-read-face-name))) + (funcall hi-lock-func regexp (hi-lock-read-face-name))) (and isearch-recursive-edit (exit-recursive-edit))) +(defun isearch-highlight-regexp () + "Run `highlight-regexp' with regexp from the current search string. +It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp +argument from the last search regexp or a quoted search string, +and reads its face argument using `hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines-internal 'hi-lock-face-buffer)) + +(defun isearch-highlight-lines-matching-regexp () + "Run `highlight-lines-matching-regexp' with regexp from the +current search string. It exits Isearch mode and calls +`hi-lock-face-buffer' with its regexp argument from the last +search regexp or a quoted search string, and reads its face +argument using `hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines-internal 'hi-lock-line-face-buffer)) + (defun isearch-delete-char () "Undo last input item during a search. -- 2.20.0.rc2
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Sun, 30 Jun 2019 22:16:02 GMT) Full text and rfc822 format available.Message #23 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Juri Linkov <juri <at> linkov.net> To: Dima Kogan <dima <at> secretsauce.net> Cc: 18241 <at> debbugs.gnu.org, Lars Ingebrigtsen <larsi <at> gnus.org> Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Mon, 01 Jul 2019 00:12:47 +0300
> Given that 'M-s h r' is handled specially in isearch already, it only > makes sense that 'M-s h l' would be too. And there's no down side to > supporting this at all. Yes, it makes sense to do the same that 'M-s h r' already does. > I'm attaching a new patch. It does away with the weird macro thing I was > doing (don't know why I was doing that), and adds notes in the NEWS and > the documentation. Thanks, indeed better to avoid macros: we have 2 macros in isearch, and they are more of a hindrance than a help especially during development. > +@kindex M-s h l @r{(Incremental Search)} > +@findex isearch-highlight-lines-matching-regexp > + Similarly, you can exit the search while highlighting whole lines > +containing matches of the last search string. To this end, type > +@kbd{M-s h l} (@code{isearch-highlight-lines-matching-regexp}), which > +will run @code{highlight-lines-matching-regexp} (@pxref{Highlight > +Interactively}) passing it the regexp derived from the last search > +string and prompting you for the face to use for highlighting. To > +remove the highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). Maybe it's possible to make the text shorter by just adding a new sentence about 'M-s h l' to the middle of the paragraph that describes 'M-s h r'? > -(defun isearch-highlight-regexp () > +(defun isearch--highlight-regexp-or-lines-internal (hi-lock-func) The suffix '-internal' is not necessary here because the double dash in 'isearch--' implies that the function is internal.
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Mon, 01 Jul 2019 03:11:03 GMT) Full text and rfc822 format available.Message #26 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Dima Kogan <dima <at> secretsauce.net> To: Juri Linkov <juri <at> linkov.net> Cc: 18241 <at> debbugs.gnu.org, Lars Ingebrigtsen <larsi <at> gnus.org> Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Sun, 30 Jun 2019 20:09:59 -0700
[Message part 1 (text/plain, inline)]
Juri Linkov <juri <at> linkov.net> writes: > Maybe it's possible to make the text shorter by just adding a new sentence > about 'M-s h l' to the middle of the paragraph that describes 'M-s h r'? > >> -(defun isearch-highlight-regexp () >> +(defun isearch--highlight-regexp-or-lines-internal (hi-lock-func) > > The suffix '-internal' is not necessary here because the double dash > in 'isearch--' implies that the function is internal. Alright. Here's a new patch
[0001-Add-ability-to-highlight-lines-matching-regexp-direc.patch (text/x-diff, inline)]
From 7a7f3c50fee9953ff57ed8010d626f7637008d45 Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima <at> secretsauce.net> Date: Sun, 30 Jun 2019 10:37:53 -0700 Subject: [PATCH] Add ability to highlight-lines-matching-regexp directly from isearch * lisp/isearch.el: Implement the new functionality. (isearch-highlight-lines-matching-regexp): New function bound to M-s h l in isearch. (isearch--highlight-regexp-or-lines): New internal function * etc/NEWS (Search and Replace): Mention this change. * doc/emacs/search.texi: Added this binding to the documentation --- doc/emacs/search.texi | 18 +++++++++++------- etc/NEWS | 3 +++ lisp/isearch.el | 26 +++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index c61578bab76..571705b916f 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -453,13 +453,17 @@ Special Isearch @kindex M-s h r @r{(Incremental Search)} @findex isearch-highlight-regexp - You can exit the search while leaving the matches for the last -search string highlighted on display. To this end, type @kbd{M-s h r} -(@code{isearch-highlight-regexp}), which will run -@code{highlight-regexp} (@pxref{Highlight Interactively}) passing -it the regexp derived from the last search string and prompting you -for the face to use for highlighting. To remove the highlighting, -type @kbd{M-s h u} (@code{unhighlight-regexp}). +@kindex M-s h l @r{(Incremental Search)} +@findex isearch-highlight-lines-matching-regexp + You can exit the search while leaving matches for the last search +string highlighted by typing @kbd{M-s h r} +(@code{isearch-highlight-regexp}). This runs @code{highlight-regexp} +(@pxref{Highlight Interactively}), passing it the regexp derived from +the last search string and prompting you for the face to use for +highlighting. Similarly, you can highlight whole lines containing +matches by typing @kbd{M-s h l} +(@code{isearch-highlight-lines-matching-regexp}). To remove the +highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). @cindex incremental search, help on special keys @kindex C-h C-h @r{(Incremental Search)} diff --git a/etc/NEWS b/etc/NEWS index abbece374a4..72b30373587 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1111,6 +1111,9 @@ highlight in one iteration while processing the full buffer. 'isearch-yank-symbol-or-char'. 'isearch-del-char' is now bound to 'C-M-d'. +'M-s h l' invokes highlight-lines-matching-regexp directly using the +search string, similar to what 'M-s h r' was doing already. + +++ *** New variable 'isearch-yank-on-move' provides options 't' and 'shift' to extend the search string by yanking text that ends at the new diff --git a/lisp/isearch.el b/lisp/isearch.el index f150a3bba4b..888e83d15a1 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -753,6 +753,7 @@ isearch-mode-map (define-key map [?\C-\M-%] 'isearch-query-replace-regexp) (define-key map "\M-so" 'isearch-occur) (define-key map "\M-shr" 'isearch-highlight-regexp) + (define-key map "\M-shl" 'isearch-highlight-lines-matching-regexp) ;; The key translations defined in the C-x 8 prefix should add ;; characters to the search string. See iso-transl.el. @@ -1039,6 +1040,9 @@ isearch-forward the last search string. Type \\[isearch-highlight-regexp] to run `highlight-regexp'\ that highlights the last search string. +Type \\[isearch-highlight-lines-matching-regexp] to run + `highlight-lines-matching-regexp'\ that highlights lines + matching the last search string. Type \\[isearch-describe-bindings] to display all Isearch key bindings. Type \\[isearch-describe-key] to display documentation of Isearch key. @@ -2339,12 +2343,11 @@ isearch-occur (declare-function hi-lock-read-face-name "hi-lock" ()) -(defun isearch-highlight-regexp () +(defun isearch--highlight-regexp-or-lines (hi-lock-func) "Run `highlight-regexp' with regexp from the current search string. It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp argument from the last search regexp or a quoted search string, and reads its face argument using `hi-lock-read-face-name'." - (interactive) (let ( ;; Set `isearch-recursive-edit' to nil to prevent calling ;; `exit-recursive-edit' in `isearch-done' that terminates @@ -2373,9 +2376,26 @@ isearch-highlight-regexp (regexp-quote s)))) isearch-string "")) (t (regexp-quote isearch-string))))) - (hi-lock-face-buffer regexp (hi-lock-read-face-name))) + (funcall hi-lock-func regexp (hi-lock-read-face-name))) (and isearch-recursive-edit (exit-recursive-edit))) +(defun isearch-highlight-regexp () + "Run `highlight-regexp' with regexp from the current search string. +It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp +argument from the last search regexp or a quoted search string, +and reads its face argument using `hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines 'hi-lock-face-buffer)) + +(defun isearch-highlight-lines-matching-regexp () + "Run `highlight-lines-matching-regexp' with regexp from the +current search string. It exits Isearch mode and calls +`hi-lock-face-buffer' with its regexp argument from the last +search regexp or a quoted search string, and reads its face +argument using `hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines 'hi-lock-line-face-buffer)) + (defun isearch-delete-char () "Undo last input item during a search. -- 2.20.0.rc2
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Mon, 01 Jul 2019 14:10:01 GMT) Full text and rfc822 format available.Message #29 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Dima Kogan <dima <at> secretsauce.net> Cc: 18241 <at> debbugs.gnu.org, larsi <at> gnus.org, juri <at> linkov.net Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Mon, 01 Jul 2019 17:08:21 +0300
> From: Dima Kogan <dima <at> secretsauce.net> > Date: Sun, 30 Jun 2019 20:09:59 -0700 > Cc: 18241 <at> debbugs.gnu.org, Lars Ingebrigtsen <larsi <at> gnus.org> Thanks, some comments regarding the documentation parts: > +@kindex M-s h l @r{(Incremental Search)} > +@findex isearch-highlight-lines-matching-regexp > + You can exit the search while leaving matches for the last search > +string highlighted by typing @kbd{M-s h r} > +(@code{isearch-highlight-regexp}). This runs @code{highlight-regexp} > +(@pxref{Highlight Interactively}), passing it the regexp derived from > +the last search string and prompting you for the face to use for > +highlighting. Similarly, you can highlight whole lines containing > +matches by typing @kbd{M-s h l} > +(@code{isearch-highlight-lines-matching-regexp}). This description left me wondering what is the difference between these two commands. IOW, how does "last search string" and "whole lines containing matches" differ from one another? The problem is probably with using "search string" instead of "match" in the description of the first command, but that's a guess. > +'M-s h l' invokes highlight-lines-matching-regexp directly using the > +search string, similar to what 'M-s h r' was doing already. This needs to be more clear. "Similar" in what sense? and if it's similar enough, why did we introduce a new command/key binding? Also, since the new command is already described in the manual, this entry should be marked with "+++", see the beginning of NEWS for explanations why. > -(defun isearch-highlight-regexp () > +(defun isearch--highlight-regexp-or-lines (hi-lock-func) > "Run `highlight-regexp' with regexp from the current search string. We prefer the first line of the doc string to mention the arguments. > +(defun isearch-highlight-regexp () > + "Run `highlight-regexp' with regexp from the current search string. What is "current search string"? This should be explained in the rest of the doc string, but isn't. > +It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp > +argument from the last search regexp or a quoted search string, I'm guessing "the last search regexp or a quoted search string" refers to the same string as "the current search string" in the first line. If so, please note that it is generally a bad idea to describe the same thing by more than one term, because it leaves the reader wondering whether you indeed mean the same thing. > +(defun isearch-highlight-lines-matching-regexp () > + "Run `highlight-lines-matching-regexp' with regexp from the > +current search string. It exits Isearch mode and calls The first line of the doc string should be a complete sentence. Thanks.
bug-gnu-emacs <at> gnu.org
:bug#18241
; Package emacs
.
(Thu, 04 Jul 2019 01:32:02 GMT) Full text and rfc822 format available.Message #32 received at 18241 <at> debbugs.gnu.org (full text, mbox):
From: Dima Kogan <dima <at> secretsauce.net> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 18241 <at> debbugs.gnu.org, larsi <at> gnus.org, juri <at> linkov.net Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Wed, 03 Jul 2019 18:31:08 -0700
[Message part 1 (text/plain, inline)]
Try the attached
[0001-Add-ability-to-highlight-lines-matching-regexp-direc.patch (text/x-diff, inline)]
From 9d0fd748c0f5648a6687fc590822fae3a0eb2e2a Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima <at> secretsauce.net> Date: Sun, 30 Jun 2019 10:37:53 -0700 Subject: [PATCH] Add ability to highlight-lines-matching-regexp directly from isearch * lisp/isearch.el: Implement the new functionality. (isearch-highlight-lines-matching-regexp): New function bound to M-s h l in isearch. (isearch--highlight-regexp-or-lines): New internal function * etc/NEWS (Search and Replace): Mention this change. * doc/emacs/search.texi: Added this binding to the documentation --- doc/emacs/search.texi | 17 ++++++++++------- etc/NEWS | 6 ++++++ lisp/isearch.el | 32 +++++++++++++++++++++++++------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index c61578bab76..b47d51a2b66 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -453,13 +453,16 @@ Special Isearch @kindex M-s h r @r{(Incremental Search)} @findex isearch-highlight-regexp - You can exit the search while leaving the matches for the last -search string highlighted on display. To this end, type @kbd{M-s h r} -(@code{isearch-highlight-regexp}), which will run -@code{highlight-regexp} (@pxref{Highlight Interactively}) passing -it the regexp derived from the last search string and prompting you -for the face to use for highlighting. To remove the highlighting, -type @kbd{M-s h u} (@code{unhighlight-regexp}). +@kindex M-s h l @r{(Incremental Search)} +@findex isearch-highlight-lines-matching-regexp + You can exit the search while leaving the matches highlighted by +typing @kbd{M-s h r} (@code{isearch-highlight-regexp}). This runs +@code{highlight-regexp} (@pxref{Highlight Interactively}), passing it +the regexp derived from the search string and prompting you for the face +to use for highlighting. To highlight @emph{whole lines} containing +matches (rather than @emph{just} the matches), type @kbd{M-s h l} +(@code{isearch-highlight-lines-matching-regexp}). In either case, to +remove the highlighting, type @kbd{M-s h u} (@code{unhighlight-regexp}). @cindex incremental search, help on special keys @kindex C-h C-h @r{(Incremental Search)} diff --git a/etc/NEWS b/etc/NEWS index abbece374a4..0c2340603d0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1111,6 +1111,12 @@ highlight in one iteration while processing the full buffer. 'isearch-yank-symbol-or-char'. 'isearch-del-char' is now bound to 'C-M-d'. ++++ +'M-s h l' invokes highlight-lines-matching-regexp using the search +string to highlight lines matching the search string. This is similar +to the existing binding 'M-s h r' (highlight-regexp) that highlights +JUST the search string. + +++ *** New variable 'isearch-yank-on-move' provides options 't' and 'shift' to extend the search string by yanking text that ends at the new diff --git a/lisp/isearch.el b/lisp/isearch.el index f150a3bba4b..6c7899a384b 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -753,6 +753,7 @@ isearch-mode-map (define-key map [?\C-\M-%] 'isearch-query-replace-regexp) (define-key map "\M-so" 'isearch-occur) (define-key map "\M-shr" 'isearch-highlight-regexp) + (define-key map "\M-shl" 'isearch-highlight-lines-matching-regexp) ;; The key translations defined in the C-x 8 prefix should add ;; characters to the search string. See iso-transl.el. @@ -1039,6 +1040,9 @@ isearch-forward the last search string. Type \\[isearch-highlight-regexp] to run `highlight-regexp'\ that highlights the last search string. +Type \\[isearch-highlight-lines-matching-regexp] to run + `highlight-lines-matching-regexp'\ that highlights lines + matching the last search string. Type \\[isearch-describe-bindings] to display all Isearch key bindings. Type \\[isearch-describe-key] to display documentation of Isearch key. @@ -2339,12 +2343,12 @@ isearch-occur (declare-function hi-lock-read-face-name "hi-lock" ()) -(defun isearch-highlight-regexp () - "Run `highlight-regexp' with regexp from the current search string. -It exits Isearch mode and calls `hi-lock-face-buffer' with its regexp -argument from the last search regexp or a quoted search string, -and reads its face argument using `hi-lock-read-face-name'." - (interactive) +(defun isearch--highlight-regexp-or-lines (hi-lock-func) + "Run HI-LOCK-FUNC to exit isearch, leaving the matches highlighted. +This is the internal function used by `isearch-highlight-regexp' +and `isearch-highlight-lines-matching-regexp' to invoke +HI-LOCK-FUNC (either `highlight-regexp' or +`highlight-lines-matching-regexp' respectively)." (let ( ;; Set `isearch-recursive-edit' to nil to prevent calling ;; `exit-recursive-edit' in `isearch-done' that terminates @@ -2373,9 +2377,23 @@ isearch-highlight-regexp (regexp-quote s)))) isearch-string "")) (t (regexp-quote isearch-string))))) - (hi-lock-face-buffer regexp (hi-lock-read-face-name))) + (funcall hi-lock-func regexp (hi-lock-read-face-name))) (and isearch-recursive-edit (exit-recursive-edit))) +(defun isearch-highlight-regexp () + "Exit Isearch mode, and call `highlight-regexp' with its regexp +argument from the last search, and the face from +`hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines 'highlight-regexp)) + +(defun isearch-highlight-lines-matching-regexp () + "Exit Isearch mode, and call `highlight-lines-matching-regexp' +with its regexp argument from the last search, and the face from +`hi-lock-read-face-name'." + (interactive) + (isearch--highlight-regexp-or-lines 'highlight-lines-matching-regexp)) + (defun isearch-delete-char () "Undo last input item during a search. -- 2.20.0.rc2
Eli Zaretskii <eliz <at> gnu.org>
:Dima Kogan <dima <at> secretsauce.net>
:Message #37 received at 18241-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Dima Kogan <dima <at> secretsauce.net> Cc: larsi <at> gnus.org, 18241-done <at> debbugs.gnu.org, juri <at> linkov.net Subject: Re: bug#18241: 24.4.50; [PATCH] I can now highlight-lines-matching-regexp from isearch Date: Sat, 13 Jul 2019 10:22:07 +0300
> From: Dima Kogan <dima <at> secretsauce.net> > Cc: juri <at> linkov.net, 18241 <at> debbugs.gnu.org, larsi <at> gnus.org > Date: Wed, 03 Jul 2019 18:31:08 -0700 > > Try the attached Thanks, I pushed it to master. Please note that there were a few minor nits left that I fixed, see my followup commit.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 10 Aug 2019 11:24:07 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.