Subject: 24.3.50; isearch.el regression between 2013-12-05 and 2013-12-08

From: Drew Adams <[email-masked]>
Date: Mon, 16 Dec 2013 09:51:51 -0800 (PST)

There are only 3 lines of code that were changed in isearch.el to
introduce this regression.  I don't understand the code well enough to
suggest what's wrong, and I don't yet have a simple recipe from emacs
-Q.

But with my setup, when I do C-a from within Isearch it no longer exits
Isearch.  Maybe that description will ring a bell?

Here is a diff between the two isearch.el versions (from 12-05 and 12-08):

***************
*** 637,642 ****
--- 637,644 ----
  ;; isearch is invoked.
  (defvar isearch-input-method-local-p nil)
  
+ (defvar isearch--saved-overriding-local-map nil)
+ 
  ;; Minor-mode-alist changes - kind of redundant with the
  ;; echo area, but if isearching in multiple windows, it can be useful.
  
***************
*** 904,909 ****
--- 906,914 ----
  
    (setq overriding-terminal-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)
  
    ;; Pushing the initial state used to be before running isearch-mode-hook,
    ;; but a hook might set `isearch-push-state-function' used in
***************
*** 2235,2241 ****
      (cond
       ;; Don't exit Isearch if we're in the middle of some
       ;; set-temporary-overlay-map thingy like universal-argument--mode.
!      ((not (eq overriding-terminal-local-map isearch-mode-map)))
       ;; Don't exit Isearch for isearch key bindings.
       ((commandp (lookup-key isearch-mode-map key nil)))
       ;; Optionally edit the search string instead of exiting.
--- 2240,2246 ----
      (cond
       ;; Don't exit Isearch if we're in the middle of some
       ;; set-temporary-overlay-map thingy like universal-argument--mode.
!      ((not (eq overriding-terminal-local-map isearch--saved-overriding-local-map)))
       ;; Don't exit Isearch for isearch key bindings.
       ((commandp (lookup-key isearch-mode-map key nil)))
       ;; Optionally edit the search string instead of exiting.

I'm guessing that it will take someone familiar with the isearch.el code
(e.g. Juri) much less time to figure out what is wrong here than it will
for me to try to understand the code and narrow things down in my setup
to figure it out.  And if you can offer suggestions wrt things to check
I'll be glad to do so.

There might be other differences as well, but so far I haven't noticed
any.  I haven't tried much, though, and there is a lot to try, since the
code has been altered in fundamental ways since the end of September.
The good news is that at least simple, superficial use of Isearch in my
setup does not show other breakage.

Hoping you can enlighten me a bit about this - what to check etc.  Or
that if there is an Emacs bug perhaps you can recognize it, given only
the info provided here.  Thx.

In GNU Emacs 24.3.50.1 (i686-pc-mingw32)
 of 2013-12-08 on ODIEONE
Bzr revision: 115426 [email-masked]
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --prefix=/c/Devel/emacs/binary --enable-checking=yes,glyphs
 'CFLAGS=-O0 -g3' LDFLAGS=-Lc:/Devel/emacs/lib
 CPPFLAGS=-Ic:/Devel/emacs/include'