MobaXterm Backspace отправляет ^H

Длинный вопрос: я пытаюсь протестировать мой простой HTTP-сервер, набирая множество запросов по Telnet и наблюдая за реакцией сервера. Но когда я делаю опечатку и нажимаю клавишу Backspace, чтобы стереть предыдущий символ, MobaXterm отправляет ^H вместо удаления символа из строки. Когда я нажимаю Shift+Backspace, все работает так, как я хочу, но через некоторое время это становится очень раздражающим... Итак, есть ли решение, которое просто меняет функциональность Backspace?

Короткий вопрос: можно ли заставить backspace удалять символ вместо отправки ^H?

4 ответа

Решение

MobaXterm также предлагает установить флажок "Backspace send ^H", который вы можете попробовать включить (в глобальных настройках MobaXterm -> вкладка "Терминал").

Если вы используете сохраненный сеанс, вам нужно будет отредактировать этот сеанс, перейдите на вкладку "Настройки терминала" и установите флажок "Backspace send ^H".

Ключ с надписью "Backspace" является предметом спора. Технически, это должно отправить ^H просто потому, что это имя управляющего символа ASCII. Другие отличаются, потому что история этих функций повлияла на их ожидания (см. Почему мой ключ удаления не работает?).

В обсуждении, в котором вы говорите, что печатаете, обычное значение (без пояснений) состоит в том, что вы запустили терминал, а затем запустили программу в терминале. Для этого случая существует соответствующая инициализация терминала, например, с использованием оболочки и программы, такой как stty, Это выполняется на локальной машине (где вы печатаете). MobaXterm предоставляет stty с версии 3.2 (2011-05-30).

Учитывая это, если MobaXterm отправляет ^H, инициализация вашего терминала должна использовать

stty erase \^H

Смотри например что делает команда stty erase ^H делать?,

С другой стороны, вы могли бы (не очевидно в вопросе) построить ситуацию, когда терминал запускается таким образом, что исключает использование stty сделать приложение и терминал согласованными. Или у вас может быть какая-то другая причина для изменения поведения клавиши возврата. PuTTY (как и xterm) предоставляет для этого два механизма:

  • один (изначально реализованный в rxvt) позволяет использовать модификатор shift для переключения кода, отправляемого из "backspace" между ASCII backspace (BS = 8 = ^H) и удалить (DEL = 127, часто отображается как ^?).
  • другая конфигурация терминала (настройка диалога в разделе " Клавиатура" раздела " Терминал ").

xterm предоставляет третий механизм, которого, по-видимому, нет в PuTTY (см. Последовательности управления XTerm):

CSI ? Pm h
      DEC Private Mode Set (DECSET).
            Ps = 6 7  -> Backarrow key sends backspace (DECBKM).

Если PuTTY реализует это, ваше приложение может напрямую установить поведение терминала. Скорее, во время инициализации PuTTY проверяет начальное состояние своей конфигурации и (в зависимости от платформы) также проверяет (например, xterm) режимы терминала, установленные в устройстве, и выбирает режим возврата или удаления, который вы можете приспособить или изменить, как отмечено.

В MobaXterm существует возможность изменить поведение клавиши возврата. (ответ ниже основан на MobaXterm Personal v11.1)

Опция называется: "Backspace передает CTRL-H"

Опция отображается только в конфигурации для конкретного сеанса, а не в глобальных настройках: создайте / отредактируйте новый / существующий сеанс пользователя типа SSH в Moba и получите доступ к его настройкам. На вкладке "Настройки терминала" снимите флажок "Backspace send CTRL-H", сохраните и перезагрузите.

Можно ли изменить поведение для всех сеансов? Я еще не нашел способ изменить поведение в глобальном масштабе. MobaXterm использует код Putty, который имеет соответствующую настройку переключения для поведения клавиши возврата, но, к сожалению, это не отображается в окне глобальных настроек в MobaXTerm. В любом случае, не в бесплатной версии.

Профессиональная версия Moba предлагает отдельный инструмент настройки, который показывает вам больше параметров конфигурации. Я подозреваю, что это может привести к настройке MobaXTerm.ini. Я не могу проверить.

Альтернатива: измените поведение на сервере.ssh <server> с локального терминала, не подключенного ни к какому сеансу пользователя, применяется глобальная настройка - отправка ^H, Это вызывает некоторые проблемы с редакторами, а именно emacs, и всем остальным, использующим readline, как telnet. Обходной путь - исправление поведения терминала на удаленном сайте с помощью команды stty (в debian это входит в пакет coreutils):

# interpret incoming ^H as backspace/erase
stty erase \^H

Однако я не рекомендую добавлять это в ~/.bashrc, если вы входите через другие виды терминалов. Таким образом, ключ конфигурации пользовательского сеанса - лучший подход.

Прошло некоторое время с момента обновления, но в MobaXterm 21.3 изменилось несколько вещей:

  1. Если вы зайдете в «Настройки->Конфигурация->Терминал», вы увидите, что теперь есть глобальная настройка.
  2. Если вы измените это поведение, имейте в виду, что любые уже созданные сеансы необходимо будет изменить вручную, если вы хотите, чтобы их конфигурации были такими же. Для каждой сохраненной сессии «Настройки->Вкладка «Настройки терминала»-> «Backspace отправляет ^H» также снимите флажок здесь.
Другие вопросы по тегам