Não next-errorrola o buffer de erros de compilação, para que o erro atual seja exibido como a primeira linha da janela?
Caso contrário, ele não coloca o cursor na linha de erro atual? Se houver, e se o cursor não estiver visível o suficiente para você, considere usar hl-line-modepara destacar a linha atual. Ou considere usar a biblioteca crosshairspara destacar a linha atual e a coluna atual.
Atualize após o seu comentário
Eu pensei que você estava invocando next-errorno buffer *compilation*. Se você fizer isso, a linha será rolada para o topo, como descrevi.
Mas se você estiver chamando o next-errorbuffer externo *compilation*, precisará usar next-error-hook, no buffer*compilation* , a linha ou a franja atual ou o que for, da maneira que desejar.
Aqui está um exemplo rápido e sujo:
(defun foo ()
"..."
(with-current-buffer next-error-last-buffer
(hl-line-mode 1)))
(add-hook 'next-error-hook 'foo)
(Claro, você realmente só precisa de ligar hl-line-modeuma vez em que buffer. Fazê-lo como mostrado acima é um exagero, mas não faz mal. Você pode pensar que você poderia apenas adicionar fooao grep-mode-hookou compilation-mode-hook. Mas quando esses ganchos são invocados existe não next-error-last-buffer.)
Nota:
Existem duas opções de usuário que controlam as maneiras de indicar a ocorrência no buffer de origem (não no buffer de compilação): next-error-highlighte next-error-highlight-no-select. Eles oferecem as mesmas possibilidades, mas são usados por comandos diferentes. As possibilidades incluem usar uma seta de franja ou destacar a partida por um certo tempo.
Mas não existe essa opção controlando a indicação da ocorrência atual no buffer *compilation*. Portanto, o Emacs oferece duas opções (onde provavelmente seria suficiente) para o buffer de origem, mas nenhuma opção para o buffer de compilação.
Você pode considerar a apresentação de uma solicitação de melhoria, para obter uma opção semelhante para a compilação (incluindo grep) buffer: M-x report-emacs-bug. Usar um gancho com sua própria função para realizar o realce é bom, mas não deve ser necessário.
E se você quiser apenas alterar o indicador de franja, você pode fazer isso (use o bitmap de franja desejado, em vez de filled-rectangle- consulte (elisp) Bitmaps de franja para obter uma lista dos predefinidos):
(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)
Atualização # 2:
Acabei de descobrir que, se você desligar a margem esquerda, verá o comportamento que descrevi no início: a janela é rolada para colocar o erro atual no topo. Então essa é outra possibilidade. (É o comportamento que vejo na minha configuração, pois não mostro margem.)
Há um erro neste comportamento, que acabei de relatar ( # 20829 ). O que conta (atualmente, até que o bug seja corrigido) é se a margem esquerda está aparecendo na janela selecionada quando você faz C-x `( next-error). (Atualmente) não é suficiente que a janela que mostra o buffer de compilação não mostre a margem esquerda.