Использование Space вместо Control, чтобы избежать emacs pinky? - PullRequest
4 голосов
/ 04 января 2012

Я разработал случай emacs pinky от слишком сильного нажатия Cx.В идеале, я хотел бы использовать пробел вместо элемента управления в качестве команды префикса, поскольку гораздо проще нажимать и удерживать большим пальцем.Нажатие и отпускание пробела должны по-прежнему добавлять пробел, но одновременное нажатие пробела + x должно быть привязано к команде.Например:

(local-set-key (kbd "SPC-s") 'search-forward)

У кого-нибудь есть идеи, как это можно реализовать?Можно ли сделать это, используя только elisp, или мне придется изменить исходный код emacs и скомпилировать мою собственную версию?

Я бы предпочел решение, независимое от ОС, поскольку я использую emacs как в Windows, так и в Linux.

РЕДАКТИРОВАТЬ: я пробовал key-chord.el, который помогает в некоторых случаях, но не во всех (Cx Cs).Я предпочел бы второстепенный режим, такой как удержание-пространство-контроль или удержание-пространство-мета

РЕДАКТИРОВАТЬ: Спасибо за все ответы.В настоящее время я использую key-chord для отображения многих команд C- * на j * или f * в зависимости от того, является ли * клавишей влево или вправо.Например, я заменил Cx b на jb.Он отлично работает для всех команд, которые вы обычно вводите один раз, но не для команд, которые вы используете повторно (например, вперед или назад-абзац).На сегодняшний день это лучшее кроссплатформенное решение, так как для него требуются только пользовательский файл .emacs и файл key-chord.el.Я бы предпочел решение, которое требует меньше переназначения и снижает риск ввода "fyi" и получения " i".Я считаю, что использование пробела может сработать, но я не знаю достаточно о технических деталях emacs, чтобы заставить его работать.

Я рассмотрел вопрос о замене Caps-Lock или Alt на Ctrl, но это помогает только для левого мизинца,Многие общие команды выполняются с использованием правого мизинца (Cx, Cs, Cw, Cy).

Ответы [ 10 ]

7 голосов
/ 04 января 2012

Я переназначил свой CapsLock на Control, чтобы избежать боли (используя KDE для отображения, но не emacs).

Обновление: я смог сделать это и в LXDE и в MS Windows.

6 голосов
/ 05 января 2012

В Windows AutoHotKey - это очень гибкое и пригодное для сценариев решение для большинства видов требований к переназначению ключей.

4 голосов
/ 11 марта 2012

Это должно делать то, что вы хотите:

http://www.emacswiki.org/emacs/space-chord.el

(space-chord-define-global "s" 'search-forward)

Это делает ""Так что вам придется вводить пробел и s одновременно, но сделать это легко.

Или, если бы вы могли использовать control-lock, чтобы избежать чрезмерного удержания контроля (это как прописные буквызамок для ключа управления).

4 голосов
/ 04 января 2012

Xah Lee написал хорошую статью на эту тему, особенно когда он рекомендует

использовать вашу ладонь или полутурист вместо вместо мизинца для нажатия клавиши управления

4 голосов
/ 04 января 2012

Я не думаю, что это возможно в Emacs Lisp.Для того, чтобы делать то, что вы хотите, нужно проверить, удерживается ли клавиша «пробел» или она была отпущена.Однако события клавиатуры в Emacs - это просто символы, а не события «нажатие» и «отпускание», как для кнопок мыши.Я не знаю достаточно о коде Emacs C, чтобы сказать, может ли это быть реализовано там без нарушения нормального цикла событий.

Итак, давайте обратимся к решениям, зависящим от ОС.В Xorg вы можете сопоставить модификаторы с обычными ключами (используя xmodmap);однако нажатие клавиши «пробел» будет по-прежнему генерировать пробелы, в то время как также работает как модификатор, а это не то, что вам нужно.Единственное известное мне решение - это специальный драйвер клавиатуры Xorg:

https://gitlab.com/at-home-modifier/at-home-modifier-evdev/wikis/home

Хотя я не знаю, существует ли что-то подобное для Windows.

2 голосов
/ 28 мая 2012

точное решение описано здесь.он состоит из использования дополнительного программного обеспечения (доступно на каждой ОС).http://emacswiki.org/emacs/MovingTheCtrlKey#toc24

2 голосов
/ 29 марта 2012

За последние несколько недель я написал и использовал скрипт AutoHotKey, который обеспечивает функциональность всей Windows для выполнения именно того, что вы описали.Теперь он доступен на GitHub .Хотя это решение не является независимым от операционной системы, в Linux есть почти идентичные реализации (например, At-Home-Modifier и Space2Ctrl ), поэтому вы должны иметь одинаковый пользовательский интерфейс на любой платформе.С положительной стороны вы также можете использовать его в других программах для таких задач, как копирование, вставка и переключение вкладок браузера.Надеюсь, это поможет.

1 голос
/ 08 января 2012

Вы можете посмотреть на cua-mode, что делает нечто подобное для C-x и C-c (когда активна метка).Я, конечно, не эксперт (я даже не использую cua-mode), но кратко глядя на код, есть таймер, который отправляет событие timeout, чтобы (в вашем случае) вы связали [?\s timeout] для вставкипробел и связать другие ключи с тем, что вы хотите.Вы также не можете (я не думаю) связывать ключи, как если бы SPC был модификатором:

(local-set-key (kbd "SPC-s") 'search-forward)

, но вы бы связали их как (скажем)

(define-key space-as-prefix-map (kbd "s") 'search-forward)

Я пыталсявыполнить быстрый тест с использованием cua-mode, но, к сожалению, таймер запускается только при активной отметке.Ну, это немного сложнее, но достаточно сказать, что я не выстоял достаточно долго, чтобы все это понять.Но определенно можно заставить пространство контролировать то, что нужно для мета-бегства.

1 голос
/ 07 января 2012

Что я делаю, так это переключаю alt-клавиши для элементов управления и супер-клавиши для alt-meta, это позволяет избежать нажатия на надоедливый левый элемент управления.Кроме того, я переключаю Caps Lock для Hyper, чтобы иметь дополнительный модификатор, который я использую для переключения между буферами Hp Hn и другими вещами.Если у вас есть Ubuntu, изменения в настройках клавиатуры тривиальны.

0 голосов
/ 04 января 2012

Это не ответ на ваш вопрос, но это способ избежать мизинца Emacs: не используйте одну руку для нажатия на модификаторы и клавишу. Поэтому (при условии, что у вас есть клавиатура Qwerty) правой рукой нажмите Control, а левой - клавишу «x».

...