Какую последовательность отправляет PuTTY для ALT + DEL

Вопрос или проблема

Когда я подключаюсь к своему серверу Debian Wheezy Beta 4 с помощью PuTTY 0.62 на Windows 7, у меня возникает проблема. Моя оболочка для входа – Zsh, и она настроена на обработку ALT + DEL для действия delete-word (удаляет одно слово справа от курсора). Строка в конфигурации выглядит так:

bindkey -e "\e[3;3~" kill-word

Привязка работает нормально, когда я подключаюсь через команду ssh из gnome-terminal. Но когда я подключаюсь через PuTTY, это действие не выполняется. Вместо этого на консоль выводится [3~. Насколько я вижу, это неэкранированная последовательность для клавиши DEL в xterm. Некоторое время я думал, что PuTTY просто игнорирует модификатор ALT и отправляет только DEL, но если бы это было так, действие, связанное с DEL, было бы выполнено так, как если бы я нажал только эту клавишу.

Так что, я полагаю, PuTTY использует какую-то последовательность для комбинации клавиш, о которой я не знаю, и которая приводит к тому, что на экране появляется [3~. Как я могу узнать, какую последовательность отправляет PuTTY, чтобы настроить Zsh на правильную обработку этого?

Обновление: Похоже, что PuTTY должно игнорировать все нажатия клавиш с модификатором ALT в его текущей реализации. Вот выдержка из исходного кода файла TERMINAL.C, которая удаляет флаг ALT из переменной модификаторов:

/*
 * Alt используется только для Alt+клавиша на цифровой клавиатуре, что пока не поддерживается, так что
 * игнорируйте это.
 */
modifiers &= ~PKM_ALT;

Это не объясняет мне, почему нажатие ALT + DEL не имеет такого же эффекта, как нажатие только DEL. Также это не объясняет, почему стандартная комбинация клавиш для действия kill-word в Zsh (ALT + D) работает хорошо.

Простой трюк, чтобы получить эти последовательности – запустить cat на удаленном хосте. Таким образом, я получаю ^[[3~ для DEL в одиночку, но ^[^[[3~ с ALT + DEL. (PuTTY 0.62 на W7/64)

Так что, вероятно,

bindkey -e "\e\e[3~" kill-word

сделает то, что вам нужно.

Ответ или решение

Когда вы используете PuTTY для подключения к серверу Debian Wheezy Beta 4 и пытаетесь настроить комбинацию клавиш ALT + DEL для выполнения действия delete-word в Zsh, вы сталкиваетесь с проблемой обработки последовательностей клавиш. Давайте рассмотрим, какую последовательность отправляет PuTTY для комбинации ALT + DEL, и как правильно настроить Zsh для этой комбинации.

Проблема с последовательностями клавиш

Как вы заметили, при нажатии комбинации ALT + DEL PuTTY не обрабатывает клавишу ALT так, как это делает gnome-terminal. Вместо этого у вас выводится последовательность [3~, которая соответствует нажатию только DEL без учета модификатора ALT.

Анализ поведения PuTTY

В коде PuTTY указано, что модификатор ALT игнорируется в текущей реализации. Это объясняет, почему нажатие ALT + DEL не вызывает ожидаемого вами поведения. Однако вопрос остается относительно того, почему эффект аналогичен простому нажатию DEL, так как вы и отмечали, как это было продемонстрировано при использовании команды cat.

Проверка последовательностей

При запуске команды cat и нажатии клавиш вы получили следующие результаты:

  • ^[[3~ – для нажатия просто DEL
  • ^[^[[3~ – для комбинации ALT + DEL

Эти результаты указывают на то, что PuTTY действительно отправляет специальную последовательность, включающую промежуточный байт ^[ (который эквивалентен ESC) перед последовательностью управления клавиатурой.

Настройка Zsh

Для того чтобы настроить Zsh на правильную обработку комбинации ALT + DEL, вы можете использовать следующую привязку клавиш:

bindkey -e "\e\e[3~" kill-word

Здесь:

  • \e – это эквивалент ESC.
  • \e[3~ – это последовательность, отправляемая при нажатии только DEL.

Таким образом, добавив еще один \e, вы получаете желаемый эффект, и Zsh сможет правильно интерпретировать нажатие комбинации ALT + DEL как kill-word.

Заключение

Эта настройка позволит вам использовать комбинацию ALT + DEL для удаления слова вправо в Zsh во время подключения через PuTTY. Это решение эффективно, так как оно позволяет учесть особенности работы PuTTY с модификаторами клавиш. Чтобы избежать подобных проблем в будущем, полезно будет всегда проверять последовательности клавиш, отправляемые вашей терминальной программой, и экспериментировать с привязками в оболочке.

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

Оцените материал
Добавить комментарий

Капча загружается...