Emacsのどのコードが `line-number-mode`に長い行のバッファの行番号として“ ??”を出力させるのですか?


21

line-number-modeモードラインで現在の行を示すために使用していますが、大きなファイルまたは長い行を持つファイルの場合、行番号ではなく2つの疑問符が表示され始めます。私は少し掘り下げて、line-number-modeで定義されている間simple.elに、カスタマイズ可能な変数(およびおそらくすべてのロジック)がで定義されていることを発見しましたxdisp.cline-number-display-width変数を任意の高い数値に変更すると、これが修正される可能性がありますが、2つの疑問符を出力するコードとロジックにはるかに興味があります。あなたの誰かが私のためにそれを見つけることができれば、おそらくその背後にあるロジックを説明することさえできれば、それは非常に役立つでしょう。


2
M-: (format-mode-line "%l")あまりにも、質問マークを表示?
lunaryorn 14年

はい、それは私に「??」を与えます 評価結果として。
wasamasa 14年

1
それでは、の定義を見てくださいformat-mode-line
lunaryorn 14年

回答:


25

@lunaryornの提案のおかげで、これを引き起こしているコードの一部を見つけることができました。format-mode-line最終的にはdecode_mode_spec、指定された形式コードを値に変換するための呼び出しのように見えます。%lこの関数の場合、計算に時間がかかりすぎないようにいくつかの健全性チェックを行い、現在の行がを超えてline-number-display-limit-widthいるかどうかをチェックします。それは問題の私のファイルの場合であるため、値としてno_value埋め込ま??れた値を返すラベルにジャンプします。

これを「解決」するには、変数を十分に高い値に設定する必要があります。

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

この値は、32ビットシステムでのオーバーフローを回避するためにxdisp.c、ウィンドウの高さに2プラス30を掛けて乗算する、対応するヒューリスティックを調べることによって導出されました。値2000000は安全な賭けです。line-number-display-limit-widthmost-positive-fixnum


2
2つの同様の質問を保持する代わりに、他の質問を重複して閉じて、代わりにこの回答を更新してはいけませんか?
カウシャルモディ

@kaushalmodi:完了!
wasamasa

2
一時的な変更の場合:M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>
同名の

これは、コンピューターの処理速度が大幅に低下したときに意味があったと思われます。数十年にわたって、initファイルで高い値に設定してきました。
ジムBalter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.