emacs – 使用key作为前缀和命令

我想知道如何使用密钥作为其他密钥的前缀和命令本身.

>我可以使用key-chord.el来解决这个问题,方法是将键和弦绑定到第一个键后面的命令,但它有几个问题

>只能与字母数字键一起使用
>不真实,因为我必须在超时之前快速按键

> easy-kill和expand-region等一些软件包支持这个功能,但它们有复杂的代码库,而且我的lisp技能并不壮观……

我怎么能做到这一点?我真的很喜欢< menu>被绑定到邪恶的前,但我想绑定< menu>作为所有动作的前缀(如箭头键),将标记设置为无弦cua-selection-mode.

由于邪恶之前没有动作,也没有自我插入的动作,这将是一个完美的用例. <菜单>是完美的,因为它紧挨着箭头键和其他动作键(例如,结束,回家等)并且它是未经修改的.

看起来你想要像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发现的代码的简化版本.

https://stackoverflow.com/questions/20534733/use-key-as-both-prefix-and-command

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:emacs – 使用key作为前缀和命令