From: "Drew Adams" <drew.adams@oracle.com>
To: "'Stefan Monnier'" <monnier@iro.umontreal.ca>
Cc: 5923@debbugs.gnu.org
Subject: bug#5923: 23.1.95; minibuffer-message discards input events
Date: Sat, 10 Apr 2010 12:59:48 -0700 [thread overview]
Message-ID: <7C90907943E64115BA7CFABFB144BD24@us.oracle.com> (raw)
In-Reply-To: <jwvr5mn15r4.fsf-monnier+emacs@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2113 bytes --]
> > Prior to Emacs 23, a user can hit `C-RET' after `C-u' and while
> > `[prefix (4)]' is displayed, and the `sit-for' is interrupted and
> > the action is executed immediately. Starting with Emacs 23, the
> > `C-RET' is ignored. A `C-RET' doesn't take effect until the
> > `sit-for' timeout is finished (as if it were `sleep-for').
>
> I can't reproduce exactly your test case because I don't know
> what code is run by your C-u (and because I'm on GNU/Linux,
> ...), but at least when I start "emacs23 -Q" and do C-x C-f
> TAB TAB, the first tab outputs a minibuffer-message but the
> second TAB is executed immediately (interrupts the
> minibuffer-message). So I don't see that problematic
> behavior you're seeing.
>
> Can you check whether my test case works for you as well?
I confirm that your test case works for me also.
The second tab has its effect - it is not lost.
[However, the minibuffer message remains displayed for the full timeout period.
That seems wrong - why not stop displaying the msg as soon as the tab event
arrives? Unless `Complete but not unique' is perhaps redisplayed by another call
or something?
IOW, after the second tab, *Completions* is shown, indicating that the tab did
take effect, and the message `Complete but not unique' is briefly removed -
replaced by the message `Making completion list...'. But the `Complete but not
unique' message then reappears for the duration of the `minibuffer-message'
timeout. Is this the behavior you see also?
Anyway, this is not the problematic behavior I get with my code, and which this
bug report is about.]
Attached is the code I use for `C-u' in the minibuffer. I hope it helps.
I should have mentioned that the same problem occurs when I use `C-u' in the
minibuffer at any time, not just in the scenario where I follow it by `C-RET'.
IOW, it has nothing to do with the particular user event that follows.
And as I said, in Emacs 22 and before there is no such problem: any user event
immediately interrupts the message display and its timeout, and no such event is
lost (so you don't need to hit the key multiple times).
[-- Attachment #2: bug-5923-emacs.el --]
[-- Type: application/octet-stream, Size: 5004 bytes --]
(defvar icicle-universal-argument-map
(let ((map (make-sparse-keymap)))
(define-key map [t] 'icicle-universal-argument-other-key)
(define-key map (vector meta-prefix-char t) 'icicle-universal-argument-other-key)
(define-key map [switch-frame] nil)
(define-key map [?\C-u] 'icicle-universal-argument-more)
(define-key map [?-] 'icicle-universal-argument-minus)
(define-key map [?0] 'icicle-digit-argument)
(define-key map [?1] 'icicle-digit-argument)
(define-key map [?2] 'icicle-digit-argument)
(define-key map [?3] 'icicle-digit-argument)
(define-key map [?4] 'icicle-digit-argument)
(define-key map [?5] 'icicle-digit-argument)
(define-key map [?6] 'icicle-digit-argument)
(define-key map [?7] 'icicle-digit-argument)
(define-key map [?8] 'icicle-digit-argument)
(define-key map [?9] 'icicle-digit-argument)
(define-key map [kp-0] 'icicle-digit-argument)
(define-key map [kp-1] 'icicle-digit-argument)
(define-key map [kp-2] 'icicle-digit-argument)
(define-key map [kp-3] 'icicle-digit-argument)
(define-key map [kp-4] 'icicle-digit-argument)
(define-key map [kp-5] 'icicle-digit-argument)
(define-key map [kp-6] 'icicle-digit-argument)
(define-key map [kp-7] 'icicle-digit-argument)
(define-key map [kp-8] 'icicle-digit-argument)
(define-key map [kp-9] 'icicle-digit-argument)
(define-key map [kp-subtract] 'icicle-universal-argument-minus)
map)
"Keymap used while processing `C-u' during Icicles completion.")
(defun icicle-universal-argument () ; Bound to `C-u' in minibuffer.
"`universal-argument', but also echo the prefix."
(interactive)
(setq prefix-arg (list 4)
universal-argument-num-events (length (this-command-keys)))
(icicle-ensure-overriding-map-is-bound)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
;; Bound to `C-<0-9>', `M-<0-9>', `C-M-<0-9>' in minibuffer.
(defun icicle-digit-argument (arg)
"`digit-argument', but also echo the prefix."
(interactive "P")
(let* ((char (if (integerp last-command-char)
last-command-char
(get last-command-char 'ascii-character)))
(digit (- (logand char ?\177) ?0)))
(cond ((integerp arg)
(setq prefix-arg (+ (* arg 10) (if (< arg 0) (- digit) digit))))
((eq arg '-)
;; Treat -0 as just -, so that -01 will work.
(setq prefix-arg (if (zerop digit) '- (- digit))))
(t
(setq prefix-arg digit))))
(setq universal-argument-num-events (length (this-command-keys)))
(icicle-ensure-overriding-map-is-bound)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
(defun icicle-negative-argument (arg) ; Bound to `M--', `C-M--' in minibuffer.
"`negative-argument', but also echo the prefix."
(interactive "P")
(cond ((integerp arg) (setq prefix-arg (- arg)))
((eq arg '-) (setq prefix-arg nil))
(t (setq prefix-arg '-)))
(setq universal-argument-num-events (length (this-command-keys)))
(icicle-ensure-overriding-map-is-bound)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
(defun icicle-universal-argument-more (arg)
"`universal-argument-more', but also echo the prefix."
(interactive "P")
(universal-argument-more arg)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
(defun icicle-universal-argument-other-key (arg)
"`universal-argument-other-key', but also echo the prefix."
(interactive "P")
(universal-argument-other-key arg)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
(defun icicle-universal-argument-minus (arg)
"`universal-argument-minus', but also echo the prefix."
(interactive "P")
(universal-argument-minus arg)
(icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg))
(defun icicle-ensure-overriding-map-is-bound ()
"Set `overriding-terminal-local-map' to `icicle-universal-argument-map'."
(if (not (boundp 'overriding-map-is-bound)) ; Emacs 20, 21.
(setq overriding-terminal-local-map icicle-universal-argument-map)
(unless overriding-map-is-bound ; Emacs 22+.
(setq saved-overriding-map overriding-terminal-local-map
overriding-terminal-local-map icicle-universal-argument-map
overriding-map-is-bound t))))
(defun icicle-msg-maybe-in-minibuffer (format-string &rest args)
"Display FORMAT-STRING as a message.
If called with the minibuffer inactive, use `message'.
Otherwise:
If `icicle-minibuffer-message-ok-p', then use `minibuffer-message'.
Else do nothing (no message display)."
(if (active-minibuffer-window)
(when icicle-minibuffer-message-ok-p
(save-selected-window
(select-window (minibuffer-window))
(minibuffer-message (apply #'format (concat " [" format-string "]") args))))
(apply #'message format-string args)))
next prev parent reply other threads:[~2010-04-10 19:59 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-10 16:52 bug#5923: 23.1.95; minibuffer-message discards input events Drew Adams
2010-04-10 19:15 ` Stefan Monnier
2010-04-10 19:59 ` Drew Adams [this message]
2010-04-14 2:19 ` Stefan Monnier
2010-04-14 5:06 ` Drew Adams
2010-04-19 5:38 ` Drew Adams
2010-04-19 6:09 ` Drew Adams
2010-04-20 16:18 ` Drew Adams
2010-04-20 23:45 ` Drew Adams
2010-04-21 0:05 ` Drew Adams
2010-07-23 22:26 ` Stefan Monnier
2010-07-28 15:24 ` Drew Adams
2016-07-05 4:06 ` npostavs
2016-07-05 14:19 ` Drew Adams
2016-07-06 13:11 ` Noam Postavsky
2016-07-06 13:59 ` Drew Adams
2016-07-06 14:55 ` Noam Postavsky
2016-07-06 15:05 ` Eli Zaretskii
2016-07-06 15:30 ` Noam Postavsky
2016-07-06 15:38 ` Eli Zaretskii
2016-07-06 14:25 ` bug#3938: " Eli Zaretskii
2016-07-06 15:10 ` bug#5923: " Drew Adams
2016-07-06 15:32 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7C90907943E64115BA7CFABFB144BD24@us.oracle.com \
--to=drew.adams@oracle.com \
--cc=5923@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).