Subject: Re: bug#4117: 23.1; isearch + isearch-allow-scroll loses shift

From: Juri Linkov <[email-masked]>
Date: Tue, 18 Aug 2009 00:18:17 +0300

> If this works, it's good, but it shouldn't be installed as is: this has
> no business being in isearch.el since other packages may need to do
> the same.  Please try to abstract some useful function that we can put
> in subr.el and then use here in isearch.el.

Actually the solution is much simpler.  I just noticed that
`read-key-sequence' already has the necessary argument
`dont-downcase-last':

  The third (optional) arg dont-downcase-last, if non-nil, means do not
  convert the last event to lower case.  (Normally any upper case event
  is converted to lower case if the original event is undefined and the lower
  case equivalent is defined.)  A non-nil value is appropriate for reading
  a key sequence to be defined.

So the fix is simple:

Index: lisp/isearch.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/isearch.el,v
retrieving revision 1.345
diff -u -r1.345 isearch.el
--- lisp/isearch.el	14 Feb 2009 09:04:46 -0000	1.345
+++ lisp/isearch.el	17 Aug 2009 21:17:57 -0000
@@ -1805,7 +1810,7 @@
 Return the key sequence as a string/vector."
   (isearch-unread-key-sequence keylist)
   (let (overriding-terminal-local-map)
-    (read-key-sequence nil)))  ; This will go through function-key-map, if nec.
+    (read-key-sequence nil nil t)))  ; This will go through function-key-map, if nec.
 
 (defun isearch-lookup-scroll-key (key-seq)
   "If KEY-SEQ is bound to a scrolling command, return it as a symbol.

-- 
Juri Linkov
http://www.jurta.org/emacs/