我最近一直在修改我的Emacs设置,但是我遇到了一个问题,这开始让我烦恼。我希望能够引入其他修饰符,如键。我想要做的事情是为了让事情变得更清楚,那就是当我处于直接模式时(它不接受文本输入,所以正常的字母可以反弹)我希望这样当我按住字母{{1然后按s
或j
,光标分别移动到下一个和上一个目录行。有效地使l
键像修饰符一样。
我已经研究过s
应用s
或super
等修饰符,但这些修饰符都用于全局事物。这可能吗?如果没有,那就太遗憾了。
编辑:
似乎与我所追求的有些混淆。如果我定义一个正常的键序列,如
hyper
然后,在按(define-key map (kbd "s j") 'dired-next-dirline)
移动到下一个目录行之前,我必须每次都按<{1}}键 。这是不我正在寻找的东西(不要生气:P)我希望s
充当修饰符,我可以保持j
键 向下并继续点击s
向下移动。
我希望我已经说得更清楚了。感谢。
答案 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可能就是您要找的。 p>
答案 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)