process-lines経由で Emacs からbash プログラムherbstclientを呼び出そうとしています。関数 hc によって呼び出される herbstclient を実際に呼び出すマクロ hc-call を作成しました。関数 hc は、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 がリストではないと不平を言うのはなぜですか?