Open straxhaber opened 3 months ago
Some quick comments.
-t | -c | -p | -o | -s | -r | -w | -k | -u | -i | -D
could return available job IDs with a helper function:
ts | cut -f1 -d' ' | tail -n '+2' | sort -n
-L | -S
could have no auto-completion, since the args are custom text.
-U
could either have no auto-completion (easiest) or properly auto-complete job IDs in the "id-id" pairs.
Otherwise, the first option that pops up is interpreted to be a command (e.g., find
or ./path/to/exec
) and then auto-completes that command's args, similar to the way sudo
auto-completes.
This is a first draft. I put it together quite roughly. Some things that are missing:
sudo
or exec
.function _ts_complete_ids {
ts | cut -f1 -d' ' | tail -n '+2' | sort -n
}
function _ts_complete {
# Define the options
local opts_taskid="-t -c -p -o -s -r -w -k -u -i -D"
local opts_noauto="-L -S"
local opts_twoids="-U"
local opts_simple="-K -C -l -h -V -n -f -g -m -d"
local all_opts="${opts_taskid} ${opts_noauto} ${opts_twoids} ${opts_simple}"
local this="${COMP_WORDS[COMP_CWORD]}"
local prev="${COMP_WORDS[COMP_CWORD-1]}"
if false; then
## FIXME: should use command's auto-completion if has command
false
elif [[ ${COMP_CWORD} -eq 1 && "${this}" == '' ]]; then
## first arg shouldn't auto-complete if not started
true
elif [[ "${this}" =~ "-" ]]; then
COMPREPLY=($(compgen -W "${all_opts}" -- "${this}"))
else
case "${prev}" in
## auto-complete task IDs
-t | -c | -p | -o | -s | -r | -w | -k | -u | -i | -D)
## despite many task IDs being optional, nothing else should come after
COMPREPLY=($(compgen -W "$(_ts_complete_ids)" -- "${this}")) ;;
## label and parallelism don't auto-complete
-L | -S) true ;; ## despite -S' arg being optional, nothing else should come after
## FIXME: not yet implemented (-U id-id)
-U) false ;;
## auto-complete commants
*) COMPREPLY=($(compgen -c -- "${this}")) ;;
## FIXME: directories should auto-complete with "/"
esac
fi
}; complete -F _ts_complete ts
I have a feature request. Right now,
ts
doesn't provide any bash completion. This would be super helpful!I'll post some initial thoughts in a separate comment. If I find some time, I may follow up with some proposed code (it would be my first time writing a bash completion script, though, so no promises it would be good!).