ส่วนใดของรหัสใน Emacs ที่ทำให้ "หมายเลขบรรทัดโหมด" พิมพ์ "??" เป็นหมายเลขบรรทัดในบัฟเฟอร์ที่มีเส้นยาว


21

ฉันใช้line-number-modeเพื่อมีตัวบ่งชี้ของบรรทัดปัจจุบันใน modeline ของฉัน แต่สำหรับไฟล์ขนาดใหญ่หรือมากกว่าไฟล์ที่มีความยาวมันเริ่มแสดงเครื่องหมายคำถามสองตัวแทนที่จะเป็นหมายเลขบรรทัด ผมเคยขุดบิตและพบว่าในขณะที่line-number-modeถูกกำหนดไว้ในsimple.elตัวแปรที่ปรับแต่งได้ (และอาจจะตรรกะทั้งหมดที่เกี่ยวข้อง) xdisp.cที่กำหนดไว้ใน การเปลี่ยนline-number-display-widthตัวแปรเป็นจำนวนสูงโดยพลการอาจแก้ไขได้ แต่ฉันสนใจในส่วนของรหัสและตรรกะที่ทำให้มันพิมพ์เครื่องหมายคำถามสองข้อ มันจะมีประโยชน์มากถ้ามีใครในพวกคุณพบฉัน


2
ไม่M-: (format-mode-line "%l")แสดงเครื่องหมายคำถามเกินไป?
Lunaryorn

ใช่มันทำให้ฉัน "?" เป็นผลการประเมิน
wasamasa

1
format-mode-lineอืมแล้วจะดูที่ความหมายของการเป็น
Lunaryorn

คำตอบ:


25

ขอบคุณคำแนะนำของ @ lunaryorn ฉันสามารถค้นหาโค้ดที่ทำให้เกิดปัญหานี้ได้ ดูเหมือนว่าformat-mode-lineในที่สุดการโทรdecode_mode_specเพื่อเปลี่ยนรหัสรูปแบบที่กำหนดเป็นค่า สำหรับกรณีของฟังก์ชั่นนี้ไม่ได้ตรวจสอบสติไม่กี่ที่จะหลีกเลี่ยงการใช้เวลามากเกินไปในการคำนวณการตรวจสอบแล้วไม่ว่าจะเป็นบรรทัดปัจจุบันเกิน%l line-number-display-limit-widthเนื่องจากเป็นกรณีสำหรับไฟล์ของฉันที่มีปัญหามันจะข้ามไปยังno_valueป้ายกำกับที่ส่งคืนเบาะ??เป็นค่า

"การแก้ปัญหา" สิ่งนี้เกี่ยวข้องกับการตั้งค่าตัวแปรให้มีค่าสูงพอสมควร:

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

ค่านี้ได้มาจากการดูฮิวริสติกที่เกี่ยวข้องxdisp.cซึ่งใช้ความสูงของหน้าต่างคูณสองบวกสามสิบและคูณด้วยline-number-display-limit-widthเพื่อหลีกเลี่ยงการล้นmost-positive-fixnumในระบบ 32 บิตค่า 2000000 จะเป็นทางออกที่ปลอดภัย


2
แทนที่จะเก็บคำถามที่คล้ายกันสองคำถามคำถามอื่น ๆ ไม่ควรถูกปิดซ้ำและอัปเดตคำตอบนี้แทน
Kaushal Modi

@kaushalmodi: เสร็จแล้ว!
wasamasa

2
สำหรับการเปลี่ยนแปลงชั่วคราว:M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>
Eponymous

ฉันคิดว่าสิ่งนี้สมเหตุสมผลเมื่อคอมพิวเตอร์ช้าลงมาก ฉันตั้งค่าไฟล์ init ของฉันให้สูงเป็นเวลาหลายสิบปีแล้ว
Jim Balter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.