Сопоставление Caps Lock с Control изнутри Emacs в Windows - PullRequest
10 голосов
/ 08 мая 2009

Когда вы читаете любой из этих вопросов или статью 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)

которые, похоже, не работают.

Ответы [ 4 ]

9 голосов
/ 08 мая 2009

Я знаю, что это не совсем отвечает на ваш вопрос, но Трей Джексон в основном объяснил проблему. Для обнаружения одной только управляющей клавиши требуется низкоуровневый хук клавиатуры в Windows, который, как мне кажется, Emacs не реализует.

Один из способов (с участием внешней программы, но не требует прав администратора) - использовать AutoHotkey . Все, что вам нужно, это следующий двухстрочный скрипт:

CapsLock::Ctrl
LCtrl::Capslock

Вам нужно будет запускать этот скрипт всякий раз, когда открыт emacs, но, к счастью, Autohotkey - довольно низкопрофильное приложение (обычно занимает всего несколько сотен килобайт в памяти). Например, вы можете выполнить этот скрипт в вашем .emacs так, чтобы ваш управляющий ключ и ключ capslock менялись при каждом открытии emacs.

6 голосов
/ 08 мая 2009

Я считаю, что это не работает, потому что Windows (или X) не передает фактическое событие для [capslock] или [control] - это клавиша-модификатор, такая как [shift]. Нажатие клавиши-модификатора не приводит к тому, что приложение получает нажатие клавиши, но если вы нажмете на модификатор и вторую (немодифицирующую) клавишу, вы получите нажатие клавиши.

Например, [a] и [A] - это две разные клавиши, одна из которых является обычной буквой «а», а другая по сути «shift-a». Я уверен, что вы могли бы настроить Windows так, чтобы «shift-a» действительно отправляла «z» или что-то в этом роде.

Поскольку [capslock], [control], [shift], [meta] являются ключами-модификаторами, они сами по себе не генерируют ключевые события для приложений.

Короче говоря, Emacs не получает событие ключа [control], которое он может переназначить, он получает событие C-a. Обычно это делается с помощью очевидной комбинации клавиш [control] и [a]. Но событие может быть сгенерировано другим нажатием клавиши, скажем, [F10] или даже [y] (сбивает с толку, да).

Вот как я это понимаю. Разъяснения приветствуются, конечно.

1 голос
/ 09 мая 2009

Самый простой способ переназначить CapsLock в Windows - загрузить эту утилиту CapsLockChanger , выбрать ключ для сопоставления (Control) и поместить его в меню «Пуск» -> «Автозагрузка».

Он остается в вашем трее, выполняет работу по переназначению ключа и не требует возни с реестром.

0 голосов
/ 09 мая 2009

Вам не обязательно нужны права администратора для изменения реестра.
Фактически, реестр Windows является сегментированным ресурсом, очень похожим на файловую систему, и вы можете иметь детальные разрешения для различных ветвей и узлов в реестре. Вы уверены, что ваше предположение, что вы не можете изменить реестр, верно? Я думаю, что это верно по умолчанию в Vista, но не в предыдущей Windows.

...