2022-08-13 21:55:35 +02:00
|
|
|
# vim: set tabstop=2 shiftwidth=2 expandtab:
|
2026-06-29 17:38:24 +02:00
|
|
|
#
|
|
|
|
|
# Thin wrapper around `task __complete`. All suggestion logic lives in the
|
|
|
|
|
# Go engine — do not add completion logic here.
|
2022-02-13 20:20:01 +01:00
|
|
|
|
2025-12-07 12:20:45 +01:00
|
|
|
TASK_CMD="${TASK_EXE:-task}"
|
2022-05-22 16:16:50 +02:00
|
|
|
|
2026-06-29 17:38:24 +02:00
|
|
|
_task() {
|
2022-08-13 21:55:35 +02:00
|
|
|
local cur prev words cword
|
|
|
|
|
_init_completion -n : || return
|
2019-08-30 09:59:03 +10:00
|
|
|
|
2026-06-29 17:38:24 +02:00
|
|
|
local -a args=()
|
|
|
|
|
if (( cword > 0 )); then
|
|
|
|
|
args=( "${words[@]:1:cword}" )
|
|
|
|
|
fi
|
|
|
|
|
if (( ${#args[@]} == 0 )); then
|
|
|
|
|
args=( "" )
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
local output
|
|
|
|
|
output=$("$TASK_CMD" __complete "${args[@]}" 2>/dev/null)
|
|
|
|
|
if [[ -z "$output" ]]; then
|
|
|
|
|
_filedir
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
local -a lines=()
|
|
|
|
|
local line
|
|
|
|
|
while IFS= read -r line; do
|
|
|
|
|
lines+=( "$line" )
|
|
|
|
|
done <<< "$output"
|
|
|
|
|
|
|
|
|
|
local last_idx=$(( ${#lines[@]} - 1 ))
|
|
|
|
|
local directive="${lines[$last_idx]#:}"
|
|
|
|
|
unset 'lines[$last_idx]'
|
|
|
|
|
|
|
|
|
|
if (( directive & 8 )); then
|
|
|
|
|
local exts=""
|
|
|
|
|
for line in "${lines[@]}"; do
|
|
|
|
|
exts+="${exts:+|}$line"
|
|
|
|
|
done
|
|
|
|
|
_filedir "@($exts)"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if (( directive & 16 )); then
|
|
|
|
|
_filedir -d
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
local -a values=()
|
|
|
|
|
for line in "${lines[@]}"; do
|
|
|
|
|
values+=( "${line%%$'\t'*}" )
|
2022-09-08 19:03:29 +02:00
|
|
|
done
|
|
|
|
|
|
2026-06-29 17:38:24 +02:00
|
|
|
COMPREPLY=( $( compgen -W "${values[*]}" -- "$cur" ) )
|
|
|
|
|
|
|
|
|
|
if (( directive & 2 )); then
|
|
|
|
|
compopt -o nospace 2>/dev/null
|
|
|
|
|
fi
|
|
|
|
|
|
2022-08-13 21:55:35 +02:00
|
|
|
__ltrim_colon_completions "$cur"
|
2026-06-29 17:38:24 +02:00
|
|
|
|
|
|
|
|
if (( ${#COMPREPLY[@]} == 0 )) && ! (( directive & 4 )); then
|
|
|
|
|
_filedir
|
|
|
|
|
fi
|
2019-08-30 09:59:03 +10:00
|
|
|
}
|
|
|
|
|
|
2025-12-07 12:20:45 +01:00
|
|
|
complete -F _task "$TASK_CMD"
|