From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Simple isearch concerns Date: Tue, 27 Apr 2021 20:41:47 +0300 Organization: LINKOV.NET Message-ID: <87lf937hgk.fsf@mail.linkov.net> References: <20210403001539.x4rb55dvh46rmhb3.ref@Ergus> <20210403001539.x4rb55dvh46rmhb3@Ergus> <2599ffef-4f70-025c-5f9c-61b9ac94faf8@inventati.org> <87eefrbo9k.fsf@posteo.net> <7473b27b2b479f5686af@heytings.org> <87tuon9vf1.fsf@posteo.net> <20210403174508.xwr5uc36dzityitn@Ergus> <87wnsurdr7.fsf@gmail.com> <87fszij6to.fsf@mail.linkov.net> <87v98asulc.fsf@gmail.com> <87pmyimiwd.fsf@mail.linkov.net> <87bla11u5q.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5325"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) Cc: Philip Kaludercic , Ergus , Manuel Uberti , Gregory Heytings , emacs-devel@gnu.org To: Augusto Stoffel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Apr 27 19:51:55 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lbRsI-0001FF-Pv for ged-emacs-devel@m.gmane-mx.org; Tue, 27 Apr 2021 19:51:54 +0200 Original-Received: from localhost ([::1]:55544 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lbRsH-0005Ag-SY for ged-emacs-devel@m.gmane-mx.org; Tue, 27 Apr 2021 13:51:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46246) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lbRml-0000qH-Pd for emacs-devel@gnu.org; Tue, 27 Apr 2021 13:46:12 -0400 Original-Received: from relay12.mail.gandi.net ([217.70.178.232]:44315) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lbRmf-0000c7-9O for emacs-devel@gnu.org; Tue, 27 Apr 2021 13:46:11 -0400 Original-Received: from mail.gandi.net (m91-129-102-166.cust.tele2.ee [91.129.102.166]) (Authenticated sender: juri@linkov.net) by relay12.mail.gandi.net (Postfix) with ESMTPSA id 9236F200007; Tue, 27 Apr 2021 17:45:59 +0000 (UTC) In-Reply-To: <87bla11u5q.fsf@gmail.com> (Augusto Stoffel's message of "Mon, 26 Apr 2021 07:39:29 +0200") Received-SPF: pass client-ip=217.70.178.232; envelope-from=juri@linkov.net; helo=relay12.mail.gandi.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:268542 Archived-At: --=-=-= Content-Type: text/plain >> (setq-local overriding-terminal-local-map isearch-mode-map) >> >> fails with an error: >> >> Debugger entered--Lisp error: (error "Symbol overriding-terminal-local-map may not be buffer-local") >> make-local-variable(overriding-terminal-local-map) >> (set (make-local-variable 'overriding-terminal-local-map) isearch-mode-map) >> isearch-mode(t nil nil nil) >> isearch-forward(nil 1) > > Is this overriding map there just so that `isearch-mode-map' takes > precedence over other minor mode maps? If so, couldn't this be achieved > by manipulating minor-mode-map-alist to put Isearch's map at the top? > Maybe that can be done buffer-locally. According to (info "(elisp) Searching Keymaps") the next keymap to try is `overriding-local-map`. It can be set buffer-locally. And indeed, with the following patch you can set a few commands to not exit isearch: (put 'other-window 'isearch-scroll t) (put 'eval-expression 'isearch-scroll t) Then switching to another buffer with 'C-x o', or switching to the minibuffer with 'M-:' leaves the local isearch active in the original buffer. After switching back to the original buffer, or after exiting the minibuffer, isearch is still active and can be used to continue searching. Later this could be handled depending on a new option 'isearch-buffer-local': --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=isearch-buffer-local.patch diff --git a/lisp/isearch.el b/lisp/isearch.el index 9f3cfd70fb..11c2798b76 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1295,11 +1295,11 @@ isearch-mode (setq isearch-mode " Isearch") ;; forward? regexp? (force-mode-line-update) - (setq overriding-terminal-local-map isearch-mode-map) + (setq-local overriding-local-map isearch-mode-map) (run-hooks 'isearch-mode-hook) ;; Remember the initial map possibly modified ;; by external packages in isearch-mode-hook. (Bug#16035) - (setq isearch--saved-overriding-local-map overriding-terminal-local-map) + (setq isearch--saved-overriding-local-map overriding-local-map) ;; Pushing the initial state used to be before running isearch-mode-hook, ;; but a hook might set `isearch-push-state-function' used in @@ -1308,10 +1308,10 @@ isearch-mode (isearch-update) - (add-hook 'pre-command-hook 'isearch-pre-command-hook) - (add-hook 'post-command-hook 'isearch-post-command-hook) - (add-hook 'mouse-leave-buffer-hook 'isearch-mouse-leave-buffer) - (add-hook 'kbd-macro-termination-hook 'isearch-done) + (add-hook 'pre-command-hook 'isearch-pre-command-hook nil t) + (add-hook 'post-command-hook 'isearch-post-command-hook nil t) + (add-hook 'mouse-leave-buffer-hook 'isearch-mouse-leave-buffer nil t) + (add-hook 'kbd-macro-termination-hook 'isearch-done nil t) ;; isearch-mode can be made modal (in the sense of not returning to ;; the calling function until searching is completed) by entering @@ -1406,10 +1406,10 @@ isearch-done ,isearch-message ',isearch-case-fold-search))) - (remove-hook 'pre-command-hook 'isearch-pre-command-hook) - (remove-hook 'post-command-hook 'isearch-post-command-hook) - (remove-hook 'mouse-leave-buffer-hook 'isearch-mouse-leave-buffer) - (remove-hook 'kbd-macro-termination-hook 'isearch-done) + (remove-hook 'pre-command-hook 'isearch-pre-command-hook t) + (remove-hook 'post-command-hook 'isearch-post-command-hook t) + (remove-hook 'mouse-leave-buffer-hook 'isearch-mouse-leave-buffer t) + (remove-hook 'kbd-macro-termination-hook 'isearch-done t) (when (buffer-live-p isearch--current-buffer) (with-current-buffer isearch--current-buffer (setq isearch--current-buffer nil) @@ -1417,7 +1417,7 @@ isearch-done ;; Called by all commands that terminate isearch-mode. ;; If NOPUSH is non-nil, we don't push the string on the search ring. - (setq overriding-terminal-local-map nil) + (setq overriding-local-map nil) ;; (setq pre-command-hook isearch-old-pre-command-hook) ; for lemacs (setq minibuffer-message-timeout isearch-original-minibuffer-message-timeout) (isearch-dehighlight) @@ -2599,7 +2599,7 @@ isearch-mouse-2 is bound to outside of Isearch." (interactive "e") (let ((w (posn-window (event-start click))) - (binding (let ((overriding-terminal-local-map nil) + (binding (let ((overriding-local-map nil) ;; Key search depends on mode (bug#47755) (isearch-mode nil)) (key-binding (this-command-keys-vector) t)))) @@ -3018,7 +3018,7 @@ isearch-pre-command-hook (cond ;; Don't exit Isearch if we're in the middle of some ;; `set-transient-map' thingy like `universal-argument--mode'. - ((not (eq overriding-terminal-local-map isearch--saved-overriding-local-map))) + ((not (eq overriding-local-map isearch--saved-overriding-local-map))) ;; Don't exit Isearch for isearch key bindings. ((or (commandp (lookup-key isearch-mode-map key nil)) (commandp --=-=-=--