如何在 Org-mode 中指定重复任务的结束日期?

从某个时间开始设置重复任务可以这样设置:
SCHEDULE: <2016-07-24 Sun 10:00-12:00 ++1w>
请教一下有没有方法可以指定这个周期任务的结束日期呢?
作为例子:
如何设置从2016年7月24日开始到2016年12月1日,每个周日的上午10:00-12:00进行某项任务?

M-x org-deadline 就可以了, 按键是 C-c C-d

谢谢zilong
我试了一下用 DEADLINE,但是好像并不能实现。
假如 算法分析与设计 这门课在1~8周和10~18周的周一开课,上课时间是10~12点,但中间这个第9周要怎么跳过呢。

不是很清楚你需要的解决方案是否存在,提供一个我个人的解决方案

第九周cancel,第十八周 C–1 C-t C-d org-manual

如果C–被绑定(比如我绑定了减小字号), 使用 C-u -1 C-t C-d (在agenda中就是 C-u -1 t d) 可以实现完成重复任务。

** TODO 上午10:00-12:00 算法分析与设计
  <%%(and (diary-block 7 24 2016 8 24 2016) (and (= 0 (calendar-day-of-week date) ) (not (diary-block 8 1 2016 8 8 2016))))>

我不知道你的第几周到第几周的精确日期是多少,但是我上面的可以当作参考。 上面我写的是:从 2016-7-24 到 2016-8-24 每周日,但是不包含 2016-8-1 到 2016-8-8(这个是你要跳过的日期)

至于 schedule 的时间,只能写在 headline 里面了。

Reference: emacs - org-mode schedule weekly event for a period - Stack Overflow

4 个赞

(info "(org) Repeated tasks") 里有讲可以用一个 DEADLINE 作为重复任务的结束日期:

You may have both scheduling and deadline information for a specific task. If the repeater is set for the scheduling information only, you probably want the repeater to be ignored after the deadline. If so, set the variable org-agenda-skip-scheduled-if-deadline-is-shown' to repeated-after-deadline’.

因此,依照你的例子:

* TODO 从2016年7月24日开始到2016年12月1日,每个周日的上午10:00-12:00进行某项任务
  SCHEDULED: <2016-07-24 Sun 10:00-12:00 ++1w> DEADLINE: <2016-12-01 Thu>

@guanghui.qu 所提供的方法的问题是:不能 mark 那个任务为 DONE,因此就不能知道上周有没有完成这个任务。

我那种方法只要特定日期过了就不会在 agenda 显示,所以不存在 mark done 的问题。而你提供的方法无法过滤某一时间段,而且如果上一个任务没有完成,会一直残留在 agenda view 里面。

我的意思是不能 mark done 的话就不是一个「任务」了,可以算作一个「提醒」,前者有状态的改变,后者没有,过了就过了。

确实不能,但是 OP 只是要求「指定重复任务的结束日期」。

我想问问,这种在headline下写 <%% script代码> 的写法是什么意思?在哪里有说明?

(org) Timestamps 有讲:

DIARY-STYLE SEXP ENTRIES
     For more complex date specifications, Org mode supports using the
     special sexp diary entries implemented in the Emacs calendar/diary
     package(3).  For example with optional time

          * 22:00-23:00 The nerd meeting on every 2nd Thursday of the month
            <%%(diary-float t 4 2)>

具体什么意思需要看相应的 docstring,比如上面的 diary-float 大概是用来指定某个月的第几个星期几。

我昨天也不明白,打开 Org Mode 的 info manual 后,C-s <%% 就搜到了。

1 个赞

请问,其中的重复标志“++1w”,你在emcas中是怎么输入的?有快捷输入方式吗?我在C-u C-c C-. 的日历界面底行输入了重复标志后,org文件的日期戳里面还是看不到这个重复。

<2016-07-24 Sun 10:00-12:00 ++1w>

分成两个子项目不就完事了

* 算法分析与设计
** 算法分析与设计课程1
** 算法与分析与设计课程2

zilong你好!我按照这个设置之后 再agenda中仍然显示了过去的时间 我使用最新的develop分支的spacemacs。请问有更多的信息可以帮助吗