А как насчет ключа блокировки управления ?
Одним из препятствий для полного эквивалента Контроля является то, что ему нужно будет знать, когда он удерживается и когда его отпускают. События клавиатуры 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.