aleksanteri, 20th of August 2008: As my russian courses started last week I felt that a little program that showed an on-screen russian keyboard would be pretty handy, so I went and made one:
package require Tk
package require tile
ttk::frame .mf
ttk::frame .mf.maj
ttk::frame .mf.min
ttk::entry .mf.out
ttk::label .mf.maj_l -text "Majuscule"
ttk::label .mf.min_l -text "Miniscule"
grid .mf -sticky nsew
grid .mf.maj_l -row 0 -column 0 -padx 5 -pady 5
grid .mf.min_l -row 0 -column 1 -padx 5 -pady 5
grid .mf.maj -sticky nsew -row 1 -column 0 -padx 5 -pady 5
grid .mf.min -sticky nsew -row 1 -column 1 -padx 5 -pady 5
grid .mf.out -sticky nsew -row 2 -column 0 -columnspan 2 -padx 5 -pady 5
wm title . {Russian on-screen keyboard}
wm attributes . -topmost 1
wm resizable . 0 0
set i 0
for {set x 1040} {$x <= 1071} {incr x} {
set c [format %c $x]
ttk::button .mf.maj.$x -text $c -width 2 -command [list insert $x]
grid .mf.maj.$x -row [expr {$i / 11}] -column [expr {$i % 11}]
set y [expr {$x + 32}]
set c [format %c $y]
ttk::button .mf.min.$y -text $c -width 2 -command [list insert $y]
grid .mf.min.$y -row [expr {$i / 11}] -column [expr {$i % 11}]
if {$x == 1045} {
set x 1024
}
if {$x == 1025} {
set x 1045
}
incr i
}
proc insert {code} {
.mf.out insert end [format %c $code]
}