| | |
| | |
| | exec wish "$0" ${1+"$@"} |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | package require Tk |
| |
|
| | wm title . "Tk Remote Controller" |
| | wm iconname . "Tk Remote" |
| | wm minsize . 1 1 |
| |
|
| | |
| | |
| | |
| |
|
| | set app "local" |
| |
|
| | |
| | |
| |
|
| | set executing 0 |
| |
|
| | |
| | |
| |
|
| | set lastCommand "" |
| |
|
| | |
| | |
| |
|
| | . configure -menu [menu .menu] |
| | menu .menu.file |
| | menu .menu.file.apps -postcommand fillAppsMenu |
| | .menu add cascade -label "File" -underline 0 -menu .menu.file |
| | .menu.file add cascade -label "Select Application" -underline 0 \ |
| | -menu .menu.file.apps |
| | .menu.file add command -label "Quit" -command "destroy ." -underline 0 |
| |
|
| | |
| |
|
| | text .t -yscrollcommand ".s set" -setgrid true |
| | scrollbar .s -command ".t yview" |
| | grid .t .s -sticky nsew |
| | grid rowconfigure . 0 -weight 1 |
| | grid columnconfigure . 0 -weight 1 |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | bindtags .t {.t Text . all} |
| | bind .t <Return> { |
| | .t mark set insert {end - 1c} |
| | .t insert insert \n |
| | invoke |
| | break |
| | } |
| | bind .t <Delete> { |
| | catch {.t tag remove sel sel.first promptEnd} |
| | if {[.t tag nextrange sel 1.0 end] eq ""} { |
| | if {[.t compare insert < promptEnd]} { |
| | break |
| | } |
| | } |
| | } |
| | bind .t <BackSpace> { |
| | catch {.t tag remove sel sel.first promptEnd} |
| | if {[.t tag nextrange sel 1.0 end] eq ""} { |
| | if {[.t compare insert <= promptEnd]} { |
| | break |
| | } |
| | } |
| | } |
| | bind .t <Control-d> { |
| | if {[.t compare insert < promptEnd]} { |
| | break |
| | } |
| | } |
| | bind .t <Control-k> { |
| | if {[.t compare insert < promptEnd]} { |
| | .t mark set insert promptEnd |
| | } |
| | } |
| | bind .t <Control-t> { |
| | if {[.t compare insert < promptEnd]} { |
| | break |
| | } |
| | } |
| | bind .t <Meta-d> { |
| | if {[.t compare insert < promptEnd]} { |
| | break |
| | } |
| | } |
| | bind .t <Meta-BackSpace> { |
| | if {[.t compare insert <= promptEnd]} { |
| | break |
| | } |
| | } |
| | bind .t <Control-h> { |
| | if {[.t compare insert <= promptEnd]} { |
| | break |
| | } |
| | } |
| | |
| | auto_load tk::TextInsert |
| | proc tk::TextInsert {w s} { |
| | if {$s eq ""} { |
| | return |
| | } |
| | catch { |
| | if { |
| | [$w compare sel.first <= insert] && [$w compare sel.last >= insert] |
| | } then { |
| | $w tag remove sel sel.first promptEnd |
| | $w delete sel.first sel.last |
| | } |
| | } |
| | $w insert insert $s |
| | $w see insert |
| | } |
| |
|
| | .t configure -font {Courier 12} |
| | .t tag configure bold -font {Courier 12 bold} |
| |
|
| | |
| | |
| | |
| |
|
| | proc prompt {} { |
| | global app |
| | .t insert insert "$app: " |
| | .t mark set promptEnd {insert} |
| | .t mark gravity promptEnd left |
| | .t tag add bold {promptEnd linestart} promptEnd |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | proc invoke {} { |
| | global app executing lastCommand |
| | set cmd [.t get promptEnd insert] |
| | incr executing 1 |
| | if {[info complete $cmd]} { |
| | if {$cmd eq "!!\n"} { |
| | set cmd $lastCommand |
| | } else { |
| | set lastCommand $cmd |
| | } |
| | if {$app eq "local"} { |
| | set result [catch [list uplevel |
| | } else { |
| | set result [catch [list send $app $cmd] msg] |
| | } |
| | if {$result != 0} { |
| | .t insert insert "Error: $msg\n" |
| | } elseif {$msg ne ""} { |
| | .t insert insert $msg\n |
| | } |
| | prompt |
| | .t mark set promptEnd insert |
| | } |
| | incr executing -1 |
| | .t yview -pickplace insert |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | proc newApp appName { |
| | global app executing |
| | set app $appName |
| | if {!$executing} { |
| | .t mark gravity promptEnd right |
| | .t delete "promptEnd linestart" promptEnd |
| | .t insert promptEnd "$appName: " |
| | .t tag add bold "promptEnd linestart" promptEnd |
| | .t mark gravity promptEnd left |
| | } |
| | return |
| | } |
| |
|
| | |
| | |
| |
|
| | proc fillAppsMenu {} { |
| | set m .menu.file.apps |
| | catch {$m delete 0 last} |
| | foreach i [lsort [winfo interps]] { |
| | $m add command -label $i -command [list newApp $i] |
| | } |
| | $m add command -label local -command {newApp local} |
| | } |
| |
|
| | set app [winfo name .] |
| | prompt |
| | focus .t |
| |
|
| | |
| | |
| | |
| |
|