다음은 명령 프롬프트 MyShell >
을 사용하여 대화식 TCL 세션을 구현하는 코드입니다.TCL은 -nohang 옵션과 함께 명령을 받습니까?
puts -nonewline stdout "MyShell > "
flush stdout
catch { eval [gets stdin] } got
if { $got ne "" } {
puts stderr $got
}
이 코드 말단 MyShell >
프롬프트 및 엔터 버튼 적중 될 기다린다; 코드에 아무런 영향을 미치지 않으면 서 아무 것도하지 않습니다. 이것은 gets
명령이하는 것입니다.
gets
명령 대신 몇 가지 대체 방법이 있습니다 (예 : coolget
). coolget
명령은 입력 버튼을 기다리지 말고, 눌렀을 때 호출 할 슬롯을 등록하고 실행을 계속합니다. 원하는 코드는 다음과 같아야합니다
proc evaluate { string } \
{
catch { eval $string } got
if { $got ne "" } {
puts stderr $got
}
}
puts -nonewline stdout "MyShell > "
flush stdout
coolgets stdin evaluate; # this command should not wait for the enter button
# here goes some code which is to be executed before the enter button is hit
다음
내가 필요한 것입니다 :
proc prompt { } \
{
puts -nonewline stdout "MyShell > "
flush stdout
}
proc process { } \
{
catch { uplevel #0 [gets stdin] } got
if { $got ne "" } {
puts stderr $got
flush stderr
}
prompt
}
fileevent stdin readable process
prompt
while { true } { update; after 100 }