2017-04-25 14:41:48 +02:00
|
|
|
# console.tcl:
|
|
|
|
|
#
|
|
|
|
|
# Defines Procedures which should be defined within the console
|
|
|
|
|
# (master) interpreter (i.e., tkcon, if it is executed as a separate
|
|
|
|
|
# interpreter). Note that this can always be worked around via the
|
|
|
|
|
# "tkcon master" or "tkcon slave" commands, but this method organizes
|
|
|
|
|
# things in a more natural way.
|
|
|
|
|
|
|
|
|
|
wm geometry . 120x16+150-50
|
|
|
|
|
|
|
|
|
|
proc gettext {{prompt {}} {response {}}} {
|
|
|
|
|
|
|
|
|
|
# Differentiate between console command-line and button execution
|
|
|
|
|
# (Determines whether to prompt before or after execution)
|
|
|
|
|
if {[.text index output] == [.text index end]} {
|
|
|
|
|
::tkcon::Prompt
|
|
|
|
|
set mode 1
|
|
|
|
|
} else {
|
|
|
|
|
set mode 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
replaceprompt "?"
|
|
|
|
|
if {$prompt != {}} {
|
|
|
|
|
.text insert end $prompt {stdout}
|
|
|
|
|
}
|
|
|
|
|
if {$response != {}} {
|
|
|
|
|
set result [tkcon congets $response]
|
|
|
|
|
} else {
|
|
|
|
|
set result [tkcon congets]
|
|
|
|
|
}
|
|
|
|
|
tkcon set ::tkcon::OPT(prompt1) "% "
|
|
|
|
|
if {$mode == 0} {
|
|
|
|
|
::tkcon::Prompt
|
|
|
|
|
} else {
|
|
|
|
|
.text mark set output end
|
|
|
|
|
tkcon console see output ;# adjust view to encompass newline
|
|
|
|
|
update idletasks
|
|
|
|
|
}
|
|
|
|
|
return $result
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
slave alias magic::dialog gettext
|
|
|
|
|
slave alias magic::consolegeometry wm geometry .
|
|
|
|
|
slave alias magic::consolefocus focus -force .text
|
|
|
|
|
slave alias magic::suspendout rename temp_puts puts
|
|
|
|
|
slave alias magic::resumeout rename puts temp_puts
|
|
|
|
|
|
|
|
|
|
# Ensure that destroying the console window queries for saving
|
|
|
|
|
# modified layouts rather than forcing an immediate exit.
|
|
|
|
|
|
|
|
|
|
wm protocol . WM_DELETE_WINDOW {tkcon slave slave magic::quit}
|
|
|
|
|
|
|
|
|
|
proc temp_puts { args } {
|
|
|
|
|
# null procedure; output is suspended.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc magiccolor { ch } {
|
|
|
|
|
tkcon slave slave magic::magiccolor $ch
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc replaceprompt { ch } {
|
|
|
|
|
tkcon set ::tkcon::OPT(prompt1) "$ch "
|
|
|
|
|
.text delete prompt.last-2c
|
|
|
|
|
.text insert [.text index prompt.last-1c] $ch {prompt}
|
|
|
|
|
.text mark set output [.text index output-1c]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# This procedure repaints the magic console to match the magic colormap.
|
|
|
|
|
# It's only called if magic is run in 8-bit (PseudoColor) visual mode.
|
|
|
|
|
# This is called from inside magic (graphics/grTk1.c).
|
|
|
|
|
|
|
|
|
|
proc repaintconsole {} {
|
|
|
|
|
puts stdout "Repainting console in magic layout window colors"
|
|
|
|
|
|
|
|
|
|
# Because the console invokes a slave interpreter, we have to evaluate
|
|
|
|
|
# magic command "magiccolor" in the slave interpreter. Note that all of
|
|
|
|
|
# these colors are short names from the ".dstyle6" file. Long names are
|
|
|
|
|
# also acceptable.
|
|
|
|
|
|
|
|
|
|
::set yellow [interp eval $::tkcon::OPT(exec) magiccolor yellow2]
|
|
|
|
|
::set black [interp eval $::tkcon::OPT(exec) magiccolor black]
|
|
|
|
|
::set gray [interp eval $::tkcon::OPT(exec) magiccolor gray2]
|
|
|
|
|
::set green [interp eval $::tkcon::OPT(exec) magiccolor green3]
|
|
|
|
|
::set purple [interp eval $::tkcon::OPT(exec) magiccolor purple1]
|
|
|
|
|
::set border [interp eval $::tkcon::OPT(exec) magiccolor window_border]
|
|
|
|
|
::set blue [interp eval $::tkcon::OPT(exec) magiccolor blue2]
|
|
|
|
|
::set red [interp eval $::tkcon::OPT(exec) magiccolor red3]
|
|
|
|
|
::set bgcolor [interp eval $::tkcon::OPT(exec) magiccolor no_color_at_all]
|
|
|
|
|
|
|
|
|
|
tkcon set ::tkcon::COLOR(bg) $bgcolor
|
|
|
|
|
tkcon set ::tkcon::COLOR(blink) $yellow
|
|
|
|
|
tkcon set ::tkcon::COLOR(cursor) $black
|
|
|
|
|
tkcon set ::tkcon::COLOR(disabled) $gray
|
|
|
|
|
tkcon set ::tkcon::COLOR(proc) $green
|
|
|
|
|
tkcon set ::tkcon::COLOR(var) $purple
|
|
|
|
|
tkcon set ::tkcon::COLOR(prompt) $border
|
|
|
|
|
tkcon set ::tkcon::COLOR(stdin) $black
|
|
|
|
|
tkcon set ::tkcon::COLOR(stdout) $blue
|
|
|
|
|
tkcon set ::tkcon::COLOR(stderr) $red
|
|
|
|
|
|
|
|
|
|
.text configure -background $bgcolor
|
|
|
|
|
.text configure -foreground $black
|
|
|
|
|
.text configure -insertbackground $black
|
|
|
|
|
|
|
|
|
|
.text tag configure var -background $bgcolor
|
|
|
|
|
.text tag configure blink -background $bgcolor
|
|
|
|
|
.text tag configure find -background $bgcolor
|
|
|
|
|
.text tag configure stdout -background $bgcolor
|
|
|
|
|
.text tag configure stderr -background $bgcolor
|
|
|
|
|
.text tag configure proc -background $bgcolor
|
|
|
|
|
.text tag configure prompt -background $bgcolor
|
|
|
|
|
|
|
|
|
|
.text tag configure var -foreground $purple
|
|
|
|
|
.text tag configure blink -foreground $yellow
|
|
|
|
|
.text tag configure find -foreground $yellow
|
|
|
|
|
.text tag configure stdout -foreground $blue
|
|
|
|
|
.text tag configure stderr -foreground $red
|
|
|
|
|
.text tag configure proc -foreground $green
|
|
|
|
|
.text tag configure prompt -foreground $border
|
|
|
|
|
|
|
|
|
|
.sy configure -background $bgcolor
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Rewrite the ::tkcon::New procedure so that it does not attempt to
|
|
|
|
|
# load a second version of magic into the interpreter, which is fatal.
|
|
|
|
|
|
|
|
|
|
rename ::tkcon::New ::tkcon::NewConsole
|
|
|
|
|
|
|
|
|
|
proc ::tkcon::New {} {
|
|
|
|
|
global argv0 argc argv
|
|
|
|
|
|
2020-05-23 23:13:14 +02:00
|
|
|
set argc 1
|
|
|
|
|
list set argv $argv0
|
|
|
|
|
::tkcon::NewConsole
|
2017-04-25 14:41:48 +02:00
|
|
|
}
|