Saya menggunakan line-number-mode
untuk memiliki indikator dari baris saat ini di modeline saya, namun untuk file besar atau lebih tepatnya, file dengan garis panjang, itu mulai menampilkan dua tanda tanya daripada nomor baris. Saya telah menggali sedikit dan menemukan bahwa ketika line-number-mode
didefinisikan simple.el
, variabel yang dapat disesuaikan (dan mungkin semua logika yang terlibat) didefinisikan dalam xdisp.c
. Mengubah line-number-display-width
variabel ke angka tinggi yang sewenang-wenang mungkin memperbaikinya, tapi saya jauh lebih tertarik pada potongan kode dan logika yang membuatnya mencetak dua tanda tanya. Akan sangat berguna jika ada di antara Anda yang dapat menemukannya untuk saya, mungkin bahkan menjelaskan logika di baliknya.
sumber
M-: (format-mode-line "%l")
menunjukkan tanda tanya juga?format-mode-line
.Jawaban:
Berkat saran @ lunaryorn saya telah dapat menemukan potongan kode yang menyebabkan ini. Sepertinya pada
format-mode-line
akhirnya panggilandecode_mode_spec
untuk mengubah kode format yang diberikan menjadi nilai. Untuk kasus%l
fungsi ini melakukan beberapa pemeriksaan kewarasan untuk menghindari menghabiskan terlalu banyak waktu menghitung, kemudian memeriksa apakah garis saat ini melebihiline-number-display-limit-width
. Karena itu adalah kasus untuk file saya yang dimaksud, ia melompat keno_value
label yang mengembalikan nilai padded??
sebagai."Memecahkan" ini melibatkan pengaturan variabel ke nilai yang cukup tinggi:
Nilai ini diperoleh dengan melihat heuristik yang sesuai di
xdisp.c
mana mengambil tinggi jendela kali dua ditambah tiga puluh dan mengalikannyaline-number-display-limit-width
, untuk menghindari meluapmost-positive-fixnum
pada sistem 32bit, nilai 2000000 akan menjadi taruhan yang aman.sumber
M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>