Чтение необработанного ввода с клавиатуры с помощью read() и termios

Пишу минималистичный шелл для университета и столкнулся с проблемой: не могу прочитать ctrl-arow_up и ctrl-arow_down на всех терминалах.

Я попробовал cat -e, затем нажал эти клавиши в терминале Guake - ничего не произошло. Но когда я попробовал то же самое в терминале xterm или Ubuntu по умолчанию, это сработало (показало «^[[1; 5A» и «^ [[1; 5B»).

Как заставить его работать на всех терминалах? Или как отключить предварительную обработку ключа оболочки?


person Emil Terman    schedule 29.08.2017    source источник
comment
Связано: stackoverflow.com/q/7767702/2404501   -  person    schedule 29.08.2017
comment
@ThomasDickey по этой ссылке нет решения для моего случая. В нем говорится, что нужно использовать библиотеку readline. Но мне не разрешено использовать что-то подобное.   -  person Emil Terman    schedule 29.08.2017
comment
Короче говоря, чтобы ваша программа работала на ВСЕХ терминалах, вам нужно признать, что некоторые терминалы (включая, я думаю, классический VT220, который большинство из них эмулирует) не обеспечивают никакого способа обнаружения комбинаций клавиши-модификатора + функциональной клавиши. Убедитесь, что все функции вашего приложения доступны без использования таких непонятных комбинаций клавиш.   -  person    schedule 29.08.2017
comment
@WumpusQ.Wumbley хорошо... Я думал, что есть способ   -  person Emil Terman    schedule 29.08.2017
comment
Для любого конкретного эмулятора терминала может быть способ включить функциональность, подобную xterm. Если нет, вы можете отправить отчет об ошибке с просьбой об этом. Но эмулятор терминала должен сделать это возможным, отправив некоторую отдельную управляющую последовательность.   -  person    schedule 29.08.2017