Używam, line-number-mode
aby mieć wskaźnik bieżącej linii w moim modelu, jednak w przypadku dużych plików, a raczej plików z długimi liniami, zaczyna wyświetlać dwa znaki zapytania zamiast numeru linii. Wykopałem trochę i odkryłem, że chociaż line-number-mode
jest zdefiniowane w simple.el
, zmienne, które można dostosowywać (i prawdopodobnie cała logika) są zdefiniowane w xdisp.c
. Zmiana line-number-display-width
zmiennej na dowolnie wysoką liczbę może to naprawić, ale bardziej interesuje mnie fragment kodu i logika, która powoduje, że wypisuje on dwa znaki zapytania. Byłoby bardzo przydatne, gdyby ktokolwiek z was mógł to dla mnie znaleźć, może nawet wyjaśnić logikę, która się za tym kryje.
mode-line
emacs-internals
wasamasa
źródło
źródło
M-: (format-mode-line "%l")
znaki zapytania?format-mode-line
.Odpowiedzi:
Dzięki sugestiom @ lunaryorn udało mi się zlokalizować kod powodujący to. Wygląda na to, że w
format-mode-line
końcu wywołaniadecode_mode_spec
zamieniają podane kody formatu na wartości. W przypadku%l
tej funkcji wykonuje kilka kontroli poprawności, aby uniknąć spędzania zbyt dużo czasu na obliczeniach, a następnie sprawdza, czy bieżąca linia przekraczaline-number-display-limit-width
. Ponieważ dotyczy to mojego pliku, przeskakuje on dono_value
etykiety, która zwraca wartość wypełnienia??
jako wartość.„Rozwiązanie” polega na ustawieniu zmiennej na wystarczająco wysoką wartość:
Wartość tę uzyskano, patrząc na odpowiednią heurystykę, w
xdisp.c
której przyjmuje się wysokość okna razy dwa plus trzydzieści i mnoży jąline-number-display-limit-width
, aby uniknąć przepełnieniamost-positive-fixnum
w systemie 32-bitowym, wartość 2000000 byłaby bezpiecznym zakładem.źródło
M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>