aboutsummaryrefslogtreecommitdiff
blob: 46b847785738b7da8e8f03afdbea0417375c0929 (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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#compdef eselect

common_values=(
  "help[Display help text]"
  "usage[Display usage information]"
  "version[Display version information]"
)

_eselect_env () {
  if (( $words[(I)(update)] )); then
    _values "update options" \
      "makelinks[force updating of links]" \
      "noldconfig[Do not alter the ld.so cache or configuration]" && return 0
  fi
  _values "env options" $common_values \
    'update[Collect environment variables from all scripts in /etc/env.d/]' && return 0
}

_eselect_binutils () {
  local binutilslist
  if (( $words[(I)(set)] )); then
    binutilslist=(${(f)"$(eselect --brief --color=no binutils list)"})
    _values "available binutils version" $binutilslist[@] && return 0
  fi
  _values "binutils options" $common_values \
    "list[List all installed version of binutils]" \
    "show[Print the currently active binutils version]" \
    "set[Activate one of the installed binutils]" && return 0
}

_eselect_kernel () {
  local kernellist
  if (( $words[(I)(set)] )); then
    kernellist=(${(f)"$(eselect --brief --color=no kernel list)"})
    _values "available kernel version" $kernellist[@] && return 0
  fi
  _values "kernel options" $common_values \
    "list[List available kernel symlink targets]" \
    "show[Show the current kernel symlink]" \
    "set[Set a new kernel symlink target]" && return 0
}

_eselect_ctags () {
  local ctagslist
  if (( $words[(I)(set)] )); then
    ctagslist=(${(f)"$(eselect --brief --color=no ctags list)"})
    _values "available ctags version" $ctagslist[@] && return 0
  fi
  _values "ctags options" $common_values \
    "list[List available ctags symlink targets]" \
    "show[Show the current target of the ctags symlink]" \
    "update[Automatically update the ctags symlink]" \
    "set[Set a new ctags symlink target]" && return 0
}

_eselect_profile () {
  local profilelist
  if (( $words[(I)(set)] )); then
    profilelist=(${${(f)"$(eselect --brief --color=no profile list)"}/:/\\:})
    _values -w "available profiles" $profilelist[@] \
      "--force[Forcibly set the symlink]" && return 0
  fi
  _values "profile options" $common_values \
    "list[List available profile symlink targets]" \
    "show[Show the current make.profile symlink]" \
    "set[Set a new profile symlink target]" && return 0
}

_eselect_fontconfig () {
  local fclistenabled fclistdisabled
  if (( $words[(I)(enable)] )); then
    fclistdisabled=(${${${${(M)${(f)"$(eselect --color=no fontconfig list)"}## *}#*\*}// \**/}//(  \[*\]   |  \[*\]  )/})
    _values -w ".conf to enable" $fclistdisabled[@] && return 0
  elif (( $words[(I)(disable)] )); then
    fclistenabled=(${${${(M)${(M)${(f)"$(eselect --color=no fontconfig list)"}## *}#*\*}// \**/}//(  \[*\]   |  \[*\]  )/})
    _values -w ".conf to disable" $fclistenabled[@] && return 0
  fi
  _values "fontconfig options" $common_values \
    "list[List available fontconfig .conf files]" \
    "disable[Disable specified fontconfig .conf file(s)]" \
    "enable[Enable specified fontconfig .conf file(s)]" && return 0
}

_eselect_opengl () {
  local opengllist
  if (( $words[(I)(set)] )); then
    opengllist=(${(f)"$(eselect --brief --color=no opengl list)"})
    _values -w "opengl implementations and options" $opengllist[@] \
      "--use-old[If an implementation is already set, use that one instead]" \
      "--prefix[Set the source prefix]:path:_files -/" \
      "--dst-prefix[Set the destination prefix]:path:_files -/" \
      "--ignore-missing[Ignore missing files when setting a new implementation]" && return 0
  fi
  _values "opengl options" $common_values \
    "list[List the available OpenGL implementations]" \
    "set[Select the OpenGL implementation]" \
    "show[Print the current OpenGL implementation]" && return 0
}

_eselect_vi () {
  local vilist
  if (( $words[(I)(set)] )); then
    vilist=(${(f)"$(eselect --brief --color=no vi list)"})
    _values -w "vi implementation" $vilist[@] && return 0
  elif (( $words[(I)(update)] )); then
    _values -w "option" "--if-unset[Do not override existing implementation]" && return 0
  fi
  _values "vi options" $common_values \
    "list[List available vi implementations]" \
    "set[Set a new vi implementation provider]" \
    "show[Show the current vi implementation]" \
    "update[Automatically update the vi provider]"
}

_eselect_news() {

  ## TODO: Normal numeric sorting.
  ## I've spent many time on trying to rewrite this
  ## function to normally sort (to DO NOT sort, actually) items,
  ## but it growing bigger and bigger and going to be too complicated.
  ## So, I (mva) either need to help to make it in the "right way".
  ## Or, maybe, to completely rewrite this compdef.

  local -a newslist;
  if ((CURRENT == 3)); then
    _values 'news options' $stdopts[@] \
    'list[List news items]' \
    'count[Display number of news items]' \
    'purge[Purge read news]' \
    'read[Read news items]' \
    'unread[Mark read news items as unread again]' && return 0
  elif ((CURRENT == 4)); then
    if (( $words[(I)(count)] )); then
    _values -w 'news' 'new[Count only new news items]' 'all[Count all news items]' && return 0
    fi

    newslist=(${${${${${${${(M)${(f)"$(eselect --color=no news list)"}## *}// \**/}/  \[/}/\] ##/\[}/%/]}/ \[/ (}/\] /) })

    if (( $words[(I)(read)] )); then
      newslist+=( "new[Read unread news items (default)]" "all[Read all news items]" "--mbox[Output in mbox format]" "--quiet[Suppress output, only change status]" "--raw[Output in raw format]" )
    fi;

    if (( $words[(I)(unread)] )); then
      newslist+=( "all[Unread all news items]" )
    fi

    _values -w 'news' $newslist[@] && return 0
  fi
}

_eselect () {
  local globopts modnames modopts

  globopts=(
    "--brief[Make output shorter]"
    "--colour=no[Disable coloured output]"
    "--color=no[Disable coloured output]"
  )
  modnames=(${${${(M)${(f)"$(eselect --brief --color=no modules list)"}## *}//   */}//  /})

  if ((CURRENT == 2)); then
    _arguments -s \
      "$globopts[@]" \
      "*:portage:_values 'eselect modules' \$modnames[@]" && return 0
  elif ((CURRENT == 3)); then
    if [[ $words[2] == --colour=no || $words[2] == --color=no ]]; then
      _arguments -s \
        "*:portage:_values 'eselect modules' \$modnames[@]" && return 0
    elif (( $modnames[(I)$words[2]] )); then
      if [[ "$words[2]" == (env|binutils|kernel|ctags|profile|fontconfig|opengl|vi|news) ]]; then
        _eselect_$words[2] "$@"
      else
        modopts=(${${${(M)${(f)"$(eselect --brief --color=no $words[2] usage)"}## *}//   */}//  /})
        _arguments -s \
          "*:portage:_values 'eselect $words[2] options' \$modopts[@]" && return 0
      fi
    fi
  elif ((CURRENT >= 4)); then
    if (( $words[(I)(--color=no|--colour=no)] )); then
      if (( $modnames[(I)$words[3]] )); then
        if [[ "$words[3]" == (env|binutils|kernel|ctags|profile|fontconfig|opengl|vi|news) ]]; then
          _eselect_$words[3] "$@"
        else
          modopts=(${${${${(M)${(f)"$(eselect --brief --color=no $words[3] usage)"}## *}//   */}//  /}// *})
          _arguments -s \
            "*:portage:_values 'eselect $words[3] options' \$modopts[@]" && return 0
        fi
      fi
    else
      if (( $modnames[(I)$words[2]] )); then
        (( $+functions[_eselect_$words[2]] )) && _eselect_$words[2] "$@"
      fi
    fi
  fi
}

_eselect "$@"

# vim: set et sw=2 ts=2 ft=zsh: