次のエラーでgrepを再起動したりウィンドウをコンパイルする方法

grepやコンパイルウィンドウの次のエラーで、私は次のようなものを使うことができます

(setq next-error-recenter 35)

このスタックオーバーフローに関する質問

grepやコンパイルウィンドウ自体で同じことをするにはどうすればいいですか?私はgrep出力を持っているか、ウィンドウの一番下にある出力をコンパイルすることがよくあります。そして、grep出力やコンパイルエラーを経てすべての時間を費やして、ウィンドウ間を行き来するとかなりのオーバーヘッドが加わります。

5
compilation-goto-locus を見て、必要に応じてコメントで始まるセクションに recenter コマンドを入れたいとします。コンパイルバッファウィンドウが選択されました。 。 。 recenter のdoc-stringを参照してください。
追加された 著者 lawlist,

1 答え

compilation/grep バッファ内の point 位置を正確に保存するために、このような回避策を使用します。

(defun eab/compile-goto-error ()
  (interactive)
  (let ((istc? truncate-lines))
    (toggle-truncate-lines t)
    (let ((buf (current-buffer))
          (line (- (count-lines (window-start) (point))
                   (if (eq (point) (point-at-bol)) 0 1)))
          (point (point)))
      (compile-goto-error)
      (run-with-timer 0.01 nil `(lambda ()
                                 (let ((cb (current-buffer)))
                                       (pop-to-buffer ,buf)
                                       (recenter ,line)
                                       (goto-char ,point)
                                       (toggle-truncate-lines ,istc?)
                                       (pop-to-buffer cb)))))))

pointcompilation/grep バッファに単純にセンタリングするには、次のようにします。

(defun eab/next-error ()
  (interactive)
  (let ((buf (current-buffer)))
    (next-error)
    (run-with-timer 0.01 nil `(lambda ()
                             (let ((cb (current-buffer)))
                               (pop-to-buffer ,buf)
                               (recenter)
                               (pop-to-buffer cb))))))

最初の例では、 compile-goto-error の代わりに next-error を使用できます。

Upd。 Emacs 25.1は非ゼロ時間に必要です。

1
追加された