我已經在Emacs定義了以下功能集名稱 -如何在elisp的一個互動的緩衝
(defun web2py-server()
(interactive)
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &"))
以上創建在Emacs一個新的緩衝區,如何設置一個名爲「ABC」爲窗口。
感謝, 穆爾塔扎
我已經在Emacs定義了以下功能集名稱 -如何在elisp的一個互動的緩衝
(defun web2py-server()
(interactive)
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &"))
以上創建在Emacs一個新的緩衝區,如何設置一個名爲「ABC」爲窗口。
感謝, 穆爾塔扎
使用shell-command
的第二個參數,OUPTUT-BUFFER
,對於:
(defun web2py-server()
(interactive)
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &"
(get-buffer-create "abc")))
你可以通過調用M-x rename-buffer
做交互,或者你可以將其姓名添加到您的函數:
(defun web2py-server()
(interactive)
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &")
(rename-buffer "abc"))
編輯:
如果你想要一個正在進行的交互式過程中,使用start-process
而不是shell-command
可能會更好。這使您可以在啓動過程時指定輸出緩衝區。否則,莫里茨的答案看起來比我原來的好。如果你有興趣在創業過程中,你可以通過替換您shell-command
線啓動以下:
(let ((default-directory "/opt/web2py"))
(start-process "my-server" "abc" "python" "/opt/web2py/web2py.py")
對於我'shell-command'不會切換到新的緩衝區,因此你的'rename-buffer'可能會重命名錯誤的。也許你最好自己創建緩衝區,並將其名稱作爲'OUTPUT-BUFFER'參數傳遞給'shell-command'? – 2012-07-12 14:02:46
泰勒謝謝你的回答。 start-process是什麼意思讓你指定輸出緩衝區?另外爲什麼你有兩個括號中的默認目錄調用? – murtaza52 2012-07-13 05:25:06
啓動進程的第二個參數是用於進程輸出的緩衝區名稱。我用let來臨時重新定義default-directory,括號是let語法的一部分。 – Tyler 2012-07-13 19:01:55
我沒想到使用get-buffer-create作爲輸出緩衝區參數。這是一個很好的答案。 – Tyler 2012-07-12 14:32:45
Mortiz感謝您的回覆。那麼,shell命令的輸出是否被路由到get-buffer-create函數? – murtaza52 2012-07-13 05:33:20
否。輸出被髮送到作爲調用'shell-command'的第二個參數給出的緩衝區對象。現在'shell-command'本身被執行之前,函數'get-buffer-create'被執行,它返回一個名爲'abc'的緩衝區,如果它之前不存在,就創建它。所以:首先,創建緩衝區,並將該緩衝區對象傳遞給'shell-command'。 – 2012-07-13 07:08:24