package Ġcom . github . aj alt . cli kt . completion Ċ Ċ import Ġcom . github . aj alt . cli kt . core . Print Completion Message Ċ import Ġcom . github . aj alt . cli kt . core . sub commands Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . argument Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . types . file Ċ import Ġcom . github . aj alt . cli kt . testing . Test Command Ċ import Ġcom . github . aj alt . cli kt . testing . parse Ċ import Ġio . kot est . assertions . throw ables . should Throw Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . contrib . java . lang . system . Environment Variables Ċ import Ġkotlin . test . Test Ċ Ċ @ Suppress (" unused ") Ċ class ĠCompletion Test Ġ{ ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġenv Ġ= ĠEnvironment Variables () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` custom Ġcomplet ions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġenv . set (" TEST _ COMPLETE ", Ġ" true ") ĊĠĠĠĠĠĠĠ Ġclass ĠC Ġ: ĠTest Command ( auto Complete Env var Ġ= Ġ" TEST _ COMPLETE ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġby Ġoption ( completion Candidates Ġ= ĠCompletion Candidates . Custom . from Stdout (" echo Ġfoo Ġbar ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġby Ġargument ( completion Candidates Ġ= ĠCompletion Candidates . Custom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORD S =${ '$ '} ( echo Ġz zz Ġxxx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ"${ '$ '} WORDS " Ġ-- Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} COMP _ C WORD ]} ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshould Throw < Print Completion Message > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC (). parse ("") ĊĠĠĠĠĠĠĠ Ġ}. message ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠ Ġ| #!/ usr / bin / env Ġbash ĊĠĠĠĠĠĠĠ Ġ| # ĠCommand Ġcompletion Ġfor Ġc ĊĠĠĠĠĠĠĠ Ġ| # ĠGenerated Ġby ĠCli kt ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| __ skip _ opt _ eq () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġthis Ġtakes Ġadvantage Ġof Ġthe Ġfact Ġthat Ġbash Ġfunctions Ġcan Ġwrite Ġto Ġlocal ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġvariables Ġin Ġtheir Ġcall ers ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} i ]}" Ġ== Ġ'=' Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| __ c _ complete ___ o () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ"${ '$ '} ( echo Ġfoo Ġbar )" Ġ-- Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} COMP _ C WORD ]} ")) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| __ c _ complete _ A () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠWORD S =${ '$ '} ( echo Ġz zz Ġxxx ) ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ"${ '$ '} WORDS " Ġ-- Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} COMP _ C WORD ]} ")) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi = 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =(' A ') ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ '$ ' }{ i } Ġ- lt Ġ${ '$ '} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ '$ ' }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- o ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ[[ Ġ${ '$ ' }{ i } Ġ- gt ĠCOMP _ C WORD Ġ]] Ġ&& Ġin _ param =' -- o ' Ġ|| Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ '$ ' }{ COMP _ WORDS [ ${ '$ '} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ '$ ' }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ '$ ' }{ COMP _ WORDS [ ${ '$ '} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ '$ ' }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ'-- o Ġ- h Ġ-- help ' Ġ-- Ġ"${ '$ ' }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ '$ ' }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ '$ ' }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ '$ ' }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ '$ ' }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ '$ ' }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- o ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- F Ġ__ c _ complete ___ o Ġ 2 >/ dev / null )) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠA ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- F Ġ__ c _ complete _ A Ġ 2 >/ dev / null )) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| complete Ġ- F Ġ_ c Ġc ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sub commands Ġwith Ġmulti - word Ġnames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġenv . set (" TEST _ COMPLETE ", Ġ" true ") ĊĠĠĠĠĠĠĠ Ġclass ĠC Ġ: ĠTest Command ( auto Complete Env var Ġ= Ġ" TEST _ COMPLETE ") ĊĠĠĠĠĠĠĠ Ġclass ĠSub Ġ: ĠTest Command () ĊĠĠĠĠĠĠĠ Ġclass ĠSub Command Ġ: ĠTest Command ( name Ġ= Ġ" sub - command ") ĊĠĠĠĠĠĠĠ Ġclass ĠLong Sub Command Ġ: ĠTest Command ( name Ġ= Ġ" long - sub - command ") ĊĊĠĠĠĠĠĠĠ Ġshould Throw < Print Completion Message > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC (). sub commands ( Sub (), ĠSub Command (). sub commands ( Long Sub Command ())). parse ("") ĊĠĠĠĠĠĠĠ Ġ}. message ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠ Ġ| #!/ usr / bin / env Ġbash ĊĠĠĠĠĠĠĠ Ġ| # ĠCommand Ġcompletion Ġfor Ġc ĊĠĠĠĠĠĠĠ Ġ| # ĠGenerated Ġby ĠCli kt ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| __ skip _ opt _ eq () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġthis Ġtakes Ġadvantage Ġof Ġthe Ġfact Ġthat Ġbash Ġfunctions Ġcan Ġwrite Ġto Ġlocal ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġvariables Ġin Ġtheir Ġcall ers ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġ== Ġ'=' Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi = 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =() ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ " $" }{ i } Ġ- lt Ġ${ "$ "} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ " $" }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġsub ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ_ c _ sub Ġ${ "$ "} (( Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġsub - command ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ_ c _ sub _ command Ġ${ "$ "} (( Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ " $" }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ " $" }{ COMP _ WORDS [ ${ "$ "} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ " $" }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ'- h Ġ-- help ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ " $" }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ' sub Ġsub - command ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c _ sub () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi =${ "$ "} 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =() ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ " $" }{ i } Ġ- lt Ġ${ "$ "} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ " $" }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ " $" }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ " $" }{ COMP _ WORDS [ ${ "$ "} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ " $" }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ'- h Ġ-- help ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ " $" }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c _ sub _ command () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi =${ "$ "} 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =() ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ " $" }{ i } Ġ- lt Ġ${ "$ "} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ " $" }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġlong - sub - command ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ_ c _ sub _ command _ long _ sub _ command Ġ${ "$ "} (( Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ " $" }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ " $" }{ COMP _ WORDS [ ${ "$ "} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ " $" }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ'- h Ġ-- help ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ " $" }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ' long - sub - command ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c _ sub _ command _ long _ sub _ command () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi =${ "$ "} 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =() ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ " $" }{ i } Ġ- lt Ġ${ "$ "} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ " $" }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ " $" }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ " $" }{ COMP _ WORDS [ ${ "$ "} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ " $" }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {" $ "} ( comp gen Ġ- W Ġ'- h Ġ-- help ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ " $" }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| complete Ġ- F Ġ_ c Ġc ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` explicit Ġcompletion Ġcandidates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġenv . set (" TEST _ COMPLETE ", Ġ" true ") ĊĠĠĠĠĠĠĠ Ġclass ĠC Ġ: ĠTest Command ( auto Complete Env var Ġ= Ġ" TEST _ COMPLETE ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġby Ġoption ( completion Candidates Ġ= ĠCompletion Candidates . Fixed (" foo ", Ġ" bar ")). file () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġby Ġargument ( completion Candidates Ġ= ĠCompletion Candidates . Fixed (" baz ", Ġ" qu x ")). file () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould Throw < Print Completion Message > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC (). parse ("") ĊĠĠĠĠĠĠĠ Ġ}. message ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠ Ġ| #!/ usr / bin / env Ġbash ĊĠĠĠĠĠĠĠ Ġ| # ĠCommand Ġcompletion Ġfor Ġc ĊĠĠĠĠĠĠĠ Ġ| # ĠGenerated Ġby ĠCli kt ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| __ skip _ opt _ eq () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġthis Ġtakes Ġadvantage Ġof Ġthe Ġfact Ġthat Ġbash Ġfunctions Ġcan Ġwrite Ġto Ġlocal ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ# Ġvariables Ġin Ġtheir Ġcall ers ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġ== Ġ'=' Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ|_ c () Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġi = 1 ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġfixed _ arg _ names =(' A ') ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġvar arg _ name ='' ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġcan _ parse _ options = 1 ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġwhile Ġ[[ Ġ${ " $" }{ i } Ġ- lt Ġ${ "$ "} COMP _ C WORD Ġ]]; Ġdo ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ[[ Ġ${ " $" }{ can _ parse _ options } Ġ- eq Ġ 1 Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcan _ parse _ options = 0 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)); ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ-- o ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ[[ Ġ${ " $" }{ i } Ġ- gt ĠCOMP _ C WORD Ġ]] Ġ&& Ġin _ param =' -- o ' Ġ|| Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ- h |-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ__ skip _ opt _ eq ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġin _ param ='' ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcase Ġ"${ " $" }{ COMP _ WORDS [ ${ "$ "} i ]}" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ*) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ(( Ġi Ġ= Ġi Ġ+ Ġ 1 Ġ)) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ# Ġdrop Ġthe Ġhead Ġof Ġthe Ġarray ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġfixed _ arg _ names = ("${ " $" }{ fixed _ arg _ names [@ ]: 1 }") ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġdone ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġlocal Ġword ="${ " $" }{ COMP _ WORDS [ ${ "$ "} COMP _ C WORD ]}" ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġif Ġ[[ Ġ"${ " $" }{ word }" Ġ=~ Ġ^ [- ] Ġ]]; Ġthen ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ'-- o Ġ- h Ġ-- help ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġfi ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# ĠWe 're Ġeither Ġat Ġan Ġoption 's Ġvalue , Ġor Ġthe Ġfirst Ġremaining Ġfixed Ġsize ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ# Ġarg , Ġor Ġthe Ġvar arg Ġif Ġthere Ġare Ġno Ġfixed Ġargs Ġleft ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ fixed _ arg _ names [ 0 ]} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ[[ Ġ- z Ġ"${ " $" }{ in _ param }" Ġ]] Ġ&& Ġin _ param =${ " $" }{ var arg _ name } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġcase Ġ"${ " $" }{ in _ param }" Ġin ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- o ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ' foo Ġbar ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ-- help ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠA ) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠCOMP REPLY = ($ {' $ '} ( comp gen Ġ- W Ġ' baz Ġqu x ' Ġ-- Ġ"${ " $" }{ word } ")) ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ;; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġes ac ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| complete Ġ- F Ġ_ c Ġc ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} Ċ Ċ } Ċ