Nie next-error
przewija bufora błędów kompilacji, więc bieżący błąd jest wyświetlany jako pierwszy wiersz okna?
Jeśli nie, to czy przynajmniej nie umieszcza kursora w bieżącym wierszu błędu? Jeśli tak, a kursor nie jest dla Ciebie wystarczająco widoczny, rozważ użycie przycisku hl-line-mode
do podświetlenia bieżącej linii. Lub rozważ użycie biblioteki crosshairs
do podświetlenia bieżącej linii i bieżącej kolumny.
Zaktualizuj po swoim komentarzu
Myślałem, że inwokujesz next-error
w buforze *compilation*
. Jeśli to zrobisz, linia zostanie przewinięta do góry, jak opisałem.
Ale jeśli powołując się next-error
na zewnątrz bufor *compilation*
następnie trzeba użyć next-error-hook
, aby, w buforze*compilation*
, podświetlenie aktualnej linii lub frędzli lub cokolwiek, w jakikolwiek sposób chcesz.
Oto szybki i brudny przykład:
(defun foo ()
"..."
(with-current-buffer next-error-last-buffer
(hl-line-mode 1)))
(add-hook 'next-error-hook 'foo)
(Oczywiście, tak naprawdę wystarczy włączyć hl-line-mode
raz w tym buforze. Robi to w sposób pokazany powyżej jest przesadą, ale to nie boli. Można by pomyśleć, że można po prostu dodać foo
do grep-mode-hook
lub compilation-mode-hook
. Ale kiedy te haki są wywoływane jest nie next-error-last-buffer
.)
Uwaga:
Istnieją dwie opcje użytkownika, które kontrolują sposoby wskazywania trafienia w buforze źródłowym (nie w buforze kompilacji): next-error-highlight
i next-error-highlight-no-select
. Oferują te same możliwości, ale są używane przez różne polecenia. Możliwości obejmują użycie strzałki frędzlowej lub podświetlanie meczu na określony czas.
Ale nie ma takiej opcji kontrolującej wskazanie bieżącego trafienia w buforze *compilation*
. Dlatego Emacs oferuje dwie opcje (gdzie prawdopodobnie wystarczyłaby) dla bufora źródłowego, ale nie ma opcji dla bufora kompilacji.
Można rozważyć złożenie wniosku powiększenia, aby uzyskać podobną opcję kompilacji (w tym grep) Bufor: M-x report-emacs-bug
. Użycie haka z własną funkcją do wykonania podświetlenia jest w porządku, ale nie powinno być konieczne.
A jeśli chcesz tylko zmienić wskaźnik grzywki, możesz to zrobić (użyj dowolnej bitmapy z frędzlami, a nie filled-rectangle
- patrz (elisp) Bitmapy z grzywką, aby uzyskać listę predefiniowanych):
(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)
Aktualizacja nr 2:
Właśnie odkryłem, że jeśli wyłączysz wyświetlanie lewej grzywki, zobaczysz zachowanie, które opisałem na początku: okno jest przewijane, aby umieścić bieżący błąd na górze. To kolejna możliwość. (Jest to zachowanie, które widzę w mojej konfiguracji, ponieważ nie pokazuję grzywki.)
W tym zachowaniu jest błąd, który właśnie zgłosiłem ( # 20829 ). Liczy się (obecnie, dopóki błąd nie zostanie naprawiony) to, czy lewy margines pojawia się w wybranym oknie, kiedy to robisz C-x `
( next-error
). (Obecnie) nie wystarczy, że okno pokazujące bufor kompilacji nie pokazuje lewej krawędzi.