github.com/scaleway/scaleway-cli@v1.11.1/contrib/completion/zsh/_scw (about) 1 #compdef scw 2 # 3 # zsh completion for scw (http://scaleway.com) 4 # 5 # Inspired by https://github.com/felixr/docker-zsh-completion 6 7 __scw_get_servers() { 8 local expl 9 declare -a servers 10 servers=(${(f)"$(_call_program commands scw _completion servers-names)"}) 11 _describe -t servers "servers" servers 12 } 13 14 __scw_stoppedservers() { 15 __scw_get_servers 16 } 17 18 __scw_runningservers() { 19 __scw_get_servers 20 } 21 22 __scw_servers () { 23 __scw_get_servers 24 } 25 26 __scw_images () { 27 local expl 28 declare -a images 29 images=(${(f)"$(_call_program commands scw _completion images-names)"}) 30 _describe -t images "images" images 31 } 32 33 __scw_images_and_snapshots () { 34 __scw_images 35 __scw_snapshots 36 } 37 38 __scw_snapshots () { 39 local expl 40 declare -a snapshots 41 snapshots=(${(f)"$(_call_program commands scw _completion --prefix snapshots-names)"}) 42 _describe -t snapshots "snapshots" snapshots 43 } 44 45 __scw_bootscripts () { 46 local expl 47 declare -a bootscripts 48 bootscripts=(${(f)"$(_call_program commands scw _completion bootscripts-names)"}) 49 _describe -t bootscripts "bootscripts" bootscripts 50 } 51 52 __scw_tags() { 53 __scw_images 54 } 55 56 __scw_repositories_with_tags() { 57 __scw_images 58 } 59 60 __scw_search() { 61 # declare -a scwsearch 62 local cache_policy 63 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 64 if [[ -z "$cache_policy" ]]; then 65 zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy 66 fi 67 68 local searchterm cachename 69 searchterm="${words[$CURRENT]%/}" 70 cachename=_scw-search-$searchterm 71 72 local expl 73 local -a result 74 if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \ 75 && ! _retrieve_cache ${cachename#_}; then 76 _message "Searching for ${searchterm}..." 77 result=(${${${(f)"$(_call_program commands scw search ${searchterm})"}%% *}[2,-1]}) 78 _store_cache ${cachename#_} result 79 fi 80 _wanted scwsearch expl 'available images' compadd -a result 81 } 82 83 __scw_caching_policy() 84 { 85 oldp=( "$1"(Nmh+1) ) # 1 hour 86 (( $#oldp )) 87 } 88 89 90 __scw_repositories () { 91 __scw_images 92 } 93 94 __scw_commands () { 95 # local -a _scw_subcommands 96 local cache_policy 97 98 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 99 if [[ -z "$cache_policy" ]]; then 100 zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy 101 fi 102 103 if ( [[ ${+_scw_subcommands} -eq 0 ]] || _cache_invalid scw_subcommands) \ 104 && ! _retrieve_cache scw_subcommands; 105 then 106 local -a lines 107 lines=(${(f)"$(_call_program commands scw 2>&1)"}) 108 _scw_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:}) 109 _scw_subcommands=($_scw_subcommands 'help:Show help for a command') 110 _store_cache scw_subcommands _scw_subcommands 111 fi 112 _describe -t scw-commands "scw command" _scw_subcommands 113 } 114 115 __scw_subcommand () { 116 local -a _command_args 117 case "$words[1]" in 118 (attach) 119 _arguments \ 120 '--no-stdin[Do not attach stdin]' \ 121 ':servers:__scw_runningservers' 122 ;; 123 (commit) 124 _arguments \ 125 {-v,--volume=0}'[Volume slot]:volume: ' \ 126 ':server:__scw_servers' \ 127 ':repository:__scw_repositories_with_tags' 128 ;; 129 (cp) 130 _arguments \ 131 ':server:->server' \ 132 ':hostpath:_files' 133 case $state in 134 (server) 135 if compset -P '*:'; then 136 _files 137 else 138 __scw_servers -qS ":" 139 fi 140 ;; 141 esac 142 ;; 143 (exec) 144 local state ret 145 _arguments \ 146 {-T,--timeout=0}'[Set timeout values to seconds]' \ 147 {-w,--wait}'[Wait for SSH to be ready]' \ 148 ':servers:__scw_runningservers' \ 149 '*::command:->anycommand' && ret=0 150 151 case $state in 152 (anycommand) 153 shift 1 words 154 (( CURRENT-- )) 155 _normal 156 ;; 157 esac 158 159 return ret 160 ;; 161 (history) 162 _arguments \ 163 '--no-trunc[Do not truncate output]' \ 164 {-q,--quiet}'[Only show numeric IDs]' \ 165 '*:images:__scw_images' 166 ;; 167 (images) 168 _arguments \ 169 {-a,--all}'[Show all images]' \ 170 '--no-trunc[Do not truncate output]' \ 171 {-q,--quiet}'[Only show numeric IDs]' \ 172 ':repository:__scw_repositories' 173 ;; 174 (info) 175 ;; 176 (inspect) 177 _arguments \ 178 {-f,--format=-}'[Format the output using the given go template]:template: ' \ 179 '*:servers:__scw_servers' 180 ;; 181 (kill) 182 _arguments \ 183 '*:servers:__scw_runningservers' 184 ;; 185 (login) 186 _arguments \ 187 {-o,--organization=-}'[Organization]:organization: ' \ 188 {-t,--token=-}'[Token]:token: ' \ 189 ':server: ' 190 ;; 191 (logout) 192 _arguments \ 193 ':server: ' 194 ;; 195 (logs) 196 _arguments \ 197 '*:servers:__scw_servers' 198 ;; 199 (port) 200 _arguments \ 201 '1:servers:__scw_runningservers' \ 202 '2:port:_ports' 203 ;; 204 (start) 205 _arguments \ 206 {-T,--timeout=0}'[Set timeout values to seconds]' \ 207 {-w,--wait}'[Wait for SSH to be ready]' \ 208 '*:servers:__scw_stoppedservers' 209 ;; 210 (rm) 211 _arguments \ 212 '*:servers:__scw_stoppedservers' 213 ;; 214 (rmi) 215 _arguments \ 216 '*:images:__scw_images' 217 ;; 218 (restart) 219 _arguments \ 220 '*:servers:__scw_runningservers' 221 ;; 222 (stop) 223 _arguments \ 224 {-t,--terminate}'[Stop and trash a server with its volumes]' \ 225 {-w,--wait}'[Synchronous stop. Wait for server to be stopped]' \ 226 '*:servers:__scw_runningservers' 227 ;; 228 (top) 229 _arguments \ 230 '1:servers:__scw_runningservers' \ 231 '(-)*:: :->ps-arguments' 232 case $state in 233 (ps-arguments) 234 _ps 235 ;; 236 esac 237 ;; 238 (ps) 239 _arguments \ 240 {-a,--all}'[Show all servers. Only running servers are shown by default]' \ 241 {-l,--latest}'[Show only the latest created server]' \ 242 '-n[Show n last created servers, include non-running one]:n:(1 5 10 25 50)' \ 243 '--no-trunc[Do not truncate output]' \ 244 {-q,--quiet}'[Only show numeric IDs]' 245 ;; 246 (tag) 247 _arguments \ 248 {-f,--force}'[force]'\ 249 ':image:__scw_images'\ 250 ':repository:__scw_repositories_with_tags' 251 ;; 252 (create|run) 253 _arguments \ 254 {-a,--attach}'[Attach to stdin, stdout or stderr]' \ 255 '*'{-e,--environment=-}'[Set environment variables]:environment variable: ' \ 256 '--name=-[Server name]:name: ' \ 257 '--bootscript=-[Assign a bootscript]:bootscript:__scw_bootscripts ' \ 258 '*-v[Bind mount a volume]:volume: '\ 259 '(-):images:__scw_images_and_snapshots' \ 260 '(-):command: _command_names -e' \ 261 '*::arguments: _normal' 262 263 case $state in 264 (link) 265 if compset -P '*:'; then 266 _wanted alias expl 'Alias' compadd -E "" 267 else 268 __scw_runningservers -qS ":" 269 fi 270 ;; 271 esac 272 ;; 273 (rename) 274 _arguments \ 275 ':old name:__scw_servers' \ 276 ':new name: ' 277 ;; 278 (search) 279 _arguments \ 280 '--no-trunc[Do not truncate output]' \ 281 ':term: ' 282 ;; 283 (wait) 284 _arguments '*:servers:__scw_runningservers' 285 ;; 286 (help) 287 _arguments ':subcommand:__scw_commands' 288 ;; 289 (*) 290 _message 'Unknown sub command' 291 esac 292 293 } 294 295 _scw () { 296 # Support for subservices, which allows for `compdef _scw scw-shell=_scw_servers`. 297 # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. 298 if [[ $service != scw ]]; then 299 _call_function - _$service 300 return 301 fi 302 303 local curcontext="$curcontext" state line 304 typeset -A opt_args 305 306 _arguments -C \ 307 '-H[tcp://host:port to bind/connect to]:socket: ' \ 308 '(-): :->command' \ 309 '(-)*:: :->option-or-argument' 310 311 if (( CURRENT == 1 )); then 312 313 fi 314 case $state in 315 (command) 316 __scw_commands 317 ;; 318 (option-or-argument) 319 curcontext=${curcontext%:*:*}:scw-$words[1]: 320 __scw_subcommand 321 ;; 322 esac 323 } 324 325 _scw "$@" 326 327 # Local Variables: 328 # mode: Shell-Script 329 # sh-indentation: 4 330 # indent-tabs-mode: nil 331 # sh-basic-offset: 4 332 # End: 333 # vim: ft=zsh sw=4 ts=4 et