Subject: bug#15200: closed (Re: bug#15200: isearch-other-meta-char and shift)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 08 Oct 2013 23:30:05 +0000

Your bug report

#15200: isearch-other-meta-char and shift

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
15200: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15200
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#15200: isearch-other-meta-char and shift
From: Juri Linkov <[email-masked]>
To: Stefan Monnier <[email-masked]>
Cc: [email-masked]
Date: Wed, 09 Oct 2013 02:29:15 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

>> (lookup-key isearch-mode-map (kbd "C-u C-l")) => 1
>> (lookup-key isearch-mode-map (kbd "C-u C-w")) => 1
>
>> both return 1.
>
> OK, don't worry about that: the fix needs to be elsewhere (I happen to
> have a work-in-progress patch which fixes that problem).
>
> So, I think you can go ahead and install your patch.
> And please make a bug-report for the C-u C-w problem, so we don't forget
> about it.

I installed the patch (with a FIXME comment) and reported a new bug#15568.

Subject: isearch-other-meta-char and shift
From: Juri Linkov <[email-masked]>
To: [email-masked]
Date: Tue, 27 Aug 2013 19:28:22 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

There is a problem in `isearch-other-meta-char' with shifted characters.
Typing <S-kp-0> exits Isearch instead of adding 0 to the search string.

A possible fix is to handle shifted kp-numbers like
shifted control characters are handled in the second
`cond' branch of `isearch-other-meta-char':

=== modified file 'lisp/isearch.el'
--- lisp/isearch.el	2013-07-05 20:15:32 +0000
+++ lisp/isearch.el	2013-08-27 16:27:45 +0000
@@ -2550,6 +2606,16 @@ (defun isearch-other-meta-char (&optiona
 		    (lookup-key local-function-key-map key)))
 	     (while keylist
 	       (setq key (car keylist))
+	       ;; Handle an undefined shifted printing character
+	       ;; by downshifting it if that makes it printing.
+	       ;; (As read-key-sequence would normally do,
+	       ;; if we didn't have a default definition.)
+	       (if (and (integerp key)
+			(memq 'shift (event-modifiers key))
+			(>= key (+ ?\s (- ?\S-a ?a)))
+			(/= key (+ 127 (- ?\S-a ?a)))
+			(<  key (+ 256 (- ?\S-a ?a))))
+		   (setq key (- key (- ?\S-a ?a))))
 	       ;; If KEY is a printing char, we handle it here
 	       ;; directly to avoid the input method and keyboard
 	       ;; coding system translating it.