gpt4 book ai didi

emacs - (read-command ...) 在空白输入时返回奇怪的对象

转载 作者:行者123 更新时间:2023-12-04 04:39:36 25 4
gpt4 key购买 nike

我需要提示用户输入命令,使用 read-command ,然后根据用户是否在 minibuffer 上输入空字符串来执行操作。

大多数时候,read-command返回一个有效的命令。但是当用户输入一个空白字符串时(通过在 minibuffer 中按回车键),会返回一个奇怪的对象,它既不是 nil ,也不是字符串,也不是命令(根据 stringpcommandp )。

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

我怎样才能:
  • 访问此对象的读取语法?
  • 确定对象的类型而不匹配定义的每个类型谓词 here
  • 测试是否与此对象相等?
  • 为什么是 read-command行为不端? read-command规范:

  • read-command is a built-in function in `minibuf.c'.

    (read-command PROMPT &optional DEFAULT-VALUE)

    Read the name of a command and return as a symbol. Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element if it is a list.

    [back]



    我期待 nil ,因为那是我通过的 DEFAULT-VALUE ,但显然 read-command不在乎。

    我试过加载 minibuf.c 的源代码看看发生了什么,但我也无法让它发挥作用。我已经下载 emacs-23.3b.tar.gz来自 here并让 emacs 在那里寻找源代码,但找不到它。 minibuf.c 也没有似乎存在于那里。非常令人沮丧的东西,我将不胜感激任何指示。

    最佳答案

    Elisp 手册是您的 friend 。 C-h i ,选择 Elisp。然后i然后输入 read-command .作为描述的一部分,您会看到:

     The argument DEFAULT specifies what to return if the user enters
    null input. It can be a symbol, a string or a list of strings.
    If it is a string, `read-command' interns it before returning it.
    If it is a list, `read-command' interns the first element of this
    list. If DEFAULT is `nil', that means no default has been
    specified; then if the user enters null input, the return value is
    `(intern "")', that is, a symbol whose name is an empty string.

    阅读完整说明。但仅此一项就可以帮助您理解。返回的值是 符号 名称为空。

    关于emacs - (read-command ...) 在空白输入时返回奇怪的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106759/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com