diff --git a/completion/README.md b/completion/README.md index a4c1aaf9..cbbae022 100644 --- a/completion/README.md +++ b/completion/README.md @@ -8,5 +8,6 @@ If you are missing a completion, feel free to contribute. * `timew.fish` is taken from [pfmephisto/timew-fishcompletion](https://github.com/pfmephisto/timew-fishcompletion) which is released under [MIT license](https://github.com/pfmephisto/timew-fishcompletion/blob/main/LICENSE) * `timew-completion.bash` is taken from [lauft/timew-bashcompletion](https://github.com/lauft/timew-bashcompletion) which is released under [MIT license](https://github.com/lauft/timew-bashcompletion/blob/master/LICENSE) +* `timew.zsh` is taken from [ianmkenney/timewarrior_zsh_completion](https://github.com/ianmkenney/timewarrior_zsh_completion) which is released under [MIT license](https://github.com/ianmkenney/timewarrior_zsh_completion/blob/main/LICENSE) Huge thanks to everyone contributing! ❤️ diff --git a/completion/timew.zsh b/completion/timew.zsh new file mode 100644 index 00000000..61092441 --- /dev/null +++ b/completion/timew.zsh @@ -0,0 +1,120 @@ +#compdef _timew timew + +# zsh completion for timewarrior 1.7.1 +# timewarrior_zsh_completion v0.1.0 + +_timew() { + local ret=1 + + if [ -d ${HOME}/.local/share/timewarrior/data ]; then + data_dir="${HOME}/.local/share/timewarrior/data" + fi + + if [ -d ${HOME}/.timewarrior/data ]; then + data_dir="${HOME}/.timewarrior/data" + fi + + if (( !${+data_dir} )); then + echo "\nCould not find data directory" + return $ret + fi + + _arguments -C \ + '1:command:->commands' \ + '*:ids_tags_hints:->ids_tags_hints' && ret=0 + + case "$state" in + commands) + _describe 'commands' _commands + ;; + ids_tags_hints) + local arr + + arr=() + + # collect all tag data + vals=$(sed '1,1d' $data_dir/tags.data | \ + sed '$d' | \ + sed -E "s;^[[:space:]]+\"([[:space:][:alnum:]\._-]+)\":.*$;\1;g") + + # add all of the tags to the output array + for i in ${(f)vals}; do arr+=$i; done + + # append the predefined hints to the end + arr+=( "${_hints[@]} ") + + + vals=$(cat ${data_dir}/*-*.data | tail -n 9 | sed -E "s/inc .+# //g") + + typeset -i count + count=$(echo $vals | wc -l) + + for i in ${(f)vals}; + do + arr+="@${count}:${i}" + ((count--)) + done + + _describe 'hints_tags_ids' arr + ;; + esac +} + +_hints=( + "\:adjust:Automatically correct overlaps" + "\:blank:Leaves tracked time out of a report" + "\:color:Force color on, even if not connected to a TTY" + "\:day:The 24 hours of the current day" + "\:debug:Runs in debug mode, shows many runtime details" + "\:fill:Expand time to fill surrounding available gap" + "\:ids:Displays interval ID numbers in the summary report" + "\:lastmonth:Last month" + "\:lastquarter:Last quarter" + "\:lastweek:Last week" + "\:lastyear:Last year" + "\:month:This month" + "\:nocolor:Force color off, even if connected to a TTY" + "\:quarter:This quarter" + "\:quiet:Turns off all feedback. For automation" + "\:week:This week" + "\:year:This year" + "\:yes:Overrides confirmation by answering \'yes\' to the questions" + "\:yesterday:The 24 hours of the previous day" +) + +_commands=( + 'annotate:add an annotation to intervals' + 'cancel:cancel time tracking' + 'config:get and set Timewarrior configuration' + 'continue:resume tracking of existing interval' + 'day:Summarize the tracked and untracked time over the day' + 'day:shows a chart depicting a single day (today by default)' + 'delete:delete intervals' + 'diagnostics:show diagnostic information' + 'export:export tracked time in JSON' + 'extensions:list available extensions' + 'fill:adjust intervals to fill in surrounding gaps' + 'gaps:display time tracking gaps' + 'get:display DOM values' + 'help:display help' + 'join:join intervals' + 'lengthen:lengthen intervals' + 'modify:change start or end date of an interval' + 'month:Summarize the tracked and untracked time over a month' + 'month:shows a chart depicting a single month (current month by default)' + 'move:change interval start-time' + 'report:run an extension report' + 'resize:set interval duration' + 'revert:revert Timewarrior commands' + 'shorten:shorten intervals' + 'show:display configuration' + 'split:split intervals' + 'start:start time tracking' + 'stop:stop time tracking' + 'summary:display a time-tracking summary' + 'tag:add tags to intervals' + 'tags:display a list of tags' + 'track:add intervals to the database' + 'untag:remove tags from intervals' + 'week:shows a chart depicting a single week (current week by default)' +)