2009-05-04 95 views
1

我希望能夠在當前正在編輯的文件上運行shell命令,並將輸出顯示在Shell命令輸出窗口中。我已經能夠定義如下所示的 函數。在Emacs Lisp函數中分割窗口

(defun cpp-check() 
    "Run cpp-check on current file the buffer is visiting." 
    (shell-command 
    (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck " 
     (buffer-file-name)))) 

唯一的問題是輸出窗口沒有以任何方式帶到前臺。我想要發生的是窗口被拆分並顯示那裏的輸出窗口。另外,我是否在正確的軌道上定義要放在我的.emacs文件中的函數,還是有更好的方法?

任何幫助,將不勝感激。謝謝。

回答

2

這就是我想出來的。感謝您的迴應。我定義了一個將繼續並運行cpp-check的函數。我希望它綁定到c模式中的一個鍵,所以我將它添加爲鉤子。我遇到了普通函數和可以綁定到鍵盤映射的區別,所以我必須使函數具有交互性。這article幫助解釋這一點。所以,現在當按下快捷鍵時,結果出現在另一個窗口中,但光標保留在原始緩衝區中,這正是我想要的。唯一的問題是輸出顯示在minibuffer中,這也不是我想要的。任何關於修復這些小細節的想法?

(defun cpp-check() 
    (interactive) 
    "Run cpp-check on current file the buffer is visiting." 
    (shell-command 
    (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck " 
     (buffer-file-name))) 
    (display-buffer "*Shell Command Output*")) 

(add-hook 'c-mode-common-hook 
      (lambda() 
     (define-key c-mode-base-map 
       "\C-x\p" 'cpp-check))) 
1

拆分窗口是(拆分窗口垂直)它具有窗口大小的可選參數(如果爲正值,則爲負值,如果爲負值,則爲負值)。

然後,您需要做的是將shell結果緩衝區置於切換到緩衝區或切換到緩衝區其他窗口的前端。

請記住,當你吐在Emacs窗口(框架),你最終有兩個,因爲命名的一天,爲時已晚,以應付現在混淆回「窗口」 ......

4

取看看爲'shell-command的文件,這個工作很適合我:

(defun cpp-check() 
    "Run cpp-check on current file the buffer is visiting." 
    (shell-command 
    (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck " 
     (buffer-file-name)) 
    "cpp-check")) 

它創建了一個名爲「CPP覈對」一個新的緩衝區並把結果存在。將當前幀分割爲,並將「cpp-check」緩衝區放入另一個窗口中。

3

查看函數'pop-to-buffer'。我認爲。

你應該能夠給它一個緩衝區名稱來彈出 - 只需在Shell命令輸出緩衝區中給出。