我使用org-mode的速度键很多,我希望将键序列作为速度键,以便于记忆。在这种情况下,我希望"i n"
插入一个子标题,并"i t"
插入一个待办事项副标题。
我知道我可以使用像这样的前缀键映射来设置序列:
(progn
(define-prefix-command 'my-org-speed-command-insert-subheading-map)
(define-key my-org-speed-command-insert-subheading-map (kbd "n") 'jan/org-insert-subheading)
(define-key my-org-speed-command-insert-subheading-map (kbd "t") 'jan/org-insert-todo-subheading)
)
(global-set-key (kbd "C-c i") my-org-speed-command-insert-subheading-map)
按"C-c i n"
和"C-c i t"
调用相应的函数。细
现在,当我将"my-org-speed-command-insert-subheading-map"
作为org speed命令调用的函数时
(setq org-speed-commands-user (quote ((":" . helm-M-x)
("a" . org-toggle-archive-tag)
("i" . my-org-speed-command-insert-subheading-map)
… … …
)))
它没有按预期工作。我做错了什么?
我知道我不能像实际命令那样调用前缀映射,因此在与global-set-key
绑定时不会引用它,所以我怀疑问题与此有关。但那我怎么称呼呢?或者是否有一种更简单的方法来实现我的目标,我根本没有看到?
编辑: 我找到了一种方法来解决这个问题,现在通过让#34; i" speed key调用此函数:
(defun my-org-i-map-function ()
(let (key1)
(setq key1 (read-key-sequence "press \"i\" for a simple subheading, \"t\" for a TODO-subheading"))
(cond
((equal key1 "i")(jan/org-insert-subheading nil))
((equal key1 "t")(jan/org-insert-todo-subheading nil))
(t (message "you didn't set a function for this key sequence")))
))
但这是一个相当丑陋的解决方案,因为我必须为每个第一个字母调用不同的函数,第二个和第三个字母隐藏在函数定义中。因此,从长远来看,广泛使用这种方法必然会带来许多混乱。
答案 0 :(得分:2)
答案 1 :(得分:0)
我很确定你只能使用单个字母来表示速度命令。例如。 org-speed-command-activate
的文档字符串说:
"用于激活单字母速度命令的挂钩。
org-speed-commands-default
指定最小命令集。 使用org-speed-commands-user
进行进一步自定义。"