Читать строку постоянно, с изменениями и удалениями? - PullRequest
0 голосов
/ 09 мая 2019

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

$ myscript
>

Я мог почтисделать это, зациклив read -n1 и конкатенируя результаты, но я не знаю, как потом обрабатывать удаления или перемещения курсора и вставку символов ранее в строке.

Насколько я могу судить, эта функция нене встроен в read реализации, но есть ли удобный способ сделать это?

Я добавляю тег , как я был бы (более чем) счастливс рыбьим решением, если POSIX нет.


В идеале я бы получал состояние строки в stdin, строка за строкой, как это происходит.

напримересли пользователь введет Hi, my name is Chale<D><D>rles, мой ввод будет:

H
Hi
Hi,
[...]
Hi, my name is Chal
Hi, my name is Chale
Hi, my name is Chal
Hi, my name is Cha
Hi, my name is Char
Hi, my name is Charl
Hi, my name is Charle
Hi, my name is Charles

1 Ответ

0 голосов
/ 10 мая 2019

Этого нельзя сделать с помощью рыбы, ksh или любой другой оболочки, с которой я знаком. В ksh может возникнуть соблазн использовать ловушку KEYBD. Проблема заключается в том, что ловушка вызывается до того, как персонаж будет задействован (например, вставлен в буфер). Это то, что ловушка KEYBD может модифицировать персонажа. Таким образом, ваша функция всегда на один символ позади того, что было напечатано. Вам нужно написать программу на C (или аналогичном языке), использующую библиотеку readline (или заново изобретать это колесо).

...