4

我最近一直在修改我的 Emacs 设置,但我遇到了一个开始让我烦恼的问题。我希望能够引入额外的修饰符,如键。为了让事情更清楚,我想要做的是当我处于 dired-mode 时(它不接受文本输入,所以可以反弹普通字母)我希望这样当我按住字母s并按下jl光标分别移动到下一个和上一个目录行。有效地使s键充当修饰符。

我已经研究过使sapply 成为修饰符,例如superorhyper但这些都用于全局事物。这可能吗?如果不是,那就太可惜了。

编辑:

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

(define-key map (kbd "s j") 'dired-next-dirline)

然后我必须在每次按下移动到下一个目录行之前一直按下该s键。这不是我想要的(不要听起来很生气:P)我想像一个修饰符一样,我可以按住并继续点击以向下移动。jssj

我希望我已经更清楚地说明了这一点。谢谢。

4

4 回答 4

3

我在代码中挖掘并想出了这个。它绑定s jmy-dired-next-dirline,但在你完成之后,j再做一次就足够了。任何其他键都会重置临时绑定。

请注意,该功能set-temporary-overlay-map是在 Emacs 24.2 中添加的,在撰写本文时尚未发布,因此您需要从 git 构建 Emacs

(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))))
于 2012-08-17T17:32:21.807 回答
2

关键和弦可能是您正在寻找的。

于 2012-08-13T17:30:54.970 回答
2

这个问题早于它,但 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 最初只有一种相当不透明的隐喻语法,因此很难入门。我不确定为什么要使用从颜色到神话故事和许多头被“征服”的怪物的这种奇怪的双层隐喻来描述本质上是:

  • 采取行动并保持在关键模式(实际上是您所要求的。)(所谓的bluehydra)
  • 执行操作并退出按键模式(red九头蛇)

等等。

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

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

于 2016-08-13T11:27:57.330 回答
1

如果键和弦不是您正在寻找的(正如您在对汤姆的回答的评论中建议的那样),那么您似乎想要一个define-key使用键序列的简单。IE

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

这具有禁用s键的原始功能的缺点,但我想您可以将其重新绑定到序列s- s

于 2012-08-14T18:51:05.227 回答