ฉันไม่พบคำเตือนนี้ที่มีประโยชน์และน่ารำคาญเพราะมันซ่อนข้อความปัจจุบันในพื้นที่เสียงก้องชั่วครู่หนึ่ง ดูเหมือนว่าไม่จำเป็นเพราะฉันจะสังเกตเห็นว่าฉันไม่สามารถเขียนในพื้นที่อ่านอย่างเดียวได้ มีวิธีการปิดการใช้งานหรือไม่?
ฉันไม่พบคำเตือนนี้ที่มีประโยชน์และน่ารำคาญเพราะมันซ่อนข้อความปัจจุบันในพื้นที่เสียงก้องชั่วครู่หนึ่ง ดูเหมือนว่าไม่จำเป็นเพราะฉันจะสังเกตเห็นว่าฉันไม่สามารถเขียนในพื้นที่อ่านอย่างเดียวได้ มีวิธีการปิดการใช้งานหรือไม่?
คำตอบ:
ใช่คุณสามารถปิดการใช้งานข้อความเหล่านี้โดยการตั้งค่า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ค่าจะส่งผลกระทบต่อข้อผิดพลาดทั้งหมดและไม่ใช่เพียงข้อผิดพลาด "บัฟเฟอร์อ่านอย่างเดียว"? ฉันไม่สามารถทราบได้อย่างชัดเจนว่าการเปลี่ยนแปลงนี้จะมีผลกระทบอะไรกับซอร์สโค้ด