क्या "बफर रीड-ओनली" चेतावनी को निष्क्रिय करने का एक तरीका है?


9

मुझे यह चेतावनी विशेष रूप से उपयोगी और बहुत विचलित करने वाली नहीं लगती है क्योंकि यह एक संक्षिप्त क्षण के लिए इको क्षेत्र में वर्तमान पाठ को छुपाता है। यह भी अनावश्यक लगता है, क्योंकि मैं वैसे भी नोटिस करूंगा कि मैं केवल-पढ़ने के लिए क्षेत्रों में नहीं लिख सकता। क्या इसे निष्क्रिय करने का कोई तरीका है?

जवाबों:


9

हां, आप संकेतों को 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)

(24.5.1 GNU Emacs का उपयोग करके परीक्षण किया गया।)


जिज्ञासा से बाहर, command-error-functionमान को ओवरराइड नहीं करना सभी त्रुटियों को प्रभावित करेगा, और न केवल "बफर रीड-ओनली" त्रुटियां? मैं यह ठीक-ठीक पता नहीं लगा सकता कि स्रोत कोड से यह सब परिवर्तन क्या प्रभाव डालेंगे।
कौशल मोदी

1
हाँ यह होगा। यही कारण है कि मेरे पास (when ...)कोड स्निपेट में फ़ॉर्म है: इस तरह से संकेत जिन्हें हम परवाह नहीं करते हैं उन्हें डिफ़ॉल्ट हैंडलर में पारित किया buffer-read-onlyजाता है और इसे अनदेखा किया जाता है।
कांस्टेनटाइन

आह ठीक है, मैं पूरी तरह से उस कॉल को याद किया command-error-default-function
कौशल मोदी

1
स्वीट, मैं एक आसान तरीका ढूंढ रहा हूं कि "टेक्स्ट रीड-ओनली" कचरा केवल मिनीबफ़र में हो और यह ट्रिक करता है।
वाकाक

1
@ एमसीबी: जहां तक ​​मुझे पता है कि गूंज क्षेत्र और मिनी-बफर को अलग करना संभव नहीं है। मेरा मानना है philsकि आपके द्वारा लिंक किया गया उत्तर सही है, अर्थात हमें इसके लिए नए C कोड की आवश्यकता होगी।
कांस्टेंटाइन

3

'बफर रीड-ओनली' त्रुटि का स्रोत

मेरा मानना ​​है कि उस त्रुटि का स्रोत: Buffer is read-only: <#BUFFER-NAME>सी स्रोत कोड में है।

तो इसका समाधान स्रोत कोड को ट्विक करना और स्थानीय स्तर पर इस विशिष्ट लाइन को टिप्पणी करके 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


चेतावनी का एक नोट: सी स्रोत हैक करना भविष्य में भ्रम का एक प्रमुख स्रोत हो सकता है। इसलिए मैं ऐसा नहीं करूंगा।


1
जहां तक ​​मैं बता सकता हूं (defun barf-if-buffer-read-only () nil), xsignal1कॉल और री-बिल्डिंग के निर्माण पर टिप्पणी करने का एक ही प्रभाव है। :-)
कांस्टेंटाइन

@ कॉन्सटेंटाइन TIL कि हम C फंक्शंस को ओवरस्पीड में ओवरराइड कर सकते हैं। धन्यवाद!
कौशल मोदी

Elisp का उपयोग करके चीजों को संशोधित करने के बारे में: यह मुझे इस पुराने प्रश्न के बारे में याद दिलाता है nil: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
कॉन्स्टैंटाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.