Я хочу использовать клавиатурные сокращения (например, Ctrl + Z / Ctrl + C / Ctrl / V и т. Д.) В моем приложении GTK-3. Я получаю разные события клавиатуры для разных раскладок клавиатуры.
Например, моя клавиатура имеет английскую и русскую раскладки, поэтому моя русская клавиша «Я» находится на «Z».
В мире много языков. Как я могу сделать приложение, которое работает с любыми языками?
Теперь я перевожу коды клавиш только для русской клавиатуры следующим образом:
func main_event_listener(event *gdk.Event){
eventObject := &gdk.EventKey{event}
key := eventObject.KeyVal()
state := eventObject.State()
key, state = GTK_TranslateKeyLayoutEnglish(key, state)
if state == gdk.GDK_CONTROL_MASK {
if key == gdk.KEY_z {
//Ctrl+Z
}
if key == gdk.KEY_c {
//Ctrl+C
}
if key == gdk.KEY_v {
//Ctrl+V
}
} else {
if key == gdk.KEY_F5 {
//F5
}
if key == gdk.KEY_Delete {
//Delete
}
}
}
func GTK_TranslateKeyLayoutEnglish(key uint, state uint) (uint, uint) {
key2 := key
state2 := state
if state2 > 8192 { //RUSSIAN Ctrl 8196 == English Ctrl 4
state2 -= 8192
}
switch key {
case gdk.KEY_Cyrillic_ya: //RUSSIAN 'я'
key2 = gdk.KEY_z
case gdk.KEY_Cyrillic_ef: //RUSSIAN 'ф'
key2 = gdk.KEY_a
case gdk.KEY_Cyrillic_che: //RUSSIAN 'ч'
key2 = gdk.KEY_x
case gdk.KEY_Cyrillic_es: //RUSSIAN 'с'
key2 = gdk.KEY_c
case gdk.KEY_Cyrillic_em: //RUSSIAN 'м'
key2 = gdk.KEY_v
//etc
}
return key2, state2
}
Я ожидаю лучшей реализации функции GTK_TranslateKeyLayoutEnglish ()