blob: 031a7075cef10cac25ffe9aa6eeab37639f918c3 (
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
|
# bash completion for mkhint
# Install: sudo cp mkhint.bash-completion /etc/bash-completion.d/mkhint
_mkhintfile_completions() {
local cur prev repo_dir hint_dir mkhint_config
_init_completion || return
repo_dir="/var/lib/sbopkg/SBo-danix"
hint_dir="/etc/slackrepo/SBo-danix/hintfiles"
mkhint_config="$HOME/.config/mkhint/config"
# shellcheck disable=SC1090
[[ -f "$mkhint_config" ]] && source "$mkhint_config"
repo_dir="${REPO_DIR:-$repo_dir}"
hint_dir="${HINT_DIR:-$hint_dir}"
repo_dir="${repo_dir%/}"; hint_dir="${hint_dir%/}"
local all_flags="--version -v --set-version -V --hintfile -f --new -n --list -l --review -R --clean -c --check -C --fix-current -F --delete -d --no-dl -N --info -i --force --help -h"
# -R/--review and -l/--list take any number of hint names; complete them repeatedly.
local w in_review=""
for w in "${COMP_WORDS[@]:1}"; do
[[ "$w" == "-R" || "$w" == "--review" || "$w" == "-l" || "$w" == "--list" ]] && in_review=1
done
if [[ -n "$in_review" && "$cur" != -* ]]; then
local -a rwords=()
for f in "$hint_dir"/*.hint; do
[[ -f "$f" ]] && rwords+=("$(basename "${f%.hint}")")
done
COMPREPLY=($(compgen -W "${rwords[*]}" -- "$cur"))
return
fi
case "$prev" in
--new|-n|--info|-i)
# Packages live at REPO_DIR/<category>/<pkg>/; complete the pkg dir
# names. Strip the trailing slash and category prefix with param
# expansion (no per-dir basename fork — the repo has thousands).
local -a words=() d
for d in "$repo_dir"/*/*/; do
d="${d%/}"; words+=("${d##*/}")
done
COMPREPLY=($(compgen -W "${words[*]}" -- "$cur"))
;;
--hintfile|-f|--delete|-d|--check|-C)
local -a words=()
for f in "$hint_dir"/*.hint; do
[[ -f "$f" ]] && words+=("$(basename "${f%.hint}")")
done
COMPREPLY=($(compgen -W "${words[*]}" -- "$cur"))
;;
--set-version|-V)
local pkg="" i
for (( i=1; i<${#COMP_WORDS[@]}-1; i++ )); do
if [[ "${COMP_WORDS[i]}" == "--hintfile" || "${COMP_WORDS[i]}" == "-f" ]]; then
pkg="${COMP_WORDS[i+1]}"
break
fi
done
if [[ -n "$pkg" ]]; then
local hint_file="$hint_dir/${pkg}.hint"
if [[ -f "$hint_file" ]]; then
local ver
ver=$(grep -m1 '^VERSION=' "$hint_file" | cut -d= -f2 | tr -d '"')
[[ -n "$ver" ]] && COMPREPLY=($(compgen -W "$ver" -- "$cur"))
fi
fi
;;
*)
COMPREPLY=($(compgen -W "$all_flags" -- "$cur"))
;;
esac
}
complete -F _mkhintfile_completions mkhint.sh mkhint
|