@@ -134,11 +134,11 @@ if {"" == [info commands ::tclreadline::readline]} { ::tclreadline::Init } - if {[catch {set a [::tclreadline::prompt1]}] && [info nameofexecutable] != ""} { + if {[catch {::tclreadline::prompt1}] && [info nameofexecutable] != ""} { namespace eval ::tclreadline { variable prompt_string set base [file tail [info nameofexecutable]] @@ -261,26 +261,32 @@ uplevel #0 { while {1} { + # Try to transform {puts -nonewline stdout =>} into {concat =>} if [info exists tcl_prompt2] { - set prompt2 $tcl_prompt2 - } else { - set prompt2 ">" + regsub "puts\[ \t]*(-nonewline)?\[ \t](stdout)?" $tcl_prompt2 \ + "concat" tcl_prompt2 } if {[catch { if {"" != [namespace eval ::tclreadline {info procs prompt1}]} { - set LINE [::tclreadline::readline read \ + set ::tclreadline::LINE [::tclreadline::readline read \ [::tclreadline::prompt1]] } else { - set LINE [::tclreadline::readline read %] + set ::tclreadline::LINE [::tclreadline::readline read %] } - while {![::tclreadline::readline complete $LINE]} { - append LINE "\n" - append LINE [tclreadline::readline read ${prompt2}] + while {![::tclreadline::readline complete $::tclreadline::LINE]} { + append ::tclreadline::LINE "\n" + append ::tclreadline::LINE [::tclreadline::readline read [ + if [info exists tcl_prompt2] { + eval $tcl_prompt2 + } else { + concat ">" + } + ]] } } ::tclreadline::errorMsg]} { puts stderr [list tclreadline::Loop: error. \ $::tclreadline::errorMsg] continue @@ -292,23 +298,23 @@ # I decided to add only lines which are different from # the previous one to the history. This is different # from tcsh's behaviour, but I found it quite convenient # while using mshell on os9. # - if {[string length $LINE] && [history event 0] != $LINE} { - history add $LINE + if {[string length $::tclreadline::LINE] && [history event 0] != $::tclreadline::LINE} { + history add $::tclreadline::LINE } if [catch { - set result [eval $LINE] - if {$result != "" && [tclreadline::Print]} { - puts $result + set ::tclreadline::result [eval $::tclreadline::LINE] + if {$::tclreadline::result != "" && [::tclreadline::Print]} { + puts $::tclreadline::result } - set result "" + set ::tclreadline::result "" } ::tclreadline::errorMsg] { puts stderr $::tclreadline::errorMsg - puts stderr [list while evaluating $LINE] + puts stderr [list while evaluating $::tclreadline::LINE] } } } }