Skip to content

Instantly share code, notes, and snippets.

@emdeesee
Last active April 12, 2019 20:52
Show Gist options
  • Save emdeesee/77c9d2ec32512b6125196d373d23b789 to your computer and use it in GitHub Desktop.
Save emdeesee/77c9d2ec32512b6125196d373d23b789 to your computer and use it in GitHub Desktop.
Why is it so hard to get a debounced key sequence in TCL/Tk?
set pending_release {}
set pressed false
proc press_action {} { puts "pressed" }
proc release_action {} { puts "released" }
proc is_pressed {} {
global pressed
return $pressed
}
proc set_pressed {{value true}} {
global pressed
set pressed $value
}
proc onPress {} {
if { ! [is_pressed] } {
set_pressed
press_action
}
}
proc release_callback {} {
set_pressed false
global pending_release
set pending_release {}
release_action
}
proc onRelease {} {
global pending_release
if { [string length pending_release] > 0 } {
after cancel $pending_release
}
set pending_release [after 100 release_callback]
}
# Bind "?"
bind . <KeyPress-question> { onPress }
bind . <KeyRelease-question> { onRelease }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment