23 次发布
0.3.8 | 2024 年 5 月 27 日 |
---|---|
0.3.7 | 2024 年 1 月 31 日 |
0.3.5 | 2023 年 10 月 7 日 |
0.3.4 | 2023 年 7 月 6 日 |
0.1.4 | 2018 年 11 月 4 日 |
#84 在 文件系统 类别中
1,360 每月下载量
450KB
11K SLoC
notnow
notnow 是一个基于终端的任务/TODO 管理程序。
它的两个主要目标是允许基于标签的任务过滤,以及完全由用户自定义的标签和视图,并支持根据 RFC 5545 使用 CalDAV 协议进行服务器同步的 iCalendar 风格的 TODO 项目,如 RFC 4791 所规定。
状态
notnow 正在积极使用,没有已知的问题。大多数期望的功能都已存在,但并非所有功能都已集成到用户界面中
- 基于标签的过滤已实现且功能完全,但并非所有方面都可通过用户界面访问
- 程序将任务存储为 iCalendar TODO 项目
- 它松散地遵循 Vdir 存储格式,可以通过 vdirsyncer 在不同的系统之间同步任务
- 考虑实现不依赖 Python 的 "原生" CalDAV 支持,但目前还没有立即的计划
配置
程序将配置存储在 $XDG_CONFIG_HOME/notnow/
(通常默认为 ~/.config/notnow/
) 之下。配置有两方面
notnow.json
是一个 JSON 文件,用于存储基本程序状态,例如颜色和要显示的视图("选项卡")- 当不存在时,将使用默认值
- 一旦用户在程序中保存数据,此文件将自动创建并包含默认内容(见下文)
tasks/
是一个包含单个任务文件的文件夹- 文件
00000000-0000-0000-0000-000000000000
是特殊的,包含标签信息等任务元数据 - 程序会在添加任务时创建这些文件
- 文件
注意:如果您是版本 0.2.*
中 notnow 的用户,并且想要将管理任务和配置迁移到版本 0.3
,可以参考 var/config-conversion-v02-to-v03.sh 脚本。
vdirsyncer
如果您想要同步任务与您的 CalDAV 启用的日历,或者在不同系统上运行 notnow 之间共享一组任务,推荐使用 vdirsyncer。
以下是一个配置模板,它指定了相关设置,以及一些有意见的设置(通常存储在 $XDG_CONFIG_HOME/vdirsyncer/config
)
[general]
status_path = "~/<some-path>/vdirsyncer-state/status/"
[pair todos]
a = "todos_remote"
b = "todos_local"
collections = ["from a", "from b"]
conflict_resolution = ["command", "nvim", "-d"]
[storage todos_remote]
type = "caldav"
item_types = ["VTODO"]
url = "https://<url-to-calendar>"
username = "<username>"
password.fetch = ["command", "sh", "-c", "pass <calendar-provider-entry> | head -n1"]
read_only = false
[storage todos_local]
type = "filesystem"
path = "~/<some-path>/vdirsyncer-state/todos/"
fileext = ""
encoding = "utf-8"
请参阅其 文档 了解更多细节。
配置就绪后,一旦您执行了 vsyncdir discover
,在 ~/<some-path>/vdirsyncer-state/todos/
下的符号链接,将自动创建的子文件夹替换为 $XDG_CONFIG_HOME/notnow/tasks/
的引用。接下来,使用 vsyncdir sync
同步任务。
请注意,任务同步应在运行 notnow 之前或之后进行,以防止与程序同时发生的更改发生冲突。
用法
由于是终端基础,notnow 通过其 UI 进行控制,而不是通过命令行参数。该程序旨在在可能的情况下反映 Vi 风格的绑定。键绑定如下
键(s) | 功能 |
---|---|
a | 添加新任务 |
e | 编辑选中任务的摘要 |
t | 编辑选中任务的标签 |
d | 删除选中任务 |
y | 复制选中任务 |
p | 粘贴之前复制的任务 |
j | 向下移动任务选择 |
k | 向上移动任务选择 |
J | 向下移动选中任务 |
K | 向上移动选中任务 |
g | 选择当前标签上的第一个任务 |
G | 选择当前标签上的最后一个任务 |
Space | 切换选中任务的完成状态 |
h | 选择左侧标签 |
l | 选择右侧标签 |
H | 向左移动标签 |
L | 向右移动标签 |
1-9 | 选择标签 #x |
0 | 选择最后一个标签 |
` | 选择上一个标签 |
/ | 开始向前搜索任务 |
? | 开始向后搜索任务 |
n | 继续向前搜索任务 |
N | 继续向后搜索任务 |
* | 开始在其他视图中向前搜索当前 |
选中的任务 | |
Return | 接受文本输入 / 编辑任务细节 |
Esc | 取消文本输入 |
w | 将任务保存到文件 |
q | 退出程序 |
此外,当输入文本时(例如,在添加或编辑任务时),退格键、删除键、home键、end键以及左右光标键的功能与它们最常见的功能类似。
程序支持使用readline
功能标志构建时的libreadline
风格的任务输入。也就是说,当实际输入文本(而不是仅按下一个键,例如选择不同的任务)时,将遵守libreadline
绑定。
示例
如果您只是想尝试使用一些程序创建的任务来运行程序,可以使用现有的示例
$ cargo run --example=with-test-data --features=test
请注意,如果保存,任务将存储在临时目录中,不会覆盖上面提到的特定于用户的配置。
依赖项
~7-20MB
~206K SLoC