bash в urxvt - возврат на символ типа alrady при чтении переменной - PullRequest
0 голосов
/ 13 октября 2019

Намерение состоит в том, чтобы поместить курсор в какую-то позицию на экране (вокруг центра экрана), ввести некоторый исходный текст и предложить пользователю ввести больше текста для сохранения в переменной, оставляя его нормальным. readline возможности редактирования строки.

Моя первоначальная попытка заключалась в следующем:

  1. центрировать курсор по вертикали echo / printf с использованием некоторого пробела,
  2. по центрукурсор снова по горизонтали через echo / printf,
  3. выпуск read -i "editable pre-text" -e answer.

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

При выполнении следующего сценария

echo -n "______________"
read -e risp

, пока не введен ввод, Backspace неэффективен (и это своего рода поведение, которое янапример, символы, введенные с echo до read, не могут быть удалены во время read).

Однако, набрав что-то (например, некоторый текст), а затем удалив его (полностью, вплоть допервый напечатанный character) с Backspace , курсор переместится на первое двоеточие терминала, как только Backspace удалит первый набранный символ.

Другими словами, при запуске сценария Backspace ничего не делает, в то время как X Backspace приведет к тому, что курсор перейдет к первомустолбец терминала.

В чем причина этого беваиора и как я могу его избежать?

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

1 Ответ

1 голос
/ 13 октября 2019

Как уже упоминалось в комментарии, вы должны использовать опцию read -p для печати приглашения, а не пытаться настроить его перед командой read.

-eопция просит read использовать библиотеку readline для обработки ввода, что позволяет использовать более широкий диапазон символов для редактирования строк. Однако, чтобы реализовать эти поведения, readline должен иметь возможность перерисовать текущую строку, и это невозможно, если в текущей строке что-то есть, когда начинается чтение. Это невозможно, потому что Unix не предоставляет приложению никакого механизма для просмотра того, что отображается на консоли. Поэтому при некоторых обстоятельствах readline просто очистит линию. Использование опции -p позволяет readline выводить приглашение, а затем он может знать, как выглядит строка в данный момент.

...