#compdef brew-cask #autoload # Zsh Autocompletion script for Homebrew Cask # https://github.com/homebrew/brew # Authors: # Patrick Stadler (https://github.com/pstadler) # Josh McKinney (https://github.com/joshka) # only display the main commands (but enable completing aliases like 'ls') zstyle -T ':completion:*:*:*:brew-cask:*' tag-order && \ zstyle ':completion:*:*:*:brew-cask:*' tag-order 'commands' __brew_cask() { [ -d "$(brew --repo homebrew/cask)" ] && brew cask $@ } __brew_all_casks() { local -a list local expl list=( $(brew search --casks) ) _wanted list expl 'all casks' compadd -a list } __brew_installed_casks() { local -a list local expl list=( $(__brew_cask list|sed 's/(!)//') ) _wanted list expl 'installed casks' compadd -a list } __brew_cask_commands() { local -a commands commands=( 'audit:verifies installability of Casks' 'cat:dump raw source of the given Cask to the standard output' 'create:creates the given Cask and opens it in an editor' 'doctor:checks for configuration issues' 'edit:edits the given Cask' 'fetch:downloads remote application files to local cache' 'home:opens the homepage of the given Cask' 'info:displays information about the given Cask' 'install:installs the given Cask' 'list:with no args, lists installed Casks; given installed Casks, lists staged files' 'outdated:list the outdated installed Casks' 'reinstall:reinstalls the given Cask' 'style:checks Cask style using RuboCop' 'uninstall:uninstalls the given Cask' 'upgrade:upgrade installed Casks with newer versions' 'zap:zaps all files associated with the given Cask' ) _describe -t commands "brew cask command" commands } __brew_cask_aliases() { local -a aliases aliases=( 'dr' 'homepage' 'abv' 'ls' '-S' 'rm' 'remove' ) _describe -t commands "brew cask command aliases" aliases } __brew_cask_command() { local command="$1" local completion_func="_brew_cask_${command//-/_}" declare -f "$completion_func" >/dev/null && "$completion_func" && return } _brew_cask_abv() { _brew_cask_info } _brew_cask_audit() { __brew_all_casks } _brew_cask_cat() { __brew_all_casks } _brew_cask_cat() { __brew_all_casks } _brew_cask_create() { _arguments '*::token:' } _brew_cask_edit() { __brew_all_casks } _brew_cask_fetch() { _arguments : \ '--force:force re-download even if the files are already cached' \ '*::token:__brew_all_casks' } _brew_cask_home() { __brew_all_casks } _brew_cask_homepage() { __brew_cask_home } _brew_cask_info() { __brew_all_casks } _brew_cask_install() { _arguments : \ '--force:re-install even if the Cask appears to be already present' \ '--skip-cask-deps:skip any Cask dependencies' \ '--require-sha:abort installation if the Cask does not have a checksum defined' \ '*::token:__brew_all_casks' } _brew_cask_list() { _arguments : \ '-1[format output in a single column]' \ '-l[format as detailed list]' \ '*::token:__brew_installed_casks' } _brew_cask_ls() { _brew_cask_list } _brew_cask_remove() { _brew_cask_uninstall } _brew_cask_rm() { _brew_cask_uninstall } _brew_cask_style() { _arguments : \ '--fix:auto-correct any style errors if possible' \ '*::token:__brew_all_casks' } _brew_cask_uninstall() { _arguments : \ '--force:uninstall even if the Cask does not appear to be present' \ '*::token:__brew_installed_casks' } _brew_cask_upgrade() { _arguments : \ '--force:upgrade even if Cask is not present, and --force the install' \ '--greedy:also upgrade Casks with auto_updates or version \:latest' \ '*::token:__brew_installed_casks' } _brew_cask_zap() { __brew_all_casks } _brew_cask() { local curcontext="$curcontext" state state_descr line typeset -A opt_args _arguments -C : \ '--verbose:Give additional feedback during installation.' \ '--appdir=-:Target location for Applications. The default value is /Applications:' \ '--colorpickerdir=-:Target location for Color Pickers. The default value is ~/Library/ColorPickers.' \ '--prefpanedir=-:Target location for Preference Panes. The default value is ~/Library/PreferencePanes.' \ '--qlplugindir=-:Target location for QuickLook Plugins. The default value is ~/Library/QuickLook.' \ '--dictionarydir=-:Target location for Dictionaries. The default value is ~/Library/Dictionaries.' \ '--fontdir=-:Target location for Fonts. The default value is ~/Library/Fonts.' \ '--servicedir=-:Target location for Services. The default value is ~/Library/Services.' \ '--input_methoddir=-:Target location for Input Methods. The default value is ~/Library/Input Methods.' \ '--internet_plugindir=-:Target location for Internet Plugins. The default value is ~/Library/Internet Plug-Ins.' \ '--audio_unit_plugindir=-:Target location for Audio Unit Plugins. The default value is ~/Library/Audio/Plug-Ins/Components.' \ '--vst_plugindir=-:Target location for VST Plugins. The default value is ~/Library/Audio/Plug-Ins/VST.' \ '--vst3_plugindir=-:Target location for VST3 Plugins. The default value is ~/Library/Audio/Plug-Ins/VST3.' \ '--screen_saverdir=-:Target location for Screen Savers. The default value is ~/Library/Screen Savers.' \ '--no-binaries:Do not link "helper" executables to /usr/local/bin.' \ '--debug:Output debugging information of use to Cask authors and developers.' \ ':command:->command' \ '*::options:->options' case "$state" in (command) _alternative -C 'brew-cask' \ 'aliases:alias:__brew_cask_aliases' \ 'commands:command:__brew_cask_commands' ;; (options) __brew_cask_command "$line[1]" ;; esac } _brew_cask "$@"