2013-02-14 40 views
7

मैंने देखा है कि कुछ प्रोग्राम (उदा। एचजी) उपयोगकर्ता को कमांड के विशिष्ट हिस्सों को टैब-पूर्ण करने की अनुमति देते हैं। उदाहरण के लिए, अगर, एक एचजी भंडार में निर्देशिका काम कर रहा है, मैं टाइप करें:मैं अपना प्रोग्राम टैब पूर्ण करने का उपयोग कैसे कर सकता हूं?

hg qpush --move b8<TAB>

यह मेरी पैच कतार में किसी भी तेज पैच है कि "B8" के साथ शुरू के साथ आदेश को पूरा करने की कोशिश करेंगे।

मैं जो करना चाहता हूं वह मेरे कार्यक्रम में इस व्यवहार का अनुकरण है। यही है, मेरे पास कमांड की एक श्रृंखला है जो किसी निश्चित निर्देशिका में फ़ाइलों पर निर्भर करती है, और मैं खोल में टैब पूर्णता प्रदान करने में सक्षम होना चाहता हूं। क्या उबंटू लिनक्स पर इसे उपलब्ध कराने के लिए कोई एपीआई है (अधिमानतः पायथन का उपयोग करना, जैसा कि मेरी लिपि में लिखा गया है)?

+1

हो सकता है कि कुछ इस तरह: http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson

+2

@mgilson प्रतिक्रिया से स्पष्ट है, खोल के लिए अपने कार्यक्रम, अन्य नहीं के लिए स्वतः पूर्ण प्रदान करने के लिए कॉन्फ़िगर करना होगा पूर्ण करवाना। – ziu

उत्तर

3

यह readline मॉड्यूल के लिए है।

असल में, रीडलाइन एक सामान्य सी लाइब्रेरी है इसलिए इसमें कई भाषाओं में बाइंडिंग है। और मैं कह सकता हूं, मुझे इसके साथ बहुत मज़ा आया है।

बी का आनंद लें)

+5

मुझे लगता है कि पूछताछ करना चाहता है कि * शैल * को अपने प्रोग्राम के लिए स्वत: पूर्ण उप-सामग्रियों को कैसे प्राप्त करें, न कि प्रोग्राम के भीतर स्वत: पूर्णता का उपयोग कैसे करें। –

+1

देर से उत्तर के लिए खेद है, लेकिन असल में, मैं पायथन में एक प्रोग्राम लिख रहा हूं कि मैं स्वचालित टैब पूर्ण होने के साथ _ship_ करना चाहता हूं (इसे समर्थन देने वाले गोले के लिए)। – jwir3

+0

@ jwir3 फिर 'आयात रीडलाइन; इनपुट() ' – cat

1

आप zsh खोल करके देख सकते हैं, यह आवेदनों की टन के लिए समर्थन के साथ एक महान पूरा होने प्रणाली है।

समापन प्रणाली शैल भाषा के साथ लिखी जाती है, लेकिन यदि आप वास्तव में पाइथन का उपयोग करना चाहते हैं तो आप दुभाषिया को अपने पूर्णता समारोह के अंदर से चला सकते हैं। नीचे की तरफ यह है कि यदि आप अपने सॉफ्टवेयर के लिए पूरा करना चाहते हैं, तो आपको कुछ पढ़ने (user manual और manpage उदाहरण के लिए) करने की आवश्यकता होगी।

5

ऐसा करने के लिए, आपको अपने खोल के लिए टैब-समापन मॉड्यूल लिखना होगा। अधिकांश लिनक्स वितरण में डिफ़ॉल्ट खोल bash है, इसलिए आपको एक पूर्णता स्क्रिप्ट (आमतौर पर एक शेल स्क्रिप्ट) लिखनी चाहिए। एक बार अपनी लिपि लिखने के बाद, इसे /etc/bash_completion.d/ पर जोड़ें। यह आपके प्रोग्राम (पैकेज में शामिल लिनक्स वितरण के लिए) के साथ वितरित किया जाना चाहिए।

डेबियन प्रशासन में a guide for writing your completion scripts है। मैक पर पूरा करने के लिए, https://trac.macports.org/wiki/howto/bash-completion देखें।

पूर्णता फाइलों के उदाहरणों के लिए, bash-completion project from Debian (on Github) पर एक नज़र डालें। https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial भी देखें।

यदि आप zsh, hack.augusto linked to the documentation for writing completions का उपयोग करते हैं।

1

पायथन पुस्तकालय में 'cmd' मॉड्यूल के स्रोत पर नज़र डालें। यह कमांड पूरा करने का समर्थन करता है।