From: Matthew Mundell <matt@mundell.ukfsn.org>
Cc: emacs-devel <emacs-devel@gnu.org>
Subject: Re: [matt@mundell.ukfsn.org: momentary-string-display input passing]
Date: 26 Mar 2004 21:51:04 +0000 [thread overview]
Message-ID: <87k717cm5z.fsf@sno.mundell.ukfsn.org> (raw)
In-Reply-To: E1AuYYK-0007g4-MJ@fencepost.gnu.org
Richard Stallman <rms@gnu.org> writes:
> This change looks basically reasonable to me, except I don't think
> that an error is the right thing to do when the user types a function
> key or clicks the mouse instead of typing the specified key. I think
> those should just be ignored, the way other input characters are
> ignored.
>
> Would someone like to make that change and install this?
The change does ignore such errors. They are caught by the
condition-case around read-char. A stray string in the condition case
handler's body makes the handler look like a call to error. It may be
that I left the string there when turning an older call to error into
the condition case.
A new patch and a change log are below.
> From: Matthew Mundell <matt@mundell.ukfsn.org>
> Subject: momentary-string-display input passing
> To: emacs-pretest-bug <emacs-pretest-bug@gnu.org>
> Date: 17 Feb 2004 23:15:12 +0000
>
> The CVS Elisp manual has the following example for
> momentary-string-display.
>
> (momentary-string-display
> "**** Important Message! ****"
> (point) ?\r
> "Type RET when done reading")
>
> The idea seems to be that an Enter in response will only remove the
> message. However, evaluating the form (in the CVS Emacs) and pressing
> Enter in response also results in the insertion of a newline.
>
> The Enter key press is read with `read-event', which returns the
> symbol `return', which is different from ?\r.
>
> Perhaps the following change to momentary-string-display will be of
> help. It uses read-char when the parameter to be matched, EXIT-CHAR,
> is a character. It would need additions to handle mouse events.
>
> ===================================================================
> RCS file: /cvsroot/emacs/emacs/lisp/subr.el,v
> retrieving revision 1.379
> diff -c -r1.379 subr.el
> *** subr.el 16 Feb 2004 19:40:07 -0000 1.379
> - --- subr.el 17 Feb 2004 18:34:04 -0000
> ***************
> *** 1455,1463 ****
> (recenter 0))))
> (message (or message "Type %s to continue editing.")
> (single-key-description exit-char))
> ! (let ((char (read-event)))
> ! (or (eq char exit-char)
> ! (setq unread-command-events (list char)))))
> (if insert-end
> (save-excursion
> (delete-region pos insert-end)))
> - --- 1455,1475 ----
> (recenter 0))))
> (message (or message "Type %s to continue editing.")
> (single-key-description exit-char))
> ! (let (char)
> ! (if (integerp exit-char)
> ! (condition-case nil
> ! (progn
> ! (setq char (read-char))
> ! (or (eq char exit-char)
> ! (setq unread-command-events (list char))))
> ! (error "Non-character input-event"
> ! ;; character type exit-char will differ from this event
> ! (setq unread-command-events (list char))))
> ! ;; assume exit-char an event
> ! (setq char (read-event))
> ! (or (eq char exit-char)
> ! (eq char (event-convert-list exit-char))
> ! (setq unread-command-events (list char))))))
> (if insert-end
> (save-excursion
> (delete-region pos insert-end)))
>
2004-03-26 Matthew Mundell <matt@mundell.ukfsn.org>
* subr.el (momentary-string-display): If EXIT-CHAR is a character
then read input using read-char, catching any error resulting from
the input of an event. Otherwise read with read-event, comparing
EXIT-CHAR to the input both as a character and an event
description list. Doc updated to match.
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/subr.el,v
diff -u -r1.379 subr.el
--- lisp/subr.el 16 Feb 2004 19:40:07 -0000 1.379
+++ lisp/subr.el 26 Mar 2004 17:08:41 -0000
@@ -1423,9 +1423,11 @@
(defun momentary-string-display (string pos &optional exit-char message)
"Momentarily display STRING in the buffer at POS.
-Display remains until next character is typed.
-If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
-otherwise it is then available as input (as a command if nothing else).
+Display remains until next event is input.
+Optional third arg EXIT-CHAR can be a character, event or event
+description list. EXIT-CHAR defaults to SPC. If the input is
+EXIT-CHAR it is swallowed; otherwise it is then available as
+input (as a command if nothing else).
Display MESSAGE (optional fourth arg) in the echo area.
If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
(or exit-char (setq exit-char ?\ ))
@@ -1455,9 +1457,23 @@
(recenter 0))))
(message (or message "Type %s to continue editing.")
(single-key-description exit-char))
- (let ((char (read-event)))
- (or (eq char exit-char)
- (setq unread-command-events (list char)))))
+ (let (char)
+ (if (integerp exit-char)
+ (condition-case nil
+ (progn
+ (setq char (read-char))
+ (or (eq char exit-char)
+ (setq unread-command-events (list char))))
+ (error
+ ;; `exit-char' is a character, hence it differs
+ ;; from char, which is an event.
+ (setq unread-command-events (list char))))
+ ;; `exit-char' can be an event, or an event description
+ ;; list.
+ (setq char (read-event))
+ (or (eq char exit-char)
+ (eq char (event-convert-list exit-char))
+ (setq unread-command-events (list char))))))
(if insert-end
(save-excursion
(delete-region pos insert-end)))
next prev parent reply other threads:[~2004-03-26 21:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-21 14:56 [matt@mundell.ukfsn.org: momentary-string-display input passing] Richard Stallman
2004-03-26 21:51 ` Matthew Mundell [this message]
2004-03-28 1:36 ` Richard Stallman
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=87k717cm5z.fsf@sno.mundell.ukfsn.org \
--to=matt@mundell.ukfsn.org \
--cc=emacs-devel@gnu.org \
/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).