unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Artur Malabarba <bruce.connor.am@gmail.com>
To: Alan Mackenzie <acm@muc.de>
Cc: 17453@debbugs.gnu.org, emacs-devel <emacs-devel@gnu.org>,
	Stefan Monnier <monnier@iro.umontreal.ca>,
	Juri Linkov <juri@linkov.net>
Subject: Re: bug#17453: Isearch doesn't work properly with Follow Mode.
Date: Mon, 2 Nov 2015 11:53:10 +0000	[thread overview]
Message-ID: <CAAdUY-+ALAi6HVyfgKFmKV9=voox1LB_xnrhtS2dW76Zvkr2cA@mail.gmail.com> (raw)
In-Reply-To: <20151102092853.GA11804@acm.fritz.box>

> I don't actually understand that patch, I'll need to study the wierd/new
> constructs used in it, like `when-let'.

Here's a more thoroughly explained version of this function, that
doesn't use when-let.

seq-find is equivalent to cl-find-if, it returns the first element
that matches the provided predicate.

(defun follow--search-function ()
  (lambda (&rest args)
    (let ((search-function (isearch-search-fun-default))
          (matched (apply search-function args)))
      ;; If this is a proper user-triggered search (and not just a
      ;; lazy-highlight search), and if the search matched, and if the
      ;; match is not visible on this window...
      (when (and matched
                 (not isearch-lazy-highlight-ongoing-search)
                 (not (and (pos-visible-in-window-p (match-beginning 0))
                           (pos-visible-in-window-p (match-end 0)))))
        ;; ... see if the match is visible on another window.
        (let ((win (seq-find (lambda (w)
                               (and (pos-visible-in-window-p
(match-beginning 0) w)
                                    (pos-visible-in-window-p (match-end 0) w)))
                             (follow-all-followers))))
          ;; If so, select it.
          (when win
            (select-window win))))
      matched)))

I also changed it to use (follow-all-followers).

> However, I'm certain that that patch will not fix all the problems
> discussed in this post.

The patch as provided doesn't fix the “highlighting matches on all
windows” issue. But that's trivial to solve by removing that
`(overlay-put ov 'window (selected-window))' line. (which I have half
a mind to do right now because I just think it's a generally useful
improvement.)

>  One way or another, isearch MUST work with the
> window boundaries of the entire Follow Mode group.

Maybe I missed part of the issue. I thought you wanted Isearch to
switch to another window if that window contains the next match
(instead of scrolling the current window). For that, you only need
pos-visible-in-window-p, you don't need to mess with boundaries.



  reply	other threads:[~2015-11-02 11:53 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20140509224458.GA4205@acm.acm>
     [not found] ` <jwva9aqbcl9.fsf-monnier+emacsbugs@gnu.org>
2015-10-29 23:23   ` bug#17453: Isearch doesn't work properly with Follow Mode Alan Mackenzie
2015-10-31 22:35     ` John Wiegley
2015-10-31 23:25       ` Alan Mackenzie
2015-10-31 23:41         ` John Wiegley
2015-11-01 11:59           ` Alan Mackenzie
2015-11-01  0:17       ` Drew Adams
2015-10-31 23:13     ` Artur Malabarba
2015-10-31 23:32       ` Alan Mackenzie
2015-11-01 12:20         ` Artur Malabarba
2015-11-01 12:23           ` Artur Malabarba
2015-11-01 13:52             ` Alan Mackenzie
2015-11-01 16:50               ` Eli Zaretskii
2015-11-01 18:27                 ` Alan Mackenzie
2015-11-01 19:46                   ` Artur Malabarba
2015-11-01 20:15                     ` Alan Mackenzie
2015-11-01 21:37                       ` Artur Malabarba
2015-11-01 20:42                     ` Artur Malabarba
2015-11-01 20:54                   ` Eli Zaretskii
2015-11-01 22:19                     ` Alan Mackenzie
2015-10-31 23:35     ` Juri Linkov
2015-10-31 23:56       ` Alan Mackenzie
2015-11-02  0:14         ` Juri Linkov
2015-11-02  3:35           ` Eli Zaretskii
2015-11-02  9:28           ` Alan Mackenzie
2015-11-02 11:53             ` Artur Malabarba [this message]
2015-11-02 12:14               ` Artur Malabarba
2015-11-02 12:39                 ` Alan Mackenzie
2015-11-02 12:35               ` Alan Mackenzie
2015-11-02 13:10                 ` Artur Malabarba
2015-11-02 14:18                   ` Artur Malabarba
2015-11-02 15:44                     ` Alan Mackenzie
2015-11-02 23:22                       ` Juri Linkov
2015-11-03 12:31                         ` Alan Mackenzie
2015-11-02 23:28                     ` Juri Linkov
2015-11-02 23:33             ` Juri Linkov

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='CAAdUY-+ALAi6HVyfgKFmKV9=voox1LB_xnrhtS2dW76Zvkr2cA@mail.gmail.com' \
    --to=bruce.connor.am@gmail.com \
    --cc=17453@debbugs.gnu.org \
    --cc=acm@muc.de \
    --cc=emacs-devel@gnu.org \
    --cc=juri@linkov.net \
    --cc=monnier@iro.umontreal.ca \
    /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).