Nie next-errorprzewija 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-modedo podświetlenia bieżącej linii. Lub rozważ użycie biblioteki crosshairsdo podświetlenia bieżącej linii i bieżącej kolumny.
Zaktualizuj po swoim komentarzu
Myślałem, że inwokujesz next-errorw buforze *compilation*. Jeśli to zrobisz, linia zostanie przewinięta do góry, jak opisałem.
Ale jeśli powołując się next-errorna 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-moderaz 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ć foodo grep-mode-hooklub 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-highlighti 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.