* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
@ 2012-02-02 21:02 Juri Linkov
2012-02-03 7:38 ` Eli Zaretskii
2012-02-23 0:57 ` Juri Linkov
0 siblings, 2 replies; 7+ messages in thread
From: Juri Linkov @ 2012-02-02 21:02 UTC (permalink / raw)
To: 10705
Currently `isearch-occur' is not in sync with the interactive specification
of `occur' that provides a new feature of `C-u M-x occur RET' that collects
the matching strings into the `*Occur*' buffer without line numbers.
The following patch syncs code from `occur-read-primary-args' to `isearch-occur'.
It doesn't quit Isearch when there are no subexpression in the regexp
(it collects the entire match with "\\&").
But in case of subexpression in the regexp, it quits Isearch because
it needs to ask for a substituted replacement string using `read-string'.
=== modified file 'lisp/isearch.el'
--- lisp/isearch.el 2012-01-25 17:54:01 +0000
+++ lisp/isearch.el 2012-02-02 21:01:12 +0000
@@ -1467,12 +1467,27 @@ (defun isearch-occur (regexp &optional n
Interactively, REGEXP is the current search regexp or a quoted search
string. NLINES has the same meaning as in `occur'."
(interactive
- (list
- (cond
- (isearch-word (word-search-regexp isearch-string))
- (isearch-regexp isearch-string)
- (t (regexp-quote isearch-string)))
- (if current-prefix-arg (prefix-numeric-value current-prefix-arg))))
+ (let* ((perform-collect (consp current-prefix-arg))
+ (regexp (cond
+ (isearch-word (word-search-regexp isearch-string))
+ (isearch-regexp isearch-string)
+ (t (regexp-quote isearch-string)))))
+ (list regexp
+ (if perform-collect
+ ;; Perform collect operation
+ (if (zerop (regexp-opt-depth regexp))
+ ;; No subexpression so collect the entire match.
+ "\\&"
+ ;; Get the regexp for collection pattern.
+ (isearch-done nil t)
+ (isearch-clean-overlays)
+ (let ((default (car occur-collect-regexp-history)))
+ (read-string
+ (format "Regexp to collect (default %s): " default)
+ nil 'occur-collect-regexp-history default)))
+ ;; Otherwise normal occur takes numerical prefix argument.
+ (when current-prefix-arg
+ (prefix-numeric-value current-prefix-arg))))))
(let ((case-fold-search isearch-case-fold-search)
;; Set `search-upper-case' to nil to not call
;; `isearch-no-upper-case-p' in `occur-1'.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-02 21:02 bug#10705: 24.0.93; Collect strings matching regexp from Isearch Juri Linkov
@ 2012-02-03 7:38 ` Eli Zaretskii
2012-02-04 0:14 ` Juri Linkov
2012-02-23 0:57 ` Juri Linkov
1 sibling, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2012-02-03 7:38 UTC (permalink / raw)
To: Juri Linkov; +Cc: 10705
> From: Juri Linkov <juri@jurta.org>
> Date: Thu, 02 Feb 2012 23:02:03 +0200
>
> Currently `isearch-occur' is not in sync with the interactive specification
> of `occur' that provides a new feature of `C-u M-x occur RET' that collects
> the matching strings into the `*Occur*' buffer without line numbers.
>
> The following patch syncs code from `occur-read-primary-args' to `isearch-occur'.
Btw, while at that, how about fixing the doc string as well. What it
says now, viz.
> Interactively, REGEXP is the current search regexp or a quoted search
> string. NLINES has the same meaning as in `occur'."
is not clear enough: what is a "quoted search string"? I'd suggest to
describe explicitly the 3 cases handled by the code:
> + (regexp (cond
> + (isearch-word (word-search-regexp isearch-string))
> + (isearch-regexp isearch-string)
> + (t (regexp-quote isearch-string)))))
and refer to the relevant string in each case.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-03 7:38 ` Eli Zaretskii
@ 2012-02-04 0:14 ` Juri Linkov
2012-02-04 7:26 ` Eli Zaretskii
0 siblings, 1 reply; 7+ messages in thread
From: Juri Linkov @ 2012-02-04 0:14 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 10705
>> Interactively, REGEXP is the current search regexp or a quoted search
>> string. NLINES has the same meaning as in `occur'."
>
> is not clear enough: what is a "quoted search string"? I'd suggest to
> describe explicitly the 3 cases handled by the code:
>
>> + (regexp (cond
>> + (isearch-word (word-search-regexp isearch-string))
>> + (isearch-regexp isearch-string)
>> + (t (regexp-quote isearch-string)))))
>
> and refer to the relevant string in each case.
Is this better?
=== modified file 'lisp/isearch.el'
--- lisp/isearch.el 2012-02-03 23:50:41 +0000
+++ lisp/isearch.el 2012-02-04 00:10:01 +0000
@@ -1464,8 +1464,11 @@ (defun isearch-query-replace-regexp (&op
(defun isearch-occur (regexp &optional nlines)
"Run `occur' with regexp to search from the current search string.
-Interactively, REGEXP is the current search regexp or a quoted search
-string. NLINES has the same meaning as in `occur'."
+Interactively, in word search REGEXP is computed from words
+without regard to punctuation, in regexp search REGEXP is
+the current search regexp, in normal search REGEXP is created
+from the current search string quoting all special regexp characters.
+NLINES has the same meaning as in `occur'."
(interactive
(let* ((perform-collect (consp current-prefix-arg))
(regexp (cond
BTW, shouldn't this new feature (collecting strings with `C-u M-x occur')
be announced in NEWS?
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-04 0:14 ` Juri Linkov
@ 2012-02-04 7:26 ` Eli Zaretskii
2012-02-04 14:41 ` Drew Adams
2012-02-23 0:38 ` Juri Linkov
0 siblings, 2 replies; 7+ messages in thread
From: Eli Zaretskii @ 2012-02-04 7:26 UTC (permalink / raw)
To: Juri Linkov; +Cc: 10705
> From: Juri Linkov <juri@jurta.org>
> Cc: 10705@debbugs.gnu.org
> Date: Sat, 04 Feb 2012 02:14:15 +0200
>
> >> Interactively, REGEXP is the current search regexp or a quoted search
> >> string. NLINES has the same meaning as in `occur'."
> >
> > is not clear enough: what is a "quoted search string"? I'd suggest to
> > describe explicitly the 3 cases handled by the code:
> >
> >> + (regexp (cond
> >> + (isearch-word (word-search-regexp isearch-string))
> >> + (isearch-regexp isearch-string)
> >> + (t (regexp-quote isearch-string)))))
> >
> > and refer to the relevant string in each case.
>
> Is this better?
>
> === modified file 'lisp/isearch.el'
> --- lisp/isearch.el 2012-02-03 23:50:41 +0000
> +++ lisp/isearch.el 2012-02-04 00:10:01 +0000
> @@ -1464,8 +1464,11 @@ (defun isearch-query-replace-regexp (&op
>
> (defun isearch-occur (regexp &optional nlines)
> "Run `occur' with regexp to search from the current search string.
> -Interactively, REGEXP is the current search regexp or a quoted search
> -string. NLINES has the same meaning as in `occur'."
> +Interactively, in word search REGEXP is computed from words
> +without regard to punctuation, in regexp search REGEXP is
> +the current search regexp, in normal search REGEXP is created
> +from the current search string quoting all special regexp characters.
> +NLINES has the same meaning as in `occur'."
When you say "in word search" etc., you actually mean "when invoked
after a word search command", right? If so, I suggest the following
wording:
Run `occur' using the last search string as the regexp.
Interactively, REGEXP is constructed using the search string from the
last search command.
If the last search command was a word search, REGEXP is computed from
the search words disregarding punctuation. If the last search
command was a regular expression search, REGEXP is the regular
expression used in that search. If the last search command searched
for a string, REGEXP is constructed by quoting all the special
characters in that string.
> BTW, shouldn't this new feature (collecting strings with `C-u M-x occur')
> be announced in NEWS?
I think it should be.
Thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-04 7:26 ` Eli Zaretskii
@ 2012-02-04 14:41 ` Drew Adams
2012-02-23 0:38 ` Juri Linkov
1 sibling, 0 replies; 7+ messages in thread
From: Drew Adams @ 2012-02-04 14:41 UTC (permalink / raw)
To: 'Eli Zaretskii', 'Juri Linkov'; +Cc: 10705
> When you say "in word search" etc., you actually mean "when invoked
> after a word search command", right? If so, I suggest the following
> wording:
>
> Run `occur' using the last search string as the regexp.
> Interactively, REGEXP is constructed using the search string from the
> last search command.
>
> If the last search command was a word search, REGEXP is computed from
> the search words disregarding punctuation. If the last search
> command was a regular expression search, REGEXP is the regular
> expression used in that search. If the last search command searched
> for a string, REGEXP is constructed by quoting all the special
> characters in that string.
+1, with the same assumption ("when you say...").
However:
* it should be "the search words, disregarding punctuation" (comma - it is not
the words themselves that disregard punctuation)
* "ignoring" is better than "disregarding" here
And just what do we mean by the computation of REGEXP paying no
attention to punctuation? Maybe an "(e.g. ...)" is in order.
* "searched for a literal string" (or "searched for a regular string") is
perhaps better than "searched for a string"
FWIW, the doc string for `isearch-forward-regexp' refers to a
literal search as "a regular string search". But I'm not sure
that "regular string" is a good choice in such contexts, as it
can suggest having something to do with regular expressions.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-04 7:26 ` Eli Zaretskii
2012-02-04 14:41 ` Drew Adams
@ 2012-02-23 0:38 ` Juri Linkov
1 sibling, 0 replies; 7+ messages in thread
From: Juri Linkov @ 2012-02-23 0:38 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 10705-done
Installed, with all the comments from Eli and Drew.
Also added a NEWS entry for this feature extracted from the docstring of `occur'.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#10705: 24.0.93; Collect strings matching regexp from Isearch
2012-02-02 21:02 bug#10705: 24.0.93; Collect strings matching regexp from Isearch Juri Linkov
2012-02-03 7:38 ` Eli Zaretskii
@ 2012-02-23 0:57 ` Juri Linkov
1 sibling, 0 replies; 7+ messages in thread
From: Juri Linkov @ 2012-02-23 0:57 UTC (permalink / raw)
To: 10705
I noticed that another occur's new feature `occur-edit-mode' lacks
a menu item. I added it too.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-02-23 0:57 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-02 21:02 bug#10705: 24.0.93; Collect strings matching regexp from Isearch Juri Linkov
2012-02-03 7:38 ` Eli Zaretskii
2012-02-04 0:14 ` Juri Linkov
2012-02-04 7:26 ` Eli Zaretskii
2012-02-04 14:41 ` Drew Adams
2012-02-23 0:38 ` Juri Linkov
2012-02-23 0:57 ` Juri Linkov
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.