2009-04-16 11 views
11

मैं अपने elisp फ़ंक्शन से गतिशील संकेत प्राप्त करने का प्रयास कर रहा हूं। मुझे कुछ बदलना चाहिए- regexp जहां यह आपको अंतिम regexp दर्ज किया जाएगा। मैंने (इंटरैक्टिव (कॉन्सट "सैब" "बेब") की कोशिश की)) जो काम नहीं करता है! प्रारूप तरहEmacs Elisp गतिशील इंटरैक्टिव प्रॉम्प्ट

मैं भी कोशिश की संदेश (इंटरेक्टिव "s% s" पिछले इस्तेमाल किया-regexp)

और वह काम नहीं करता! कोई भी जानता है कि यह कैसे करें?

धन्यवाद!

उत्तर

15

M-x find-function आपका मित्र है। यह आपको बताएगा कि Emacs में कुछ भी आपको स्रोत कोड दिखाकर काम करता है। इसका उपयोग करके, मुझे लगता है कि query-regexp-replacequery-replace-read-args पर कॉल करता है जो query-replace-read-from पर कॉल करता है जो अंतिम उपयोग किए गए regexp से बनाए गए प्रॉम्प्ट का उपयोग करके read-from-minibuffer पर कॉल करता है, जो बिंदीदार जोड़ी query-replace-defaults में सहेजा गया है।

तो:

(defun my-func() 
    "Do stuff..." 
    (interactive) 
    (read-from-minibuffer "Regexp? " (first query-replace-defaults))) 

एक आदेश है कि डिफ़ॉल्ट के रूप में पिछले प्रवेश किया regexp के साथ एक शीघ्र ऊपर फेंकता है।

9

एक सूची के साथ इनपुट इतिहास के लिए एक चर, और इंटरैक्टिव का उपयोग करें:

(defvar my-func-history nil) 

(defun my-func (str) 
    (interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history))) 
    (insert str)) 

आप अंतिम मान वहाँ शुरू में में दर्ज नहीं करना चाहते हैं, (car my-func-history)nil लिए बदल जाते हैं। आप प्रॉम्प्ट पर इतिहास के माध्यम से जाने के लिए निश्चित रूप से ऊपर/नीचे तीर कर सकते हैं।

+1

धन्यवाद अच्छा, अब मुझे पूरा करने की ज़रूरत है ... – To1ne

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