-
Notifications
You must be signed in to change notification settings - Fork 0
/
_cleanpkgfile
92 lines (72 loc) · 3.23 KB
/
_cleanpkgfile
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
#compdef cleanpkgfile
_complete_portage_package_files () {
if [[ $words[-1] != /etc/portage* ]]
then
_alternative \
'portage-files:portage files:_path_files -W /etc/portage/ -g "package.*" -P "/etc/portage/"' \
'files:files:_files' && return 0
else
_files && return 0
fi
return 0
}
_complete_cleanpkgfile_check_modes () {
local -a modes
modes=('use:Check USE flags'
'keywords:Check keywords'
'env:Check env/* files'
'guess:Guess from filename (on a per file basis)'
'none:Do not perform any atom argument checks')
_describe -t check-mode 'check mode' modes && return 0
}
_complete_useflags () {
compset -P '*,'
local localflags flags portdirs
setopt HIST_SUBST_PATTERN
source /etc/make.conf &>/dev/null
source /etc/portage/make.conf &>/dev/null
portdirs=($PORTDIR $PORTDIR_OVERLAY)
(( $#portdirs )) || \
for repoconf in /etc/portage/repos.conf \
/etc/portage/repos.conf/* \
/usr/share/portage/config/repos.conf ; do
[[ -f $repoconf ]] || continue
portdirs+=("${(@)${(@M)${(f)$(<$repoconf)}:#location #=*}##location #= #}")
done
for dir in "${(@u)portdirs}" ; do
[[ -f $dir/profiles/use.desc ]] && \
flags+=("${(@)${(@M)${(f)"$(<$dir/profiles/use.desc)"}:#[a-zA-Z0-9_-]## - *}:s/(#b)([a-zA-Z0-9_-]##) - (*)/${match[1]}:${match[2]}/}")
# [[ -f $dir/profiles/use.local.desc ]] && \
# localflags+=("${(@)${(@M)${(f)"$(<$dir/profiles/use.local.desc)"}:#[a-zA-Z0-9_/:-]## - *}:s/(#b)([a-zA-Z0-9\/_-]##):([a-zA-Z0-9_-]##) - (*)/${match[2]}/}")
done
# for flag in "${(@)flags%%:*}" ; do
# localflags=(${(@)localflags:#$flag})
# done
_describe -t use-flags 'USE flags' flags -S , -R _cleanpkgfile_useflag_suffix && \
# _describe -t local-use-flags 'Local USE flags' localflags && \
return 0
}
_cleanpkgfile_useflag_suffix () {
[[ $LBUFFER[-1] == , ]] || return 0
if [[ $KEYS =~ [^a-zA-Z0-9] ]]
then
LBUFFER="$LBUFFER[1,-2] "
fi
}
_cleanpkgfile () {
_arguments -s -w -S \
{'(--backup)-b','(-b)--backup'}'[Always backup original files]' \
{'(--batch)-B','(-B)--batch'}'[Batch mode - do not prompt (enables force-overwrite)]' \
{'(--check)-c+','(-c)--check='}'[Set check mode: use, keywords, env, guess or none]:check mode:_complete_cleanpkgfile_check_modes' \
{'(--debug)-D','(-D)--debug'}'[Enable debug mode]' \
{'(--force-overwrite)-f','(-f)--force-overwrite'}'[Automatically overwrite original file]' \
{'(--help)-h','(-h)--help'}'[Show usage and exit]' \
{'*-i+','*--ignore-use-or-keyword='}'[Ignore list of USE flags/keywords]:USE flags:_complete_useflags' \
{'(--keep-non-matching --keep-nonmatching)-k','(-k --keep-nonmatching)--keep-non-matching'}'[Do not remove entries with no installed versions]' \
{'(--keep-order)-o','(-o)--keep-order'}'[Do not sort the file alphabetically]' \
{'(--quiet --verbose -v)-q','(-q --verbose -v)--quiet'}'[Only prompt, do not produce other output]' \
{'(--tmp-dir)-d+','(-d)--tmp-dir='}'[Set temporary directory]:temporary directory:_files -/' \
{'(--verbose --quiet -q)-v','(-v --quiet -q)--verbose'}'[Print information about every entry]' \
'*:Files:_complete_portage_package_files' && return 0
}
_cleanpkgfile "$@"