2012-08-14 29 views
5

मेरे इरादे दबाने पर कमांड लाइन की सामग्री पढ़ने प्रत्येक शीघ्र के लिए bm.elVisible Bookmarks उपयोग करने के लिए के रूप में मैं आरईटी प्रेस है। मैंने इसे कुछ हद तक हासिल करने में कामयाब रहा है .. कृपया नीचे दिए गए कोड पर टिप्पणी करें, अगर इसमें कुछ महत्वपूर्ण समस्या आ रही है: उदाहरण के लिए। मुझे कोई जानकारी नहीं है कि मुझे केवल डिफ़ॉल्ट फ़ंक्शन पर पास करने से परे तर्कों को संभालने की आवश्यकता है या नहीं।Emacs eshell। कैसे आरईटी

जब मैं खाली कमांड लाइन पर आरईटी दबाता हूं, तो मैं उस पंक्ति को बुकमार्क नहीं करना चाहता हूं। डिफ़ॉल्ट फ़ंक्शन eshell-send-input पर contol को पार करने से पहले मैं कमांड लाइन सामग्री को कैसे रोक सकता हूं?

(defun eshell-send-input-zAp (&optional use-region queue-p no-newline) 
    "eshell-send-input, customized to add bm-bookmark to prompt line" 
(interactive) 
    (bm-bookmark-add) 
    (eshell-send-input use-region queue-p no-newline)) 

(add-hook 'eshell-mode-hook 
      #'(lambda() 
       (define-key eshell-mode-map 
       [return] 
       'eshell-send-input-zAp))) 

उत्तर

4

आपका कोड सभ्य दिखता है। यदि आप eshell-send-input का कोड पढ़ते हैं, तो आप देखेंगे कि वर्तमान इनपुट कैसे प्राप्त करें।

interactive तर्कों को भी पढ़ें। "P" को उपयोगकर्ता-क्षेत्र को eshell-send-input पर पास करने की आवश्यकता है।

(defun eshell-send-input-zAp (&optional use-region queue-p no-newline) 
    "eshell-send-input, customized to add bm-bookmark to prompt line" 
    (interactive "*P") 
    (unless (string-equal (eshell-get-old-input use-region) "") 
    (bm-bookmark-add)) 
    (eshell-send-input use-region queue-p no-newline)) 
+0

यह अच्छी तरह से काम करता है। कोहरे को साफ़ करने के लिए धन्यवाद ... सभी अच्छी मदद के साथ, मैं धीरे-धीरे इस * elisp * अखरोट को तोड़ रहा हूँ :) –

1

esh-mode एक चर eshell-last-output-end जो हर बार उत्पादन छपा है अद्यतन करता है परिभाषित करता है। तो, आप मानते हैं कि (buffer-substring eshell-last-output-end (point-max)) जैसे कुछ ऐसा करके आप स्ट्रिंग को स्ट्रिंग पर ले जा सकते हैं।

संपादित करें: उद्धरण eshel-send-input पर दस्तावेज़ से:।

"इनपुट भेजें पार्स करने और प्रसंस्करण eshell-अंतिम उत्पादन के अंत के बाद के लिए Eshell को प्राप्त किया, भेजता है मार्कर से सभी पाठ बात करने के लिए इनपुट। कि मार्कर से पहले के रूप में, कॉल `eshell-मिल-पुराने इनपुट ' वर्ष इनपुट पुनः प्राप्त करने के लिए, यह बफर के अंत करने के लिए प्रतियां, और यह भेजता है।

उपयोग-क्षेत्र गैर नहीं के बराबर है, तो , वर्तमान क्षेत्र (बिंदु और चिह्न के बीच) इनपुट के रूप में उपयोग किया जाएगा।

यदि QUEUE-P गैर-शून्य है, तो इनपुट को वर्तमान प्रॉम्प्ट तक के बजाय अगले प्रॉम्प्ट तक कतारबद्ध किया जाएगा। यदि कोई प्रक्रिया नहीं है, तो इनपुट तुरंत संसाधित किया जाता है।

नो-NEWLINE गैर नहीं के बराबर है, तो इनपुट एक गर्भित अंतिम न्यू लाइन के बिना भेज दिया जाता है। "

एक्सेंट मेरा है। और अगर आप eshel-send-input के स्रोत में देखें, तो आप अंदाजा हो सकता है इसका उपयोग कैसे किया जाता है।

event_jr के उत्तर पर प्रतिबिंबित करने के लिए - यदि आपके स्वयं के फ़ंक्शन में ऐसा कोई विकल्प नहीं है तो आपको जरूरी नहीं है कि ... यदि आप अपने पास इस तरह के कोई विकल्प नहीं हैं ... जाहिर है, अब तक आपके पास इसका कोई उपयोग नहीं है , यह अनावश्यक है।

+0

मैं 'eshell-last-output-end' से कुछ भी चलाने में सक्षम नहीं हूं। इसका प्रलेखन कहता है: * एक चर के रूप में दस्तावेज नहीं किया गया है। * –

+0

एमएचएच .. 'एश-मोड' और 'एशेल-' भाग थोड़ा परेशान था, लेकिन ऐसा लगता है कि * प्रत्येक नाम के प्रत्येक * हाइफेनेटेड सेगमेंट का अपना पूरा होना है। मुझे लगता है कि कुछ बहुत सारे * बैश * प्रीकॉन्सेप्शन हैं .... (अब इसे पढ़ने पर ... –

+0

अच्छे संदर्भों के लिए धन्यवाद .. मैंने कुछ नए अंक नहीं सीखे हैं .. (वहां पर elisp में, सामान्य रूप से जाने के लिए बहुत कुछ हैं :) –

0

(उत्तर अपना खुद का प्रश्न उठाना) ... मुझे एहसास हुआ कि eshell इसके मूल पर सिर्फ एक इमैक बफर है, इसलिए, इस बात को ध्यान में रखते हुए, मैं इस विधि के साथ आया हूं, जो काम करता है, लेकिन शायद बेहतर किया जा सकता है। शायद इसके बारे में कुछ है जो मुझे अभी तक अनजान है, इसलिए मैं अभी भी सुझावों के लिए खुला हूं।

(defun eshell-send-input-zAp (&optional use-region queue-p no-newline) 
    "A customized `eshell-send-input`, to add bm-bookmark to prompt line" 
    (interactive) 
    (let ((line (buffer-substring-no-properties (point-at-bol) (point-at-eol)))) 
    (if (string-match eshell-prompt-regexp line) 
     (if (> (length (substring line (match-end 0))) 0) 
      (bm-bookmark-add)))) 
    (eshell-send-input use-region queue-p no-newline))