1

Я использую GNU Emacs 23.2. Я хотел бы привязать [Control] к клавише ö на моей (немецкой) клавиатуре. Таким образом, я могу удобно запускать префиксные команды C- in правой рукой. К сожалению, я понятия не имею, как это сделать. global-set-key Emacs здесь не помогает, так как нажатие C- не является командой.

Обновление: я нахожусь на Win32 и GNU/Linux. Я хотел бы, чтобы это связывание было только в emacs - достигнуто с помощью собственных средств emacs.

2 ответа2

3

А как насчет ключа блокировки управления ?

Одним из препятствий для полного эквивалента Контроля является то, что ему нужно будет знать, когда он удерживается и когда его отпускают. События клавиатуры Emacs (в отличие от событий мыши) не разделяются на части «вниз» и «вверх», что затрудняет их обнаружение. Например, единственное существенное различие между Cx Co и Cx o - это событие «контроль» перед вторым символом. Тем не менее, это только проблема, если вы «отпустите» часть последовательности клавиш

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


Следующий код дает вам привязку «Control Lock», которая удерживает модификатор для одной целой последовательности клавиш. Пример ниже связывает это с ö, но вы можете связать это с чем угодно.

(defun read-control-sequence (prompt)
  (let (keys)
    (setq extra-keyboard-modifiers ?\C-a)
    (setq keys (read-key-sequence-vector (or prompt "[Control lock]")))
    (setq extra-keyboard-modifiers 0)
    keys))

(define-key key-translation-map [?ö] 'read-control-sequence)

Чтобы использовать это, просто нажмите (и отпустите) ö. Следующая клавиша будет действовать так, как будто нажата кнопка управления. Если введенная вами клавиша была префиксной (например, вы нажали x, чтобы получить Cx), управление останется нажатым для следующей клавиши и т.д., Пока вы не нажмете клавишу без префикса.

Если вы часто используете это, вы также можете добавить привязки в ваш .emacs для общих команд, которые не «отпускают» управление частично. Например, это:

(global-set-key (kbd "C-x C-4")
                (lookup-key (current-global-map)
                            (kbd "C-x 4")))

сделает все команды, начиная с Cx 4 , доступными и в Cx C-4 , так что при наборе ö x 4 f будет запущен find-file-other-window .

Также может оказаться полезным добавить отображение (например, в заглавную ...) просто для предоставления автономного Cx:

(define-key key-translation-map [?Ö] [(control ?x)])

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

1

Невозможно, управление является ключом-модификатором и обрабатывается операционной системой / оконным менеджером.

Смотрите этот вопрос в разделе SO: сопоставление Caps Lock с Control изнутри emacs в Windows

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .