Как мне реализовать консоль с функциями ssh в C? - PullRequest
3 голосов
/ 02 августа 2011

То есть он должен поддерживать клавиши со стрелками вверх / вниз и ctrl-r для обратного поиска.С чего начать?

1 Ответ

1 голос
/ 02 августа 2011

Ответ зависит от того, насколько низкоуровневым вы хотите быть.использование readline или editline - ответы высокого уровня.Следующим уровнем вниз будет использование libncurses и вызов getch() для чтения ввода с клавиатуры, а затем обработка истории / поиска самостоятельно.

Самый низкий уровень (для терминала) обрабатывает фактический поток ввода байтов,Клавиши со стрелками отправляют определенные последовательности символов в зависимости от вашего конкретного терминала.Например, эмулятор vt100 отправит ^ [[A для «стрелки вверх», ^ [[B для «стрелки вниз» и так далее).Чтобы прочитать их, вам нужно установить атрибуты терминала так, чтобы они немедленно возвращали ввод и не ожидали новой строки;Для этого используйте функции termios для отключения режима канонического ввода.Затем просто прочитайте ввод символа за раз, и посмотрите, получите ли вы символы (27, 91, 65), и вы знаете, что это стрелка вверх и отвечаете соответственно.

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

Если вы находитесь на более низком уровне, чем терминал (последовательная линия, окно X, отображение растрового изображения и т. Д.), Ответы снова меняются.

...