summaryrefslogtreecommitdiff
path: root/plugins/brew-cask/brew-cask.plugin.zsh
blob: 91ce0f49816ca34fe566895fc5a8c217f2009224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Autocompletion for homebrew-cask.
#
# This script intercepts calls to the brew plugin and adds autocompletion
# for the cask subcommand.
#
# Author: https://github.com/pstadler

compdef _brew-cask brew

_brew-cask()
{
  local curcontext="$curcontext" state line
  typeset -A opt_args

  _arguments -C \
    ':command:->command' \
    ':subcmd:->subcmd' \
    '*::options:->options'

  case $state in
    (command)
      __call_original_brew
      cask_commands=(
        'cask:manage casks'
      )
      _describe -t commands 'brew cask command' cask_commands ;;

    (subcmd)
      case "$line[1]" in
        cask)
          if (( CURRENT == 3 )); then
            local -a subcommands
            subcommands=(
              "alfred:used to modify Alfred's scope to include the Caskroom"
              'audit:verifies installability of casks'
              'checklinks:checks for bad cask links'
              'cleanup:cleans up cached downloads'
              'create:creates a cask of the given name and opens it in an editor'
              'doctor:checks for configuration issues'
              'edit:edits the cask of the given name'
              'fetch:downloads Cask resources to local cache'
              'home:opens the homepage of the cask of the given name'
              'info:displays information about the cask of the given name'
              'install:installs the cask of the given name'
              'list:with no args, lists installed casks; given installed casks, lists installed files'
              'search:searches all known casks'
              'uninstall:uninstalls the cask of the given name'
              "update:a synonym for 'brew update'"
            )
            _describe -t commands "brew cask subcommand" subcommands
          fi ;;

        *)
          __call_original_brew ;;
      esac ;;

    (options)
      local -a casks installed_casks
      local expl
      case "$line[2]" in
        list|uninstall)
          __brew_installed_casks
          _wanted installed_casks expl 'installed casks' compadd -a installed_casks ;;
        audit|edit|home|info|install)
          __brew_all_casks
          _wanted casks expl 'all casks' compadd -a casks ;;
      esac ;;
  esac
}

__brew_all_casks() {
  casks=(`brew cask search`)
}

__brew_installed_casks() {
  installed_casks=(`brew cask list`)
}

__call_original_brew()
{
  local ret=1
  _call_function ret _brew
  compdef _brew-cask brew
}