×
all 19 comments

[–]m-faith 19 points20 points  (1 child)

Many people use and rely on taskwarrior daily for task/project management.

Commits (and not twitter) are how you assess the maintenance status of a software project: https://github.com/GothenburgBitFactory/taskwarrior/commits/develop.

Looks like a lot of typing needs to be done just to add a simple task.

Tab completion helps. Vit helps with UX sometimes.

I use taskwarrior with timewarrior, vit, vimwiki, tasknote.sh and some of my own scripts. Couldn't live without it.

[–]bgravato[🍰] 3 points4 points  (0 children)

I second everything that's been said here!

[–]my_mix_still_sucks 3 points4 points  (0 children)

started using it two days ago and I love it, I think its actually a lot quicker than regular task management software, you just have to set up a lot of aliases, for example I have ta for task add or tm for task modify etc

[–]etcpasswd 2 points3 points  (0 children)

I use it daily for home and work.

[–]thenormalcy 2 points3 points  (0 children)

Absolutely, using it daily in 2023 and getting more value out of it than anything else ive used it’s not even close.

[–]ecocode 1 point2 points  (0 children)

Yep, I am actively using taskwarrior. As it is a command line tool, you can easily script things like templates, reports etc. I use fzf in most of my scripts.

[–]wertperch 1 point2 points  (0 children)

a lot of typing needs to be done just to add a simple task

For me this is actually a benefit. I find that as I'm creating or managing tasks, the process helps me to focus on the task elements and already start thinking productively.

Someone has already mentioned tab completion, to which I will add "scripting". I've written some simple functions, scripts and aliases that make it easier for me to manage.

[–]smidgie82 0 points1 point  (10 children)

I use it all the time for managing my tasks. You can remove a lot of typing by some combination of contexts (e.g., set a context for your project, and when you task add it'll automatically tag the task with the right tag) and shell aliases.

My biggest complaint is that it doesn't make managing task dependencies all that easy. The lack of a blocks attribute as the inverse of depends means that if you have a task A, and you discover that you need to do some new thing B before A, you have to do that as two separate commands: ``` $ task add Frob the foozebar Created task 1

later, discover that frobulation isn't enabled

$ task add Enable frobulation Created task 2 $ task 1 mod depends:2 Modifying task 1 "Frob the foozebar" Modified 1 task I'd much prefer to be able to say $ task add Enable frobulation blocks:1 ```

Other than that, which is very minor, I have few complaints about the project.

Development on it isn't as active as it was once upon a time, but it's definitely still happening! A new (large) pull request was opened just yesterday: https://github.com/GothenburgBitFactory/taskwarrior/pull/3094

[–]m-faith 0 points1 point  (9 children)

I'd much prefer to be able to say

$ task add Enable frobulation blocks:1

Have you considered writing a shell function for this?

[–]smidgie82 0 points1 point  (8 children)

A shell function would either need to duplicate the Taskwarrior parsing logic to support the task add Enable frobulation blocks:1 syntax, or look like task-block 1 Enable frobulation, which is a special case. I'd prefer idiomatic syntax to do that, that's all.

[–]m-faith 0 points1 point  (6 children)

But is that so?

Couldn't you write a task script that looks for blocks: in its args, and if found then run those two commands, and if not found, then just pass all args to the normal task command...?

I think task add Enable frobulation blocks:1 actually could be achieved with a wrapper script.

[–]m-faith 0 points1 point  (5 children)

Like... a custom script/function for task...

if [[ $@ == *'blocks: '* ]]; then
  echo "arg contains blocks"
  # do your two commands here
else
  /usr/bin/task $@
fi

[–]m-faith 1 point2 points  (0 children)

Oh, but this results in loss of tab completion :(

[–]smidgie82 0 points1 point  (3 children)

You’re right, it would probably be easier than I thought, but the loss of tab completion is a big negative for sure.

[–]m-faith 1 point2 points  (2 children)

Oh! UDA + a hook!!! An on-modify hook, that when it finds a "blocks" UDA it runs your script for modifying the blocked task. That's how this can be achieved.

[–]smidgie82 1 point2 points  (1 child)

That's a great idea. This works as an on-add script that does the right thing: ```

!/usr/bin/env python3

import sys import json import os

def main(): data = sys.stdin.read().strip()

decoder = json.JSONDecoder()

new_task, offset = decoder.raw_decode(data)

# debug logging
with open('log', 'w') as f:
    print(data, file=f)
    print(sys.argv, file=f)
    print(json.dumps(new_task), file=f)


if 'blocks' not in new_task:
    with open('log', 'a') as f:
        print("No `blocks` UDA found", file=f)
    # print out the task as we received it
    print(json.dumps(new_task))
    sys.exit(0)

blocked_task = new_task['blocks']
with open('log', 'a') as f:
    print(f"blocks task {blocked_task}", file=f)

new_task_id = new_task['uuid']
del new_task['blocks']
# output the new task without the `blocks` UDA
print(json.dumps(new_task))

os.system(f"task {blocked_task} mod depends:{new_task_id}")

sys.exit(0)

if name == "main": main() ```

I'm a little surprised it works, since the Taskwarrior docs say that on-add hooks are executed after the new task is processed but before it's saved. So I worry that it might be unreliable, or work inconsistently across different systems, and instead the hook might need to spawn a child process that waits for the initial invocation of taskwarrior to exit before running the task {blocked_task} mod depends:{new_task_id} command.

But for now, this is working for me. Thanks for the suggestion!

[–]m-faith 1 point2 points  (0 children)

Awesome, glad to hear, and grateful to see the code :)

[–][deleted] 0 points1 point  (0 children)

I just started using it too, and I find it much better than other GUI/TUI task managers.

I just added some aliases to my .bash_alias file:

alias tm='task modify ' alias tt='task ' alias ta='task add '

then I can quickly do: ta Start planning Project X or tm 4 due:+7d

[–]HR_Paul 0 points1 point  (0 children)

Looks like a lot of typing needs to be done just to add a simple task.

ta "a simple task" due:tod +Reddit