Отображение Caps Lock для управления из Emacs в Windows

При чтении любого из эти вопросы или статья в 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)

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


person Brendan Foote    schedule 08.05.2009    source источник


Ответы (4)


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

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

CapsLock::Ctrl
LCtrl::Capslock

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

person polyglot    schedule 08.05.2009
comment
Молодцы, отступили от предполагаемого решения и нашли другой способ. Я очень кратко посмотрел на AutoHotKey и предположил, что для этого требуются права администратора, но, похоже, он работает как шарм. Я отредактирую вопрос и добавлю релевантные ссылки. - person Brendan Foote; 08.05.2009
comment
Поправьте меня, если я ошибаюсь, но написание во второй строке вашего примера скрипта должно быть LCtrl :: CapsLock, а не LCtrl :: Cpaslock. - person Bryce Thomas; 07.01.2010

Я считаю, что это не работает, потому что 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] (сбивает с толку, да).

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

person Trey Jackson    schedule 08.05.2009
comment
Да, это то, что я получил, но спасибо за то, что вы сформулировали его намного лучше, чем я мог бы. - person Brendan Foote; 08.05.2009

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

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

person Community    schedule 09.05.2009

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

person Cheeso    schedule 09.05.2009
comment
Обычный метод переназначения ключей очень низкоуровневый и для каждой машины (изменения попадают куда-то в HKLM \ SYSTEM), поэтому права администратора являются обязательными. - person Anton Tykhyy; 09.05.2009