from __future__ import annotations _ZSH = r'''# nanoshare zsh completion -- add to ~/.zshrc: eval "$(nanoshare completion zsh)" _nanoshare_files() { local id path name size label while IFS=$'\t' read -r id path name size; do label="${path:+$path/}$name" [[ -n $id ]] && printf '%s:%s\n' "$id" "$label" done < <(nanoshare list --format tsv 2>/dev/null) } _nanoshare() { local -a commands common_opts login_opts sync_opts watch_opts download_opts commands=(login upload list download sync watch completion) common_opts=(--config --url --token --refresh-token --token-url --source --timeout --node) login_opts=(--config --node --source --scope --callback-host --callback-port --login-timeout --timeout --no-browser) sync_opts=($common_opts --note --expires --delete --ignore) watch_opts=($sync_opts --interval) download_opts=($common_opts --output -o) if (( CURRENT == 2 )); then compadd -- $commands return fi case ${words[2]} in login) compadd -- $login_opts ;; upload) compadd -- $common_opts --name --note --expires _files ;; list) compadd -- $common_opts --format ;; download) if (( CURRENT == 3 )); then local -a remote_files remote_files=("${(@f)$(_nanoshare_files)}") _describe 'remote file' remote_files else compadd -- $download_opts _files fi ;; sync|watch) compadd -- ${(P)${:-${words[2]}_opts}} _files -/ ;; completion) (( CURRENT == 3 )) && compadd -- zsh bash ;; esac } compdef _nanoshare nanoshare ''' _BASH = r'''# nanoshare bash completion -- add to ~/.bashrc: eval "$(nanoshare completion bash)" _nanoshare_files() { nanoshare list --format tsv 2>/dev/null } _nanoshare() { local cur="${COMP_WORDS[COMP_CWORD]}" cmd="${COMP_WORDS[1]}" local commands="login upload list download sync watch completion" local common_opts="--config --url --token --refresh-token --token-url --source --timeout --node" local login_opts="--config --node --source --scope --callback-host --callback-port --login-timeout --timeout --no-browser" local sync_opts="$common_opts --note --expires --delete --ignore" local watch_opts="$sync_opts --interval" local download_opts="$common_opts --output -o" if [ "$COMP_CWORD" -eq 1 ]; then COMPREPLY=( $(compgen -W "$commands" -- "$cur") ) return fi case "$cmd" in login) COMPREPLY=( $(compgen -W "$login_opts" -- "$cur") ) ;; upload) COMPREPLY=( $(compgen -W "$common_opts --name --note --expires" -- "$cur") ) ;; list) COMPREPLY=( $(compgen -W "$common_opts --format" -- "$cur") ) ;; download) if [ "$COMP_CWORD" -eq 2 ]; then COMPREPLY=( $(compgen -W "$(_nanoshare_files | cut -f1)" -- "$cur") ) else COMPREPLY=( $(compgen -W "$download_opts" -- "$cur") ) fi ;; sync) COMPREPLY=( $(compgen -W "$sync_opts" -- "$cur") ) ;; watch) COMPREPLY=( $(compgen -W "$watch_opts" -- "$cur") ) ;; completion) [ "$COMP_CWORD" -eq 2 ] && COMPREPLY=( $(compgen -W "zsh bash" -- "$cur") ) ;; esac } complete -F _nanoshare nanoshare ''' def script(shell: str) -> str: if shell == 'zsh': return _ZSH if shell == 'bash': return _BASH raise ValueError(f'unsupported shell: {shell}')