最近我突然喜欢做命令行工具了,命令行的好处是跨平台更轻松,也不需要花时间搞样式(比如现在随便做个 GUI 工具都要考虑提供白天黑夜两套主题)。
命令行 todo list 工具有很多,但要么功能非常复杂,而功能简单的又很可能缺少我需要的功能。
为了解决这个矛盾,获得一个功能很少很简单,同时我想要的功能都有的工具,就只能自己做了。
我做的这个工具名为 simple todo, 也许不能完全满足你的需求,但你可以参考,可以修改,本工具的代码量很小,都是些简单的 Python 语句,没有啥复杂算法,也没啥奇技淫巧,而且结构清晰,变量命名认真,必要的地方都有注释。
每一个效率工具,都体现了一种事务管理哲学。本工具有两个主要理念:
理念 1: 临时待办事项必须尽快清理,不可长期积压。
理念 2: 功能多不一定好,同时代码越少越好。(代码少 bug 就少,容易维护,容易修改)
pip install simpletodo
基本的功能都实现了:
还做了一些便利功能:
除了上述基本功能之外,还可以设置周期日程计划,比如:
todo repeat 2 -every month -from today
使用如上所示的命令,可以让序号 2 的事项每个月重复提醒一次,从今天开始。假设今天是 1 月 5 日,那就会在每个月 5 日自动把该事项添加进待办列表中。
其中,还可以选择 -every week
或 -every year
。
-from
后面指定具体日期,比如 -from 2022-2-28
, 可以使用的简称只有 today
与 tomorrow
。
源码及更详细的说明请看 https://github.com/ahui2016/simple-todo
1
hei1000 2022-01-09 10:06:43 +08:00 via Android
有没有计划做成 tui 的
|
2
SuperMild OP |
3
yyingx 2022-01-09 11:48:10 +08:00
|
4
yyingx 2022-01-09 11:50:17 +08:00
|
6
SuperMild OP @yyingx 不好意思啊,我忘了说由于使用了 Python 3.10 的新特性,比如 type union operator, pattern matching 等,要先把 Python 更新到最新版。这个说明我要加到 readme 里,谢谢提醒。
|
7
emberzhang 2022-01-09 18:14:39 +08:00
有点类似 cheat 的感觉,--where 的位置希望能修改,方便跨设备同步
|
8
SuperMild OP @emberzhang 这个可以有,我后面加上,谢谢建议
|
9
Zien 2022-01-10 08:29:00 +08:00 via iPhone
手机上瞄到看到单词的使用有点难受🙈,提一点英语方面的建议(不提 issue 直接偷懒评论啦):清空建议用 clear 而非 clean ;更新用 update/modify ( edit 和 add 意义重叠,而且偏打开 text editor 直接修改的意义);开始日期建议使用-s|start ;循环周期建议直接用-r 参数,或者直接设置参数表-m/y/d/w ( monthly/yearly/daily/weekly)表示循环;建议循环次数为-t 1/2/3 或者可以考虑增加-e|end 的设置循环结束时间的功能;打印所有建议命令为 todo list/lists;
|
10
SuperMild OP @Zien 非常感谢你的意见!(有人提意见我是非常开心的)
我说出我的考虑,你看看能不能说得通: 1. 由于打印列表是最最常用的功能,使用频率比其他功能高很多很多,因此不带任何参数的 todo 就用来做这个。 2. clear 有歧义,可以误解为清空全部项目,而这个功能只是清空“无用项目”,类似于清空垃圾桶、使数据库占用空间变小,因此才选择了 clean 这个词。简而言之,你理解为“清理无用项目”,语义就可以感觉自然了。 3. 修改功能,用 update 不太行,因为不存在新旧的问题,甚至条目的时间与排序都要保留不能改变,因此只是修改,而不是更新。我看别人做的 cli todo 工具,用 modify 和用 edit 的都有,比如这个 https://github.com/klaussinani/taskbook#usage 他清空已完成项目用了 clear ,修改描述用了 edit 。但好像 modify 是更地道一点,但单词更长,edit 也许也勉强能用?这点我不太确定。 4. 开始日期,目前可以用 -from, 也可以用 --start-from 5. 循环如果用 -r 参数,就要做到主命令里。现在我的程序结构是这样的,todo 是主命令,todo add [N], todo delete [N], todo repeat [N] 这些是子命令,如果使用 -r 参数,那么就会变成 todo -r [N], 鉴于循环周期也不算太常用,所以就不给它搞特殊了,让它和其它子命令保持一致就蛮好的。 todo repeat [N] --every month --start-from today, 这在语义上应该很自然吧? 6. 循环 -end 是个好功能,一般 todo 工具(特别是有强提醒的工具)最好有这个选项。但这个项目希望尽量简化,与其让用户在设置时去考虑循环次数或结束时间,不如让用户直接只管开始。由于这个工具没有强提醒,不用担心打扰用户,用户打印列表时看到有个已经不需要循环的项目,删除它就可以了。因此我判断是个可以被精简掉的功能。 7. 也许有人需要用到大量循环计划,对于这种情况,可能做一个批量导入功能会更好。(如果有用户需要的话,我可以做) |
11
Zien 2022-01-10 14:12:19 +08:00
@SuperMild 楼主用心了,我觉得你的解释蛮合理的,具体还有一些再补充如下:
2. 这样解释合理,我原本以为你要表达 empty 的意思,不过这个无用项目是如何定义的呢?只是指过期的吗?或者类似于 google keep 这类工具用的 archive 也不错。 3. update 其实不必按照新旧理解,就类似于 SQL 中的 update record 而非 brew update 中的升级,其实并不太矛盾。edit 类似于全部重新编辑(然后再 save ),而不只是更改某一部分。 4. 个人感觉,比起 start date 这种习惯表述,start from 这种比较像自然语言中的表达,不大符合参数化的计算机语言表达。 5. every 这种感觉太中式英语,大概都是 monthly 这种表达,而且和 repeat 的意义重复。 |
13
SuperMild OP @emberzhang 更改数据库位置的功能做好了,还新增了一个随机显示格言 /座右铭的功能。
|