Bag-ong analogue sa Punto Switcher alang sa linux: xswitcher
Ang pagtapos sa suporta sa xneur nakapasakit kanako sa miaging unom ka bulan. (uban sa pag-abut sa OpenSUSE 15.1 sa akong mga desktop: nga adunay xneur nga gipagana, ang mga bintana nawad-an sa pokus ug nagkidlap nga kataw-anan sa oras sa input sa keyboard).
"Oh, damn it, nagsugod na usab ako sa pag-type sa sayup nga layout" - sa akong trabaho kini kanunay nga mahitabo nga dili maayo. Ug kini wala makadugang bisan unsa nga positibo.
Sa parehas nga oras, ako (isip usa ka inhenyero sa disenyo) klaro nga maporma kung unsa ang akong gusto. Apan gusto nako (una gikan sa Punto Switcher, ug dayon, salamat sa Windows Vista, sa katapusan mobalhin sa Linux, gikan sa xneur) usa ra ka butang. Sa pagkaamgo nga ang basura sa screen naa sa sayup nga layout (kini kasagaran mahitabo sa katapusan sa pag-type sa usa ka bag-ong pulong), pag-stomp sa "Pause/Break". Ug kuhaa ang imong giimprinta.
Sa pagkakaron, ang produkto adunay kamalaumon (gikan sa akong punto de bista) functionality/complexity ratio. Panahon na sa pagpaambit.
TL.DR
Adunay tanan nga mga matang sa teknikal nga mga detalye sa ulahi, mao nga una - link "sa paghikap" para sa mga walay pasensya.
Sa pagkakaron ang mosunod nga kinaiya kay hardcoded:
βPause/Breakβ: i-backspace ang kataposang pulong, ibalhin ang layout sa aktibong bintana (tali sa 0 ug 1) ug i-dial pag-usab.
"Left Ctrl without anything": gibalhin ang layout sa aktibo nga bintana (tali sa 0 ug 1).
βLeft Shift without anythingβ: i-on ang layout No. 0 sa aktibong bintana.
"Tuo nga Pagbalhin nga walay bisan unsa": gipaandar ang Layout No. 1 sa aktibo nga bintana.
NB Kay sa kasamtangan nga bersyon, ang keylogger gilakip sa "/ dev / input /", xswitcher kinahanglan nga ilunsad uban sa gamut katungod:
chown root:root xswitcher
chmod +xs xswitcher
Palihug timan-i: Ang tag-iya sa file nga adunay suid kinahanglan nga gamut, tungod kay bisan kinsa ang tag-iya mahimong suid sa pagsugod.
Ang mga paranoid (dili ako eksepsiyon) mahimo nga mag-clone gikan sa GIT ug magtigum sa site. Ingon niana:
go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"
### X11 headers for OpenSUSE/deb-based
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
Idugang ang autostart sa lami (depende sa DE).
Kini molihok, "dili mangayo og lugaw" (β30 segundos nga CPU kada adlaw, β12 MB sa RSS).
Tan-awa ang mga detalye
Karon - ang mga detalye.
Ang tibuok repository orihinal nga gipahinungod sa akong binuhi nga proyekto, ug ako tapulan kaayo sa pagsugod sa lain. Busa, ang tanan gitapok (sa mga folder lang) ug gitabonan sa AGPL ("reverse patent").
Ang xswitcher code gisulat sa golang, nga adunay dyutay nga mga inklusyon sa C. Gituohan nga kini nga pamaagi magresulta sa pinakagamay nga paningkamot (hangtod karon adunay kini). Samtang gipadayon ang abilidad sa pagkonektar kung unsa ang nawala gamit ang cgo.
Ang teksto adunay mga komentaryo kung diin kini gihulam ug ngano. Kay ang xneur code "wala makadasig kanako", gikuha ko kini isip usa ka punto sa pagsugod loloswitcher.
Ang paggamit sa "/ dev / input /" adunay parehas nga mga bentaha (tanan makita, lakip ang gipugos nga auto-repeat key) ug mga disbentaha. Ang mga disadvantages mao ang:
Auto-repeat (mga panghitabo nga adunay code "2") wala mag-correlate sa pagbalik-balik sa x.
Ang pag-input pinaagi sa mga interface sa X11 dili makita (sama niini kung giunsa ang paglihok sa VNC, pananglitan).
Kinahanglang gamut.
Sa laing bahin, posible nga mag-subscribe sa X nga mga panghitabo pinaagi sa "XSelectExtensionEvent()". Mahimo nimong tan-awon xinput code. Wala koy nakit-an nga sama niini alang sa pag-adto, ug ang dili maayo nga pagpatuman mikuha dayon og usa ka gatos nga linya sa C code. Isalikway kini sa pagkakaron.
Ang "reverse" nga output karon gihimo pinaagi sa pag-screw sa virtual nga keyboard. Salamat sa tagsulat sa keybd_event, apan ang abstraction adunay taas kaayo nga lebel ug kinahanglan nga usbon pa. Pananglitan, gigamit nako ang husto nga Win key aron mapili ang ika-3 nga laray. Ug ang wala nga Win lamang ang gipabalik.
Nailhan nga mga Bug
Wala kami nahibal-an bahin sa "composite" input (pananglitan: Β½). Dili kini kinahanglan karon.
Nagdula kami sa husto nga Win nga dili husto. Sa akong kaso, gibali niini ang gibug-aton.
Walay klaro nga input parsing. Hinuon, adunay daghang mga gimbuhaton: Itandi(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ nsmcan alang sa imong pag-atiman: gitul-id kini sa code ug dinhi. Sa usa ka piho nga posibilidad, mahimo nimong makuha ang mga bug kung mag-ilis. Niini nga punto wala ako kahibalo "unsaon" ug gusto ko ang bisan unsang mga sugyot.
(Oh Dios) kompetisyon nga paggamit sa mga channel (keyboardEvents, miceEvents).
konklusyon
Ang code mao ang pinakasimple nga pamaagi. Ug tanga sama nako. Busa, giulog-ulog nako ang akong kaugalingon uban ang paglaom nga halos bisan kinsang technician makakompleto sa iyang gusto. Ug salamat niini, kini nga produkto dili mawala kung walaβy suporta, sama sa kadaghanan alang sa kalingawan.