Ich verwende line-number-mode
, um einen Indikator für die aktuelle Zeile in meinem Modeline zu haben. Bei großen Dateien oder eher Dateien mit langen Zeilen werden jedoch anstelle einer Zeilennummer zwei Fragezeichen angezeigt. Ich habe ein bisschen gegraben und herausgefunden, dass, während line-number-mode
in definiert ist simple.el
, die anpassbaren Variablen (und wahrscheinlich die gesamte Logik) in definiert sind xdisp.c
. Das Ändern der line-number-display-width
Variablen in eine willkürlich hohe Zahl könnte dies beheben, aber ich interessiere mich viel mehr für den Code und die Logik, mit der die beiden Fragezeichen gedruckt werden. Es wäre sehr nützlich, wenn einer von Ihnen es für mich finden könnte, vielleicht sogar die Logik dahinter erklären könnte.
quelle
M-: (format-mode-line "%l")
Fragezeichen?format-mode-line
.Antworten:
Dank der Vorschläge von @ lunaryorn konnte ich den Code ausfindig machen, der das verursacht hat. Es sieht so aus, als würden
format-mode-line
eventuell Aufrufe ausgeführtdecode_mode_spec
, um die angegebenen Formatcodes in Werte umzuwandeln. Bei%l
dieser Funktion werden einige Überprüfungen durchgeführt, um zu vermeiden, dass zu viel Zeit für Berechnungen aufgewendet wirdline-number-display-limit-width
. Anschließend wird überprüft, ob die aktuelle Zeile überschritten wird . Da dies für meine fragliche Datei der Fall ist, springt sie zu einerno_value
Bezeichnung, die einen??
als Wert aufgefüllten Wert zurückgibt .Beim "Lösen" wird die Variable auf einen ausreichend hohen Wert gesetzt:
Dieser Wert wurde abgeleitet, indem die entsprechenden Heuristiken betrachtet wurden, in
xdisp.c
denen die Fensterhöhe mit zwei plus dreißig multipliziertline-number-display-limit-width
wird. Um ein Überlaufenmost-positive-fixnum
auf einem 32-Bit-System zu vermeiden , wäre ein Wert von 2000000 eine sichere Wette.quelle
M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>