2

Я получаю доступ к оболочке сервера Linux через замазку, но многие из ключей, которые я использую, не переводятся через,
вверх, вниз, влево и вправо все рассматриваются как ^ [[A, ^ [[B, ^ [[D и ^ [[C;
Но так же, как C-Up, C-Down, C-слева и C-справа.
И ввод рассматривается как Cj (которые переходят на следующую строку),
и Backspace рассматривается как Ch, который назад удалить.

Как я могу остановить перевод этих ключей в другие ключи (например, я могу настроить Ch и backspace для выполнения двух разных функций) и что делает этот перевод (Putty, ядро, оболочка)?

4 ответа4

4

Попробуйте изменить $TERM на "xterm".

Попробуйте установить настройки клавиатуры PuTTY на "rxvt", «Esc [n ~» и «Control-?».».

Какую оболочку вы используете? Если это Bash, то есть некоторые настройки, которые вы, возможно, захотите установить в ~/.inputrc .

На интерпретацию нажатия клавиш влияет комбинация:

  • PuTTY - или другой эмулятор терминала
  • ОС, на которой вы запускаете эмулятор терминала
  • /etc/X11/xorg.conf - если вы используете систему X-Window.
  • Bash/Readline через /etc/inputrc и ~/.inputrc - или аналогичные функции в других оболочках
  • terminfo или в некоторых случаях termcap
  • Переменная $TERM
  • Наверное, что-то я забыл
3

Итак, вот решение, которое я придумал - я отказался от PuttyCyg и начал использовать MinTTY. Кажется, он передает много моих настоящих ключей на сервер. :>

Разработать -
После просмотра этого поста в блоге выяснилось, что произошли хорошие изменения. Возможно, что Putty(Cyg) нужно исправить, чтобы сделать то, что я хочу, поэтому я экспериментировал с другими эмуляторами терминала, которые могли бы взаимодействовать с cygwin. MinTTY показывал разные коды, когда я использовал Cv, чтобы увидеть, что видит сервер, в том числе:
Другие коды для C-(клавиша со стрелкой), чем (клавиша со стрелкой),
CM для возврата, C- ^ для C-возврата,
также разные коды для meta'd Tab и Backspace;
Это означает, что эти ключи теперь регистрируются как разные, поэтому можно настроить emacs так, чтобы они использовались для разных целей, например, CM может быть «новой строкой и отступом», а C- ^ - «cua-set-rectangle-mode». Я пытался исправить мою сессию SSHed Emacs целую вечность ...
Для более подробной информации о Emacs в частности, и кодов клавиш в целом, я также нашел это

2

Да, есть много игроков, определяющих, как ваши ключи интерпретируются. Если это удаленная система, к которой вы подключаетесь, то PuTTY или любой другой эмулятор терминала, вероятно, является узким местом - то есть, если он отправляет одни и те же данные для контроля и управления, ничто из того, что вы делаете в нисходящем направлении, не сможет восстановить разницу. Это верно для каждого из игроков, но я знаю, что большинство других можно настраивать. Я не знаю, как настраивается ваш эмулятор терминала. Некоторые из них, даже если они способны видеть разницу между активностью и контролем, все равно отправляют те же данные в процессы, к которым они подключены.

Вы используете PuTTYTel в Windows? Затем кто-то другой должен помочь вам выяснить, как заставить PuTTYTel обнаруживать разницу между активацией и контролем, и отправлять разные данные для каждого. Я знаю только * nix.

То, какой ключ отправляется при возврате, при удалении и т.д., Определяется тем, какой TERM установлен вашим эмулятором терминала. Вы должны иметь возможность использовать все, что у вас есть файл terminfo на другом конце. На моей машине файл terminfo для vt100 говорит, что return должен быть ^ M, но не ^ J. (Backspace в vt100 является ^ H.) Так что я не знаю, сколько вы сможете положиться на этот эмулятор терминала ...

Backspace также ^ H в xterm. В других определениях terminfo это ^?, то есть 0x7f. Например, это верно для определений terminfo "linux" и "rxvt-unicode".

0

Клавиши, которые вы хотите, не могут быть представлены на vt100. Они просто не могут существовать с этим типом терминала. Попробуйте установить для эмуляции xterm или rxvt (если вы используете эмулятор терминала, который может эмулировать xterm, он может даже обмениваться информацией мыши с приложением на другом конце).

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