Không next-error
cuộn bộ đệm biên dịch lỗi, để lỗi hiện tại hiển thị là dòng đầu tiên của cửa sổ?
Nếu không, ít nhất nó có đặt con trỏ lên dòng lỗi hiện tại không? Nếu có, và nếu con trỏ không đủ hiển thị cho bạn, hãy xem xét sử dụng hl-line-mode
để làm nổi bật dòng hiện tại. Hoặc xem xét sử dụng thư viện crosshairs
để làm nổi bật dòng hiện tại và cột hiện tại.
Cập nhật sau bình luận của bạn
Tôi nghĩ rằng bạn đang gọi next-error
trong bộ đệm *compilation*
. Nếu bạn làm điều đó thì dòng được cuộn lên trên cùng, như tôi đã mô tả.
Nhưng nếu bạn đang gọi next-error
bộ đệm bên ngoài *compilation*
thì bạn cần sử dụng next-error-hook
để, trong bộ đệm*compilation*
, làm nổi bật dòng hoặc rìa hiện tại hoặc bất cứ thứ gì, theo bất cứ cách nào bạn thích.
Đây là một ví dụ nhanh và bẩn:
(defun foo ()
"..."
(with-current-buffer next-error-last-buffer
(hl-line-mode 1)))
(add-hook 'next-error-hook 'foo)
(Tất nhiên, bạn thực sự chỉ cần bật hl-line-mode
một lần trong bộ đệm đó. Làm như thể trình bày ở trên là quá mức cần thiết, nhưng nó không gây hại. Bạn có thể nghĩ rằng bạn chỉ có thể thêm foo
vào grep-mode-hook
hoặc compilation-mode-hook
. Nhưng khi những cái móc đó được gọi thì có không next-error-last-buffer
.)
Ghi chú:
Có hai tùy chọn người dùng kiểm soát các cách để chỉ ra lần truy cập trong bộ đệm nguồn (không phải trong bộ đệm biên dịch): next-error-highlight
và next-error-highlight-no-select
. Chúng cung cấp các khả năng giống nhau, nhưng chúng được sử dụng bởi các lệnh khác nhau. Các khả năng bao gồm sử dụng một mũi tên tua hoặc làm nổi bật trận đấu trong một thời gian nhất định.
Nhưng không có tùy chọn kiểm soát như vậy của lần truy cập hiện tại trong bộ đệm *compilation*
. Vì vậy, Emacs cung cấp hai tùy chọn (trong đó một tùy chọn có thể là đủ) cho bộ đệm nguồn nhưng không có tùy chọn nào cho bộ đệm biên dịch.
Bạn có thể xem xét việc gửi yêu cầu nâng cao, để có được một tùy chọn tương tự cho bộ đệm biên dịch (bao gồm grep) : M-x report-emacs-bug
. Sử dụng một cái móc với chức năng của riêng bạn để thực hiện tô sáng là OK, nhưng không cần thiết.
Và nếu bạn chỉ muốn thay đổi chỉ báo rìa, bạn có thể thực hiện việc này (sử dụng bất kỳ bitmap rìa nào bạn muốn, thay vì filled-rectangle
- xem (elisp) Bitmap Fringe cho danh sách các bitmap được xác định trước):
(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)
Cập nhật số 2:
Tôi chỉ phát hiện ra rằng nếu bạn tắt hiển thị rìa bên trái thì bạn sẽ thấy hành vi tôi đã mô tả ở đầu: cửa sổ được cuộn để đặt lỗi hiện tại ở trên cùng. Vì vậy, đó là một khả năng khác. (Đó là hành vi tôi thấy trong thiết lập của mình, vì tôi không hiển thị rìa.)
Có một lỗi trong hành vi này, mà tôi vừa báo cáo ( # 20829 ). Số đếm (hiện tại, cho đến khi lỗi được sửa) là liệu rìa bên trái có hiển thị trong cửa sổ đã chọn khi bạn thực hiện C-x `
( next-error
) hay không. (Hiện tại) không đủ để cửa sổ hiển thị bộ đệm biên dịch không hiển thị rìa bên trái.