Оболочка иногда не может вывести ESC ^[символ перед escape-последовательностью

Иногда при нажатии клавиши со стрелкой (обычно вверх) внутри оболочки, терминал или оболочка не может вывести ESC символ перед escape-последовательностью, поэтому, если я нажму стрелку вверх, чтобы попытаться увидеть последнюю команду, она выведет [A на баш и OA на зш, а не последняя команда. Он работает правильно при следующем нажатии клавиши со стрелкой.

Это происходит независимо от используемого эмулятора терминала или оболочки (но он использует OA вместо [A при использовании зш).

Я не могу сказать точные обстоятельства, в которых это происходит, это кажется несколько случайным, но обычно это происходит в следующий раз, когда я нажимаю стрелку после переключения окон с помощью моего оконного менеджера (i3).

Это не потому, что я слишком быстро нажал клавишу после переключения окон, потому что я могу переключать окна, вводить текст в оболочку, а после этого нажимать клавишу со стрелкой, и он все равно будет выводить [A/OA,

Это может быть связано с тем, что я использую i3 в качестве моего оконного менеджера.

Что я могу сделать, чтобы исправить или отладить эту проблему?

1 ответ

Решение

У меня недостаточно репутации, чтобы оставлять комментарии, поэтому, пожалуйста, не понижайте меня, вместо этого перенесите мой ответ в комментарии, если вы чувствуете, что это очень глупо:

Я вижу четыре возможных сценария (очень общий из-за отсутствия подробностей о драйвере, ядре, дистрибутиве, модели клавиатуры...):

  1. Сломанная клавиатура.
  2. Проблема оконного менеджера.
  3. Проблема с драйвером / ядром.
  4. Проблема локали.

Возможные решения:

  1. Я видел сломанные клавиатуры, работающие подобным образом, посылающие странные сигналы клавиш в случайное время, особенно (но не только) после нажатия других клавиш (вы сказали, что вы переключаете окна, используя клавиатуру также). Попробуйте другую клавиатуру, чтобы увидеть, если это все еще происходит. Я видел это более часто на беспроводных клавиатурах, но на проводных клавиатурах у меня была доля странных вещей. Проверьте, происходит ли это иногда без открытого оконного менеджера, в режиме консоли.
  2. С i3 может быть что-то не так (без более подробной информации я не могу дать вам более глубокий ответ). Обновите i3 или временно установите другой диспетчер окон и посмотрите, не возникнет ли ошибка снова.
  3. Если вы переключаете окна с помощью клавиатуры, это может быть связано с неправильным чтением буфера клавиатуры. Попробуйте обновить ядро, чтобы увидеть, решает ли оно проблему que. Если у вас установлено программное обеспечение для виртуализации, возможно, оно сломало ваш драйвер при срабатывании зацепок клавиатуры...
  4. Там может быть что-то странное в вашей клавиатуре. Даже если это маловероятно, вы можете попытаться получить или сгенерировать новый файл локалей.

Если вы уверены, что не нажимали ESC в терминале, вы видите эти escape-последовательности, значит, вы нашли ошибку.

Я пришел сюда, потому что меня тоже раздражают ложные OAЭто происходит случайно, обычно когда я AltTab вхожу в терминал из gvim. Я не уверен, что я просто случайно нажал что- ESC то, потому что нажатие ESC в терминале с последующим нажатием клавиши со стрелкой (даже через несколько секунд) приведет к печати этих частичных escape-последовательностей.

В качестве обходного пути я предлагаю привязать что-то к тем последовательностям с двойным экранированием, которые терминал получает по любой причине:

bindkey "^[^[OA" up-line-or-beginning-search
bindkey "^[^[OB" down-line-or-beginning-search
bindkey "^[^[OC" forward-char
bindkey "^[^[OD" backward-char

(На основе моих настроек ZSH по умолчанию. Распечатайте все сочетания клавиш, вызвав bindkey без всяких аргументов.)

Также, возможно, установка KEYTIMEOUT=1помогает? Хотя это не влияет на мой терминал.

Другие вопросы по тегам