
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")
            w = TaskWarrior(config_filename=taskrc)
            pending_tasks = w.filter_tasks({"status": "pending"})
            self.__pending_tasks = str(len(pending_tasks))
        except:
            self.__pending_tasks = "n/a"

    def output(self, _):
        """Format the task counter to output in bumblebee."""
        return "{}".format(self.__pending_tasks)


# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4


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

Add active-task display and scrolling
Add active-task display and scrolling

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.

  
  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:
-             pending_tasks = w.filter_tasks({"status": "pending"})
+                 reporting_tasks = len(w.filter_tasks({"status": "pending"}))
-             self.__pending_tasks = str(len(pending_tasks))
+             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
  
Add active-task display and scrolling
## Code Before:

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")
            w = TaskWarrior(config_filename=taskrc)
            pending_tasks = w.filter_tasks({"status": "pending"})
            self.__pending_tasks = str(len(pending_tasks))
        except:
            self.__pending_tasks = "n/a"

    def output(self, _):
        """Format the task counter to output in bumblebee."""
        return "{}".format(self.__pending_tasks)


# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

## Instruction:
Add active-task display and scrolling
## Code After:

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
