そのドキュメント文字列から、カウントダウンメッセージ機能をに組み込むことはできないと思いますread-char-exclusive
。ただし、独自のタイマーでラップすることができます。
(let ((choice nil)
(count 3))
(while (>= count 0)
(message (format "Seconds left to make your choice: %d" count))
(setq count (if (setq choice (read-char-exclusive nil nil 1))
-1
(1- count))))
(cond ((eq choice ?1)
(message "You entered 1"))
((eq choice ?2)
(message "You entered 2"))
(t
(message "The default"))))
実際には、これは関数にまとめるのに十分役立つかもしれません。ここでは、同じ順序で同じ引数を取り、いくつかの機能のために働くの迅速なスケッチです(read-char
、read-char-exclusive
、read-event
、そしておそらく他の人) -あなたとの事やって好きなように広がるread-string
異なる引数リストを取り、他の人を:
(defun countdown-read (fnx &optional prompt inherit-input-method seconds)
"Reads a character or event and provides a countdown of SECONDS
to provide input. Return nil if no input arrives in time.
FNX is a function that supports the rest of the
arguments (currently, `read-char', `read-char-exclusive',
`read-event', and maybe others).
If the optional argument PROMPT is non-nil, display that as a
prompt.
If the optional argument INHERIT-INPUT-METHOD is non-nil and some
input method is turned on in the current buffer, that input
method is used for reading a character.
If the optional argument SECONDS is non-nil, it should be a
number specifying the maximum number of seconds to wait for
input (default: 5)."
(let (choice (seconds (or seconds 5)))
(while (>= seconds 0)
(message (format (concat (or prompt "") " (%d): ") seconds))
(setq seconds (if (setq choice
(funcall fnx nil inherit-input-method 1))
-1
(1- seconds))))
choice))
これを使用すると、次のようになります。
(countdown-read #'read-char-exclusive "Please enter a character" nil 3)