Дополнительных клавиш в Emacs?
В последнее время я довольно много изменял настройки Emacs, но я достиг проблемы, которая начинает меня раздражать. Я хотел бы иметь возможность ввести дополнительный модификатор, как ключи. То, что я пытаюсь сделать, чтобы сделать вещи более ясными, когда я нахожусь в режиме dired (который не принимает текстовый ввод, поэтому обычные буквы могут быть восстановлены), я хотел бы, чтобы, когда я удерживаю букву s
и нажимаю j
или l
, курсор перемещается на следующую и предыдущую строку каталога соответственно. Эффективно заставляя ключ s
действовать как модификатор.
Я рассматривал возможность применения модификатора s
, такого как super
или hyper
, но все они используются для глобальных вещей. Возможно ли это? если нет, то это позор.
Правка:
Кажется, есть некоторая путаница с тем, что я ищу. Если я определяю нормальную последовательность ключей, такую как(define-key map (kbd "s j") 'dired-next-dirline)
Затем я должен продолжать нажимать клавишу s
каждый раз, прежде чем я нажму j
, чтобы перейти к следующему строка справочника. Это не то, что я ищу (чтобы не звучать сердито :P) я хочу, чтобы s
действовал как модификатор, где я могу держать s
ключ удерживаемый вниз и продолжать нажимать j
, чтобы двигаться вниз по строкам.
4 ответа:
Я покопался в коде и нашел вот это. Он связывает
Обратите внимание, что функцияs j
сmy-dired-next-dirline
, но сразу после того, как вы это сделали, достаточно простоj
, чтобы сделать это снова. Любой другой ключ сбрасывает временную привязку.set-temporary-overlay-map
была добавлена в Emacs 24.2, который на момент написания этой статьи еще не был выпущен, поэтому вам нужно будет построить Emacs из 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))))
Ключевые аккорды могут быть тем, что вы ищете.
Если ключевые аккорды-это не то, что вы ищете (как вы предположили в комментарии к ответу Тома ), то вы, кажется, хотите простой
define-key
, который использует последовательность клавиш. то есть(define-key dired-mode-map (kbd "s j") 'dired-previous-line)
Это имеет недостаток в отключении первоначальной функциональности ключа
s
, но вы можете повторно привязать его к последовательностиs
-s
, полагаю, да.
Этот вопрос предшествует ему, но пакет 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
Гидра первоначально имела только довольно непрозрачный метафорический синтаксис, с которого было довольно трудно начать. Я не уверен, почему такой причудливый двойной слой метафор от цветов до мифических историй и монстров со многими головами, которые были "побеждены", был использован для описания особенностей, которые по существу:
- делайте действия и оставайтесь в ключевом режиме (фактически то, что вы просите.) (так называемая
blue
гидра)- выполнить действие и выйти из ключевого режима (A
red
hydra)И так далее.
К счастью a более буквальный синтаксис был добавлен в феврале 2015 года, проверьте тесты, чтобы увидеть цвет и буквальный синтаксис бок о бок. (также этот коммит https://github.com/abo-abo/hydra/commit/0a3cc60f5856eb4a38204b9075d67d058ba56bef )
См.Также эту статью автора. http://oremacs.com/2015/02/02/colorful-hydrae/