summaryrefslogtreecommitdiff
path: root/plugins/brew/_brew
blob: 19cfb22cb1a584059d708ea2d7025965e3e2429f (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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#compdef brew
#autoload

# imported from https://github.com/Homebrew/homebrew/blob/29f73d2212c2b202fe25f69dcbf440d8391fa4c9/Library/Contributions/brew_zsh_completion.zsh

# Brew ZSH completion function
# Drop this somewhere in your $fpath (like /usr/share/zsh/site-functions)
# and rename it _brew
#
# altered from _fink

_brew_all_formulae() {
  formulae=(`brew search`)
}

_brew_installed_formulae() {
  installed_formulae=(`brew list`)
}

_brew_installed_taps() {
  installed_taps=(`brew tap`)
}

_brew_official_taps() {
  official_taps=(`brew tap --list-official`)
}

_brew_pinned_taps() {
  pinned_taps=(`brew tap --list-pinned`)
}

_brew_outdated_formulae() {
  outdated_formulae=(`brew outdated`)
}

_brew_installed_services() {
  installed_services=(`brew services list | awk '{print $1}' | tail -n+2`)
}

local -a _1st_arguments
_1st_arguments=(
  'audit:check formulae for Homebrew coding style'
  'cat:display formula file for a formula'
  'cleanup:uninstall unused and old versions of packages'
  'commands:show a list of commands'
  'config:show homebrew and system configuration'
  'create:create a new formula'
  'deps:list dependencies and dependants of a formula'
  'desc:display a description of a formula'
  'doctor:audits your installation for common issues'
  'edit:edit a formula'
  'fetch:download formula resources to the cache'
  'gist-logs:generate a gist of the full build logs'
  'home:visit the homepage of a formula or the brew project'
  'info:information about a formula'
  'install:install a formula'
  'reinstall:install a formula anew; re-using its current options'
  'leaves:show installed formulae that are not dependencies of another installed formula'
  'link:link a formula'
  'linkapps:symlink .app bundles provided by formulae into /Applications'
  'list:list files in a formula or not-installed formulae'
  'log:git commit log for a formula'
  'missing:check all installed formuale for missing dependencies.'
  'migrate:migrate renamed formula to new name'
  'outdated:list formulae for which a newer version is available'
  'pin:pin specified formulae'
  'postinstall:perform post_install for a given formula'
  'prune:remove dead links'
  'remove:remove a formula'
  'search:search for a formula (/regex/ or string)'
  'services:manage services'
  'switch:switch between different versions of a formula'
  'tap:tap a new formula repository from GitHub, or list existing taps'
  'tap-info:information about a tap'
  'tap-pin:pin a tap'
  'tap-unpin:unpin a tap'
  'test-bot:test a formula and build a bottle'
  'uninstall:uninstall a formula'
  'unlink:unlink a formula'
  'unlinkapps:remove symlinked .app bundles provided by formulae from /Applications'
  'unpin:unpin specified formulae'
  'untap:remove a tapped repository'
  'update:fetch latest version of Homebrew and all formulae'
  'upgrade:upgrade outdated formulae'
  'uses:show formulae which depend on a formula'
  `brew commands --quiet --include-aliases`
)

local expl
local -a formulae installed_formulae installed_taps official_taps outdated_formulae installed_services

_arguments \
  '(-v)-v[verbose]' \
  '(--cellar)--cellar[brew cellar]' \
  '(--env)--env[brew environment]' \
  '(--repository)--repository[brew repository]' \
  '(--version)--version[version information]' \
  '(--prefix)--prefix[where brew lives on this system]' \
  '(--cache)--cache[brew cache]' \
  '*:: :->subcmds' && return 0

if (( CURRENT == 1 )); then
  _describe -t commands "brew subcommand" _1st_arguments
  return
fi

case "$words[1]" in
  install|reinstall|audit|home|homepage|log|info|abv|uses|cat|deps|desc|edit|options|switch)
    _brew_all_formulae
    _wanted formulae expl 'all formulae' compadd -a formulae ;;
  linkapps|unlinkapps)
    _arguments \
      '(--local)--local[operate on ~/Applications instead of /Applications]' \
      '1: :->forms' && return 0

    if [[ "$state" == forms ]]; then
      _brew_installed_formulae
      _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae
    fi ;;
  list|ls)
    _arguments \
      '(--unbrewed)--unbrewed[files in brew --prefix not controlled by brew]' \
      '(--pinned)--pinned[list all versions of pinned formulae]' \
      '(--versions)--versions[list all installed versions of a formula]' \
      '1: :->forms' && return 0

      if [[ "$state" == forms ]]; then
        _brew_installed_formulae
        _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae
      fi ;;
  remove|rm|uninstall|unlink|cleanup|link|ln|pin|unpin)
    _brew_installed_formulae
    _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae ;;
  search|-S)
    _arguments \
      '(--macports)--macports[search the macports repository]' \
      '(--fink)--fink[search the fink repository]' ;;
  untap|tap-info|tap-pin)
    _brew_installed_taps
    _wanted installed_taps expl 'installed taps' compadd -a installed_taps ;;
  tap)
    _brew_official_taps
    _wanted official_taps expl 'official taps' compadd -a official_taps ;;
  tap-unpin)
    _brew_pinned_taps
    _wanted pinned_taps expl 'pinned taps' compadd -a pinned_taps ;;
  upgrade)
    _brew_outdated_formulae
    _wanted outdated_formulae expl 'outdated formulae' compadd -a outdated_formulae ;;
  services)
     _arguments -C \
      '1: :->command' \
      '2: :->service' && return 0

    local -a commands

    commands=(
      'cleanup:Get rid of stale services and unused plists'
      'list:List all services managed by brew services'
      'restart:Gracefully restart selected service'
      'start:Start selected service'
      'stop:Stop selected service'
    )

    case $state in
      command)
        _describe -t commands 'Action' commands
        ;;
      service)
        _brew_installed_services
       _describe -t subcommands 'Services' installed_services
       ;;
    esac
esac