前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >org-agenda 设置每月最后一天为 deadline

org-agenda 设置每月最后一天为 deadline

作者头像
飞驰的西瓜
发布2022-07-26 16:42:46
5620
发布2022-07-26 16:42:46
举报
文章被收录于专栏:EmacsTalk

在 org-agenda 中,支持设置重复的任务[3],示例如下:

代码语言:javascript
复制
** TODO Pay the rent
   DEADLINE: <2005-10-01 Sat +1m>

日期最后的 +1m 表示每个月重复一次,其他的时间单位还有 y 年、w 周、d 天、h 时。在将 TODO 任务转为 DONE 时,org 会自动开启新一轮的 deadline,比如上面任务完成一次后会变成:

代码语言:javascript
复制
** TODO Pay the rent
DEADLINE: <2005-11-01 Tue +1m>
:PROPERTIES:
:LAST_REPEAT: [2022-01-08 Sat 23:33]
:END:
- CLOSING NOTE [2022-01-08 Sat 23:33]

但是这里有一个问题,即 org 月首时间循环是没问题的,但是不能正确支持按月末时间循环。如果上面示例中的日期变成 2005-01-31 ,执行一次 DONE 后,日期则变成了 2005-03-03 ,而不是 2005-02-28 。网上有类似提问:Schedule org task for last day of every month?[4],回答里介绍了两种方法:

1.增加 diary-last-day-of-month 函数,

2.用 org-clone-subtree-with-time-shift 来把十二个月的代办全部生成出来

第一种方法我测试了下没有成功,于是转向第二种,第二种方法看上去挺笨的,但是其实更灵活,可以灵活调整每个月的时间。但是直接用 org-clone-subtree-with-time-shift来生成不是很灵活,DEADLINE 倒是可以动态生成,但是标题都是一样的。比如:

代码语言:javascript
复制
* TODO My Task
SCHEDULED: <2022-01-30 Sun>

用 1m 作为间隔,拷贝 4 份,效果如下:

代码语言:javascript
复制
* TODO My Task
SCHEDULED: <2022-01-30 Sun>
#+END_SRC
用 1m 作为间隔,拷贝 4 份,效果如下:
#+BEGIN_SRC emacs-lisp
* TODO My Task
SCHEDULED: <2022-01-30 Sun>
* TODO My Task
SCHEDULED: <2022-03-02 Wed>
* TODO My Task
SCHEDULED: <2022-03-30 Wed>
* TODO My Task
SCHEDULED: <2022-04-30 Sat>
* TODO My Task
SCHEDULED: <2022-05-30 Mon>

如果生成标题时能传入变量就好了。这里突然想到之前用的 abo-abo/tiny[5] 这个插件,它可以非常方便的生成有规律的序列。对于我这里的需求,可以输入以下模板:

代码语言:javascript
复制
m1\n12 |* TODO %d 月 \n<2022-%02d-30>

然后光标移动到行末,然后 M-x tiny-expand ,就会得到如下的文本:

代码语言:javascript
复制
* TODO 1 月
<2022-01-30>
* TODO 2 月
<2022-02-30>
* TODO 3 月
<2022-03-30>
* TODO 4 月
<2022-04-30>
... 省略后面的

然后选中所有的 2022(可以用 multiple-cursors[6] 的 mc/mark-all-like-this ),然后执行 C-c C-c ,这样日期就会修正,效果如下:

代码语言:javascript
复制
* TODO 1 月
<2022-01-30 Sun>
* TODO 2 月
<2022-03-02 Wed>
* TODO 3 月
<2022-03-30 Wed>
* TODO 4 月
<2022-04-30 Sat>

最后再手动调整下 2 月份的日期即可,其他有 31 天的月可以忽略,毕竟差一天也能接受。如果对 tiny-expand、multiple-cursors 等插件比较熟悉,不到一分钟就可以完整上面的配置。

这就是用基于纯文本的 org 来管理代办的好处,可以用自己熟悉的命令来实现自己的个性化需求。

EmacsTalk 2022 年代办

引用链接

[1] Podcast 嘉宾: https://github.com/emacstalk/joinus [2] 投稿: https://github.com/EmacsTalk/emacstalk.github.io/issues/new [3] 重复的任务: https://orgmode.org/manual/Repeated-tasks.html [4] Schedule org task for last day of every month?: https://emacs.stackexchange.com/questions/31683/schedule-org-task-for-last-day-of-every-month [5] abo-abo/tiny: https://github.com/abo-abo/tiny [6] multiple-cursors: https://github.com/magnars/multiple-cursors.el

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 EmacsTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引用链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档