unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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 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).