質問
編集中の現在のファイルでシェルコマンドを実行し、出力を Shell Command Output ウィンドウに表示できるようにしたい。私は定義することができました 以下に示す関数。
(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ファイルに入れる関数を定義しているのですか?それより良い方法がありますか?
ご協力いただければ幸いです。ありがとう。
解決 3
これが私が思いついたものです。回答ありがとうございます。先に進んで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)))
他のヒント
'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」はバッファは別のウィンドウに配置されます。
関数「pop-to-buffer」を参照してください。私は思う。
あなたはそこにポップするバッファ名を与えることができるはずです-シェルコマンド出力バッファで与えるだけです。
ウィンドウの分割は(split-window-vertically)ウィンドウの(正の場合は上、負の場合は下)部分のサイズのオプションの引数を持ちます。
そして、必要なのは、switch-to-bufferまたはswitch-to-buffer-other-windowを使用して、シェルの結果バッファーを前面に移動することです。
emacsでウィンドウ(フレーム)を吐き出すと、2つの「ウィンドウ」が表示されることに注意してください。対処するのに手遅れであるという当時の名前の混乱が原因で...