xneur'i toeva tulek on viimasel poolel aastas tekitanud mulle teatud raskusi (OpenSUSE 15.1 ilmumisega minu töölaual: kui xneur on sisse lĂŒlitatud, kaotavad aknad fookuse ja vilkuvad toredasti klaviatuuriga kirjutamisega samas rĂŒtmis).
âAh, kurat, jĂ€lle vale sisestuskaardiga alustasinâ â töö juures juhtub see liiga tihti. Ja see ei lisa midagi positiivset.

Samas suudan ma (ehitusinsenerina) ĂŒsna selgelt vĂ€ljendada, mida tahan. Ja tahtsin ma (algselt Punto Switcherâi abil, hiljem tĂ€nu Windows Vistaâle, otsustavalt Linuxile ĂŒle minnes, xneurâist) just ĂŒhte. MĂ”istes, et ekraanil on valskuse probleem vale sisestuskaardi tĂ”ttu (see juhtub tavaliselt uue sĂ”na lĂ”ppemisel), lĂŒĂŒa âPause/Breakâ. Ja saada see, mille ma tippisin.
Praegu on toode minu arvates optimaalses (funktsionaalsuse/keerukuse) tasakaalus. Aeg on jagada.
TL.DR
Edasi tulevad igasugused tehnilised ĂŒksikasjad, seega kĂ”igepealt â Ă€ratundmatutele.
Praegu on tahkelt defineeritud jÀrgmine kÀitumine:
- âPause/Breakâ: tĂŒhistab (Backspace) viimase sĂ”na, vahetab aktiivses aknas sisestuskaarti (0 ja 1 vahel) ja tippib veel kord.
- âVasak Ctrl tĂŒhjanaâ: vahetab aktiivses aknas sisestuskaarti (0 ja 1 vahel).
- âVasak Shift tĂŒhjanaâ: aktiveerib aktiivses aknas sisestuskaardi nr 0.
- âParem Shift tĂŒhjanaâ: aktiveerib aktiivses aknas sisestuskaardi nr 1.
Alates sellest hetkest kavatsen kohandada kĂ€itumist. Ilma tagasisideta â pole huvitav (mind rahuldab see niigi). Arvan, et Habr's leidub piisavalt palju inimesi, kes seisavad silmitsi sarnaste probleemidega.
MÀrkus. Kuna praeguses versioonis on nuhkvara kinni seotud "/dev/input/", peab xswitcher kÀivituma juurÔigusena:
chown root:root xswitcher
chmod +xs xswitcherPange tĂ€hele: faili omanik peab olema root, kuna kel on omanik â sellel on suid ja see muudetakse kĂ€ivitamisel.
Paranoikud (ma ei ole erand) vÔivad kloonida ja koguda kohapeal. Umbes nii:
go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"
### X11 pÀised OpenSUSE/deb-pÔhistele
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev
cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go
Automaatselt kÀivitamiseks lisada maitse jÀrgi (sÔltuvalt DE-st).
Töötab, âputru ei kĂŒsiâ (â30 sekundit CPU pĂ€evas, â12 MB RSS-is).
Ăksikasjad
NĂŒĂŒd â ĂŒksikasjad.
Kogu reposiitoorium oli algselt pĂŒhendatud minu pet-projektile, ja teise loomiseks hetkel puudub motivatsioon. Niisiis on kĂ”ik kuhjatud kokku (lihtsalt kaustadesse) ja kaetud AGPL ("patendi vastupidi").
Kood xswitcher on kirjutatud golangis, minimaalsete C-sisenditega. Eeldatakse, et selline lĂ€henemine toob kaasa madalaimad tööjĂ”ukulud (hetkel on see nii). Samuti sĂ€ilitab vĂ”imaluse puuduvate osade ĂŒhendamiseks cgo kaudu.
Teksti sees on kommentaarid, kust ma mida vÔtsin ja miks. Kuna kood xneur mind "ei inspireerinud", vÔtsin lÀhtepunktiks .
Kasutades "\/dev\/input\/" on nii eeliseid (kÔik on nÀhtav, sealhulgas allasurutud klahv automaatse kordamisega) kui ka puudusi. Puudused on jÀrgmised:
- Automaatne kordamine (sĂŒndmused koodiga "2") ei ole seotud kordumisega X-ides.
- Ei ole nÀhtav sisend X11 liideste kaudu (nÀiteks VNC töötab nii).
- Vajadus on ruti.
Teisest kĂŒljest, saab tellida X sĂŒndmusi lĂ€bi «XSelectExtensionEvent()». Vaadata saab . Go jaoks ei leidnud midagi sarnast, ja esialgne rakendus andis kohe sada rida C-koodi. Hetkel olen selle kĂ”rvale pannud.
VĂ€ljund "tagasi" on praegu tehtud virtuaalse klaviatuuri kĂŒlge keeramisega. AitĂ€h autorile keybd_event, kuid seal on liiga kĂ”rgetasemeline abstraktsioon ja edaspidi tuleb ĂŒmber teha. NĂ€iteks minule valib parem Win-klahv 3. rea. Ja tagurpidi edastatakse ainult vasak Win.
Tuntud vead
- Meil pole teadmisi "komposiit sisendi" kohta (nĂ€ide: œ). Praegu pole see vajalik.
- Vale on Ôige Win-klahvi reproduktsioon. Minu puhul rikub see aktsentide jaotust.
- Selle sisendi kohta pole selget analĂŒĂŒsi. Selle asemel on mitu funktsiooni: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). AitĂ€h tĂ€helepanu pĂ€rast: parandas kode ja siin. Teatud tĂ”enĂ€osusega vĂ”ib vigade ilmnemine vahetuse ajal.
Selles kohas ei tea ma "kuidas Ôigesti" ja olen avatud igasugustele ettepanekutele. - (Oh Ôudus) konkurentsi kasutamine kanalites (keyboardEvents, miceEvents).
KokkuvÔte
Kood on kÔige lihtsam protseduuriline. Ja rumal nagu mina. Seega lohutangi end lootusega, et soovitud vÔib koodida praktiliselt iga tehnik. Ja see toode ei kao tÀnu sellele ilma toetuse nagu enamik just fun pÀrast.
Edu!
Allikas: habr.com
