जब क्षणिक-चिह्न-मोड सक्रिय होता है तो Emacs का सामान्य व्यवहार यह होता है कि जब आप शिफ्ट-सेलेक्शन करते हैं, तो यदि अगला कमांड एक नॉन-शिफ्ट मूवमेंट है, तो मार्क निष्क्रिय हो जाता है। उदाहरण के लिए, कमांड के बाद M-l
(नीचे फ़ंक्शन के साथ वर्तमान लाइन को चिह्नित करने के लिए) और C-f
, चिह्न निष्क्रिय है। उस व्यवहार को बाद में कैसे करें (set-mark-command nil)
?
उदाहरण के लिए:
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
अब Ml Cf करें और क्षेत्र बढ़ेगा, लेकिन इसके बजाय, मैं चाहता हूं कि डिफ़ॉल्ट व्यवहार, अर्थात Cf को निष्क्रिय करने के लिए क्षेत्र, और CSf के साथ बढ़े।
संपादित करें : सेट-मार्क-कमांड के लिए एक फ़ंक्शन का उपयोग करना चाहिए जो इसे अनुमति देता है? मुझे कोई नहीं मिला।
C-f
वह आपके द्वारा उपयोग किए जाने वाले अन्य सभी नेविगेशन कमांड पर भी लागू होगी।
C-f
बाद M-l
क्षेत्र का विस्तार नहीं करता है क्योंकि M-l
(जो downcase-word
डिफ़ॉल्ट रूप से बाध्य है ) के अंत में कोई सक्रिय क्षेत्र नहीं है ।
M-l
ओपी द्वारा संदर्भित डिफ़ॉल्ट बाइंडिंग नहीं है ( downcase-word
), लेकिन कस्टम बाइंडिंगmy-mark-current-line
C-S-f
करनेC-SPC
)C-f
(नेविगेशन) के अनुरूप है । आप संभवतःC-f
एक रैपर फ़ंक्शन से बाइंड करके प्राप्त कर सकते हैं जो पहले सक्रिय होने पर एक क्षेत्र को निष्क्रिय करता है और फिर जोC-f
करता है उसे करने के लिए आगे बढ़ता है (forward-char
); औरC-S-f
सीधे बाँधोforward-char
। ध्यान दें कि यदि आप कभी टर्मिनल मोड में emacs का उपयोग करते हैं,C-f
औरC-S-f
दोनों व्यवहार करेंगेC-f
जैसे टर्मिनल दोनों के बीच अंतर नहीं कर सकता है।