ビジュアル秒時計カウンターを表示する方法— 10、9、8、。。時間切れ!


8

Q:オプションを選択すると、または時計がなくなると消えるビジュアル秒カウンターを組み込む方法を教えてください。

- *Messages*バッファ

  • 10秒以内に選択してください。

  • 9秒以内に選択してください。

  • 。。。

  • 時間切れ!

と呼ばれる変数がありますinit-variable。の場合non-nil、Emacsはさまざまなユーザーカスタマイズの完全な構成でロードされます。の場合nil、Emacsは同等のものでEmacs -Qロードされます-つまり、ユーザーのカスタマイズはロードされません。この関数にread-char-exclusiveは秒カウンター用の優れた機能があり、その機能を以下のコードスニペットに組み込みました。オプション番号1はをに設定init-variablenilます。オプション番号2またはアクションなしの場合、デフォルト設定はになりますnon-nil

(defvar init-variable t)

(let* (
    (emacs-q (read-char-exclusive nil nil 10)))
  (cond
    ((eq emacs-q ?1)
      (setq init-variable nil)
      (message "Emacs -Q"))
    ((eq emacs-q ?2)
      (message "Regular Loading."))
    (t (message "This is the default.")) ))

回答:


7

そのドキュメント文字列から、カウントダウンメッセージ機能をに組み込むことはできないと思います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-charread-char-exclusiveread-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)

はい、その新しい機能は確かに非常に便利です!回答を含めて回答を広げていただき、ありがとうございます。
法律家、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.