Узнайте соответствующую escape-последовательность для данной комбинации клавиш

В Emacs я хочу привязать определенную комбинацию клавиш к команде. Однако, поскольку я использую Emacs в терминальном режиме в iTerm2 в OS X, мне нужно преобразовать комбинацию клавиш в escape-последовательность символов и зарегистрировать эту последовательность с помощью iTerm2, чтобы она распознала комбинацию клавиш.

Но как узнать соответствующую последовательность по комбинации клавиш? Например, я обнаружил, что что-то вроде ^[[1;8A соответствует Ctrl+Alt+вверх (где я настроил Alt работать как +Esc в iTerm2), но я понятия не имею, как эта комбинация клавиш преобразуется в эту конкретную последовательность.

Есть ли способ найти или разработать управляющую последовательность для любой заданной комбинации клавиш? Например, какова последовательность для Ctrl+Alt+r?

Связанный с этим вопрос, может ли кто-нибудь объяснить мне связь между настройкой комбинации клавиш с соответствующей последовательностью в iTerm2 и переводом Emacs последовательности во внутреннее представление ключа с использованием input-decode-map внутри .emacs (например, (define-key input-decode-map "[escape_sequencehere]" [internal_key_representation_here])? Мне кажется, что одной настройки в iTerm2 достаточно, чтобы привязка заработала в Emacs, так когда и зачем нужно настраивать последнюю в .emacs? (и, возможно, когда нам нужны оба, чтобы что-то работало?)


person MLister    schedule 04.12.2015    source источник
comment
Я предполагаю, что вы уже ознакомились с соответствующей документацией, такой как emacswiki.org/emacs/EmacsForMacOS. и emacswiki.org/emacs/MetaKeyProblems?   -  person jtahlborn    schedule 11.12.2015


Ответы (2)


В своем терминале введите showkey -a и позвольте нажатиям клавиш летать.

person John DeBord    schedule 07.04.2018
comment
Возможно, вам потребуется установить showkey из homebrew с помощью brew install showkey - person Dash; 27.06.2021

Некоторые комбинации клавиш отправляются непосредственно в приложение, работающее в iTerm2. Ты можешь его достать

  • используя подход ctrl+v (см. Как в bash привязать функциональную клавишу к команде?) или

    bash-3.2$ ^[[1;10A  (in this case I hit ctrl + v before shift+alt+up)
    
  • sed -n l (обратите внимание, L в нижнем регистре). Например, вы можете увидеть, что получает приложение, если вы отправляете (shift+alt+up):

    bash-3.2$ sed -n l
    ^[[1;10A
    \033[1;10A$
    

Если какая-то комбинация клавиш не проходит, вы можете указать iTerm2 пропустить ее и сопоставить ее с комбинацией клавиш, которую вы можно обнаружить, как описано выше.
Например, вы можете отправить и сопоставить ctrl+alt+cmd+R с ESC+sdf, и ваш терминал получит ^[sdf, который вы можете назначить команде в Emacs.

person Stepan Vavra    schedule 13.12.2015