diff options
| author | David Moc <personal@cdatgoose.org> | 2026-05-17 01:35:00 +0200 |
|---|---|---|
| committer | David Moc <personal@cdatgoose.org> | 2026-05-17 01:35:00 +0200 |
| commit | 2c0f6f7c6b34107d828d30e11d116ec24c934b1b (patch) | |
| tree | c571ae0dc93fefb22c3bf5af481b72c28da89e92 /tasker.bash | |
| parent | b0d5cb5d9d3607add2932b03af50a2a6c18f1721 (diff) | |
Signed-off-by: David Moc <personal@cdatgoose.org>
Diffstat (limited to 'tasker.bash')
| -rw-r--r-- | tasker.bash | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tasker.bash b/tasker.bash new file mode 100644 index 0000000..6b13ae8 --- /dev/null +++ b/tasker.bash @@ -0,0 +1,90 @@ +_tasker_task_dirs() { + local root d name + if [[ -d "$PWD/tasks" ]]; then + root="$PWD/tasks" + else + root="$PWD" + fi + + shopt -s nullglob + for d in "$root"/*/; do + name="${d%/}" + name="${name##*/}" + if [[ "$name" =~ ^[0-9]{2}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?$ ]]; then + printf '%s\n' "$name" + fi + done +} + +_tasker_completion() { + local cur prev words cword subcommand + COMPREPLY=() + + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + + local commands="new list set delete" + + subcommand="" + for word in "${COMP_WORDS[@]:1}"; do + case "$word" in + new|list|set|delete) + subcommand="$word" + break + ;; + esac + done + + if [[ -z "$subcommand" ]]; then + COMPREPLY=( $(compgen -W "$commands" -- "$cur") ) + return 0 + fi + + case "$subcommand" in + new) + case "$prev" in + -p|-d) + return 0 + ;; + esac + COMPREPLY=( $(compgen -W "-p -d" -- "$cur") ) + ;; + + list) + case "$prev" in + -s|--status) + COMPREPLY=( $(compgen -W "OPEN IN_PROGRESS CLOSED" -- "$cur") ) + return 0 + ;; + -p|--priority|--min-priority|-c|--contains) + return 0 + ;; + esac + COMPREPLY=( $(compgen -W "-s --status -p --priority --min-priority -c --contains" -- "$cur") ) + ;; + + set) + case "$prev" in + -s|--status) + COMPREPLY=( $(compgen -W "OPEN IN_PROGRESS CLOSED" -- "$cur") ) + return 0 + ;; + -n|--name|-p|--priority|-d|--desc) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $(compgen -W "-n --name -s --status -p --priority -d --desc" -- "$cur") ) + else + COMPREPLY=( $(compgen -W "$(_tasker_task_dirs)" -- "$cur") ) + fi + ;; + + delete) + COMPREPLY=( $(compgen -W "$(_tasker_task_dirs)" -- "$cur") ) + ;; + esac +} + +complete -F _tasker_completion tasker |
