एक बफर की सामग्री प्राप्त करें


15

तो buffer-stringवर्तमान बफर की सामग्री मिलती है। लेकिन यह अन्य शौकीनों को निर्दिष्ट करने की अनुमति नहीं देता है।

मैं उसके आसपास कैसे पहुंच सकता हूं? क्या मुझे save-window-excursionकाम करने के लिए कुछ चाहिए ?


अगर आप मुझसे पूछें कि आप बुरा नहीं मान रहे हैं, तो आप क्या करने की कोशिश कर रहे हैं?
ल्यूक शिमकस

@ मैं एक अतुल्यकालिक प्रक्रिया बना रहा हूं और मैं मानक इनपुट के रूप में बफर की सामग्री भेजना चाहता हूं। मुझे लगा कि मैं उपयोग कर सकता हूं process-send-stringऔर मैं फंस गया।
मैकीज गोस्ज़ेस्की

जवाबों:


25

Emacs में बहुत सारी चीजें वर्तमान बफर पर काम करती हैं। आपको वर्तमान बफ़र को बदलने और इसे पूरा करने के बाद इसे पुनर्स्थापित करने की आवश्यकता है। with-current-bufferउन सरल मामलों के लिए उपयोग करें जहां आपको किसी अन्य बफर में कुछ करने की आवश्यकता है, और save-current-bufferअधिक जटिल मामलों के लिए जहां आपको कई बफ़र्स के बीच नेविगेट करने की आवश्यकता है।

(defun buffer-string* (buffer)
  (with-current-buffer buffer
    (buffer-string)))

यदि आप गुण के बिना बफर की पाठ सामग्री चाहते हैं, तो कॉल करें buffer-substring-no-properties

buffer-stringबफर के केवल संकुचित हिस्से को लौटाता है । यदि आपको संपूर्ण सामग्री की आवश्यकता है, तो संकीर्णता को बचाने के बाद इसे चौड़ा करें।

(defun buffer-whole-string (buffer)
  (with-current-buffer buffer
    (save-restriction
      (widen)
      (buffer-substring-no-properties (point-min) (point-max)))))

यदि आपको बिंदु को बचाने की आवश्यकता है, तो भी कॉल करें save-excursion। ध्यान दें कि save-excursionकेवल वर्तमान बफ़र में बिंदु को पुनर्स्थापित करता है, इसलिए यदि आपको किसी अन्य बफ़र पर स्विच करने और वहां घूमने की आवश्यकता है, तो save-excursionअंदर कॉल करें save-current-bufferया with-current-buffer

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.