के साथ स्वत: पूर्ण स्क्रिप्ट बनाना मैं मछली के साथ उपयोग के लिए एक स्वत: पूर्ण स्क्रिप्ट बनाने की कोशिश कर रहा हूं; मैं एक ही कार्यक्रम के लिए एक बैश समापन स्क्रिप्ट पर पोर्टिंग कर रहा हूँ।उप आदेश
कार्यक्रम तीन शीर्ष स्तर आदेशों है, कहते हैं कि foo
, bar
, और baz
और प्रत्येक कुछ subcommands है, बस a
b
और c
प्रत्येक के लिए कहते हैं।
क्या मैं दिखाई दे रही है शीर्ष स्तर आदेशों स्वत: पूर्ण ठीक है, यदि ऐसा है तो मैं टाइप f
मैं स्वत: पूर्ण करने के लिए foo
हो रही है, लेकिन फिर अगर मैं फिर से टैब मारा देखने के लिए यह क्या उप आदेशों कर रहे हैं, मैं foo
देखना है , bar
, baz
, a
, b
, c
और यह सिर्फ a
, b
होना चाहिए, c
मैं एक संदर्भ के रूप में उपयोग कर रहा हूँ git completion script यह बाद से सही काम करने के लिए लगता है। मैं भी संदर्भ के रूप में git flow script का उपयोग कर रहा हूं।
मुझे लगता है कि इस Git पूरा होने लिपि में द्वारा नियंत्रित किया जाता:
function __fish_git_needs_command
set cmd (commandline -opc)
if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]
return 0
end
return 1
end
कौन समझ में आता है, आप केवल पूरा होने अगर वहाँ आदेश के लिए एक एकल आर्ग, स्क्रिप्ट ही है उपयोग कर सकते हैं; यदि आप शीर्ष स्तर के आदेशों पर कॉल करने के लिए कॉल के लिए स्थिति (-n
) के रूप में उपयोग करते हैं, तो मुझे लगता है कि सही बात होगी।
हालांकि, जो मैं देख रहा हूं वह मामला नहीं है। मैंने उस स्क्रिप्ट को मेरी लिपि में कॉपी किया, उचित रूप से "गिट" बदल दिया, और कोई भाग्य नहीं था।
function __fish_prog_using_command
set cmd (commandline -opc)
set subcommands $argv
if [ (count $cmd) = (math (count $subcommands) + 1) ]
for i in (seq (count $subcommands))
if not test $subcommands[$i] = $cmd[(math $i + 1)]
return 1
end
end
return 0
end
return 1
end
function __fish_git_needs_command
set cmd (commandline -opc)
set startsWith (echo "$cmd[1]" | grep -E 'prog$')
# there's got to be a better way to do this regex, fish newb alert
if [ (count $cmd) = 1 ]
# wtf, this is always false? it this the problem?
if [ $cmd[1] -eq $cmd[1] ]
return 1
end
end
return 0
end
complete --no-files -c prog -a bar -n "__fish_git_needs_command"
complete --no-files -c prog -a foo -n "__fish_git_needs_command"
complete --no-files -c prog -a a -n "__fish_prog_using_command foo"
complete --no-files -c prog -a b -n "__fish_prog_using_command foo"
complete --no-files -c prog -a c -n "__fish_prog_using_command foo"
complete --no-files -c prog -a baz -n "__fish_git_needs_command"
यह कैसे काम करने के लिए पर कोई सुझाव बहुत सराहना की है:
कांट छांट स्क्रिप्ट इस प्रकार है।
हाँ, यह काम किया, धन्यवाद। – Michael
महान उदाहरण @terje और @Michael के लिए धन्यवाद! 'Full -f -c prog -n' सूचीबद्ध करने के बजाय __fish_prog_using_command foo '-aa',' full -f -c prog -n '__fish_prog_using_command foo' -ab', और 'full -f -c prog -n' __fish_prog_using_command foo अलग-अलग लाइनों पर '-एसी', मेरा मानना है कि आप एक अंतरिक्ष के साथ तीनों पूर्णताओं को सीमित कर सकते हैं: 'full -f -c prog -n' __fish_prog_using_command foo '-a "abc" ' – yegeniy