Отображение Caps Lock для управления из Emacs в Windows
При чтении любого из этих questions или статья EmacsWiki о сопоставлении Caps Lock с Control в emacs в Windows, лучшие ответы, похоже, связаны с реестром. Мой вопрос заключается в том, что пользователь может делать, когда они не могут изменить реестр машины, потому что у них нет прав администратора. Есть ли способ сделать отображение из emacs? Эта статья приходит о-о-течь, даже говоря: "Как уже упоминалось, вы можете, конечно, отображать Caps-Lock на другие ключи, например, клавишей Control." Но я не могу понять, как представить управляющий ключ (используя различные ссылки, которые выглядят довольно всеобъемлющими, но не могут быть ориентированными на Windows), пробовать такие вещи, как
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] '[control])
и
(setq w32-enable-caps-lock nil)
(global-set-key [capslock] 'ctl-x-map)
которые, похоже, не работают.
Ответы
Ответ 1
Я знаю, что это на самом деле не отвечает на ваш вопрос, но Трей Джексон в основном объяснил проблему. Для обнаружения только клавиши управления требуется низкоуровневый клавиатурный крючок на Windows, который я не думаю, что Emacs реализует.
Один из способов (с использованием внешней программы, но не требующий права администратора) заключается в использовании AutoHotkey. Все, что вам нужно, это следующая строка script:
CapsLock::Ctrl
LCtrl::Capslock
Вам нужно будет запустить этот script, когда emacs открыт, но, к счастью, Autohotkey - довольно низкопрофильное приложение (обычно занимает около нескольких сотен Кбайт в памяти). Вы можете, например, выполнить этот script в своих .emacs, чтобы ваш ключ управления и ключ замка были заменены всякий раз, когда emacs открывается.
Ответ 2
Я считаю, что это не работает, потому что Windows (или X) не передает фактическое событие для [capslock]
или [control]
- это ключ-модификатор, например [shift]
. Нажатие клавиши модификатора не приводит к нажатию клавиши, но если вы нажмете модификатор и второй (немодификатор) ключ, вы получите нажатие клавиши.
Например, [a]
и [a]
- это два разных ключа, один - обычный "a", а другой - "shift-a". Я уверен, что вы можете настроить Windows на то, чтобы "shift-a" отправил "z" или что-то еще.
Поскольку [capslock]
, [control]
, [shift]
, [meta]
все ключи модификатора, они не генерируют ключевые события сами по себе для приложений.
Короче говоря, Emacs не получает ключевое событие [control]
, которое он может переназначить, он получает событие C-a
. Обычно это делается с помощью очевидной комбинации клавиш [control]
и [a]
. Но событие может быть вызвано другим нажатием клавиши, скажем [F10]
или даже [y]
(путают, да).
Вот как я это понимаю. Разумеется, приветствуются разъяснения.
Ответ 3
Самый простой способ переназначить CapsLock на Windows - загрузить эту утилиту CapsLockChanger, выбрать ключ для сопоставления (Control) и поместить его в меню Start- > Startup.
Он остается в вашем лотке, выполняет задание по переназначению ключей и не требует беспорядочного использования в реестре.
Ответ 4
Для изменения реестра вам необязательно нужны права администратора.
Фактически, реестр Windows представляет собой сегментированный ресурс, похожий на файловую систему, и вы можете иметь подробные разрешения для разных ветвей и узлов в реестре.
Вы уверены, что ваше предположение о том, что вы не можете изменить реестр, является правильным?
Я думаю, что это правда по умолчанию в Vista, но не в предыдущей Windows.