我正在编写一个 elisp 函数,它将命令发送到现有的 eshell 缓冲区,等待命令完成,然后发送另一个命令。例如,我想发送:
python
2+3
到目前为止,我尝试了以下方法,但均未成功:
1.让eshell进程使用process-send-string
和accept-process-output
:
(process-send-string eshell-proc "python")
(accept-process-output eshell-proc 100)
但是我一直无法获得eshell进程。当前缓冲区为 eshell 时(get-buffer-process (current-buffer))
返回。nil
2.在缓冲区中插入命令,使用(eshell-send-input)
,并在发送下一个命令之前休眠一会儿:
(progn
(insert "python")
(eshell-send-input)
(sleep-for 1)
(insert "2+3")
(eshell-send-input))
这种方法的问题是在 python 子进程启动之前发送了“2+3”。无论我睡觉的时间长短,都会发生这种情况。似乎睡眠冻结了所有 emacs 的子进程?
3.eshell-gather-process-output
使用:如果我使用:
(eshell-gather-process-output "/usr/bin/python" nil)
或者
(eshell-gather-process-output "/usr/bin/python" (list "somearg"))
我明白了Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
但如果我使用:
(eshell-gather-process-output "/usr/bin/python" (vector "somearg"))
我明白了Debugger entered--Lisp error: (wrong-type-argument listp ["somearg"])
所以我真的很困惑这个命令需要什么类型的参数。我还没有找到一个使用这个命令的例子。
为什么这么简单的事情会变得这么复杂?感谢您的任何输入