aboutsummaryrefslogtreecommitdiff
blob: c0129550bb28f200b0174a3fc2512b89663a097e (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
#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 "$@"