[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bug#17453: Isearch doesn't work properly with Follow Mode.
From: |
Artur Malabarba |
Subject: |
Re: bug#17453: Isearch doesn't work properly with Follow Mode. |
Date: |
Sun, 1 Nov 2015 20:42:26 +0000 |
2015-11-01 19:46 GMT+00:00 Artur Malabarba <address@hidden>:
> The idiomatic Emacs way to do this is to add hooks to isearch, and run
> them at useful places. Then packages like follow-mode can add stuff to
> these hooks and do what they want (like, enable/disable itself).
After playing around a bit, here's a quick solution that works for me.
The patch adds 4 lines to isearch.el, and defines a function in
follow-mode.
I only tried it supperficially, so you might find issues with this
solution that I couldn't
---
lisp/follow.el | 14 ++++++++++++++
lisp/isearch.el | 4 ++++
2 files changed, 18 insertions(+)
diff --git a/lisp/follow.el b/lisp/follow.el
index 938c59e..e9a60e5 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -203,6 +203,8 @@
(require 'easymenu)
(eval-when-compile (require 'cl-lib))
+(require 'seq)
+(require 'subr-x)
;;; Variables
@@ -419,11 +421,13 @@ follow-mode
:keymap follow-mode-map
(if follow-mode
(progn
+ (setq-local isearch-search-fun-function #'follow--search-function)
(add-hook 'compilation-filter-hook 'follow-align-compilation-windows t t)
(add-hook 'post-command-hook 'follow-post-command-hook t)
(add-hook 'window-size-change-functions 'follow-window-size-change t))
;; Remove globally-installed hook functions only if there is no
;; other Follow mode buffer.
+ (setq-local isearch-search-fun-function #'isearch-search-fun-default)
(let ((buffers (buffer-list))
following)
(while (and (not following) buffers)
@@ -434,6 +438,16 @@ follow-mode
(remove-hook 'window-size-change-functions 'follow-window-size-change)))
(remove-hook 'compilation-filter-hook
'follow-align-compilation-windows t)))
+(defvar isearch-lazy-highlight-ongoing-search)
+(defun follow--search-function ()
+ (lambda (&rest args)
+ (prog1 (apply (isearch-search-fun-default) args)
+ (unless (or isearch-lazy-highlight-ongoing-search
+ (pos-visible-in-window-p))
+ (when-let ((win (seq-find (lambda (w)
(pos-visible-in-window-p (point) w))
+ (get-buffer-window-list))))
+ (select-window win))))))
+
(defun follow-find-file-hook ()
"Find-file hook for Follow mode. See the variable `follow-auto'."
(if follow-auto (follow-mode 1)))
diff --git a/lisp/isearch.el b/lisp/isearch.el
index b762884..daecdb5 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -3075,11 +3075,15 @@ isearch-lazy-highlight-new-loop
(run-with-idle-timer lazy-highlight-initial-delay nil
'isearch-lazy-highlight-update)))))
+(defvar isearch-lazy-highlight-ongoing-search nil
+ "Bound to t while doing a lazy-highlight search.")
+
(defun isearch-lazy-highlight-search ()
"Search ahead for the next or previous match, for lazy highlighting.
Attempt to do the search exactly the way the pending Isearch would."
(condition-case nil
(let ((case-fold-search isearch-lazy-highlight-case-fold-search)
+ (isearch-lazy-highlight-ongoing-search t)
(isearch-regexp isearch-lazy-highlight-regexp)
(isearch-regexp-function isearch-lazy-highlight-regexp-function)
(isearch-lax-whitespace
--
2.5.3
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Alan Mackenzie, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Artur Malabarba, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Artur Malabarba, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Alan Mackenzie, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Eli Zaretskii, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Alan Mackenzie, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Artur Malabarba, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Alan Mackenzie, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Artur Malabarba, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode.,
Artur Malabarba <=
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Eli Zaretskii, 2015/11/01
- Re: bug#17453: Isearch doesn't work properly with Follow Mode., Alan Mackenzie, 2015/11/01
Re: bug#17453: Isearch doesn't work properly with Follow Mode., Juri Linkov, 2015/11/01