Skip to main content

Taskwarrior 钩子的集合

项目描述

任务战士钩子

预提交 覆盖状态 PyPI 版本 下载 代码风格:黑色

描述

这是我在日常工作流程中使用的Taskwarrior 钩子的集合。它带有一个检测和易于注册的机制,应该可以很容易地开发和分发你自己的钩子。钩子被构造为tw_hooks/hooks目录下的类。

安装

从安装它PyPI:

pip3 install --user --upgrade tw_hooks

要直接从源安装最新版本:

pip3 install --user --upgrade git+https://github.com/bergercookie/tw-hooks

安装后,您必须运行install-hooks-shims可执行文件(此时它应该在您的$PATH. 运行它将在下面创建 shims(薄包装脚本)~/.task/hooks,以便向 Taskwarrior 注册所有钩子。

可用的挂钩

目前,以下钩子开箱即用:

钩 描述 活动
AutoTagBasedOnTags 检查提供的添加/修改任务中的标签列表,并在需要时添加其他标签 修改时,添加时
正确的标签名称 根据预定义的查找表更改标签名称 修改时,添加时
检测互斥标签 查看用户是否指定了不兼容的标签组合 修改时,添加时
PostLatestStartToI3Status 启动任务时,通过 DBus 将任务标题发送给 i3status-rs 修改时
WarnOnTaskCongestion 如果任务过多,则警告用户(截止日期:今天) 退出时

钩子的结构

这个包的目的是促进Taskwarrior hooks的开发和分发。为此install-hooks-shims,您可以轻松注册自己的钩子,而无需手动将项目复制到 taskwarrior 钩子位置。install-hooks-shims将安装一个垫片,它会在需要时自动调用你的钩子。

这是一个将在 Taskwarrior 退出时执行的 Taskwarrior 钩子的示例:

from tw_hooks import OnExitHook
class WarnOnTaskCongestion(OnExitHook):
    """Warn the user if there are too many tasks."""
    def _on_exit(self, _):  # <--- Mandatory to implement this signature
      # ...
      return 0

假设这个钩子在一个名为的模块中warn_on_task_congestion.py,并且这个模块的目录在你的 python 路径中(例如,通过显式添加它$PYTHONPATH),那么你可以运行以下命令向 taskwarrior 注册你的钩子:

install-hooks-shims -r warn_on_task_congestion

在您的下一个 Taskwarrior 操作期间,如果有太多的 due:today 任务,您应该会看到如下内容:

t add +test kalimera
Created task 719.
[WarnOnTaskCongestion] Too many due:today tasks [threshold=9]

挂钩 API

子类化以下基本挂钩之一,您的方法将在该事件期间被调用:

  • OnAddHook
    • 实现_on_add(self, added_task: TaskT)方法。
  • OnExitHook
    • 实现_on_exit(self, added_modified_tasks: List[TaskT])方法。
  • OnLaunchHook
    • 实现_on_launch(self)方法。
  • OnModifyHook
    • 实现_on_modify(self, original_task: TaskT, modified_task: TaskT) 方法。

使用说明install-hooks-shims

usage: Detect Taskwarrior hooks and register an executable shim for each one of them.
       [-h] [-t TASK_DIR] [-a] [-l]
       [-r REGISTER_ADDITIONAL [REGISTER_ADDITIONAL ...]]

optional arguments:
  -h, --help            show this help message and exit
  -t TASK_DIR, --task-dir TASK_DIR
                        Path to the taskwarrior main directory
  -a, --all-hooks       Install shims for all the hooks
  -l, --list-hooks      List the available hooks and exit
  -r REGISTER_ADDITIONAL [REGISTER_ADDITIONAL ...], --register-additional REGISTER_ADDITIONAL [REGISTER_ADDITIONAL ...]

Usage examples:
===============

- Install only the WarnOnTaskCongestion hook (assuming you've installed tw_hooks with e.g., pip3)
  install-hook-shims -r tw_hooks.hooks.warn_on_task_congestion

- Install all the available hooks from this repo (assuming you've installed tw_hooks with e.g., pip3)
  install-hook-shims --all-hooks

- Install a custom hook defined in .../dir/mod/hook_name.py. "dir" should be in your PYTHONPATH
  install-hook-shims -r mod.hook_name

- List all the available hooks and exit
  install-hook-shims --list-hooks

各种各样的

常问问题

  • 为什么我应该在原始任务战士钩子上使用它?
    • 因为这个包从命令行对输入任务进行繁重的预处理。它以稳健的方式这样做,确保无论天气如何都能做正确的事情,提供一两个命令并且对错误(例如,utf-8解码错误)具有稳健性。
    • 即使找不到所需的模块(例如,如果您尝试从无法导入的where task内部调用),它也会确保钩子安全失败。virtualenvtw-hooks
    • 它为您提供了一种面向类的方法,并允许您从同一个类安装多个挂钩,从而允许这些挂钩共享通用配置。
    • 它允许您将所有钩子放在一起并将它们作为一个包保存在文件系统中的其他位置,例如,在您的 dotfiles 中,并自动添加正确的胶水代码,以便 Taskwarrior 您的脚本无需显式放置~/.task/hooks或符号链接它。

自我推销

如果您觉得此工具有用,请在 Github 上为它加注星标 并考虑捐赠。

支持

如果某些东西不起作用,请随时打开一个问题。您也可以在#taskwarrior Libera Chat中找到我。

待办事项列表

请参阅问题列表 以了解我目前正在处理或有兴趣在不久的将来实施的事情。如果有什么你感兴趣的事情,不要犹豫,要么要求澄清,要么直接做 PR。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

tw_hooks-0.1.6.tar.gz (16.8 kB 查看哈希)

已上传 source

内置分布

tw_hooks-0.1.6-py3-none-any.whl (18.5 kB 查看哈希)

已上传 py3