Из другой части программного обеспечения, управляемого командной строкой, я привык к следующему поведению: стрелки вверх / вниз пролистывают историю команд, сопоставляя строки, соответствующие символам, набранным до сих пор в текущей строке, а 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 ... Я тестировал эти вещи в Konsole KDE, которая ведет себя как xterm, и на консоли Linux.