Теоретически, вы можете использовать последовательность событий привязки для этого:
# The keyboard often has two control keys; they have different names
bind $w <KeyPress-Control_L><KeyPress-Control_L> {puts "double-control (left)"}
bind $w <KeyPress-Control_R><KeyPress-Control_R> {puts "double-control (right)"}
Однако управляющие клавиши (как и в случае других модификаторов) особенно сложны в обращении, посколькуони повторяются ОС для вас;это особый случай!Поэтому вместо этого вам нужно создать собственную очередь событий клавиатуры:
bind $w <KeyPress> {queueEvent %K}
set queue {no-such-key}
proc queueEvent {key} {
global queue
if {[llength [lappend queue $key]] > 2} {
set queue [lrange $queue end-1 end]
}
lassign $queue last this
if {$last eq $this && [string match Control* $this]} {
puts "double ctrl"
}
}
Это может плохо взаимодействовать с другими привязками.Как это исправить, зависит от более широкого контекста вашего приложения.