В next-error
в окне grep или компиляции я могу использовать что-то вроде
(setq next-error-recenter 35)
чтобы окно, отображающее совпадение, прокручивалось, чтобы показать полное совпадение, как описано более подробно в этот вопрос о stackoverflow .
Как мне сделать то же самое в самом окне grep или самой компиляции? У меня часто есть выход grep или компиляция вывода, который находится в нижней части окна, и в дни, когда я трачу все свое время на обработку ошибок grep или компиляцию, переключение между окнами добавляет значительные накладные расходы.
Я использую такое обходное решение для точного сохранения позиции point
в буфере compilation/grep
:
(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)))))))
Если вы хотите простое центрирование point
в буфере compilation/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))))))
Вы можете использовать next-error
вместо compile-goto-error
в первом примере.
Upd. Emacs 25.1 необходим для ненулевого периода времени.