Non next-error
scorre il buffer degli errori di compilazione, in modo che l'errore corrente venga visualizzato come prima riga della finestra?
In caso contrario, non posiziona almeno il cursore sulla riga dell'errore corrente? In tal caso, e se il cursore non è abbastanza visibile per te, considera l'utilizzo hl-line-mode
di evidenziare la linea corrente. Oppure considera l'utilizzo della libreria crosshairs
per evidenziare la riga corrente e la colonna corrente.
Aggiorna dopo il tuo commento
Pensavo stessi invocando next-error
nel buffer *compilation*
. Se lo fai, la riga viene spostata verso l'alto, come ho descritto.
Ma se si sta invocando un next-error
buffer esterno, *compilation*
è necessario utilizzare next-error-hook
, nel buffer*compilation*
, per evidenziare la riga o il margine corrente o qualsiasi altra cosa, nel modo desiderato.
Ecco un esempio veloce e sporco:
(defun foo ()
"..."
(with-current-buffer next-error-last-buffer
(hl-line-mode 1)))
(add-hook 'next-error-hook 'foo)
(Naturalmente, è davvero solo bisogno di accendere hl-line-mode
una volta in quel buffer. Farlo come indicato sopra è eccessivo, ma non fa male. Si potrebbe pensare che si può solo aggiungere foo
a grep-mode-hook
o compilation-mode-hook
. Ma quando quei ganci sono invocati non c'è no next-error-last-buffer
.)
Nota:
Esistono due opzioni utente che controllano i modi per indicare l'hit nel buffer di origine (non nel buffer di compilazione): next-error-highlight
e next-error-highlight-no-select
. Offrono le stesse possibilità, ma sono utilizzate da comandi diversi. Le possibilità includono l'uso di una freccia a frangia o l'evidenziazione della partita per un certo tempo.
Ma non esiste tale opzione che controlli l'indicazione dell'hit corrente nel buffer *compilation*
. Quindi Emacs offre due opzioni (dove probabilmente sarebbe sufficiente) per il buffer di origine ma nessuna opzione per il buffer di compilazione.
Si potrebbe prendere in considerazione la presentazione di una richiesta di miglioramento, per ottenere una soluzione simile per la compilazione (compresi grep) buffer: M-x report-emacs-bug
. L'uso di un hook con la propria funzione per eseguire l'evidenziazione è OK, ma non dovrebbe essere necessario.
E se vuoi solo cambiare l'indicatore di frangia, puoi farlo (usa qualunque bitmap di frangia che desideri, invece di filled-rectangle
- vedi (elisp) Bitmap di frangia per un elenco di quelli predefiniti):
(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)
Aggiornamento n. 2:
Ho appena scoperto che se si spegne mostrando la frangia a sinistra, si vedrà il comportamento che ho descritto all'inizio: la finestra viene fatta scorrere per mettere l'errore corrente in alto. Quindi questa è un'altra possibilità. (È il comportamento che vedo nella mia configurazione, dal momento che non mostro frangia.)
C'è un bug in questo comportamento, che ho appena segnalato ( # 20829 ). Ciò che conta (attualmente, fino a quando il bug non viene risolto) è se la frangia sinistra viene mostrata nella finestra selezionata quando lo fai C-x `
( next-error
). Non è (attualmente) sufficiente che la finestra che mostra il buffer di compilazione non mostri il margine sinistro.