2009-05-04 68 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命令输出缓冲区中给出。