Не next-error
прокручивает буфер ошибок компиляции, чтобы текущая ошибка отображалась в первой строке окна?
Если нет, то по крайней мере, не ставит ли он курсор на текущую строку ошибки? Если это так, и если курсор недостаточно виден для вас, рассмотрите возможность использования hl-line-mode
для выделения текущей строки. Или рассмотрите возможность использования библиотеки crosshairs
для выделения текущей строки и текущего столбца.
Обновление после вашего комментария
Я думал, что вы вызываете next-error
в буфере *compilation*
. Если вы это сделаете, то строка прокручивается вверх, как я описал.
Но если вы вызываете next-error
внешний буфер, *compilation*
вам нужно использовать next-error-hook
для того, чтобы в буфере*compilation*
выделить текущую строку или край или что-то еще, как вам нравится.
Вот быстрый и грязный пример:
(defun foo ()
"..."
(with-current-buffer next-error-last-buffer
(hl-line-mode 1)))
(add-hook 'next-error-hook 'foo)
(Конечно, вам действительно нужно только hl-line-mode
один раз включить в этом буфере. Выполнение, как показано выше, является излишним, но это не повредит. Вы можете подумать, что вы можете просто добавить foo
к grep-mode-hook
или compilation-mode-hook
. Но когда эти ловушки вызываются, есть нет next-error-last-buffer
.)
Замечания:
Существует два пользовательских параметра, которые управляют способами указания попадания в исходном буфере (не в буфере компиляции): next-error-highlight
и next-error-highlight-no-select
. Они предлагают одинаковые возможности, но используются разными командами. Возможности включают использование стрелки или выделение совпадения на определенное время.
Но нет такой опции, управляющей индикацией текущего попадания в буфер *compilation*
. Таким образом, Emacs предлагает две опции (где одной, вероятно, будет достаточно) для исходного буфера, но нет опции для буфера компиляции.
Вы могли бы рассмотреть вопрос о подаче запроса на улучшающем, чтобы получить подобный вариант для компиляции (включая Grep) буфер: M-x report-emacs-bug
. Использование ловушки с вашей собственной функцией для подсветки - это нормально, но в этом нет необходимости.
И если вы просто хотите изменить индикатор бахромы, вы можете сделать это (используйте любое растровое изображение бахромы, которое вы хотите, вместо filled-rectangle
- см. (Elisp) Битовые карты бахромы для списка предопределенных):
(defun bar ()
(with-current-buffer next-error-last-buffer
(unless (eq 'filled-rectangle (cdr (assq 'overlay-arrow fringe-indicator-alist)))
(setq fringe-indicator-alist
(cons '(overlay-arrow . filled-rectangle) fringe-indicator-alist)))))
(add-hook 'next-error-hook 'bar)
Обновление № 2:
Я только что обнаружил, что если вы отключите показ левой стороны, то увидите поведение, которое я описал в начале: окно прокручивается, чтобы поместить текущую ошибку вверху. Так что это еще одна возможность. (Это поведение, которое я вижу в моей настройке, так как я не показываю бахрому.)
В этом поведении есть ошибка, о которой я только что сообщил ( # 20829 ). То, что имеет значение (в настоящее время, пока ошибка не устранена), показывает, отображается ли левая полоса в выбранном окне, когда вы делаете C-x `
( next-error
). (В настоящее время) недостаточно, чтобы окно, показывающее буфер компиляции, не показывало левую границу.