如何为带参数的交互式功能/命令创建Emacs键绑定?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为带参数的交互式功能/命令创建Emacs键绑定?相关的知识,希望对你有一定的参考价值。
使用功能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")))
这两种方式都无法显示用于选择日期的交互式菜单。它提示我用光标键选择一个日期,然后按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模式的主要模式键盘映射,它overrides >> Org模式缓冲区中的全局映射。参见Acive 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)
以上是关于如何为带参数的交互式功能/命令创建Emacs键绑定?的主要内容,如果未能解决你的问题,请参考以下文章