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

From: Stefan Monnier <[email-masked]>
Date: Tue, 18 Aug 2009 23:27:16 -0400

>> So stuffing it back into unread-command-events is incorrect.  I think
>> the right solution requires the use of something like
>> this-single-command-raw-keys.

> How this would help to reread a key sequence with Isearch
> keymap deactivated (i.e. to do the same that
> `isearch-reread-key-sequence-naturally' currently does)?

I think it would make the funny business like

  (if (and (> (length keylist) 1)
           (symbolp (car keylist))
           (listp (cadr keylist))
           (not (numberp (posn-point
                          (event-start (cadr keylist)  )))))
      (pop unread-command-events)))

unnecessary, and it would fix various bugs such as the one discussed.

`unread-command-events' should hold events that have not gone through
input-decode-map, function-key-map, dwon-mouse and drag-mouse demotion,
double-click -> click demotion, shift->unshift demotion, ...
i.e. raw-events.
So isearch-unread should be called with events that come from read-event
or from this-single-command-raw-keys but not from read-key-sequence.

        Stefan