我希望能够在我正在编辑的当前文件上运行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文件中的功能还是有更好的方法?
任何帮助将不胜感激。感谢。
答案 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中吐出窗口(框架)时,最终会出现两个“窗口”,因为当天的命名令人困惑,现在处理起来已经太晚了......