Как использовать backspace при приеме входных данных от пользователя в tcl?

#tcl

#tcl

Вопрос:

Вот часть моего кода.

 puts -nonewline "Enter your device name: "
flush stdout
set device [gets stdin]
 

Я принимаю входные данные от пользователя, и если каким-то образом ввод неверен, пользователь должен уничтожить код и запустить его снова. Есть ли какой-нибудь способ использовать backspace для очистки неправильного ввода в tcl?

Комментарии:

1. Обычно оболочка обрабатывает все редактирование строк и передает полную строку в Tcl только тогда, когда пользователь нажимает Enter. Итак, используя ваш код, клавиша backspace работает так, как ожидалось для меня (в Linux).

2. Код, написанный выше, является частью большого скрипта на TCL. В оболочке переключатель -e отлично работает, чтобы удалить неправильную запись. Я хотел бы знать тот же переключатель, который я могу интегрировать в TCL.

3. Как я уже указывал, Tcl не получает строку до тех пор, пока пользователь не нажмет Enter. Редактирование командной строки обрабатывается командной оболочкой, из которой выполняется сценарий Tcl. Так что в Tcl для этого ничего нельзя сделать.

4. Некоторые term пакеты в tcllib могут быть полезны для исправления любого проблемного состояния, в которое был переведен ваш терминал.

5. Tcl обычно ожидает, что терминал будет находиться в режиме cooked echo (или эквивалент в Windows). Вы можете вносить основные изменения в строку, такие как отступ для удаления символов, пока не нажмете Return / Enter, что является первым моментом, который Tcl получает, чтобы увидеть, что вообще введено. В версии 8.7 вы можете перевести терминал в необработанный режим, но тогда вам придется разбираться со всем самостоятельно.