Đoạn mã nào trong Emacs làm cho `line-number-mode` in ra ?? ?? làm số dòng trong bộ đệm với các dòng dài?


21

Tôi đang sử dụng line-number-modeđể có một chỉ báo của dòng hiện tại trong mô hình của mình, tuy nhiên đối với các tệp lớn hoặc đúng hơn là các tệp có dòng dài, nó bắt đầu hiển thị hai dấu hỏi thay vì số dòng. Tôi đã đào một chút và phát hiện ra rằng trong khi line-number-modeđược định nghĩa simple.el, các biến tùy chỉnh (và có thể là tất cả logic liên quan) được xác định trong xdisp.c. Thay đổi line-number-display-widthbiến thành một số cao tùy ý có thể khắc phục điều này, nhưng tôi quan tâm nhiều hơn đến đoạn mã và logic làm cho nó in hai dấu hỏi. Sẽ rất hữu ích nếu bất kỳ ai trong số bạn có thể tìm thấy nó cho tôi, thậm chí có thể giải thích logic đằng sau nó.


2
M-: (format-mode-line "%l")hiển thị dấu hỏi, quá?
lunaryorn

Vâng, nó cho tôi "??" như kết quả đánh giá.
wasamasa

1
Vâng, sau đó hãy xem định nghĩa của format-mode-line.
âm lịch

Câu trả lời:


25

Nhờ các đề xuất của @ lunaryorn, tôi đã có thể xác định được đoạn mã gây ra điều này. Dường như format-mode-linecác cuộc gọi cuối cùng decode_mode_specđể biến các mã định dạng được đưa ra thành các giá trị. Đối với trường hợp %lchức năng này, một vài kiểm tra độ tỉnh táo để tránh mất quá nhiều thời gian tính toán, sau đó kiểm tra xem dòng hiện tại có vượt quá hay không line-number-display-limit-width. Vì đó là trường hợp cho tập tin của tôi trong câu hỏi, nó nhảy đến một no_valuenhãn trả về ??giá trị đệm .

"Giải quyết" điều này liên quan đến việc đặt biến thành giá trị đủ cao:

(setq line-number-display-limit-width 2000000)

Giá trị này được tính bằng cách xem xét các heuristic tương ứng trong xdisp.cđó lấy chiều cao cửa sổ gấp hai lần ba mươi và nhân nó với line-number-display-limit-width, để tránh tràn most-positive-fixnumvào hệ thống 32 bit, giá trị 2000000 sẽ là cược an toàn.


2
Thay vì giữ hai câu hỏi tương tự, không nên đóng lại câu hỏi khác dưới dạng trùng lặp và thay vào đó hãy cập nhật câu trả lời này?
Kaushal Modi

@kaushalmodi: Xong rồi!
wasamasa

2
Để thay đổi tạm thời:M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>
Eponymous

Tôi cho rằng điều này có ý nghĩa trở lại khi máy tính chậm hơn nhiều. Tôi đã đặt nó ở giá trị cao trong tệp init của mình trong vài thập kỷ.
Jim Balter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.