我正在尝试通过process-lines从 Emacs调用 bash 程序herbstclient。我创建了一个宏 hc-call,它实际上调用了由函数 hc 调用的herbstclient,该函数应该通过 stringify-numbers 将其数字参数转换为字符串。
不用说它不起作用。用 "keybind" "Mod4-Shift-r" "reload" 调用 hc 会出现错误:
*** Eval error *** Wrong type argument: listp, stringified-args
我尝试在 hc 上使用 edebug 并且输出建议 stringify-numbers 工作正常。该函数在 hc 调用时立即出错。然而,当我运行时:
(hc-call ("keybind" "Mod4-Shift-r" "reload"))
它按预期工作。然后我尝试了:
(setq sargs (list "keybind" "Mod4-Shift-r" "reload"))
(hc-call sargs)
我得到了同样的错误。我不知道如何进一步调试。以下是所有代码:
(defmacro hc-call (args)
"Call herbstclient to with the given arguments."
`(process-lines "herbstclient" ,@args))
(defun stringify-numbers (args)
"Take a list of random arguments with a mix of numbers and
strings and convert just the numbers to strings."
(let (stringified-args)
(dolist (arg args)
(if (numberp arg)
(setq stringified-args (cons (number-to-string arg) stringified-args))
(setq stringified-args (cons arg stringified-args))))
(nreverse stringified-args)))
(defun hc (&rest args)
"Pass arguments to herbstclient in a bash process."
(let ((stringified-args (stringify-numbers args)))
(hc-call stringified-args)))
为什么它会抱怨 stringified-args 不是列表?