Я использую line-number-mode
индикатор текущей строки в моей моделине, однако для больших файлов или, скорее, для файлов с длинными строками, он начинает отображать два знака вопроса вместо номера строки. Я немного покопался и обнаружил, что, хотя line-number-mode
он определен в simple.el
, настраиваемые переменные (и, вероятно, вся задействованная логика) определены в xdisp.c
. Изменение line-number-display-width
переменной на произвольно большое число может исправить это, но меня гораздо больше интересует фрагмент кода и логика, которая заставляет его печатать два вопросительных знака. Было бы очень полезно, если бы кто-нибудь из вас смог найти это для меня, возможно, даже объяснить логику этого.
mode-line
emacs-internals
wasamasa
источник
источник
M-: (format-mode-line "%l")
Показывает ли знаки вопроса тоже?format-mode-line
.Ответы:
Благодаря предложениям @ lunaryorn я смог найти фрагмент кода, вызывающий это. Похоже, что в
format-mode-line
конце концов вызовыdecode_mode_spec
превращают данные коды формата в значения. В случае%l
этой функции выполняется несколько проверок работоспособности, чтобы не тратить слишком много времени на вычисления, а затем проверяется, превышает ли текущая строкаline-number-display-limit-width
. Так как это относится к моему файлу, о котором идет речь, он переходит наno_value
метку, которая возвращает заполненное??
значение.«Решение» включает в себя установку переменной на достаточно высокое значение:
Это значение было получено путем просмотра соответствующей эвристики, в
xdisp.c
которой берется высота окна, умноженная на два плюс тридцать, и умножается на нееline-number-display-limit-width
, чтобы избежать переполненияmost-positive-fixnum
в 32-битной системе, значение 2000000 будет безопасной ставкой.источник
M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>