Отображение 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.