(defun some-function (beginning end)
(interactive "r")
(if (use-region-p)
(message "The region is active, and is from %d to %d" beginning end)
(message "The region is still there (from % d to %d), but it is inactive"
beginning end)))
उपयोग का (interactive "r")
मतलब है कि पैरामीटर beginning
और end
स्वचालित रूप से क्षेत्र के मूल्यों को प्राप्त करेंगे और क्षेत्र अंत में क्रमशः, जब फ़ंक्शन को लागू किया जाता है। (आप क्रमशः कार्यों region-beginning
और region-end
, का उपयोग करके कभी भी उन मूल्यों को प्राप्त कर सकते हैं।)
यह क्षेत्र हमेशा मौजूद रहता है (यदि वर्तमान बफर में कोई निशान है), लेकिन आप यह नहीं सोच सकते कि यह है। यह हाइलाइट होने पर क्षेत्र सक्रिय होता है (पाठ का चयन किया जाता है)। आप परीक्षण कर सकते हैं कि क्या क्षेत्र विधेय का उपयोग करके सक्रिय है या नहीं region-active-p
। लेकिन बेहतर परीक्षण आमतौर पर होता है use-region-p
, क्योंकि (डिफ़ॉल्ट रूप से) यह nil
तभी सही (गैर- ) होता है, जब क्षेत्र सक्रिय और गैर-रिक्त दोनों होता है (बिंदु और चिह्न भिन्न होते हैं)।
मूल रूप से, इस क्षेत्र का कोई आकर्षण नहीं था। और लंबे समय तक, भले ही हाइलाइटिंग उपलब्ध थी, यह डिफ़ॉल्ट व्यवहार नहीं था। होने के लिए हाइलाइटिंग के लिए, आपको transient-mark-mode
चालू होना चाहिए (या कम से कम अस्थायी रूप से चालू)। डिफ़ॉल्ट रूप से, transient-mark-mode
हाल के Emacs संस्करणों में चालू होता है।
यह विधेय की परिभाषा को देखने के लिए उपयोगी है use-region-p
:
(defun use-region-p ()
(and (region-active-p)
(or use-empty-active-region
(> (region-end) (region-beginning)))))
use-empty-active-region
एक उपयोगकर्ता विकल्प है, जिसका डिफ़ॉल्ट मान nil
(सत्य) है, जिसका अर्थ है कि डिफ़ॉल्ट रूप use-region-p
से क्षेत्र सही होने पर वापस नहीं आएगा। उस स्थिति में, इसे सच करने के लिए, क्षेत्र का अंत शुरुआत से अधिक होना चाहिए (जैसा कि मैंने ऊपर वर्णित व्यवहार)।
और अगर हम इसकी परिभाषा देखें region-active-p
:
(defun region-active-p ()
(and transient-mark-mode
mark-active
(mark)))
हम देखते हैं कि यह सच है (गैर- nil
) जब ये सभी सच होते हैं:
transient-mark-mode
चालू है।
- चिह्न सक्रिय है (
mark-active
)।
- वर्तमान बफर में एक निशान है।
सक्रिय होने का चिह्न वास्तव में क्या सक्रिय क्षेत्र है। जब यह सक्रिय होता है, तो यह मान transient-mark-mode
लिया जाता है कि वर्तमान बफर में एक निशान है, इस क्षेत्र पर प्रकाश डाला गया है।