org mode 输入时间时,如何同时输入重复间隔 (比如 +1w)repeater interval

同问同问!

比如这个时间约定<2019-01-10 星期四 19:00>

我是手动删除了最右边的尖括号“>”, 然后手工输入“ ++1w>”,才能达到我的目的。

另外,如果我不先删除最右边的尖括号“>”,在“<>”内无法直接输入任何内容。

也是希望在C-c dot 那里带入“++1w”。

太棒了,这个define-advice是有用的,不过只能在C-c .操作后直接加入repeater, 不能加时刻然后再加repeater。

改一下匹配条件:

(define-advice org-time-stamp (:around (fn &rest args) insert-escaped-repeater)
  ;;---------------------------
  ;; C-c . \+1w RET ;; => <2020-05-23 Sat +1w>
  ;; C-c . \-1w RET ;; => <2020-05-23 Sat -1w>
  ;;---------------------------
  (apply fn args)
- (when (string-match "^\\\\\\([\\+\\-].*\\)" org-read-date-final-answer)
+ (when (string-match "\\\\\\([\\+\\-].*\\)" org-read-date-final-answer)
    (save-excursion
      (backward-char)
      (insert " "
              (string-trim-right
               (match-string 1 org-read-date-final-answer))))))

输入 +1w \+2w


EDIT:本来这个 advice 就是这么写的,我在盖 #9 楼的时候临时给正则表达式加了个 ^,没想到反而限制了它的用途。

3 个赞

解决了!

喜大普奔!帖子里面求解的哥们儿姐们儿们,这个问题解决了。 @Nasy,上面24楼这个程序已经完美解决我的问题了。我认为我的问题就是你的问题,你试过很香就勾选一下解决方案吧!

谢谢 @twlz0ne! 膜了,哈哈哈!

我爱这个论坛!

这么设置之后,跟插入一周后的时间,不冲突吗?

我好久没用过插入一个时间段的设置了,我看手册试试。

我试了是没冲突,乃再看看?我 org 其实用的感觉还没有乃多呢(

@laub 其实,这个还不完全,虽然已经很棒了!

完整的 repeater interval 还有这种写法:

<2020-05-23 Sat .+1w -2d>

. 倒是好解决,[\\+\\-][\\+\\-\\.],但是再来一个 -2d 就(

If you need both a repeater and a special warning period in a deadline entry, the repeater should come first and the warning period last

DEADLINE: <2005-10-01 Sat +1m -3d>

你可以改一下 “。*” 再加个循环

我比较菜,只会用文档中现成的功能中的一部分。很少再去往下想一层。

只需输入一次转移符:\+1w -2d => <2020-05-25 Mon +1w -2d>,这就是匹配规则不写死的“好处”。

当然你也可以把匹配规则订得严格一点,然后循环处理 org-read-date-final-answer

试了下这样也能在org-schedule时输入repeater,就是第二次编辑的时候如果重新输入repeater会出现bug。。。

另外请问如何在advice-add的时候pass参数给函数?我想把这两个define-advice写成一个defun和两个advice-add。。。

-  (define-advice org-time-stamp (:around (fn &rest args) insert-escaped-repeater)
+  (define-advice org--deadline-or-schedule (:around (fn &rest args) insert-escaped-repeater)
  ;;---------------------------
  ;; C-c . \+1w RET ;; => <2020-05-23 Sat +1w>
  ;; C-c . \-1w RET ;; => <2020-05-23 Sat -1w>
  ;;---------------------------
  (apply fn args)
  (when (string-match "\\\\\\([\\+\\-].*\\)" org-read-date-final-answer)
    (save-excursion
-     (backward-char)
+     (backward-char 2)
      (insert " "
              (string-trim-right
               (match-string 1 org-read-date-final-answer))))))

我来施个魔法

所见即所得哟 不用记 不用查呦

这个厉害,,能教下怎么实现的吗?。。

哦,对,我发现是我的 org-display-custom-times 导致的 +1w -2d 没显示了 233

海贼王罗杰说的那句话:代码就在那里,去拿吧!

啊这 :joy:

请问这个农历是怎么做到的?看起来挺好用的

calendar-mode-line-format

可以自定义