如何为带有参数的交互式组织模式函数/组织模式命令创建 Emacs 键绑定?
How to create Emacs key bindings for interactive org-mode functions / org-mode commands with arguments?
使用函数 org-deadline
,可以在 Emacs 组织模式中为任务定义截止日期。描述如下所示:
(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")))
这两种方法都失败了,因为 select 日期的交互式菜单仍然显示。它提示我使用光标键 select 一个日期,然后使用 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
)。这是 Org 模式的主要模式键盘映射,它 覆盖 Org 模式缓冲区中的全局映射。参见 Active keymaps in the Emacs Lisp manual - 事实上,阅读(并重读)整章是个好主意。
你应该做两件事:在 org-mode-map
中定义键,而不是在全局映射中;并确保密钥尚未定义(或者至少您不介意丢失其当前设置)。例如 C-c s
在 org-mode-map
中未定义(默认情况下),所以我会做
(define-key org-mode-map (kbd "C-c s") 'org-deadline-in-one-week)
使用函数 org-deadline
,可以在 Emacs 组织模式中为任务定义截止日期。描述如下所示:
(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")))
这两种方法都失败了,因为 select 日期的交互式菜单仍然显示。它提示我使用光标键 select 一个日期,然后使用 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
)。这是 Org 模式的主要模式键盘映射,它 覆盖 Org 模式缓冲区中的全局映射。参见 Active keymaps in the Emacs Lisp manual - 事实上,阅读(并重读)整章是个好主意。
你应该做两件事:在 org-mode-map
中定义键,而不是在全局映射中;并确保密钥尚未定义(或者至少您不介意丢失其当前设置)。例如 C-c s
在 org-mode-map
中未定义(默认情况下),所以我会做
(define-key org-mode-map (kbd "C-c s") 'org-deadline-in-one-week)