2012-11-08 17 views
5

मैंने एक फ़ंक्शन परिभाषित किया और क्षेत्र को optional पैरामीटर के रूप में बनाना चाहता था।इस स्थिति में कैसे उपयोग करें (इंटरैक्टिव "आर") फ़ंक्शन?

(defun my-grep-select(&optional beg end) 
    (interactive "r") 
    (if mark-active 
     (....) 
     (....)) 

मैं, बफर में चुनिंदा वर्ण grep अगर निशान सक्रिय है या बफर में कर्सर के तहत शब्द grep अगर निशान सक्रिय नहीं है चाहता था।

लेकिन स्थिति में: मैं फाइल खोली और कुछ भी का चयन नहीं किया है, तो आदेश my-grep-select चलाने के लिए, Emacs शिकायत:

The mark is not set now, so there is no region 

मैं इस शिकायत को समाप्त कर सकते कैसे? धन्यवाद।

+1

मैं का उपयोग नहीं होता है '(इंटरैक्टिव" आर ")' और बस का उपयोग '(क्षेत्र-active- पी) 'और' (क्षेत्र-शुरुआत) 'और' (क्षेत्र-अंत) ' –

+0

बहुत अच्छा है। धन्यवाद। –

+0

मैंने इसे उत्तर के रूप में जोड़ा है, यदि आप स्वीकार करना चाहते हैं ... –

उत्तर

5

सही तरीके से करने के लिए यह हो सकता है:

(defun my-grep-select(&optional beg end) 
    (interactive 
    (if (use-region-p) (list (region-beginning) (region-end)) 
    (list <wordbegin> <wordend>))) 
    ...) 
3

आप (interactive "r") उपयोग करने की आवश्यकता नहीं है। इसके बजाए, आप यह जांच सकते हैं कि (region-active-p) का उपयोग कर क्षेत्र सक्रिय है या फिर (region-beginning) और (region-end) का उपयोग करें और अन्यथा करें।

शायद पसंद जब इस क्षेत्र में सक्रिय है और मानकों का एक अलग सेट पारित कर रहे हैं किए जाने के लिए ...

संबंधित मुद्दे