Emacs Lisp函数中的拆分窗口

时间:2009-05-04 20:20:21

标签: emacs elisp

我希望能够在我正在编辑的当前文件上运行shell命令,并在 Shell命令输出窗口中显示输出。我已经能够定义了 功能如下所示。

(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文件中的功能还是有更好的方法?

任何帮助将不胜感激。感谢。

4 个答案:

答案 0 :(得分: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-check”的新缓冲区并将结果放在那里。当前帧被拆分为,并且“cpp-check”缓冲区被放入另一个窗口。

答案 1 :(得分:3)

参见“pop-to-buffer”函数。我想。

你应该能够给它一个缓冲区名称来弹出 - 只需在Shell命令输出缓冲区中给出。

答案 2 :(得分:2)

这就是我想出的。谢谢你的回复。我定义了一个将继续运行cpp-check的函数。我希望它绑定到c模式的键,所以我将它添加为钩子。我遇到了普通函数和可以绑定到键映射的函数之间的区别,因此我必须使函数具有交互性。这article帮助解释了这一点。所以现在当按下快捷键时,结果会出现在另一个窗口中,但是光标仍然保留在原始缓冲区中,这就是我想要的。唯一的问题是输出显示在迷你缓冲区中,这不是我想要的。有关修复这个小细节的任何想法?

(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)))

答案 3 :(得分:1)

分割窗口是(垂直分割窗口)它有一个可选的arg,其大小为(顶部如果是正的,底部是负的)窗口的一部分。

然后,您需要做的是将shell结果缓冲区带到switch-to-buffer或switch-to-buffer-other-window。

请记住,当您在emacs中吐出窗口(框架)时,最终会出现两个“窗口”,因为当天的命名令人困惑,现在处理起来已经太晚了......