NEM 3 August 2006: Here's a simple little text widget editor I knocked up. Its sole contribution is that it has some convenient bindings for entering symbols from
predicate logic. I also added a binding for
lambda too, on a
whim.
# logiceditor.tcl --
#
# A simple text editor with convenient bindings for entering logic
# symbols.
#
# Copyright (c) 2006 Neil Madden (nem@cs.nott.ac.uk).
#
# License: BSD-style.
package require Tcl 8.4
package require Tk 8.4
package provide logiceditor 1.0
namespace eval logiceditor {
# List of special symbols
# Symbol name UTF-8 Binding
variable symbols {
implication \u21D2 i
equivalence \u21D4 q
negation \u00AC n
conjuction \u2227 a
disjunction \u2228 o
universal \u2200 u
existential \u2203 e
definition \u2261 d
entails \u22A8 t
proof \u22A2 p
lambda \u03BB l
}
variable modifier Control
proc setup {} {
variable symbols
variable modifier
foreach {name unicode key} $symbols {
bind LogicEditor <$modifier-$key> \
"%W insert insert [subst $unicode]; break"
}
}
setup
proc create {path args} {
set top [toplevel $path]
wm title $top "Logic Editor"
eval [linsert $args 0 text $top.editor -font {{Lucida Sans} 12} \
-yscrollcommand [list $top.vsb set] \
-xscrollcommand [list $top.hsb set] \
-wrap none]
bindtags $top.editor [linsert [bindtags $top.editor] 1 LogicEditor]
scrollbar $top.vsb -orient vertical \
-command [list $top.editor yview]
scrollbar $top.hsb -orient horizontal \
-command [list $top.editor xview]
grid $top.editor -row 0 -column 0 -sticky nsew
grid $top.vsb -row 0 -column 1 -sticky ns
grid $top.hsb -row 1 -column 0 -sticky ew
grid rowconfigure $top 0 -weight 1
grid columnconfigure $top 0 -weight 1
return $top
}
}
logiceditor::create .t
NEM Thanks to the anonymous person who pointed out my use of
{*} making this 8.5 only. I've corrected the above (no need for two versions).
NEM Changed equivalence binding to Control-q rather than Control-=.