LINUX.ORG.RU

Tk - bind по коду клавиши


0

0

Как забиндить сочетания клавиш по их коду ?
например чтобы не писать многократные <Control-s> <Control-S> и так далее в сочетании с вариантами раскладок..

bind .winpath <Control-83> не прокатывает,
а писать bind .winpath <Control-Key> "if { %k == 83} {..}" некрасиво совершенно
★★★★★

>некрасиво совершенно

proc ctl_key_callback {W k} {
    global ckey
    if {[array names ckey $W,$k]!=""} {
        eval $ckey($W,$k)
    }
}

proc ctl_key_bind {path kcode cmd} {
    global ckey
    bind $path <Control-Key> {ctl_key_callback %W %k}
    set ckey($path,$kcode) $cmd
}

ctl_key_bind . 83 {puts 83}
ctl_key_bind . 65 {puts 65}

Так красиво?

anonymous
()

Сочетание Ctrl+буква -- это код от "\x01" (Ctrl+A) по "\x1A" (Ctrl+Z).
Этот код не зависит от регистра и раскладки. Я не знаю, можно ли его
повесить напрямую на bind. У меня сделано так:

bind .path <KeyPress> {kbd_ctl %A}

proc kbd_ctl {sym} {

  #Ctrl+D.
  if {$sym == "\x04"} {do something}

  #Прочие сочетания кнопок обрабатываются аналогично.
  }

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.