-if {[catch {package require tclreadline}]} {
- proc _readline prompt {
- puts -nonewline $prompt
- flush stdout
- if {[gets stdin line] < 0} {
- return {"EOF" ""}
- }
- list "OK" $line
- }
-} else {
- set ::historyfile "$env(HOME)/.mal-history"
- ::tclreadline::readline initialize $::historyfile
-
- proc _readline prompt {
- set reached_eof 0
- ::tclreadline::readline eofchar { set reached_eof 1 }
- set line [::tclreadline::readline read $prompt]
- if {$reached_eof} {
- return {"EOF" ""}
- }
- ::tclreadline::readline write $::historyfile
- list "OK" $line
- }
-}
+if {[lindex $argv 0] == "--raw"} {
+ set ::readline_mode "raw"
+ set argv [lrange $argv 1 end]
+ incr argc -1
+} else {
+ if {[catch {package require tclreadline}]} {
+ set ::readline_mode "raw"
+ } else {
+ set ::readline_mode "library"
+ }
+}
+
+set ::historyfile "$env(HOME)/.mal-history"
+set ::readline_library_initalized 0
+proc readline_library_init {} {
+ if {$::readline_library_initalized} {
+ return
+ }
+
+ ::tclreadline::readline initialize $::historyfile
+ ::tclreadline::readline builtincompleter 0
+ ::tclreadline::readline customcompleter ""
+ set ::readline_library_initalized 1
+}
+
+proc _readline_library prompt {
+ readline_library_init
+
+ set reached_eof 0
+ ::tclreadline::readline eofchar { set reached_eof 1 }
+ set line [::tclreadline::readline read $prompt]
+ if {$reached_eof} {
+ return {"EOF" ""}
+ }
+ ::tclreadline::readline write $::historyfile
+ list "OK" $line
+}
+
+proc _readline_raw prompt {
+ puts -nonewline $prompt
+ flush stdout
+ if {[gets stdin line] < 0} {
+ return {"EOF" ""}
+ }
+ list "OK" $line
+}
+
+proc _readline prompt {
+ if {$::readline_mode == "library"} {
+ _readline_library $prompt
+ } else {
+ _readline_raw $prompt
+ }
+}