如何设置组织模式速度键序列

时间:2017-09-14 08:25:23

标签: emacs org-mode key-bindings

我使用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")))
    ))

但这是一个相当丑陋的解决方案,因为我必须为每个第一个字母调用不同的函数,第二个和第三个字母隐藏在函数定义中。因此,从长远来看,广泛使用这种方法必然会带来许多混乱。

2 个答案:

答案 0 :(得分:2)

https://github.com/abo-abo/worf

GNU Emacs次要模式,为org-mode

提供类似vi的绑定

看一下或许" hydra"来自同一作者的包。

答案 1 :(得分:0)

我很确定你只能使用单个字母来表示速度命令。例如。 org-speed-command-activate的文档字符串说:

  

"用于激活单字母速度命令的挂钩。   org-speed-commands-default指定最小命令集。   使用org-speed-commands-user进行进一步自定义。"