我正在寫一個elisp函數,它將命令發送到現有的eshell緩衝區,等待命令完成併發送另一個命令。例如,我想送:從eslip發送命令到eshell
python
2+3
到目前爲止,我曾嘗試以下,不成功:
1.Getting的ESHELL過程中使用process-send-string
和accept-process-output
:
(process-send-string eshell-proc "python")
(accept-process-output eshell-proc 100)
但我一直無法獲得eshell進程。 (get-buffer-process (current-buffer))
當前緩衝區爲eshell時返回nil
。
在緩衝器2.Inserting命令,使用(eshell-send-input)
,併發送下一個命令前睡針對位:
(progn
(insert "python")
(eshell-send-input)
(sleep-for 1)
(insert "2+3")
(eshell-send-input))
這種方法的問題是,「2 + 3」之前被髮送python子進程已經啓動。無論我睡眠的時間長短如何,都會發生這種情況。似乎睡眠凍結了所有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"])
所以我真的很困惑這種命令期望什麼類型的參數。我一直無法找到使用此命令的單個示例。
爲什麼這麼簡單變得如此複雜?感謝您的任何輸入
1 - eshell不啓動外部進程,所以這不起作用 - 沒有進程發送到。 2適合我。 – Tyler 2013-04-10 21:56:58
2是一個非常脆弱的解決方案。取決於系統的負載,啓動子進程所需的時間會有所不同。在這個解決方案下,我僅限於硬編碼我將遇到的預期最大加載時間,並且每次都等待這段時間。這是我想要替代品的原因。 – erjoalgo 2013-05-07 05:18:36