proc toggle {v} {
uplevel [concat set $v \[expr \[set $v\] ^ 1\]] } % set state 0 0 % toggle state 1 % toggle state 0
RS has this alternative:
proc toggle varName { upvar 1 $varName var set var [expr {!$var}] }
escargo has this alternative:
proc toggle varName { upvar 1 $varName var set var [expr {1 - $var}] }
This is a clearly inferior alternative, but I wanted to include it for completeness.