使用key作为前缀和命令

Pyt*_*Nut 2 emacs elisp

我想知道如何将键用作其他键的前缀和命令本身。

  1. 我可以key-chord.el通过将琴弦和第一个琴键后面的命令绑定在一起来进行排序,但是它有几个问题

    • 只能与字母数字键一起使用
    • 这不是真的,因为我必须在按键超时之前快速按下按键
  2. 一些软件包(例如easy-kill和)expand-region支持此功能,但是它们具有复杂的代码库,而我的Lisp技能也不是很出色。

我将如何做到这一点?我真的很想<menu>被绑定evil-ex,但是我也想绑定<menu>为所有将标记设置为无弦的动作(如箭头键)的前缀cua-selection-mode

由于evil-ex后面没有动作,也没有动作自我插入,所以这将是一个完美的用例。<menu>之所以完美,是因为它就在箭头键和其他运动键(例如,结束,主页等)的旁边,并且未经修改。

Dre*_*rew 5

如果我了解您想要的内容,那么建议您最好不要考虑计时器,并稍稍等待一下(例如,将<menu>命令的用途与用作前缀键的用途区分开)。

我推荐并使用很多的方法是定义一个前缀键(在您的情况下,例如<menu>),然后将您考虑使用的命令放在<menu>on上<menu> <menu>。就像击中<menu>一次并尝试依靠一些微小的延迟等一样快。

并且它允许您认为打开<menu>(实际上是打开<menu> <menu>)的命令是可重复的

通常使这样的命令可重复,以便<menu> <menu> <menu>重复执行一次命令,<menu> <menu> <menu> <menu>重复执行两次,依此类推。IOW,我倾向于将此技巧用于我真正想要轻松重复的命令,只需按住一个键即可。

这是一个简单的示例,从我emacs-devel@gnu.org在2009年提出的更广泛的建议(这里)开始。在该邮件列表消息中,如果您向下滚动到#9,您将看到使用此类键的建议,#12显示了相同的示例,而#15直接解决了您的问题。主题名称是“ 吃蛋糕要吃,吃蛋糕将要吃甜食 ”,其主题恰好是您提出的问题


;; This function builds a repeatable version of its argument COMMAND.
(defun repeat-command (command)
  "Repeat COMMAND."
 (interactive)
 (let ((repeat-previous-repeated-command  command)
       (last-repeatable-command           'repeat))
   (repeat nil)))

Here is how you could then define `C-x', which is already a prefix
key, as also a repeatable key for an action command, in this case,
`backward-char':

(defun backward-char-repeat ()
  "Like `backward-char', but repeatable even on a prefix key."
  (interactive)
  (repeat-command 'backward-char))

(define-key ctl-x-map "\C-x" 'backward-char-repeat)

Now just holding down `C-x' invokes `backward-char' repeatedly - once
you've gotten past the first `C-x' (the prefix).
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我长期以来一直使用这种技术来(a)具有“重复前缀键”,(b)仍然具有在其上定义的其他键。