Задрали меня неприятные и плохо отслеживаемые глюки в xneur(надо бы им в багтрекер накатать - да взглянув на их заспамленый trac я никак не собрался), в частности после перехода на openbox отваливаться начали клавиатурные комбинации в thunderbird, и решил я доработать слегка скрипт по вышеприведенному адресу и повесить клавиатурные сокращения для перекодировки неправильно набранного слова и строки, в итоге получилось вот что:
Поскольку осилить питон мне видимо не по силам, переписал перекодировщик под себя на тикле, хотя можно было бы наверное и на шелле запинать.
Использован короткий сишник для определения включенной раскладки:
http://sanych.nnov.ru/files/skb.tar.gz
Откомпилированная версия:
http://sanych.nnov.ru/files/skb
Таблицы перекодировки и сама программа скорее всего будут допиливаться по ходу пьессы.
код:
#! /usr/bin/tclsh # зависимости: tcl, xautomation, xsel, самосборный определитель раскладки skb # вызов: # konv.tcl [word] - выделение и перекодирование слова # konv.tcl line - выделение и перекодирование строки # konv.tcl select - выделение и перекодирование выделенного proc err l {puts stderr $l} # определитель раскладки set skb [exec /home/sanych/bin/skb -1] # таблицы для ремапа set ruen { й q ц w у e к r е t н y г u ш i щ o з p х [ ъ ] ф a ы s в d а f п g р h о j л k д l ж ; э ' я z ч x с c м v и b т n ь m б , ю . . / Й Q Ц W У E К R Е T Н Y Г U Ш I Щ O З P Х \{ Ъ \} Ф A Ы S В D А F П G Р H О J Л K Д L Ж : Э \" Я Z Ч X С C М V И B Т N Ь M Б < Ю > , ? } #" set enru { q й w ц e у r к t е y н u г i ш o щ p з [ х ] ъ a ф s ы d в f а g п h р j о k л l д ; ж ' э z я x ч c с v м b и n т m ь , б . ю / . Q Й W Ц E У R К T Е Y Н U Г I Ш O Щ P З \{ Х \} Ъ A Ф S Ы D В F А G П H Р J О K Л L Д : Ж \" Э Z Я X Ч C С V М B И N Т M Ь < Б > Ю ? , & ?} #" switch -exact -- $argv { line { # копируем до начала строки в буфер обмена exec xte "keydown Shift_L" "key Home" "keyup Shift_L" } select { # копируем выделенноe } default { # копируем слово в буфер обмена exec xte "keydown Control_L" "keydown Shift_L" "key Left" "keyup Shift_L" "keyup Control_L" } } # из буфера в переменную set buf [exec xsel -p -o -t 100] # перекодируем в зависимости от раскладки if {$skb eq "USA"} { set buf [string map $enru $buf] } else { set buf [string map $ruen $buf] } # скидываем обратно в буфер exec << $buf xsel -i -b #exec xte "key Delete" "mouseclick 2" # удаляем, вставляем из буфера и перекидываем раскладку exec xte "keydown Shift_L" "key Insert" "keyup Shift_L" # очищаем буфер, включаем скинутый xsel-ом нумлок #exec xsel -c -p if {$skb eq "USA"} { # exec setxkbmap -layout ru,us }
кусок конфига openbox для кнопок:
<keybind key="F12"> <action name="Execute"> <command>/home/sanych/bin/konv.tcl line</command> </action> </keybind> <keybind key="F11"> <action name="Execute"> <command>/home/sanych/bin/konv.tcl</command> </action> </keybind> <keybind key="Pause"> <action name="Execute"> <command>/home/sanych/bin/konv.tcl select</command> </action> </keybind>
ну и напоследок пакет: http://sanych.nnov.ru/files/corlay-0.1.deb немного подправленный, в частности добавлен конфиг и помощь при вызове без параметров
А xsel перестал сбрасывать numlock :).