* bug#21663: Subject: 25.0.50; isearch-edit-string dont resume multi isearches @ 2015-10-11 4:57 Tino Calancha [not found] ` <handler.21663.B.144453929427612.ack@debbugs.gnu.org> 0 siblings, 1 reply; 8+ messages in thread From: Tino Calancha @ 2015-10-11 4:57 UTC (permalink / raw) To: 21663 [-- Attachment #1: Type: text/plain, Size: 305 bytes --] Start fresh session: emacs -Q C-x C-b M-x multi-isearch-buffer RET *scratch* RET *Buffer List* RET RET s (Using C-s several times will search "s" on the two buffers). M-s e (Now C-s should keep searching the same string "s" in the two buffers, but the string is searched just in the current buffer). [-- Attachment #2: Type: text/plain, Size: 730 bytes --] diff --git a/lisp/isearch.el b/lisp/isearch.el index 4fc9b38..5440be7 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1086,7 +1086,10 @@ isearch-done ;; Update the ring data. (isearch-update-ring isearch-string isearch-regexp)) - (let ((isearch-mode-end-hook-quit (and nopush (not edit)))) + (let ((isearch-mode-end-hook-quit (and nopush (not edit))) + (isearch-mode-end-hook (if (and nopush edit multi-isearch-buffer-list) + (delq 'multi-isearch-end isearch-mode-end-hook) + isearch-mode-end-hook))) (run-hooks 'isearch-mode-end-hook)) ;; If there was movement, mark the starting position. ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <handler.21663.B.144453929427612.ack@debbugs.gnu.org>]
* bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files [not found] ` <handler.21663.B.144453929427612.ack@debbugs.gnu.org> @ 2015-10-12 15:25 ` Tino Calancha 2015-10-12 20:17 ` Juri Linkov 2015-10-13 5:18 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches Tino Calancha 1 sibling, 1 reply; 8+ messages in thread From: Tino Calancha @ 2015-10-12 15:25 UTC (permalink / raw) To: 21663 [-- Attachment #1: Type: text/plain, Size: 378 bytes --] Previous patch would not work for `multi-isearch-files' because it is not checking `multi-isearch-file-list', so that `multi-isearch-end' would be called. We may replace (if (and nopush edit multi-isearch-buffer-list) with (if (and nopush edit (or multi-isearch-buffer-list multi-isearch-file-list)) but just (if (and nopush edit) wold work in any situation and its shorter. [-- Attachment #2: Type: text/plain, Size: 705 bytes --] gdiff --git a/lisp/isearch.el b/lisp/isearch.el index 4fc9b38..6107bd5 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1086,7 +1086,10 @@ isearch-done ;; Update the ring data. (isearch-update-ring isearch-string isearch-regexp)) - (let ((isearch-mode-end-hook-quit (and nopush (not edit)))) + (let ((isearch-mode-end-hook-quit (and nopush (not edit))) + (isearch-mode-end-hook (if (and nopush edit) + (delq 'multi-isearch-end isearch-mode-end-hook) + isearch-mode-end-hook))) (run-hooks 'isearch-mode-end-hook)) ;; If there was movement, mark the starting position. ^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files 2015-10-12 15:25 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files Tino Calancha @ 2015-10-12 20:17 ` Juri Linkov 2015-10-13 1:35 ` Tino Calancha 0 siblings, 1 reply; 8+ messages in thread From: Juri Linkov @ 2015-10-12 20:17 UTC (permalink / raw) To: Tino Calancha; +Cc: 21663 >> Start fresh session: >> emacs -Q >> >> C-x C-b >> M-x multi-isearch-buffer RET *scratch* RET *Buffer List* RET RET s >> (Using C-s several times will search "s" on the two buffers). >> >> M-s e >> (Now C-s should keep searching the same string "s" in the two buffers, >> but the string is searched just in the current buffer). > > Previous patch would not work for `multi-isearch-files' > because it is not checking `multi-isearch-file-list', so that > `multi-isearch-end' would be called. > > We may replace > (if (and nopush edit multi-isearch-buffer-list) > with > (if (and nopush edit (or multi-isearch-buffer-list multi-isearch-file-list)) > but just > (if (and nopush edit) > wold work in any situation and its shorter. I wonder why ‘isearch-mode-end-hook-quit’ is not initialized as ‘(and nopush edit)’ in the first place? If it was so, then you could just check for it in ‘multi-isearch-end’. But please note that not finishing multi-isearch correctly has such side effects as e.g. after ‘M-s e’ switching from the minibuffer to another buffer and starting another ordinary search in it will still use multi-isearch, etc. Instead of not finishing multi-isearch, have you tried to re-initialize multi-isearch on resuming isearch after exiting from the minibuffer? (This could be achieved by remembering its state variables). ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files 2015-10-12 20:17 ` Juri Linkov @ 2015-10-13 1:35 ` Tino Calancha 0 siblings, 0 replies; 8+ messages in thread From: Tino Calancha @ 2015-10-13 1:35 UTC (permalink / raw) To: 21663; +Cc: Tino Calancha [-- Attachment #1: Type: text/plain, Size: 715 bytes --] > I wonder why ‘isearch-mode-end-hook-quit’ is not initialized as > ‘(and nopush edit)’ in the first place? If it was so, then > you could just check for it in ‘multi-isearch-end’. My understanding about that variable (i may be wrong) is that is should be non nil just when the user quit the search with C-g we dont want this variable being non nil in the case of editing the string with the idea to resume the same kind of search. > have you tried to re-initialize multi-isearch on resuming isearch > after exiting from the minibuffer? (This could be achieved by > remembering its state variables). I like your proposal: this way is more consistent with the original code. See attached new patch. [-- Attachment #2: Type: text/plain, Size: 993 bytes --] diff --git a/lisp/isearch.el b/lisp/isearch.el index 4fc9b38..74b1250 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1242,6 +1242,14 @@ with-isearch-suspended (isearch-adjusted isearch-adjusted) (isearch-yank-flag isearch-yank-flag) (isearch-error isearch-error) + ;; multi isearch variables + (multi-isearch-file-list multi-isearch-file-list) + (multi-isearch-buffer-list multi-isearch-buffer-list) + (multi-isearch-next-buffer-current-function multi-isearch-next-buffer-current-function) + (multi-isearch-current-buffer multi-isearch-current-buffer) + (isearch-push-state-function isearch-push-state-function) + (isearch-wrap-function isearch-wrap-function) + (isearch-search-fun-function isearch-search-fun-function) ;;; Don't bind this. We want isearch-search, below, to set it. ;;; And the old value won't matter after that. ;;; (isearch-other-end isearch-other-end) ^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches [not found] ` <handler.21663.B.144453929427612.ack@debbugs.gnu.org> 2015-10-12 15:25 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files Tino Calancha @ 2015-10-13 5:18 ` Tino Calancha 2015-10-13 22:04 ` Juri Linkov 1 sibling, 1 reply; 8+ messages in thread From: Tino Calancha @ 2015-10-13 5:18 UTC (permalink / raw) To: 21663; +Cc: Tino Calancha [-- Attachment #1: Type: text/plain, Size: 400 bytes --] In previous patch (isearch_3.patch) the variables are not restored because they were bind to the same symbol name, and multi-isearch-end will set them to nil. In addition, multi-isearch-end need to be added again to isearch-mode-end-hook, otherwise, even after exiting with C-g, C-s will start a multisearch instead of a normal isearch in the current buffer. See attached patch: isearch_4.patch [-- Attachment #2: Type: text/plain, Size: 2034 bytes --] diff --git a/lisp/isearch.el b/lisp/isearch.el index 4fc9b38..617f3e7 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1242,6 +1242,15 @@ with-isearch-suspended (isearch-adjusted isearch-adjusted) (isearch-yank-flag isearch-yank-flag) (isearch-error isearch-error) + ;; multi isearch variables + (is-multi-isearch (or multi-isearch-buffer-list multi-isearch-file-list)) + (multi-isearch-file-list-new multi-isearch-file-list) + (multi-isearch-buffer-list-new multi-isearch-buffer-list) + (multi-isearch-next-buffer-current-function-new multi-isearch-next-buffer-current-function) + (multi-isearch-current-buffer-new multi-isearch-current-buffer) + (isearch-push-state-function isearch-push-state-function) + (isearch-wrap-function isearch-wrap-function) + (isearch-search-fun-function isearch-search-fun-function) ;;; Don't bind this. We want isearch-search, below, to set it. ;;; And the old value won't matter after that. ;;; (isearch-other-end isearch-other-end) @@ -1298,12 +1307,17 @@ with-isearch-suspended nil isearch-word) + (when is-multi-isearch (add-hook 'isearch-mode-end-hook 'multi-isearch-end)) ;; Copy new local values to isearch globals (setq isearch-string isearch-new-string isearch-message isearch-new-message isearch-forward isearch-new-forward isearch-word isearch-new-word - isearch-case-fold-search isearch-new-case-fold)) + isearch-case-fold-search isearch-new-case-fold + multi-isearch-file-list multi-isearch-file-list-new + multi-isearch-buffer-list multi-isearch-buffer-list-new + multi-isearch-current-buffer multi-isearch-current-buffer-new + multi-isearch-next-buffer-current-function multi-isearch-next-buffer-current-function-new)) ;; Empty isearch-string means use default. (when (= 0 (length isearch-string)) ^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches 2015-10-13 5:18 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches Tino Calancha @ 2015-10-13 22:04 ` Juri Linkov 2015-10-14 6:48 ` Tino Calancha 0 siblings, 1 reply; 8+ messages in thread From: Juri Linkov @ 2015-10-13 22:04 UTC (permalink / raw) To: Tino Calancha; +Cc: 21663 > In previous patch (isearch_3.patch) the variables are not > restored because they were bind to the same symbol name, and > multi-isearch-end will set them to nil. Thanks, it's a safer approach to restore them explicitly. > In addition, multi-isearch-end need to be added again to > isearch-mode-end-hook, otherwise, even after exiting with C-g, C-s will > start a multisearch instead of a normal isearch in the current buffer. To avoid the need to add multi-isearch-end to isearch-mode-end-hook, you could try to restore saved variables before calling isearch-mode. Then multi-isearch-setup called from isearch-mode should take care of adding multi-isearch-end to isearch-mode-end-hook when necessary variables are already restored, i.e. when you save the variable multi-isearch-next-buffer-function instead of multi-isearch-next-buffer-current-function. But OTOH multi-isearch-current-buffer still needs to be restored after isearch-mode in the same place where you already added it in your patch. This way restarting isearch will emulate binding local variables multi-isearch-next-buffer-function and multi-isearch-buffer-list in multi-isearch-buffers before starting multi-buffer search. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches 2015-10-13 22:04 ` Juri Linkov @ 2015-10-14 6:48 ` Tino Calancha 2015-10-14 16:17 ` Juri Linkov 0 siblings, 1 reply; 8+ messages in thread From: Tino Calancha @ 2015-10-14 6:48 UTC (permalink / raw) To: 21663 [-- Attachment #1: Type: text/plain, Size: 969 bytes --] Thank you Juri for your help on this. I have tested the attached patch (isearch-5.patch) with `multi-isearch-buffers'/`multi-isearch-files': it seems OK now. < To avoid the need to add multi-isearch-end to isearch-mode-end-hook, < you could try to restore saved variables before calling isearch-mode. < Then multi-isearch-setup called from isearch-mode should take care of < adding multi-isearch-end to isearch-mode-end-hook when necessary < variables are already restored, i.e. when you save the variable < multi-isearch-next-buffer-function instead of < multi-isearch-next-buffer-current-function. I got the point. Actually I bind multi-isearch-next-buffer-function to multi-isearch-next-buffer-current-function, because the former was nil and multi-isearch-setup makes a non-nil test for this variable at the beginning < multi-isearch-current-buffer still needs to be restored after < isearch-mode in the same place where you already added it in your patch. OK. [-- Attachment #2: Type: text/plain, Size: 1373 bytes --] diff --git a/lisp/isearch.el b/lisp/isearch.el index 4fc9b38..4c7187b 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1242,6 +1242,11 @@ with-isearch-suspended (isearch-adjusted isearch-adjusted) (isearch-yank-flag isearch-yank-flag) (isearch-error isearch-error) + + (multi-isearch-file-list-new multi-isearch-file-list) + (multi-isearch-buffer-list-new multi-isearch-buffer-list) + (multi-isearch-next-buffer-function multi-isearch-next-buffer-current-function) + (multi-isearch-current-buffer-new multi-isearch-current-buffer) ;;; Don't bind this. We want isearch-search, below, to set it. ;;; And the old value won't matter after that. ;;; (isearch-other-end isearch-other-end) @@ -1303,7 +1308,10 @@ with-isearch-suspended isearch-message isearch-new-message isearch-forward isearch-new-forward isearch-word isearch-new-word - isearch-case-fold-search isearch-new-case-fold)) + isearch-case-fold-search isearch-new-case-fold + multi-isearch-current-buffer multi-isearch-current-buffer-new + multi-isearch-file-list multi-isearch-file-list-new + multi-isearch-buffer-list multi-isearch-buffer-list-new)) ;; Empty isearch-string means use default. (when (= 0 (length isearch-string)) ^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches 2015-10-14 6:48 ` Tino Calancha @ 2015-10-14 16:17 ` Juri Linkov 0 siblings, 0 replies; 8+ messages in thread From: Juri Linkov @ 2015-10-14 16:17 UTC (permalink / raw) To: Tino Calancha; +Cc: 21663 Thank you Tino, I have tested your patch and it works OK, so please commit it. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-10-14 16:17 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-10-11 4:57 bug#21663: Subject: 25.0.50; isearch-edit-string dont resume multi isearches Tino Calancha [not found] ` <handler.21663.B.144453929427612.ack@debbugs.gnu.org> 2015-10-12 15:25 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi-isearch-files Tino Calancha 2015-10-12 20:17 ` Juri Linkov 2015-10-13 1:35 ` Tino Calancha 2015-10-13 5:18 ` bug#21663: 25.0.50; isearch-edit-string dont resume multi isearches Tino Calancha 2015-10-13 22:04 ` Juri Linkov 2015-10-14 6:48 ` Tino Calancha 2015-10-14 16:17 ` 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).