Emacs Lisp में मैं इस क्षेत्र(चयन) प्रोग्राम को कैसे प्राप्त करूं?




elisp (2)

इंटरेक्टिव के "आर" विनिर्देश गूंगा है। आप क्यों देख रहे हैं

(defun get-search-term (beg end)
  "message region or \"empty string\" if none highlighted"
  (interactive (if (use-region-p)
                   (list (region-beginning) (region-end))
                 (list (point-min) (point-min))))
  (let ((selection (buffer-substring-no-properties beg end)))
    (if (= (length selection) 0)
        (message "empty string")
      (message selection))))

मैं बेवकूफ और उपयोगी नहीं के रूप में "गूंगा" मतलब नहीं है; बस उस पर ध्यान नहीं दिया जाता है कि क्या चिह्न सक्रिय है या नहीं। मुझे लगता है कि यह क्षणिक-चिह्न-मोड की भविष्यवाणी करता है

संपादित करें : दो बार से ऊपर (point-min) का उपयोग करने से कोड को पढ़ने में कठिन हो जाता है यहां एक बेहतर कार्यान्वयन है:

(defun get-search-term (beg end)
  "message region or \"empty string\" if none highlighted"
  (interactive (if (use-region-p)
                   (list (region-beginning) (region-end))
                 (list nil nil)))
  (message "%s" (if (and beg end)
                    (buffer-substring-no-properties beg end)
                  "empty string")))

मुझे इमैक बफर में चयन का उपयोग करने की आवश्यकता है I मुझे यह आलेख मिल गया है मैं एमएक्स लिस्प में वर्तमान क्षेत्र की सामग्री का उपयोग कैसे करूं? और यह मुझे बहुत मदद करता है

लेकिन एक समस्या है। पहली बार जब मैं एक क्षेत्र चुनता हूं (हाइलाइट) करता हूं, यह ठीक काम करता है, लेकिन जब मैं सीजी दबाता हूं, और किसी भी वर्ण को उजागर किए बिना कर्सर को किसी अन्य स्थान पर ले जाता हूं, तो मुझे अंतिम चिह्न से वर्तमान बिंदु तक एक स्ट्रिंग मिली, जबकि मुझे उम्मीद है कि एक खाली ।

असल में मुझे एक फ़ंक्शन को कार्यान्वित करने की आवश्यकता है जो वर्तमान चयन (हाइलाइट) को एक स्ट्रिंग के रूप में वापस कर देगा या खाली स्ट्रिंग अगर कुछ भी हाइलाइट नहीं किया जाएगा। निम्नलिखित कोड मुझे अधिक स्पष्ट रूप से व्यक्त कर सकता है I


(defun get-search-term ()
  (interactive)
  (let (
        (selection (buffer-substring-no-properties (region-beginning) (region-end))))
    (if (= (length selection) 0)
        (message "empty string")
      (message selection))))

कोई सुझाव? आपका बहुत बहुत धन्यवाद!


चर चिह्न-सक्रिय उदा। च वी मार्क-सक्रिय

==> मार्क-एक्टिव एक चर परिभाषित है जो `सी स्रोत कोड 'में है बफर एप्रोपोस में इसका मूल्य शून्य है; वैश्विक मूल्य शून्य है

स्वचालित रूप से किसी भी फैशन में बफर-स्थानीय सेट हो जाता है

प्रलेखन: गैर-शून्य का अर्थ है कि बफर में वर्तमान में चिह्न और क्षेत्र सक्रिय है।

(defun get-search-term ()
  (interactive)
  (if mark-active
      (let (
        (selection (buffer-substring-no-properties (region-beginning) (region-end))))
    (if (= (length selection) 0)
        (message "empty string")
      (message selection))
    )
    (error "mark not active"))
  )




elisp