1

我希望能够在我正在编辑的当前文件上运行 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

4 回答 4

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”缓冲区被放在另一个窗口中。

于 2009-05-04T21:28:40.817 回答
3

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

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

于 2009-05-05T02:56:51.433 回答
2

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

(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)))
于 2009-05-05T18:42:23.330 回答
1

拆分窗口是 (split-window-vertically) 它有一个可选的 arg 窗口的(如果为正,则为底部)部分的大小。

然后,您需要做的是使用 switch-to-buffer 或 switch-to-buffer-other-window 将 shell 结果缓冲区放在前面。

请记住,当您在 emacs 中吐出窗口(框架)时,您最终会得到两个“窗口”,因为当时命名混乱,现在处理已经太晚了......

于 2009-05-04T20:26:37.470 回答