unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Ergus <spacibba@aol.com>
To: "Basil L. Contovounesios" <contovob@tcd.ie>
Cc: emacs-devel@gnu.org, Juri Linkov <juri@linkov.net>
Subject: Re: isearch region or thing at point.
Date: Wed, 1 May 2019 01:16:16 +0200	[thread overview]
Message-ID: <20190430231614.l423x6eqta5fbhor@Ergus> (raw)
In-Reply-To: <87h8af15kg.fsf@tcd.ie>

On Tue, Apr 30, 2019 at 11:39:11PM +0100, Basil L. Contovounesios wrote:
>Ergus <spacibba@aol.com> writes:
>
>
>Thanks, I have some questions and minor comments:
>
>> (defun isearch-forward-region (&optional arg)
>>  "Do incremental search forward for text in active region.
>> Like ordinary incremental search except that the text in the active
>> region is added to the search string initially if variable
>> `transient-mark-mode' is non nil.
>
>Perhaps "if `transient-mark-mode' is enabled" instead.
>
>>  See the command `isearch-forward-symbol' for more information.
>
>Which information is that?  Why not refer to isearch-forward instead?
>
Yes, The docstring was not finished actually, I was just trying the code
functionality..
>
>>  (interactive "P")
>>  (isearch-forward nil 1)
>>  (if-let* ((bounds (and (use-region-p) ;; Region and transient non-nil
>
>RHS comments usually start with a single semicolon;
>see (info "(elisp) Comment Tips").

I will delete those comments
>
>> 			 (string-empty-p isearch-string)
>
>Why must this be empty?
>
This is a condition I will change. The idea is that if the search-string
is empty in this moment we need to goto the region-beginning, That's a
latter change I will make.

>> 			 (region-bounds)))
>> 	    (contiguous (= (length bounds) 1)) ;; Region is contiguous
>
>Better to use the function region-noncontiguous-p.
>
I already had the bounds.. I didn't want to do the funcall again... but
I know it is probably not important.. I am just an obsessed.
>
>Also, you shouldn't leave bound symbols unused.  The most common way to
>short-circuit conditionals is via the special forms 'and' and 'or'.
>In the case of if-let et al., you can also use the following syntax:
>
>  (if-let* ((len (length foo))
>            ((zerop len)))
>      'empty
>    'nonempty)
>
>> 	    (region-beg (car (car bounds)))
>> 	    (region-end (cdr (car bounds)))
>
>Nitpick: caar/cdar, also not important.
>
>> 	    (region-string (and (= (count-lines region-beg region-end) 1)
>> 				(buffer-substring-no-properties
>> 				 region-beg region-end)))
>
>Why can't the region span multiple lines?  Better to use
>region-extract-function for this, as it is more flexible.
>
I don't thing that searching multiple lines will be very useful in
practice and could potentially produce some corner cases. But I
will think about that a bit more.

>> 	    (noempty (not (string-blank-p region-string))))
>
>Why can't the search string be blank?
>
>>      (progn
>> 	(goto-char region-beg)
>> 	(setq mark-active nil
>> 	      isearch--deactivated-mark t)
>
>Where is isearch--deactivated-mark defined?  What does it do?
>Shouldn't this set/call deactivate-mark or similar instead?
>
This is somewhere else, but I did't included it here because is was not
related with the issue I had
>> 	(isearch-yank-string region-string)
>>
>> 	(when-let (count (and arg (prefix-numeric-value arg)))
>> 	  (isearch-repeat-forward count)))
>
>This can be simplified as per Noam's suggestion.
Yes, sorry, I was concerned if somehow the prefix could be non-nil, but
(prefix-numeric-value arg) could return nil... I don't really know the
fancy valued that prefix could potentially have. But probably there is
not any danger there.
>
>>    (setq isearch-error "Invalid region for isearch")
>>    (isearch-push-state)
>>    (isearch-update)))
>
>Here's a suggestion which addresses some of my comments:
>
>(defun isearch-forward-region (&optional arg)
>  "Do incremental search forward for text in active region.
>Like ordinary incremental search except that the text in the
>active region is added to the search string initially
>if`transient-mark-mode' is enabled.  See the command
>`isearch-forward' for more information.
>With a prefix argument, search for ARGth occurrence forward if
>ARG is positive, or ARGth occurrence backward if ARG is
>negative."
>  (interactive "P")
>  (isearch-forward nil 1)
>  (let ((region (and (use-region-p)
>                     (string-empty-p isearch-string)
>                     (funcall region-extract-function nil))))
>    (cond ((and (stringp region)
>                (not (string-empty-p region)))
>           (goto-char (region-beginning))
>           (deactivate-mark)
>           (isearch-yank-string region)
>           (when arg
>             (isearch-repeat-forward (prefix-numeric-value arg))))
>          (t
>           (setq isearch-error "Invalid region")
>           (isearch-push-state)
>           (isearch-update)))))
>
>Feel free to adapt it as you please.
>
>Thanks,
>
>-- 
>Basil



  reply	other threads:[~2019-04-30 23:16 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-27  0:14 isearch region or thing at point Ergus
2019-04-27  2:15 ` Basil L. Contovounesios
2019-04-29  0:41   ` Ergus
2019-04-29  1:30     ` Ergus
2019-04-29  1:31     ` Ergus
2019-04-29 19:41     ` Juri Linkov
2019-04-29 20:50       ` Ergus
2019-04-30 15:39       ` Drew Adams
2019-04-30 16:57         ` Ergus
2019-04-30 19:58           ` Juri Linkov
2019-04-30 16:25       ` Ergus
2019-04-30 18:49         ` Noam Postavsky
2019-04-30 19:03           ` Ergus
2019-04-30 19:24             ` Noam Postavsky
2019-04-30 20:05               ` Ergus
2019-04-30 20:38                 ` Noam Postavsky
2019-04-30 22:39         ` Basil L. Contovounesios
2019-04-30 23:16           ` Ergus [this message]
2019-04-30 23:33             ` Basil L. Contovounesios
2019-05-01  0:13               ` Ergus
2019-05-01 20:57                 ` Juri Linkov
2019-05-03 16:27                 ` Basil L. Contovounesios
2019-05-01 11:20               ` Ergus
2019-05-01 14:33                 ` Drew Adams
2019-05-01 16:03                   ` Ergus
2019-05-01 16:25                     ` Drew Adams
2019-05-03 16:28                     ` Basil L. Contovounesios
2019-05-04  9:29                     ` Eli Zaretskii
2019-05-03 16:28                 ` Basil L. Contovounesios
2019-05-04  9:26                 ` Eli Zaretskii
2019-05-04 12:15                   ` Ergus
2019-05-04 14:17                     ` Drew Adams
2019-05-04 14:56                       ` Ergus
2019-05-04 15:24                         ` Drew Adams
2019-05-04 21:06                           ` Juri Linkov
2019-05-04 22:40                             ` Drew Adams
2019-05-06 19:41                               ` Juri Linkov
2019-05-07  2:56                                 ` Drew Adams
2019-05-07 19:56                                   ` Ergus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190430231614.l423x6eqta5fbhor@Ergus \
    --to=spacibba@aol.com \
    --cc=contovob@tcd.ie \
    --cc=emacs-devel@gnu.org \
    --cc=juri@linkov.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).