2009-11-19 8 views
8

के साथ चिह्नित क्षेत्र को लपेटने के लिए Emacs फ़ंक्शन कैसे लिखें I elisp से बहुत परिचित नहीं हूं, और सीखने की कोशिश कर रहा हूं। Emacs में, मैं निम्नलिखित करने के लिए सक्षम होना चाहते हैं: जहाँ मैं अंत करने के लिए अंकन चाहते सी अंतरिक्ष निर्दिष्ट टेक्स्ट

  • पर जाएं माध्यम

    1. मार्क, तो मैं एक ऐसे क्षेत्र पर प्रकाश डाला है, मान लीजिए यह
    2. मारो एक महत्वपूर्ण अनुक्रम
    3. है "पाठ पर प्रकाश डाला" है Emacs मुझे इनपुट करने के लिए पूछना कुछ पाठ, कहते हैं कि "साजिश", और
    4. है कि पाठ परिवर्तन पर प्रकाश डाला होने के लिए "साजिश (हाइलाइट किया गया टेक्स्ट)" । यही है, मैं हाइलाइट किए गए टेक्स्ट को ब्रांड्स के साथ लपेटना चाहता हूं और इसे टेक्स्ट I इनपुट से पहले करना चाहता हूं।

      (defun wrap-text() 
          ) 
      

    मुझे लगता समारोह के इनपुट पर प्रकाश डाला पाठ होगा, लेकिन मैं कहाँ तलाश शुरू करने के लिए पता नहीं है। दूसरा कठिन हिस्सा इनपुट टेक्स्ट हिस्सा होगा। क्या कोई मुझे मार्गदर्शन कर सकता है? धन्यवाद।

  • उत्तर

    8

    अपने मामले के लिए, यह काम करना चाहिए:

    (defun wrap-text (b e txt) 
        "simple wrapper" 
        (interactive "r\nMEnter text to wrap with: ") 
        (save-restriction 
        (narrow-to-region b e) 
        (goto-char (point-min)) 
        (insert txt) 
        (insert "(") 
        (goto-char (point-max)) 
        (insert ")"))) 
    
    (global-set-key (kbd "C-x M-w") 'wrap-text) 
    
    +0

    भी देखें: http://xahlee.org/emacs/wrap-url.html –

    +0

    इसके अलावा इस प्रश्न/उत्तर: http://stackoverflow.com/questions/1397113/how-to-tag-text -इन-एमैक्स/13 9 7134 # 13 9 7134। –

    +0

    यासपिपेट के साथ ऐसा कुछ कैसे करेंगे? मैं परिचित हूं: 1. कीवर्ड में टाइप करें 2. का विस्तार करें जिसमें इस क्षेत्र की शुरुआत और अंत में टेक्स्ट जोड़ना शामिल है। मुझे इस समाधान को भी सुनने में दिलचस्पी होगी। धन्यवाद। –

    1

    धन्यवाद ट्रे जैक्सन। मुझे नहीं पता था कि आपने एक समाधान पोस्ट किया है, इसलिए मैं मदद के लिए freenode पर #emacs गया था। कुछ शोध के बाद, मैं निम्नलिखित के साथ आया था:

    (defun ess-R-wrap-content-vqn() 
        "Wrap marked region with a specified PREFIX and closing parentheses." 
        (interactive) 
        (set (make-local-variable 'prefix) (read-from-minibuffer "function: ")) 
        (set (make-local-variable 'prefix) (concat prefix "(")) 
        (save-excursion (goto-char (region-beginning)) (insert prefix)) 
        (save-excursion (goto-char (region-end)) (insert ")")) 
    ) 
    (define-key ess-mode-map "\C-c\M-w" 'ess-R-wrap-content-vqn) ;; w is for wrap 
    

    मैंने सोचा stackoverflow मुझे सूचित करने के लिए जब एक समाधान पोस्ट किया जाता है जा रहा था। फिर से धन्यवाद। इस से elisp के थोड़ा और सीखना।

    3

    अपने संस्करण के लिए कुछ थोड़ा और करीब है, लेकिन कुछ परिवर्तन के साथ:

    • आप उपयोग कर सकते हैं एक स्थानीय-चर
    • क्षेत्र शुरुआत है और इस क्षेत्र के अंत आप के बराबर देता है बनाने के लिए 'चलो'

      (defun wrap-in-function() 
          "Wrap marked region with a specified PREFIX and closing parentheses." 
          (interactive) 
          (let ((prefix (read-from-minibuffer "function: "))) 
          (save-excursion 
           (goto-char (region-beginning)) 
           (insert (concat prefix "("))) 
          (save-excursion 
           (goto-char (region-end)) 
           (insert ")")))) 
      

      एक और घ: क्या ट्रे

    यहाँ के साथ किया था एक उदाहरण है फ़ंक्शन को कॉल करने के बाद दो संस्करणों के बीच इफेरेंस बिंदु की स्थिति है; ट्रे का संस्करण उपयोग करने के लिए बेहतर हो सकता है (स्वाद का मामला)।

    संपादित करें: निम्नलिखित विंह टिप्पणी संपादित करें।

    +0

    ट्रे के जवाब में 'इंटरैक्टिव' घोषणा यह करने का एक बेहतर तरीका है। 'आर' इंगित करता है कि एक क्षेत्र को परिभाषित किया जाना चाहिए और बाकी को मानक Emacs विधियों का उपयोग करके वांछित पाठ में पढ़ने के लिए एक संकेत के रूप में प्रयोग किया जाता है। वैसे ही उन तरीकों से आप 'रीड-थ्रू-मिनीबफर' को कॉल कर सकते हैं, जैसा कि आपने यहां किया था, आप किसी अन्य मानक/वैश्विक Emacs व्यवहार को अनुकूलित कर चुके हैं जिन्हें आपने अनुकूलित किया है। –

    +0

    ने अभी तुम्हारा प्रयास किया और यह पाठ को पूरी तरह लपेट नहीं करता है। यह लपेटता है: लपेटें() mytext। –

    +0

    धन्यवाद vinh, आप सही हैं, मेरा फ़ंक्शन केवल तभी काम करता है जब आप अंत से शुरू करने के लिए टेक्स्ट का चयन करते हैं। मैं कोशिश करूंगा और देख सकता हूं कि मैं इसे ठीक कर सकता हूं या नहीं। – phtrivier

    2

    इसके लिए 'सीएल की आवश्यकता है लेकिन अन्यथा बहुत छोटी है। कुछ सालों से इसका इस्तेमाल कर रहा है।

    (require 'cl) ;;if you haven't elsewhere 
    (defun decorate-region(beg end prefix suffix) 
        (interactive "r\nMPrefix: \nMSuffix: ") 
        (cl-set-buffer-substring beg end (concat prefix 
                  (buffer-substring beg end) 
                  suffix))) 
    
    संबंधित मुद्दे