我想知道如何使用密钥作为其他密钥的前缀和命令本身。
我可以使用key-chord.el
对此进行排序,方法是将键和弦绑定到第一个键后面的命令,但它有几个问题
easy-kill
和expand-region
等一些软件包支持此功能,但它们具有复杂的代码库,而且我的lisp技能并不引人注目......
我将如何设法做到这一点?我真的希望<menu>
绑定到evil-ex
,但我还想绑定<menu>
作为所有移动(如箭头键)的前缀,将标记设置为一个无弦的cua-selection-mode
。
由于邪恶之前没有动作,也没有自我插入的动作,这将是一个完美的用例。 <menu>
是完美的,因为它紧挨着箭头键和其他动作键(例如,结束,回家等)并且未经修改。
答案 0 :(得分:5)
如果我理解你想要什么,我建议最好忘记计时器并等待一点延迟(即,将<menu>
作为命令的意图与用作前缀键的意图区分开来)。
我推荐的方法,并且使用了很多,是定义前缀键(在您的情况下,例如,<menu>
),然后将您正在考虑使用的命令用于{{1}在<menu>
上。这就像点击<menu> <menu>
一次并试图依靠一些微小的延迟等一样快。
它允许您认为在<menu>
上的命令(实际上它在<menu>
上)为 可重复 。
我通常使这样的命令可重复,以便<menu> <menu>
重复命令一次,<menu> <menu> <menu>
重复两次,依此类推。 IOW,我倾向于将这个技巧用于我真正想要轻松重复的命令,只需按住一个键即可。
这是一个简单的例子,从我在2009年提出的更为一般性的建议<menu> <menu> <menu> <menu>
,HERE。在该邮件列表消息中,如果向下滚动到#9,您将看到使用此类密钥的提议,#12显示相同的示例,#15直接解决您的问题。主题标题是“有蛋糕会吃,吃蛋糕会有 - krazy key koncept kontroversy ”,其主题 正是你提出的问题
emacs-devel@gnu.org
正如我所说,我长期以来一直使用这种技术能够(a)具有“重复前缀键”和(b)还有其他键定义。
答案 1 :(得分:1)
似乎你想要smartrep这样的东西,它可以指定一个密钥作为几个命令的公共前缀。开箱即用的唯一一件事就是将命令绑定到公共前缀键,因此您需要稍微弄清楚smartrep
内部的内容。你所追求的功能是
(smartrep-read-event-loop
'((KEY1 command)
(KEY2 command)
...))
这是一段可以帮助您入门的代码:
(defun my-command-with-prefix ()
(interactive)
(invoke-prefix-command)
(initialize-event-loop)
;; The form
;;
;; (condition-case ERR FORM (quit QUIT-HANDLER))
;;
;; is there to catch C-g key presses and make sure that
;; finalization code is run.
(condition-case e
(smartrep-read-event-loop
'(("a" . command1)
("b" . command2)
("c" . command3)))
(quit nil))
;; finalize loop
(finalize-event-loop))
上面的代码段实际上是here找到的代码的简化版本。