emacs中的其他修饰键?

时间:2012-08-13 17:24:56

标签: emacs customization key-bindings

我最近一直在修改我的Emacs设置,但是我遇到了一个问题,这开始让我烦恼。我希望能够引入其他修饰符,如键。我想要做的事情是为了让事情变得更清楚,那就是当我处于直接模式时(它不接受文本输入,所以正常的字母可以反弹)我希望这样当我按住字母{{1然后按sj,光标分别移动到下一个和上一个目录行。有效地使l键像修饰符一样。

我已经研究过s应用ssuper等修饰符,但这些修饰符都用于全局事物。这可能吗?如果没有,那就太遗憾了。

编辑:

似乎与我所追求的有些混淆。如果我定义一个正常的键序列,如

hyper

然后,在按(define-key map (kbd "s j") 'dired-next-dirline)移动到下一个目录行之前,我必须每次都按<{1}}键 。这是我正在寻找的东西(不要生气:P)我希望s充当修饰符,我可以保持j 向下并继续点击s向下移动。

我希望我已经说得更清楚了。感谢。

4 个答案:

答案 0 :(得分:3)

我在代码中挖掘并想出了这个。它将s j绑定到my-dired-next-dirline,但在您完成之后,只需j即可再次执行此操作。任何其他键都会重置临时绑定。

请注意,函数set-temporary-overlay-map已添加到Emacs 24.2中,在撰写本文时尚未发布,因此您需要构建Emacs from git

(defun my-dired-next-dirline ()
  (interactive)
  (dired-next-dirline 1)
  (set-temporary-overlay-map
   (let ((map (make-sparse-keymap)))
     (define-key map [?j] 'my-dired-next-dirline)
     map)
   nil))

(eval-after-load "dired"
  '(progn
     (let ((prefix-map (make-sparse-keymap)))
       (define-key prefix-map "j" 'my-dired-next-dirline)  
       (define-key dired-mode-map "s" prefix-map))))

答案 1 :(得分:2)

Key chords可能就是您要找的。

答案 2 :(得分:1)

如果关键和弦不是你想要的(正如你对Tom's answer的评论所建议的那样),那么你似乎想要一个使用键序列的简单define-key。即。

(define-key dired-mode-map (kbd "s j") 'dired-previous-line)

这样做的缺点是禁用了s密钥的原始功能,但我认为你可以将其重新绑定到序列s - s

答案 3 :(得分:1)

这个问题可以在它之前提出,但是Hydra软件包允许你这样做以及更多。

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

请参阅此处的示例:https://github.com/abo-abo/hydra/blob/master/hydra-examples.el和此处https://github.com/abo-abo/hydra/blob/master/hydra-test.el

Wiki还有更多有用的示例https://github.com/abo-abo/hydra/wiki/Hydras-by-Topic

Hydra最初只有一个相当不透明的隐喻语法,这使得它很难开始使用。我不确定为什么这样一个奇怪的双层隐喻,从颜色到神话故事和有许多头脑的怪物被击败&#34;用于描述基本上的特征:

  • 采取行动并保持关键模式(实际上是你要求的。)(所谓的blue hydra)
  • 执行操作并退出键模式(red hydra)

等等。

值得庆幸的是,在2015年2月添加了更为文字的语法,检查测试以并排查看颜色和文字语法。 (也是此提交https://github.com/abo-abo/hydra/commit/0a3cc60f5856eb4a38204b9075d67d058ba56bef

另见作者的这篇文章。 http://oremacs.com/2015/02/02/colorful-hydrae/