使用函数org-deadline
,可以在Emacs org模式下定义任务的截止日期。描述如下所示:
(org-deadline ARG &optional TIME)
Insert the "DEADLINE:" string with a timestamp to make a deadline.
With one universal prefix argument, remove any deadline from the item.
With two universal prefix arguments, prompt for a warning delay.
With argument TIME, set the deadline at the corresponding date. TIME
can either be an Org date like "2011-07-24" or a delta like "+2d".
我想创建一个键绑定,直接将截止日期设置为将来的 1 周。因此,键绑定应调用org-deadline
函数并给出+1w
作为参数。编写(org-deadline nil "+1w")
,然后在该区域执行eval
按预期工作。
但是为什么我不能将其绑定到密钥?我尝试了以下两个选项:
(defun org-deadline-in-one-week () (interactive) (org-deadline nil "+1w")) (global-set-key (kbd "C-c C-s") 'org-deadline-in-one-week)
(global-set-key (kbd "C-c C-s") (lambda () (interactive) (org-deadline nil "+1w")))
这两种方式都失败了,因为用于选择日期的交互式菜单仍然显示。它提示我使用光标键选择一个日期,然后使用RET
确认。但我想以非交互方式使用交互功能,只需将截止日期设置为未来一周。我错过了什么?
更新:我正在使用Org mode version 9.1.9 (release_9.1.9-65-g5e4542 @ /usr/share/emacs/26.1/lisp/org/)
。
您遇到了键盘映射问题:C-c C-s
绑定在org-mode-map
(到org-schedule
(。这是组织模式的主要模式键盘映射,它会覆盖组织模式缓冲区中的全局映射。参见 Emacs Lisp 手册中的 Active 键盘映射 - 事实上,阅读(并重读(整章是个好主意。
你应该做两件事:在org-mode-map
中定义键,而不是在全局映射中;并确保键尚未定义(或者至少你不介意丢失其当前设置(。例如,C-c s
在org-mode-map
中未定义(默认情况下(,所以我会这样做
(define-key org-mode-map (kbd "C-c s") 'org-deadline-in-one-week)