Из другого программного обеспечения, управляемого командной строкой, я привык к следующему поведению: стрелки вверх / вниз пролистывают историю команд, сопоставляя строки, соответствующие символам, набранным до сих пор в текущей строке, а Esc удаляет все, что было напечатано до сих пор на текущей строке. Я пытаюсь заставить bash (через readline) сделать то же самое. Вот что я положил в свой .bashrc:
bind 'Escape: kill-whole-line'
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Поведение не соответствует назначению из-за взаимодействия отображения Escape = "\e" с отображением escape-последовательностей "\e [A" и "\e [B".
Мой вопрос: есть ли способ сделать эту работу? Одна возможность может быть основана на синхронизации, то есть, если за \e быстро следует другой ключ, он обрабатывается как часть последовательности, но если во время некоторой небольшой задержки ничего не происходит, он рассматривается как ключ сам по себе. Однако, читая документацию по bash и readline, я не смог придумать такую вещь.
Дополнительный вопрос: существует ли современный терминальный "эмулятор", который на самом деле не пытается эмулировать запутанное поведение исторических машин, но предоставляет работающим в нем программам однозначную информацию о нажатых клавишах? Что также позволило бы различать CTRL-A и CTRL-SHIFT-A ... Я протестировал эти вещи в KDE Konsole, который ведет себя как xterm, и на консоли Linux.