Оболочка иногда не может вывести ESC ^[символ перед escape-последовательностью
Иногда при нажатии клавиши со стрелкой (обычно вверх) внутри оболочки, терминал или оболочка не может вывести ESC
символ перед escape-последовательностью, поэтому, если я нажму стрелку вверх, чтобы попытаться увидеть последнюю команду, она выведет [A
на баш и OA
на зш, а не последняя команда. Он работает правильно при следующем нажатии клавиши со стрелкой.
Это происходит независимо от используемого эмулятора терминала или оболочки (но он использует OA
вместо [A
при использовании зш).
Я не могу сказать точные обстоятельства, в которых это происходит, это кажется несколько случайным, но обычно это происходит в следующий раз, когда я нажимаю стрелку после переключения окон с помощью моего оконного менеджера (i3).
Это не потому, что я слишком быстро нажал клавишу после переключения окон, потому что я могу переключать окна, вводить текст в оболочку, а после этого нажимать клавишу со стрелкой, и он все равно будет выводить [A
/OA
,
Это может быть связано с тем, что я использую i3 в качестве моего оконного менеджера.
Что я могу сделать, чтобы исправить или отладить эту проблему?
1 ответ
У меня недостаточно репутации, чтобы оставлять комментарии, поэтому, пожалуйста, не понижайте меня, вместо этого перенесите мой ответ в комментарии, если вы чувствуете, что это очень глупо:
Я вижу четыре возможных сценария (очень общий из-за отсутствия подробностей о драйвере, ядре, дистрибутиве, модели клавиатуры...):
- Сломанная клавиатура.
- Проблема оконного менеджера.
- Проблема с драйвером / ядром.
- Проблема локали.
Возможные решения:
- Я видел сломанные клавиатуры, работающие подобным образом, посылающие странные сигналы клавиш в случайное время, особенно (но не только) после нажатия других клавиш (вы сказали, что вы переключаете окна, используя клавиатуру также). Попробуйте другую клавиатуру, чтобы увидеть, если это все еще происходит. Я видел это более часто на беспроводных клавиатурах, но на проводных клавиатурах у меня была доля странных вещей. Проверьте, происходит ли это иногда без открытого оконного менеджера, в режиме консоли.
- С i3 может быть что-то не так (без более подробной информации я не могу дать вам более глубокий ответ). Обновите i3 или временно установите другой диспетчер окон и посмотрите, не возникнет ли ошибка снова.
- Если вы переключаете окна с помощью клавиатуры, это может быть связано с неправильным чтением буфера клавиатуры. Попробуйте обновить ядро, чтобы увидеть, решает ли оно проблему que. Если у вас установлено программное обеспечение для виртуализации, возможно, оно сломало ваш драйвер при срабатывании зацепок клавиатуры...
- Там может быть что-то странное в вашей клавиатуре. Даже если это маловероятно, вы можете попытаться получить или сгенерировать новый файл локалей.
Если вы уверены, что не нажимали 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
помогает? Хотя это не влияет на мой терминал.