754707379a
This adds an option allowing you to specify "taskwarrior.show_active=true" in your bar configuration and will display the current, active task id and description on the status bar, but will show the number of pending tasks if one isn't active. This also adds the scrolling decorator, since task descriptions can be quite long.
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""Displays the number of pending tasks in TaskWarrior.
|
|
|
|
Requires the following library:
|
|
* taskw
|
|
|
|
Parameters:
|
|
* taskwarrior.taskrc : path to the taskrc file (defaults to ~/.taskrc)
|
|
|
|
|
|
contributed by `chdorb <https://github.com/chdorb>`_ - many thanks!
|
|
"""
|
|
|
|
from taskw import TaskWarrior
|
|
|
|
import core.module
|
|
import core.widget
|
|
import core.decorators
|
|
|
|
|
|
class Module(core.module.Module):
|
|
def __init__(self, config, theme):
|
|
super().__init__(config, theme, core.widget.Widget(self.output))
|
|
|
|
self.__pending_tasks = "0"
|
|
|
|
def update(self):
|
|
"""Return a string with the number of pending tasks from TaskWarrior."""
|
|
try:
|
|
taskrc = self.parameter("taskrc", "~/.taskrc")
|
|
show_active = self.parameter("show_active", False)
|
|
w = TaskWarrior(config_filename=taskrc)
|
|
active_tasks = (
|
|
w.filter_tasks({"start.any": "", "status": "pending"}) or None
|
|
)
|
|
if show_active and active_tasks:
|
|
reporting_tasks = (
|
|
f"{active_tasks[0]['id']} - {active_tasks[0]['description']}"
|
|
)
|
|
else:
|
|
reporting_tasks = len(w.filter_tasks({"status": "pending"}))
|
|
self.__pending_tasks = reporting_tasks
|
|
except:
|
|
self.__pending_tasks = "n/a"
|
|
|
|
@core.decorators.scrollable
|
|
def output(self, _):
|
|
"""Format the task counter to output in bumblebee."""
|
|
return "{}".format(self.__pending_tasks)
|
|
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|