2012-07-12 58 views
3

我已經在Emacs定義了以下功能集名稱 -如何在elisp的一個互動的緩衝

(defun web2py-server() 
(interactive) 
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &")) 

以上創建在Emacs一個新的緩衝區,如何設置一個名爲「ABC」爲窗口。

感謝, 穆爾塔扎

回答

4

使用shell-command的第二個參數,OUPTUT-BUFFER,對於:

(defun web2py-server() 
(interactive) 
(shell-command "cd /opt/web2py; python /opt/web2py/web2py.py &" 
       (get-buffer-create "abc"))) 
+0

我沒想到使用get-buffer-create作爲輸出緩衝區參數。這是一個很好的答案。 – Tyler 2012-07-12 14:32:45

+0

Mortiz感謝您的回覆。那麼,shell命令的輸出是否被路由到get-buffer-create函數? – murtaza52 2012-07-13 05:33:20

+0

否。輸出被髮送到作爲調用'shell-command'的第二個參數給出的緩衝區對象。現在'shell-command'本身被執行之前,函數'get-buffer-create'被執行,它返回一個名爲'abc'的緩衝區,如果它之前不存在,就創建它。所以:首先,創建緩衝區,並將該緩衝區對象傳遞給'shell-command'。 – 2012-07-13 07:08:24

4

你可以通過調用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") 
+0

對於我'shell-command'不會切換到新的緩衝區,因此你的'rename-buffer'可能會重命名錯誤的。也許你最好自己創建緩衝區,並將其名稱作爲'OUTPUT-BUFFER'參數傳遞給'shell-command'? – 2012-07-12 14:02:46

+0

泰勒謝謝你的回答。 start-process是什麼意思讓你指定輸出緩衝區?另外爲什麼你有兩個括號中的默認目錄調用? – murtaza52 2012-07-13 05:25:06

+0

啓動進程的第二個參數是用於進程輸出的緩衝區名稱。我用let來臨時重新定義default-directory,括號是let語法的一部分。 – Tyler 2012-07-13 19:01:55