Van egy réges-régi programötletem, évek óta csiszolgatom, sokszor meg is próbáltam megírni, de mindig kudarcot vallok vele – végül úgy döntöttem, közreadom. Hátha akad egy jobb programozó, akit megihlet.
Az ötlet azon a tényen alapul, hogy Windowsra nincsen tisztességes billentyűzetprogram. Valaha volt nem is egy, csak aztán eljött a Unicode kora, és senkinek nem tűnt föl, hogy a billentyűzetek lemaradtak a fejlesztésben. Mindenki arra koncentrált, hogy legyenek fontok. Kétségtelen, hogy amíg nincsenek fontok, addig billentyűzeteket gyártani nincs sok értelme, de hát ma már elég szépen vannak fontok, szóval itt lenne az ideje, hogy a billentyűzeteknél is lépjünk.
Először is nézzük meg, hogy miért kellenek billentyűzetprogramok, és miért mondom, hogy nincsenek, ha egyszer vannak.
Igen, kétségtelenül vannak. Egy boldog korban élünk: az összes nyelvhez, aminek a jelkészlete megvan a Unicode-ban, vannak unicode-os tyűzetek, az ember csak letölti és installálja őket, kiválaszt egy alkalmas fontot, és már jöhetnek is a gondolatok. Csak két bibi van.
Bibi Numero 1: A legtöbb nyelvnél nincsen választék. Ha az olvasó magyar, a magyar billezethez szokott és mondjuk törökül akar írni, akkor az úgynevezett F típusú török kiosztást (balról) aligha fogja kultiválni, tehát a Q típusút választja (jobbról). De tessék megnézni: a vessző helyén az Ö betű van. A magyar is használ vesszőt is, Ö betűt is, az ember már megszokta, hogy adott helyen keresse őket, és most máshová kerülnek. Szokja meg vagy pusztuljon, ez a programozók elve.
F G Ğ I O D R N H P Q W Q W E R T Y U I O P Ğ Ü U İ E A Ü T K M L Y Ş X A S D F G H J K L Ş İ J Ö V C Ç Z S B . , Z X C V B N M Ö Ç .
Bibi Numero 2: A nyelvek nem keverhetők. Ha az olvasó japánul akar írni, ahhoz olyan speciális célprogram kell, ami teljesen lehetetlenné teszi mondjuk egy magyar kiosztás egyidejű használatát. A kettő közötti ide-oda kapcsolgatás nem lehetséges, vagy ha mégis, akkor az a maximum. Egy harmadik nyelvet már lehetetlen felvenni.
Ez azért van, mert amint számtalanszor megállapítottam, a fejlesztők kizárólag kétféle embert ismernek: „nemzetközit” és „helyit”. A nemzetközi ember angolul beszél, a helyi valami más nyelven (úgy is hívják, hogy locale). Ez voltaképpen annak a továbbélése, amikor az európai gyarmatosítók primitívnek tekintették a bennszülöttek nyelveit, és nem voltak hajlandóak megtanulni, a sajátjukat erőltették rájuk. Ma eljutottunk odáig, hogy a gyarmatosítók már segítenek abban, hogy a bennszülöttek is használhassák a gépeket anyanyelvükön, de egy tapodtat se tovább. Minden gyarmatnak megvan a maga nyelve, és mindenhol kétféle nyelv létezik: a locale és az angol. Egyes gyarmatokon esetleg több helyi nyelv van, mindenesetre minden bennszülött ezek közül választhat.
Ez nemcsak a billentyűkiosztásokkal van így. Átgondolta már az olvasó, vajon miért árulják az összes nagyobb programot sokféle nemzeti változatban, egyetlen többnyelvű helyett, ahogy a kisebb programoknál van? Nyilván nem azért, mert így többet lehet eladni. Minden gépre legfeljebb egy Windowst fognak megvenni. Szerintem azért vannak nemzeti nyelvű Windowsok, mert ők lusták kitermelni a stringeket egypár nyelvi file-ba, amiket aztán váltogatni lehetne. Megsúgom: az XP terjedelme mellett észre se vennénk azt a kis többletet, ami abból eredne, hogy az összes nyelvi verzió összes szövege rákerülne a lemezre. Ha meglátogatnám németországi rokonaimat és leülnék a gép elé, egy Irfanview-t vagy Commandert fél pillanat alatt átkapcsolhatok angolra vagy akár magyarra. Aber Fenstern schreibt deutsch! Nur deutsch! Alles deutsch!
Ugyanez van a billentyűzetekkel. Spanyolországban a bennszülöttek spanyolul beszélnek, ezt a programozó kapásból megmondja, hisz most nézte meg a Wikipédiában. Tehát spanyol billentyűzetre van szükségük. Nem, másmilyenek nem élnek ott. Olyanok se, akik spanyolok ugyan, de esetleg más nyelven is értenek.
De persze ha mégis más nyelven akar írni, nem a neki kiutalt bennszülött nyelven és nem is angolul, akkor sincsen semmi gond. Letölthet egyet a kívánt nyelvhez való rengeteg keyboard layout közül, installálja és kész, very easy!
Kedvenc példáim egyike az az ember, akinek kevés szövegre van szüksége, de néhány szónál azért többre. Néhány szót az ember akár betűnként is kikeresgél a karaktertáblázatból. (Ha már letöltött egy erre alkalmas programot, mert a Windows még az ócska, primitív charmap.exét se rakja föl, ha külön nem kérjük.) Akinek sok szövegre van szüksége, annak nem probléma, hogy keressen a neten egy megfelelő programot, még akár fizetőst is megérheti neki venni.
De aki csak néhány orosz mondattal szeretné üdvözölni orosz barátját, akivel egyébként angolul leveleznek, az hülyét kap, mire a karaktertáblából beütögeti, ha meg le kell töltenie hozzá egy orosz drivert, az a pár mondat leírása után jó esetben csak a helyet foglalja (rossz esetben pedig soha többé nem lehet tőle megszabadulni). Ráadásul aki nem ismeri a rendes orosz írógépkiosztást (balra), a puska nélkül egy szót se tud leírni vele, és puskával is csigalassan (hiszen a billentyűket nem fogja ezért fölmatricázni oroszra), úgyhogy sikító titkárnővé változik.
Й Ц У К Е Н Г Ш Щ З Х Ъ Ш Щ Е Р Т Ь У И О П Ж Ю Ф Ы В А П Р О Л Д Ж Э А С Д Ф Г Х Й К Л Я Э Ы Я Ч С М И Т Ь Б Ю / З Ч Ц В Б Н М , . -
Milyen jó lenne egy olyan orosz kiosztás, ahol az А betű az A gombon van, a Б a B-n, a Ц a C-n, gondolja emberünk (egy példa van jobbra). A Ж-t meg a többieket előbb-utóbb már megtalálná. A valódi oroszok hülyét kapnának tőle, de nekik nem kellene használniuk, ez az ő saját orosz kiosztása lenne. Ilyennel esetleg gyakrabban is írna a barátjának oroszul.
Másik kedvenc példám az amatőr nyelvész. A profi ugyanis ebből él, ő be tud ruházni egy komoly, fizetős programra. Az amatőr nem. De ő is szeretne írni sokféle nyelvül, és nem tud. Ez a helyzet itt, a LAttilaD.orgon is. Én amatőr nyelvész vagyok és sokféléül szeretnék írni. De – nem tudok.
Harmadik példám pedig a hétköznapi ember, aki egyszer az életben ír egy történetet, magyarul, señor Muñoz és monsieur D’Angoulême kalandjairól, és egyszer a történelemben szüksége van egy olyan magyar billentyűzetre, amin van ñ és ê betű és aposztróf. Legközelebb esetleg arról ír, hogy milyen kalandokat élt át Švejk České Budějovicében, és cseh betűkre van szüksége. Egy-két óra hosszára, de hozzájuk akar férni. Lehetőleg kényelmesebben, mint egy karaktertábla útján.
Egy régebbi cikkünkben már tárgyaltuk, hogy mire van szükség a különféle nyelvű szövegekhez; ott komplett szövegszerkesztőt tárgyaltunk, de most beérjük egy billentyűkiosztással, amit bármilyen szövegszerkesztőhöz lehet használni. Természetesen a program, amit elképzeltem, az összes nyelvet tudja. Éppenséggel megírtam jó párszor és tudta, csak nem működött (mindig túl lassú volt a billentyűlenyomások rendes feldolgozásához).
Amit ezen kívül tudnia kell, az a réteges billentyűzet. Ez az én találmányom, az olvasó sehol máshol nem fogja megtalálni. Ezzel a technológiával egyszerre több billentyűkiosztást lehet használni, átkapcsolás nélkül. (Átkapcsolással persze még többet.)
A módszer lényege, hogy egyszerre több kiosztást kapcsolhatunk be, amik egymás fölé rétegezve használhatók. A legfelső réteg takarja a többit. Ha egy adott billentyűt a legfelső rétegen nem definiáltunk, akkor ott az alatta levő réteg definíciója él; ha ott se definiáltuk, akkor az azalatt levő rétegé, és így tovább. „Billentyű” itt kombinációt jelent, például az A, a Shift-A és a Ctrl-A három különböző billentyű.
Lássuk a gyakorlatban. Legyen a legfelső réteg egy magyar billentyűzet. Ezen definíciót kaptak a betűbillentyűk (két okból, erről később), az írásjelek billentyűi, amik a magyar ékezetes betűket adják, és a shiftelt számok, amik az írógép-kiosztásnak megfelelő írásjeleket. Az összes többi jelentés nélkül marad.
Ha a következő réteg egy orosz kiosztás, azon szintén a betűk, az írásjelek és a shiftelt számok fognak jelentést kapni, ezt a kiosztást a magyar teljes egészében takarja. Vagyis amikor magyarul írunk, nem fognak orosz betűk megjelenni. Az orosz viszont ugyanígy takarja a magyart, tehát ha az orosz van felül, akkor nem jönnek magyar betűk.
A két réteg megcserélésére persze külön parancs van, amit egy tetszés szerinti billentyűre lehet rátenni. A csere gyorsabb, mint egy kiosztást file-ból betölteni, és koncepcionálisan is más.
A harmadik réteg viszont tartalmazhat speciális írásjeleket, amik a magyarhoz és az oroszhoz egyformán kellenek: gondolatjelet, nyomdai idézőjeleket és hasonlókat. Ezek viszont kilátszanak a magyar és az orosz réteg alól, mert mondjuk ctrl-shiftes kombinációkra vannak definiálva, és azok se a magyar, se az orosz rétegen nem kapnak jelentést. Vagyis ha például a cirill billentyűzet van felül, és lenyomom az F-et, akkor egy ф betűt kapok, ha viszont a Ctrl-Shift-F-et nyomom le, akkor például egy € jelet, mert a harmadik rétegen az van erre a kombinációra definiálva, és a fölötte levő két rétegen a Ctrl-Shift-F „lyukas”.
Feltehetően általában két réteg billentyűit fogjuk egyszerre használni: egy nyelvi réteget, ami az írógép-billentyűzet nagy részét lefoglalja, és egy kiegészítő réteget, ami minden nyelvhez egyforma. Tehát csak egyszer kell létrehozni, egyszer kell tárolni. De lehetnek további kiegészítő rétegek matematikai jelekkel, egyéb ákombákomokkal, bármivel. Egy zenész, teszem azt, örömmel veheti, ha írhat egypár nyelven, és egy gombnyomással hozzáfér a kottajelekhez is.
A rétegekhez néhány parancs tartozik, amiket billentyűkre tehetünk: a két felső réteg megcserélése, adott réteg felülre hozása, visszasüllyesztése, réteg ki- és bekapcsolása, ilyesfélék. És persze egy párbeszédablak, ahol áttekinthetjük és átrendezhetjük a betöltött rétegeket, a jelenlegi állapotot adott névvel kimenthetjük és visszatölthetjük.
Az előbb azt mondtam, hogy a magyar billentyűzeten a betűk is át vannak definiálva. Ez így van abban a kis scriptben is, amit jelenleg használok, ámbár az fényévekre van az ötletemtől (csak magyarul tud). Mind a huszonhat betűbillentyű ugyanazt a betűt adja, ami rá van írva, de automata nagybetűvel. A rétegzett változaton nemcsak ezért kell definíciót adni nekik, hanem azért is, mert így takarják az alsóbb rétegeket. (Ha a második réteg orosz, akkor enélkül ékezet nélküli latin betűt nem lehetne kapni.)
Azt is meg lehet csinálni, hogy az ékezet nélküli betűk egy teljesen külön rétegre kerülnek, ami fixen marad, amikor mondjuk magyarról átváltunk németre, de elbújik, amikor oroszra vagy görögre kapcsolunk.
A rétegtechnika legfontosabb előnye az, hogy nem kell minden nyelvi kiosztásra külön-külön rátenni például az € vagy √ jelet, ami rendkívül macerás, ha sok nyelvünk és/vagy sok kiegészítő jelünk van. És ha nem kell őket egyenként rátenni, akkor nem kell egyenként megváltoztatni őket, ha rájövünk, hogy mondjuk a Ctrl-Shift-E-re mégsem az ∈ jelet akarjuk tenni, hanem az ∃-t.
Nem kell külön csinálni olyanokat, hogy „magyar kiosztás nyomdai írásjelekkel”, „magyar kiosztás fonetikai jelekkel”, „magyar kiosztás matematikai jelekkel”, aztán ugyanezek némettel, orosszal és göröggel, ami eddig már tizenkét kombináció, hanem van magyar, német, orosz és görög, plusz vannak az írás-, a fonetikai és a matematikai jelek, öt változatot máris megtakarítottunk, pedig még el se kezdtük.
Az igazi csodabillentyűzet természetesen makrózható. Azzal kezdődik a dolog, hogy nemcsak egy jelet adhatunk meg eredmény gyanánt, hanem karaktersorozatot is. Ebben lehetnek vezérlőkarakterek, például két zárójel és utána egy kurzor balra sorozattal kaphatunk olyan zárójelpárt, ami közé csak be kell írni a tartalmat. Ugyanezt lehet programnyelvi struktúrákkal, HTML-címkékkel stb.
De igazából a teljes programozhatóság a végcél. Ezzel lehet olyan trükköket csinálni, mint hogy a görög szigma először lenyomva σ, de ha utána szó vége következik, akkor átváltozik a ς szóvégi alakká. Vagy olyat (aminek nagy hasznát venném), hogy a magyar kiosztás általában unicode-os (ő, ű), de ha éppen egy régebbi program aktív, akkor ANSI (õ, û). Kijelölt szövegrészeket át lehetne alakítani különféle dolgokból másfélékbe (magyar szöveget Unicode és ANSI között, idegen írásrendszereket fonetikus átírásba és vissza, hiraganát és katakanát, sőt akár kandzsik mellé oda lehet tenni a furiganát meg hanzik mellé a pinyint, hisz tudhat nagyobb adatbázisokat is kezelni).
A fontosabb programokat most is billentyűkombinációkkal indítom, nincs is kézügyben az ikonjuk, én nem kattintgatok. Lehet egy erre szakosított réteg a sok között, olyan kombinációkkal, amik programok indítására szolgálnak, esetleg némely programokban funkciókat érünk el velük (amiknek nincs beépített hotkeyjük) és hasonlókkal.
Hiszen az egésznek az a lényege, hogy személyre szabott rendszert csinálhassunk vele. A programhoz lehet adni kétszázféle előregyártott billentyűkiosztást, de ez csak kiindulásul szolgál. Ha a felhasználónak olyan kiosztás kell, ami nincs a programban, akkor csinálhassa meg magának, könnyen, gyorsan, egyszerűen. Ha a meglevő kiosztásra rá akar tenni egy-két jelet (cikk señor Muñozról és monsieur D’Angoulême-ről), akkor kapjon egy ablakot, amiben ezt hipp-hopp megcsinálhatja, és onnantól működik. Nála. Másnak nincs szüksége ugyanerre. De persze az elkészített kiosztásokat aztán meg lehet osztani a neten.
Az alapelv: a lehető legkevesebb fölösleges vacakolás. A Windows beépített billentyűzetkezelőjének lényege a minél több fölösleges vacakolás. Egy alapértelmezett beállításokkal installált angol Windowson, ami nem tartalmaz third-party alkalmazásokat, a lehetetlennel határos feladat leírni azt az agyonkomplikált multikódos bizarrmányt, hogy ház. Mert alapértelmezésben angol billezet van, Character Map viszont nincs. Vagy ezt, vagy a francia billezet föl kell hozzá installálni.
Az én alapelvem az, hogy a billentyűzetnek azt kell tudnia, amire éppen annak a felhasználónak éppen akkor szüksége van. Nem többet és nem kevesebbet. De ahhoz, hogy ezt tudhassa, rengeteg képességgel kell fölruházni.
Az ötlet persze copyrightos. Ha valakit megihlet, keressen meg, segítek a fejlesztésben.