2012-02-09 6 views
9

मैं एक कस्टम erlang प्रतिकृति के साथ rlwrap का उपयोग करना चाहता हूँ।क्या एक लिपटे कमांड के अपने टैब पूर्ण होने का उपयोग कर सकते हैं?

यह पूरी तरह से काम करता है अगर मैं इसे "rlwrap -a myrepl" के रूप में चलाता हूं।

समस्या यह है कि myrepl ने टैब पूर्ण होने का निर्माण किया है जो rlwrap द्वारा trampled हो जाता है।

मैं टैब कुंजी

+0

myrepl क्या है? क्या यह एक erlang सवाल है या एक perl/rlwrap सवाल है? – Isac

+0

मेरे लिए rlwrap का उपयोग करने के लाभ Erlang स्वत: पूर्ण के मूल्य से अधिक हैं। मैं उन्हें एक साथ काम नहीं कर सका, इसलिए मैं "rlwrap erl -oldshell" का उपयोग करता हूं। – alavrik

उत्तर

18

आप उपयोग नहीं कर सकते rlwrap की लाइन संपादन/इतिहास और एक ही समय में अपने repl के टैब पूरा होने के जारी करने के लिए rlwrap बनाना चाहते हैं।

rlwrap कमांड के लिए लाइन संपादन, इतिहास और (बहुत सरल) पूर्णता प्रदान करता है जिसमें नहीं है। एक आदेश जिसमें टीएबी पूर्ण होने के रूप में कुछ फैंसी है, उसे rlwrap की लाइन लाइन संपादन करने की आवश्यकता नहीं है, है ना?

-a (--always-readline) विकल्प अपने आदेश के उस के लिए स्थानापन्न rlwrap की लाइन संपादन व्यवहार करने के लिए एक नहीं बल्कि कच्चे तरीका है। यह मुख्य रूप से उन आदेशों के लिए है जिनके बिना एक बहुत ही सरल रेखा संपादक है, उदाहरण के बिना आदेश इतिहास

आप अपने आदेश के (जैसे टैब पूरा होने) क्योंकि आप rlwrap के fanciness पसंद करते हैं (लगातार इतिहास, या रंग संकेतों की तरह) -a विकल्प का उपयोग करने, आगे बढ़ो, चाहते हैं, लेकिन यह असंभव है कुछ fanciness लेने के लिए तो एक और दूसरे में से कुछ रखें।

यह (छोटे) मूल्य कार्यक्रम (और उनके उपयोगकर्ताओं) को readline लाइब्रेरी और उसके साथ आने वाले जीपीएल लाइसेंस से बचने के लिए भुगतान करना होगा।

हंस (rlwrap लेखक)


संपादित करें (अप्रैल 2017):

कई मामलों में यह पूरा होने बहाल करने के लिए एक filter उपयोग करने के लिए संभव नहीं होगा। इसके उदाहरण के लिए A node shell based on readline देखें।

+3

एरलांग खोल में टैब पूरा हो गया है, लेकिन कई अन्य क्षेत्रों में कमी है। सत्रों, सीमित लाइन संपादन क्षमताओं आदि के बीच कोई इतिहास नहीं –

+0

@ हंस क्या आपको कोई कारण दिखाई देता है, अगर मैं rlwrap के स्रोत को बदलता हूं और विशेष कुंजी से टैब को हटा देता हूं या शायद इसे किसी अन्य कुंजी पर दोबारा कर दूं, तो मुझे यह काम नहीं मिलेगा? कोशिश करने का समय नहीं है, लेकिन मैं लाभ उठा रहा हूं कि आपने मेरी पोस्ट का जवाब दिया। –

+6

@ गेब्रियल: "विशेष कुंजी" से टैब को हटाने के लिए पर्याप्त नहीं है, यह केवल आपको एक मृत टैब कुंजी देगा। वास्तव में क्या करने की आवश्यकता है कि टीएबी अंतर्निहित कमांड के इनपुट बफर को साफ़ करता है, वर्तमान रीडलाइन इनपुट बफर को पास करता है, उसके कर्सर को स्थान देता है, फिर टैब को पास करता है, परिणामस्वरूप आउटपुट (कर्सर आंदोलन कमांड सहित) को पार करता है, और अंत में रीडलाइन इनपुट बफर भरता है और तदनुसार rl_point सेट करता है। इन सभी चरणों में मुश्किल और त्रुटि-प्रवण हैं; विशेष रूप से आपके कमांड के आउटपुट के विश्लेषण को वर्चुअल टर्मिनल एमुलेटर रखने के लिए rlwrap की आवश्यकता होगी। –

0

Rlwrap प्यारा है। लेकिन एरलांग में, यह केवल एआरएल के टैब पूर्ण होने के दौरान लगातार इतिहास प्रदान करता है।

मौलिक मुद्दा एरलांग का युग आरईपीएल पुराना और बस्टेड है, और सामान्य * निक्स सम्मेलनों का पालन नहीं करता है। इसके अलावा, वे यादृच्छिक, गड़बड़ी sysadmins के डर के कारण इसे ठीक करने से इनकार करते हैं जो किसी भी बदलाव को स्वीकार नहीं कर सकते हैं। आरएलआरएपी "डक्ट-टेप" हैक की कोई मात्रा खराब यूएक्स आरईपीएल को ठीक नहीं कर सकती है।

यह pry/ipython/etc जैसे स्क्रैच से एक आरईपीएल लिखने के लिए बेहतर होगा (हालांकि काफी अधिक काम)। यह कॉन्फ़िगर करने योग्य रंग, टैब पूर्णता, लगातार इतिहास, पेजिंग, सीएलआई पर्यवेक्षक, प्लगइन्स इत्यादि

आरएलवाप आदिम गोले के साथ कार्यक्रमों पर चमकता है।

+0

मुझे लगता है कि आप "यादृच्छिक, grouchy sysadmins" पर बहुत कठोर हैं, और उत्कृष्ट 'readline' पुस्तकालय का उपयोग करने में कठिनाई का अधिक महत्व। उन पुराने और बस्टेड आरईपीएल का मुख्य कारण 'रीडलाइन का जीपीएल लाइसेंस है: 'रीडलाइन' का उपयोग करना मतलब है कि आपका प्रोग्राम जीपीएल होना चाहिए। एक चौथाई सदी से पहले [ईमेल एक्सचेंज] (http://clisp.cvs.sourceforge.net/viewvc/clisp/clisp/doc/Why-CLISP-is-under-GPL) देखें - शायद पहले मामलों में से एक जीपीएल प्रवर्तन, जिसमें 'रीडलाइन' ने एक महत्वपूर्ण भूमिका निभाई। –

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

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