diff options
| author | Julian Hurst <ark@mansus.space> | 2024-11-15 14:02:30 +0100 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2024-11-15 16:29:05 +0100 |
| commit | e5d2f4eb34e6d6820a9f05855abe6a45994c4bd2 (patch) | |
| tree | 70ab2fdea956c8c2276347c4c1c73b2dff443f25 /hatask.ha | |
| parent | ba38c9e073db90b530f2ba4460fb124a930ea055 (diff) | |
| download | hatask-e5d2f4eb34e6d6820a9f05855abe6a45994c4bd2.tar.gz | |
Support -t flag and tags config field for filtering tasks by tags
Diffstat (limited to 'hatask.ha')
| -rw-r--r-- | hatask.ha | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -144,11 +144,35 @@ fn strrtaskerror(e: rtaskerror) str = { }; }; +fn filtertags(cfg: config, tasks: *[]task) void = { + if (len(cfg.tags) == 0z) { + return; + }; + for (let i = 0z; i < len(tasks); i += 1) { + const t = tasks[i]; + let found = false; + for :tagloop (let tag .. t.tags) { + for (let tagfilter .. cfg.tags) { + if (tag == tagfilter) { + found = true; + break :tagloop; + }; + }; + }; + if (!found) { + freetask(&tasks[i]); + delete(tasks[i]); + i -= 1; + }; + }; +}; + export fn main() void = { const cmd = getopt::parse(os::args, "tasklist", ('f', "path", "tasks directory"), ('c', "context", "context filter"), + ('t', "tags", "tags filter"), ('p', "sort by priority"), ("filter", ["filter tasks", "id"]: []getopt::help), ("f", ["filter tasks", "id"]: []getopt::help), @@ -187,6 +211,8 @@ export fn main() void = { cfg.tasksdir = strings::dup(opt.1); case 'c' => cfg.context = strings::dup(opt.1); + case 't' => + cfg.tags = strings::dupall(strings::split(opt.1, ",")); case 'p' => sortfn = &sortpriority; case => @@ -202,6 +228,7 @@ export fn main() void = { }; defer finishall(tasks); sort::sort(tasks: []opaque, size(task), sortfn); + filtertags(cfg, &tasks); const com: (str, *getopt::command) = match (cmd.subcmd) { case void => |
