ฉันไม่พบคำเตือนนี้ที่มีประโยชน์และน่ารำคาญเพราะมันซ่อนข้อความปัจจุบันในพื้นที่เสียงก้องชั่วครู่หนึ่ง ดูเหมือนว่าไม่จำเป็นเพราะฉันจะสังเกตเห็นว่าฉันไม่สามารถเขียนในพื้นที่อ่านอย่างเดียวได้ มีวิธีการปิดการใช้งานหรือไม่?
ฉันไม่พบคำเตือนนี้ที่มีประโยชน์และน่ารำคาญเพราะมันซ่อนข้อความปัจจุบันในพื้นที่เสียงก้องชั่วครู่หนึ่ง ดูเหมือนว่าไม่จำเป็นเพราะฉันจะสังเกตเห็นว่าฉันไม่สามารถเขียนในพื้นที่อ่านอย่างเดียวได้ มีวิธีการปิดการใช้งานหรือไม่?
คำตอบ:
ใช่คุณสามารถปิดการใช้งานข้อความเหล่านี้โดยการตั้งค่าcommand-error-function
ฟังก์ชั่นที่ไม่สนใจbuffer-read-only
สัญญาณ
(defun my-command-error-function (data context caller)
"Ignore the buffer-read-only signal; pass the rest to the default handler."
(when (not (eq (car data) 'buffer-read-only))
(command-error-default-function data context caller)))
(setq command-error-function #'my-command-error-function)
(ทดสอบโดยใช้ GNU Emacs 24.5.1)
(when ...)
แบบฟอร์มในโค้ดขนาดสั้น: วิธีนี้สัญญาณที่เราไม่สนใจจะถูกส่งผ่านไปยังตัวจัดการเริ่มต้นและbuffer-read-only
ถูกละเว้น
command-error-default-function
ตกลงฉันทั้งหมดไม่ได้รับสายที่
phils
ที่คุณเชื่อมโยงนั้นถูกต้องคือเราต้องการรหัส C ใหม่สำหรับสิ่งนี้
ฉันเชื่อว่าแหล่งที่มาของข้อผิดพลาดนั้น: Buffer is read-only: <#BUFFER-NAME>
อยู่ในรหัสที่มา C
ดังนั้นวิธีการนี้จะเป็นแหล่งที่มาของการปรับแต่งรหัสและสร้าง emacs โดยเฉพาะการแสดงความคิดเห็นออกบรรทัดนี้โดยเฉพาะ
สำหรับการอ้างอิงต่อไปนี้เป็นข้อมูลโค้ดที่แสดงข้อผิดพลาด:
if (!NILP (BVAR (current_buffer, read_only))
&& NILP (Vinhibit_read_only)
&& NILP (Fget_text_property (pos, Qinhibit_read_only, Qnil)))
xsignal1 (Qbuffer_read_only, Fcurrent_buffer ());
return Qnil;
.. และแสดงความคิดเห็นออกมาว่าxsignal
บรรทัดควรทำเคล็ดลับ
มีวิธีที่ง่ายกว่ามากในการหลีกเลี่ยงความรำคาญนี้ในช่วงเวลาที่คุณทำงานในบัฟเฟอร์แบบอ่านอย่างเดียวคือ .. คุณไม่สามารถทำให้เป็นแบบอ่านอย่างเดียวได้ชั่วคราว
M-x read-only-mode
(ผูกพันตามค่าเริ่มต้นเป็นC-x C-q
) จะสลับบัฟเฟอร์ใด ๆระหว่างโหมดอ่านอย่างเดียวและโหมดที่แก้ไขได้C-x C-q
ดังนั้นถ้าคุณจะได้รับจำนวนมากของข้อผิดพลาดเหล่านี้เพียงแค่ทำให้บัฟเฟอร์ที่สามารถแก้ไขได้โดยการกดปุ่มชั่วคราว
หมายเหตุของการเตือน: การแฮ็กแหล่งข้อมูล C อาจเป็นแหล่งที่มาของความสับสนในอนาคต ดังนั้นฉันจะไม่ทำมัน
(defun barf-if-buffer-read-only () nil)
ได้มีผลเช่นเดียวกับการแสดงความคิดเห็นการxsignal1
โทรและการสร้าง Emacs ใหม่ :-)
nil
: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
command-error-function
ค่าจะส่งผลกระทบต่อข้อผิดพลาดทั้งหมดและไม่ใช่เพียงข้อผิดพลาด "บัฟเฟอร์อ่านอย่างเดียว"? ฉันไม่สามารถทราบได้อย่างชัดเจนว่าการเปลี่ยนแปลงนี้จะมีผลกระทบอะไรกับซอร์สโค้ด