问题描述
我想知道如何将一个键用作其他键的前缀和命令本身.
I'd like to know how to use a key as both a prefix for other keys and a command itself.
我可以使用
key-chord.el
来做到这一点,通过将键和弦绑定到第一个键后面的命令,但它有几个问题
I can sorta do this with
key-chord.el
, by binding the key chords to the commands following the first key but it has several issues
- 只能与字母数字键一起使用
- 这不是真的,因为我必须在它们超时之前快速按下按键
一些软件包,例如 easy-kill
和 expand-region
支持此功能,但它们具有复杂的代码库,而且我的 lisp 技能并不出色...
Some packages such as easy-kill
and expand-region
support this functionality, but they have complex codebases, and my lisp skills aren't spectacular...
我将如何设法做到这一点?我真的希望 绑定到
evil-ex
,但我也想绑定 作为所有动作(如箭头键)的前缀,将标记设置为无和弦
cua-selection-mode
.
How would I manage to do this? I'd really like <menu>
to be bound to evil-ex
, but I'd like to also bind <menu>
as a prefix for all movements (like arrow-keys) that sets the mark like a chordless cua-selection-mode
.
由于 evil-ex 后面没有动作并且没有动作自我插入,这将是一个完美的用例.<menu>
非常完美,因为它就在方向键和其他动作键(例如结束、主页等)旁边,并且没有经过修改.
Since evil-ex isn't followed by movements and no movement self inserts, this would be a perfect use-case. <menu>
is perfect because it's right next to the arrow keys and other motions keys (eg. end, home etc.) and it's unmodified.
推荐答案
看来你想要smartrep 之类的东西 允许指定一个键作为几个命令的公共前缀.您唯一会缺少开箱即用的东西是将命令绑定到公共前缀键,因此您需要稍微了解 smartrep
内部结构.你所追求的功能是
It seems that you want something like smartrep which enables specifying a key as a common prefix for several commands. The only thing you'll be missing out-of-the-box is binding a command to the common prefix key, so you'll need to get your hands dirty with smartrep
internals a bit. The function you're after is
(smartrep-read-event-loop
'((KEY1 command)
(KEY2 command)
...))
这里有一段代码可以帮助您入门:
Here's a piece of code that may get you started:
(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))
上面的代码片段本质上是发现的代码的提炼版本这里.
The snippet above is essentially a distilled version of code found here.
这篇关于使用 key 作为前缀和命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!