Есть ли другой способ обработки ввода с помощью клавиши со стрелкой в ​​Rust, кроме режима raw? - PullRequest
0 голосов
/ 30 апреля 2018

Я пишу небольшую оболочку в Rust для Linux в качестве упражнения, и я хотел реализовать историю команд, а также перемещение курсора (т.е. перемещение курсора назад для редактирования опечатки в команде).

Я не нашел способа в стандартной библиотеке Rust обрабатывать события клавиш со стрелками, но нашел ящик Termion , который обрабатывает ключевые события.

Однако обработка ключевых событий с помощью Termion означает ввод «необработанного режима» для stdout, который переопределяет «устаревшие» функции, как описано в этой статье о ящике :

Без режима raw вы не можете написать правильное интерактивное приложение TTY. Режим Raw дает вам полный контроль над TTY:

  1. Он отключает буферизацию строки: как вы могли заметить, ваше приложение командной строки имеет тенденцию вести себя как командная строка. Программы сначала получат ввод, когда пользователь наберет \ n. Режим Raw позволяет программе получать ввод после каждого нажатия клавиши.
  2. Отключает отображение ввода: без режима ввода текст, который вы вводите, появляется на экране, что делает его недостаточным для большинства интерактивных приложений TTY, где клавиши могут представлять элементы управления, а не текстовый ввод.
  3. Отключает канонизацию выходных данных: например, \ n означает «перейти на одну ячейку вниз», а не «разбить строку», для разрывов строки необходимо \ n \ r.
  4. Отключает прокрутку.

Я нахожу это решение немного излишним, так как хочу сохранить большинство «устаревших» функций ввода / вывода. Есть ли другой способ обработки ввода с помощью клавиш со стрелками, или мне нужно будет использовать режим raw?

1 Ответ

0 голосов
/ 30 апреля 2018

Есть несколько ящиков, которые предоставляют функции редактирования строк для интерактивных программ. Вот несколько примеров, которые я нашел, выполнив поиск в crates.io для «readline» (название библиотеки C):

Я не использовал ни одного из них, поэтому этот список не является рекомендацией. Посмотрите на некоторые из них и выберите тот, который соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...