2014-09-22 8 views
5

मैं अजगर में एक कमांड लाइन उपकरण लिख रहा हूं और इसे वितरित करने के लिए पीआईपी का उपयोग कर रहा हूं। उपकरण को टैब पूर्ण करने की अनुमति देने के लिए मैंने कुछ स्क्रिप्ट्स (बैश के लिए एक और zsh के लिए) लिखा है। जब कोई पाइप इंस्टॉल करता है तो इन स्क्रिप्ट को स्थापित करने के लिए पाइप प्राप्त करने का कोई तरीका है?पाल इंस्टॉल खोलने के साथ

उदाहरण के लिए: मेरे पास पूर्णता है। बैश फ़ाइल है। जब कोई

करता mypackage

स्थापित पिप यह भी बैश फ़ाइल स्रोत होगा।

मुझे पूरा यकीन है कि मैं lin.py और bash के लिए setup.py script में अपने डेटा_फाइल अनुभाग में स्क्रिप्ट डालकर ऐसा कर सकता हूं।

data_file=[ 
    ('/etc/bash_completion.d', ['bin/completion.bash']) 
], 

लेकिन मैं यह कैसे कर सकता हूं ताकि यह मंच और शैल स्वतंत्र हो? मुझे मैक/लिनक्स दोनों के लिए बैश और जेएसएच में काम करने की ज़रूरत है। यदि संभव हो, तो विंडोज़ का भी समर्थन करें।

क्या यह संभव है? और यदि हां, तो कैसे?

_foo_complete() { 
COMPREPLY=() 
local words=("${COMP_WORDS[@]}") 
local word="${COMP_WORDS[COMP_CWORD]}" 
words=("${words[@]:1}") 
local completions="$(foo completer --cmplt=\""${words[*]}"\")" 
COMPREPLY=($(compgen -W "$completions" -- "$word")) 
} 

complete -F _foo_complete foo 

मैं वर्तमान में सिर्फ source completion.bash

उत्तर

2

चल आप कई अलग अलग सवाल पूछ रहे हैं द्वारा स्थापित कर रहा हूँ:


मामले में यह मायने रखती है, यहाँ मेरी bash स्क्रिप्ट है।

सबसे पहले, कस्टम खोल-समापन को परिभाषित करने के लिए कोई क्रॉस-प्लेटफ़ॉर्म या क्रॉस-शेल समाधान नहीं है। आपके द्वारा पोस्ट किया गया एक बैश के लिए काम करता है, लेकिन tcsh में, उदाहरण के लिए, आप tcsh के complete कमांड का उपयोग करते हैं, जो बैश के मुकाबले अलग-अलग काम करता है।

दूसरा, pip install के समय उन समापन-परिभाषाओं वाली फ़ाइलों को सोर्स करना बहुत अच्छा नहीं होगा। पूर्णता उस सत्र में काम कर सकती है, लेकिन भविष्य में सत्रों (यानी शैल आमंत्रण) में भी प्रभावी होने के लिए आप जो चाहते हैं वह उनके लिए है। इसके लिए, bash के मामले में, जब भी शेल शुरू होता है, तो आपकी फ़ाइलों को प्रत्येक बार सोर्स किया जाना चाहिए (उदा। उपयोगकर्ता के .bashrc के भीतर से)।

यह माप है कि आपकी फाइलें "इंस्टॉल" करने का मतलब है कि उन्हें कहीं और रखना, और उपयोगकर्ताओं को सुझाव देना चाहिए कि उन्हें उन्हें अपनी संबंधित डॉट-आरसी फ़ाइल से स्रोत करना चाहिए। यहां तक ​​कि यदि आप कर सकते हैं, तो आपको इसे "बल" करने की कोशिश नहीं करनी चाहिए। अपने उपयोगकर्ताओं को अपनी डॉट-आरसी फ़ाइल में जोड़ने के लिए विकल्प दें यदि वे चाहते हैं।

सबसे अच्छा तरीका संभवत: आपके पैकेज में प्रति समर्थित खोल फ़ाइल को पूरा करने के लिए एक परिभाषा-परिभाषा फ़ाइल शामिल करना होगा, उदाहरण के लिए complete.bash, complete.tcsh, और भगवान जानता है कि विंडोज के लिए क्या है (क्षमा करें, मैं विंडोज़ उपयोगकर्ता नहीं हूं)।

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