を使用してユーザーにコマンドを要求し、ユーザーread-command
がミニバッファーに空の文字列を入力したかどうかに基づいてアクションを実行する必要があります。
ほとんどのread-command
場合、有効なコマンドを返します。しかし、ユーザーが (ミニバッファーでエンターを押すだけで) 空白の文字列を入力すると、nil
、文字列でもコマンドでもない奇妙なオブジェクトが返されます ( および によるstringp
とcommandp
)。
ELISP> (setq strange-object (read-command "Enter some command" nil) )
ELISP> (equal nil strange-object)
nil
ELISP> (if strange-object "YES" "NO")
"YES"
ELISP> (mapcar (lambda (fun) (funcall fun strange-object)) (list 'stringp 'commandp 'char-or-string-p 'functionp 'integerp 'listp) )
(nil nil nil nil nil nil)
ELISP> (prin1-to-string strange-object)
""
ELISP> (equal "" strange-object)
nil
どうやって:
- このオブジェクトの読み取り構文にアクセスしますか?
- ここで定義されたすべての型述語と照合せずに、オブジェクトの型を決定します
- このオブジェクトに対する等価性をテストしますか?
- 行儀が悪いのはなぜ
read-command
?の仕様read-command
:
read-command は、`minibuf.c' の組み込み関数です。
(read-command PROMPT &optional DEFAULT-VALUE)
コマンドの名前を読み取り、シンボルとして返します。PROMPT でプロンプトを出します。デフォルトでは、リストの場合は DEFAULT-VALUE またはその最初の要素を返します。
[戻る]
nil
として渡したので、期待していましDEFAULT-VALUE
たが、どうやらread-command
気にしないようです。
のソースを読み込んでminibuf.c
何が起こっているのかを確認しようとしましたが、それを機能させることもできませんでした。ここemacs-23.3b.tar.gz
からダウンロードし、emacs でソースを探しましたが、見つかりませんでした。どちらもそこに存在していないようです。非常にイライラするものです。ポインタをいただければ幸いです。minibuf.c