V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SuperMild
V2EX  ›  分享创造

一个简单好用的命令行 todo 工具(兼周期提醒计划)

  •  
  •   SuperMild ·
    ahui2016 · 2022-01-09 09:57:10 +08:00 · 2410 次点击
    这是一个创建于 831 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近我突然喜欢做命令行工具了,命令行的好处是跨平台更轻松,也不需要花时间搞样式(比如现在随便做个 GUI 工具都要考虑提供白天黑夜两套主题)。

    命令行 todo list 工具有很多,但要么功能非常复杂,而功能简单的又很可能缺少我需要的功能。

    为了解决这个矛盾,获得一个功能很少很简单,同时我想要的功能都有的工具,就只能自己做了。

    simple todo

    我做的这个工具名为 simple todo, 也许不能完全满足你的需求,但你可以参考,可以修改,本工具的代码量很小,都是些简单的 Python 语句,没有啥复杂算法,也没啥奇技淫巧,而且结构清晰,变量命名认真,必要的地方都有注释。

    主要功能

    1. 简便、快捷地临时记录待办事宜;
    2. 周期提醒,可设置每周、或每月、每年重复提醒。

    哲学

    每一个效率工具,都体现了一种事务管理哲学。本工具有两个主要理念:

    理念 1: 临时待办事项必须尽快清理,不可长期积压。
    理念 2: 功能多不一定好,同时代码越少越好。(代码少 bug 就少,容易维护,容易修改)

    安装

    pip install simpletodo
    

    具体功能与使用方法

    基本的功能都实现了:

    • todo 打印待办列表
    • todo add 添加事项
    • todo done 标记为已完成(移至已完成列表)
    • todo redo 从已完成列表移至待办列表
    • todo edit 修改事项内容描述
    • todo delete 彻底删除一个事项
    • todo clean 清空已完成列表

    还做了一些便利功能:

    • todo copy 复制指定事项的描述到剪贴板
    • todo --where 查看程序本身的位置、数据库(一个 json 文件)的位置
    • todo --dump 打印数据库( json )的全部内容

    周期提醒

    除了上述基本功能之外,还可以设置周期日程计划,比如:

    todo repeat 2 -every month -from today
    

    使用如上所示的命令,可以让序号 2 的事项每个月重复提醒一次,从今天开始。假设今天是 1 月 5 日,那就会在每个月 5 日自动把该事项添加进待办列表中。

    其中,还可以选择 -every week-every year

    -from 后面指定具体日期,比如 -from 2022-2-28, 可以使用的简称只有 todaytomorrow

    源码

    源码及更详细的说明请看 https://github.com/ahui2016/simple-todo

    13 条回复    2022-01-10 23:50:35 +08:00
    hei1000
        1
    hei1000  
       2022-01-09 10:06:43 +08:00 via Android
    有没有计划做成 tui 的
    SuperMild
        2
    SuperMild  
    OP
       2022-01-09 10:26:56 +08:00
    @hei1000 没有,我这个项目的一大理念是代码要尽可能少,只有确实很要必要的功能才舍得多写两行代码。

    我希望它不仅表面上看起来简单,而且翻看里面看代码也是简单的、容易做些小修改的。
    yyingx
        3
    yyingx  
       2022-01-09 11:48:10 +08:00
    你好楼主!最近在学习 python,对你这个挺感兴趣的,但安装不了,见图
    yyingx
        4
    yyingx  
       2022-01-09 11:50:17 +08:00
    hsfzxjy
        5
    hsfzxjy  
       2022-01-09 12:10:54 +08:00 via Android
    @yyingx 楼主这个要 python3.10+
    SuperMild
        6
    SuperMild  
    OP
       2022-01-09 13:15:58 +08:00
    @yyingx 不好意思啊,我忘了说由于使用了 Python 3.10 的新特性,比如 type union operator, pattern matching 等,要先把 Python 更新到最新版。这个说明我要加到 readme 里,谢谢提醒。
    emberzhang
        7
    emberzhang  
       2022-01-09 18:14:39 +08:00
    有点类似 cheat 的感觉,--where 的位置希望能修改,方便跨设备同步
    SuperMild
        8
    SuperMild  
    OP
       2022-01-09 18:52:19 +08:00
    @emberzhang 这个可以有,我后面加上,谢谢建议
    Zien
        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;
    SuperMild
        10
    SuperMild  
    OP
       2022-01-10 09:24:10 +08:00
    @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. 也许有人需要用到大量循环计划,对于这种情况,可能做一个批量导入功能会更好。(如果有用户需要的话,我可以做)
    Zien
        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 的意义重复。
    SuperMild
        12
    SuperMild  
    OP
       2022-01-10 21:45:19 +08:00
    @Zien 谢谢补充,虽然我觉得这些问题比较轻微不打算改动,但你说的也很有意义,其他人看到可作参考。
    SuperMild
        13
    SuperMild  
    OP
       2022-01-10 23:50:35 +08:00
    @emberzhang 更改数据库位置的功能做好了,还新增了一个随机显示格言 /座右铭的功能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1228 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:56 · PVG 01:56 · LAX 10:56 · JFK 13:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.