我需要使用 提示用户输入命令,read-command
然后根据用户是否在 minibuffer 上输入空字符串来采取行动。
大多数时候,read-command
返回一个有效的命令。但是当用户输入一个空白字符串时(只需在 minibuffer 中按回车键),就会返回一个奇怪的对象,它既不是nil
,也不是字符串,也不是命令(根据stringp
and 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' 中的内置函数。
(读取命令提示和可选的默认值)
读取命令的名称并作为符号返回。用 PROMPT 提示。默认情况下,如果是列表,则返回 DEFAULT-VALUE 或其第一个元素。
[背部]
我预料到nil
了,因为那是我通过的DEFAULT-VALUE
,但显然read-command
不在乎。
我已经尝试加载源代码minibuf.c
以查看发生了什么,但我也无法让它工作。我已经emacs-23.3b.tar.gz
从这里下载并让 emacs 在那里寻找源代码,但它无法找到它。那里似乎也不minibuf.c
存在。非常令人沮丧的东西,我将不胜感激任何指针。