tcl пауза и ожидание нажатия клавиши для продолжения

В tcl я ищу способ приостановить работу сценария (например, после некоторых выводов с помощью "Put") и дождаться нажатия клавиши от пользователя, прежде чем продолжить вывод оставшегося текста.

3 ответа

Решение

С благодарностью за ответ Hai Vu, если вы работаете в Unix-подобной системе с stty

proc anykey {{msg "Hit any key: "}} {
    set stty_settings [exec stty -g]
    exec stty raw -echo
    puts -nonewline $msg
    flush stdout
    read stdin 1
    exec stty $stty_settings
    puts ""
}
puts 1
anykey
puts 2

Ссылка на подробное обсуждение вики Tcl: чтение одного символа с клавиатуры с помощью Tcl

Вы просто используете gets читать со стандартного ввода:

proc pause {{message "Hit Enter to continue ==> "}} {
    puts -nonewline $message
    flush stdout
    gets stdin
}

pause "Hurry, hit enter: "; # Sample usage 1
pause;                      # Sample usage 2, use default message

Потенциальное решение для Windows:

exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause

Это также замечает нажатия клавиш, отличные от ascii (такие как клавиши со стрелками, Escape и т. Д.).

Другим решением является режим Raw в Windows, предложенный Donal Fellows выше (спасибо за ссылку!), Который может быть сведен в эти две строки кода:

twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1

Это не замечает Escape, клавиши со стрелками и тому подобное (и вам может понадобиться восстановить режим ввода с консоли позже).

Другие вопросы по тегам