Automatikus váltás billentyűzetkiosztások között

Na sziasztok, ezt amiatt írom, hogy egy elég furcsa dolgot szeretnék megvalósítani. Azt TUDOM, hogyan definiálhatok 1 db saját billentyűzetkiosztást. Azt is, ezt hogyan töltessem be kézzel vagy automatikusan az X indulásakor. Természetesen akárhány további hasonló fájlt is definiálhatok, amik közül viszont értelemszerűen csak 1, a kiválasztott működik adott pillanatban.

Hanem én azt szeretném, hogy mindegyiknek adok valami spéci nevet, pld ilyesmit:

bill_a
bill_b
bill_c

stb, és mindig amikor (csak grafikus felület alatt érdekel egyelőre) megnyom egy billentyűt az user, akkor kiküldi annak a jelét a megfelelő helyre ahová azt amúgy is kell, a kódot tehát az épp aktuális billentyűzet-kiosztási táblából véve, majd EZ UTÁN beolvassa azt a kiosztási táblát (vagy hogy nevezzem) ami ahhoz a betűhöz tartozik, és az lesz az immár érvényes - a következő billentyűleütésig. Természetesen kell egy "default" vagy hasonló nevű kódtábla is arra az esetre, ha az adott billentyűhöz nem rendeltünk hozzá speciális kódtáblát.

Példa: Tegyük fel, most a bill_e kódtábla az aktuális. Itt a fószer nyomott mondjuk AltGR+É gombot, ami a "$" jele a szabványos billentyűzeten. Tegyük fel ebben a kódtáblában ez nincs is átdefiniálva. Megjelenik képernyőjén hát a "$" jel, de a rendszer megkeresi a bill_dollar nevű kiosztást, betölti, s itt már mondjuk át van definiálva ez a billentyűkombináció, azaz ha mégegyszer AltGr+É-t nyom, arra esetleg mondjuk a szóköz jelenik meg vagy az "Y" vagy akármi amit odamesterkedtünk a kiosztás megtervezésekor.

Most kérek mindenkit ne kezdjen el azon elmélkedni, ez mekkora ökörség, semmi értelme, stb. Szerintem van értelme, de MOST nem írom le mire kell ez nekem, mert csak flame lenne belőle, s elvinné az energiákat jópofizásra, vitákra, meg ajánlgatnátok mindenféle alternatív megoldásokat esetleg, amiket viszont nem kérek. Én konkrétan ÉPP EZT a "technikai" feladatot szeretném megoldani, épp ezt és nem mást, hogy a lenyomott billentyű kódjától függően váltson nekem billentyűzetkiosztást. És figyelem: Nem arra gondolok, hogy a lenyomott billentyűnek a billentyűzeten elfoglalt fizikai helyétől függően váltson billentyűzetkiosztást, hanem annak alapján, amilyen karaktert e lenyomás eredményezett az épp aktuális kiosztás szerint!

Ha ez meg lesz oldva, ígérem, leírom nektek hogy mire kell ez nekem, ne egyen meg senkit a kíváncsiság. De addig nem.

Köszi az ötleteket előre is!

Hozzászólások

Az ablakkezelodben hozz letre billentyukombinaciokat amikhez hozzarendeled a megfelelo kiosztasra valo atvaltast. Igy viszont kell egy kulon kombo amivel majd visszavaltasz defaultra.

Ezzel a módszerrel az a baj, hogy ha mondjuk a xbindkeys-sel a "b" betűhöz hozzárendelem a bill_b kódtábla betöltését, akkor azt betölti ugyan, de nekem nemcsak ez kell, hanem az is, hogy a "b " betűt ugyanakkor átadja az aktív ablaknak, hogy az feldolgozza azt mint karakterletést, ahogy épp akarja a programtól függően. Elismerem viszont, ha ezt meg lehetne oldani, akkor ez lényegében valóban megoldaná a problémámat.
-------------
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Ezt nem értem. Mert ha jól értem, ez olyasmi, hogy ha megnyomok egy gombot, arra elinduljon egy progi. Ezt eddig is rég meg tudtam oldani, az xbindkeys-sel. Amit nem tudok az az, hogy miután lefutott a program (ami pld azt teszi hogy az xmodmap-pal változtatja a billentyűzetkiosztást) azután a lenyomott billentyű kódját még továbbítsa is oda (nem tudom hova, de oda...) ahová egyébként ment volna, ha neem rendelek hozzá parancsot.

Az első bejegyzésen különben is csak egy fórum szerepel.
-------------
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Latom, a gondolkodas se jatszik. Szoval.

a "b " betűt ugyanakkor átadja az aktív ablaknak
Az xte pontosan ezt csinalja.

Tehat a 'b' billentyuhoz hozzarendeled ezt a parancsot:

xbindkeys bill_b; xte 'key b'

Az első bejegyzésen különben is csak egy fórum szerepel.
Ahol egyszer mar korbejartak az egyik problemat, erkezett ra egy halom megoldas. En az egyiket bemasoltam ide helyetted.

Ezzel az a baj, hogy _túl_ jó. Annyira alaposan becsapja az X-et, hogy végtelen ciklusba esik tőle a masinám. Ugye, ha beállítom az .xbindkeysrc-ben, hogy mondjuk a "t" gomb lenyomására váltson billentyűzetkiosztást a bill_t táblát betöltve az xmodmap-pal, majd hívom az xte 'key t' parancsot, akkor ez elhiteti az X-szel, hogy valóban lenyomtunk egy t-t, ennek következtében ő megnézi, van-e valami kötve a t-gombra, igen van az xbindkeysrc-ben, erre megint betölti a bill_t billentyűzetkiosztást, megint szimulál egy t-leütést... és így tovább!

Ezzel szemben nekem az kell, hogy ha lenyomok ÉN egy t-t, az betöltse a bill_t kódtáblát, kiírja ahová kell a "t" karaktert - ÉS KÉSZ. Itt álljon meg a folyamat, amíg a _felhasználó_ le nem nyom valami billentyűt. Amit persze az imént betöltött új kódtábla alapján értelmez majd a rendszer. De különben tényleg remek progi, csak önmagában még nem oldja meg a gondjaimat.

-------------
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Egy konkrét alkalmazásnál kell ez, vagy a teljes grafikus felületen (ablakkezelő, más alkalmazások... etc)?
Mert ha csak egy programban, akkor nem kell bill. kiosztásokkal szórakozni, a programod is kezelhetné a váltásokat.

A teljes grafikus felületen. Sőt az ideális az volna, ha még a grafikus felület nélkül, a konzolban is működne - csupán jobb híján elégedek meg (és csak átmenetileg...) azzal, hogy csak a grafikus felületen.
-------------
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Szerintem van értelme, de MOST nem írom le mire kell ez nekem, mert csak flame lenne belőle

Teh ultimate reasoning.

Jlenleg azzal próbálkozom, hogy a $HOME/.xbindkeysrc file megfelelő része efféleképp néz ki:

#Keypad 4
"bill_t"
t

#Keypad 5
"bill_e"
e

#Keypad 6
"bill_a"
a

stb.

A "bill_t" és hasonló nevű rutinok létező szkriptecskék a rendszeremben, s egy ilyen a következőképp néz ki:

vz@Csiszilla /Programs/Szkriptjeim/0.0.0/bin]cat bill_t
xmodmap $HOME/bill_t_rc
echo "t" > /dev/stdout

Vagyis minden betűhöz társulna egy szkript, amit az xbindkeys hívogat. A szkript meghívná az xmodmap-ot a megfelelő billentyűzetkiosztás betöltéséhez, majd visszaírná a megfelelő helyre a "lenyomott" karaktert. Amit n em kell kiolvasnia, mert minden szkript tudja úgyis, ő maga pontosan melyik betűhöz tartozik.

No most a dolog annyiból működik, hogy a billentyűzetkiosztás gyönyörűen be is töltődik bármelyik betűre. A baj az, hogy _nem_írja_vissza_ a lenyomott karaktert! próbáltam pedig a /dev/stdout helyett olyanokat beírni neki, hogy /dev/console, /dev/keyboard, de nem megy.

-------------
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Azert nem megy, mert az stdout-nak koze nincs ahhoz, amit szeretnel. Itt jon kepbe az esemenyek automatizalasara keszult csomag (szoval az xte nevu parancs).

----
Sooner or later you had to talk, even if it was only because you'd run out of things to throw. - Pratchett
honlap készítés