I-analogue entsha yePunto Switcher yelinux: xswitcher

Ukuphela kwenkxaso ye-xneur kundenze ndabandezeleka kwiinyanga ezintandathu ezidlulileyo. (ngokufika kwe-OpenSUSE 15.1 kwiidesktop zam: nge-xneur yenziwe, iiwindow zilahlekelwa ingqwalasela kunye nokuqhwanyaza okuhlekisayo ngexesha ngogalelo lwebhodibhodi).

"Owu, ndiqale ukuchwetheza ngendlela engeyiyo kwakhona" - emsebenzini wam oku kwenzeka ngokungafanelekanga rhoqo. Kwaye ayongezi nto entle.

I-analogue entsha yePunto Switcher yelinux: xswitcher
Kwangaxeshanye, mna (njengenjineli yoyilo) ndiyakwazi ukuyila ngokucacileyo into endiyifunayo. Kodwa bendifuna (okokuqala kwiPunto Switcher, emva koko, enkosi kwiWindows Vista, ekugqibeleni nditshintshela kwiLinux, ukusuka kwixneur) kanye into enye. Emva kokuba ubonile ukuba inkunkuma ekwiskrini ikwisakhiwo esingalunganga (oku kudla ngokwenzeka ekupheleni kokuchwetheza igama elitsha), cinezela u-β€œMisa/Yophula”. Kwaye ufumane oko ukushicileyo.

Okwangoku, imveliso ineyona nto ilungileyo (ukusuka kwimbono yam) yokusebenza / ukuntsonkotha komlinganiselo. Lixesha lokwabelana.

I-TL.DR

Kuya kubakho zonke iintlobo zeenkcukacha zobugcisa kamva, ngoko kuqala - ikhonkco "ukubamba" kwabo bangenamonde.

Okwangoku le ndlela yokuziphatha ilandelayo ifakwe kwikhowudi:

  • "Misa / Ukuqhawula": i-backspaces igama lokugqibela, itshintshe i-layout kwifestile esebenzayo (phakathi kwe-0 kunye ne-1) kwaye ucofe kwakhona.
  • "I-Ctrl yasekhohlo ngaphandle kwanto": itshintsha ubeko kwifestile esebenzayo (phakathi kwe-0 kunye ne-1).
  • "Shift yaKhohlo ngaphandle kwanto": ivula ubeko lweNombolo 0 kwifestile esebenzayo.
  • "I-Shift ekunene ngaphandle kwanto": ivula i-layout No. 1 kwifestile esebenzayo.

Ukusukela ngoku ukuya phambili ndiceba ukwenza ngokwezifiso ukuziphatha. Ngaphandle kwempendulo, ayiniki mdla (ndilungile nayo kunjalo). Ndiyakholelwa ukuba kuHabrΓ© kuya kubakho ipesenteji eyaneleyo yabaphulaphuli abaneengxaki ezifanayo.

NB Ngokuba kuguqulelo lwangoku, i-keylogger incamathele kwi "/dev/input/", xswitcher kufuneka iqaliswe ngamalungelo engcambu:

chown root:root xswitcher
chmod +xs xswitcher

Nceda uqaphele: Umnini wefayile nge-suid kufuneka abe yingcambu, kuba nabani na ongumnini uya kuguqulelwa ekubeni yi-suid ekuqaleni.

IiParanoids (andim ngaphandle) zinokufana ukusuka GIT kwaye bahlangane kwindawo. Kanjalo:

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

Yongeza i-autostart ukunambitha (kuxhomekeke kwi-DE).

Isebenza, "ayiceli i-porridge" (β‰ˆ30 imizuzwana ye-CPU ngosuku, β‰ˆ12 MB kwi-RSS).

Jonga iinkcukacha

Ngoku - iinkcukacha.

Yonke indawo yokugcina yayinikezelwe kwiprojekthi yam yesilwanyana sasekhaya, kwaye ndonqena ukuqala enye. Ngoko ke, yonke into ifunjwe (kwiifolda nje) kwaye igutyungelwe yi-AGPL ("i-patent reverse").

Ikhowudi ye-xswitcher ibhalwe kwi-golang, kunye ne-inclusions encinci ye-C. Kucingelwa ukuba le ndlela iya kubangela ubuncinci bomzamo (ukuze kube ngoku). Ngelixa ugcina ukukwazi ukudibanisa into engekhoyo usebenzisa i-cgo.

Isicatshulwa siqulethe amagqabantshintshi malunga nokuba ibolekwe phi kwaye kutheni. Ngokuba ikhowudi ye-xneur "ayizange indikhuthaze", ndiyithathe njengesiqalo loloswitcher.

Ukusebenzisa i-"/dev/input/" ineenzuzo zayo zombini (yonke into iyabonakala, kuquka neqhosha lokuphinda-phinda ngokuzenzekelayo) kunye nokungonakali. Izinto ezingeloncedo zezi:

  • Ukuphinda-phinda (iziganeko ezinekhowudi β€œ2”) ayidibanisi nophindaphindo no-x.
  • Ungeniso ngojongano lwe-X11 alubonakali (le yindlela esebenza ngayo iVNC, umzekelo).
  • Kufuneka ingcambu.

Kwelinye icala, kuyenzeka ukurhuma kwimisitho ye-X nge-"XSelectExtensionEvent()". Ungakroba ikhowudi ye-xinput. Andizange ndifumane nantoni na enjengale ukuba ndihambe, kwaye ukuphunyezwa okunzima ngokukhawuleza kwathatha ikhulu lemigca yekhowudi ye-C. Yibeke ecaleni okwangoku.

Imveliso "emvayo" yenziwe ngoku ngokukrukra ikhibhodi enenyani. Enkosi kumbhali we-keybd_event, kodwa ukutsalwa kukho kwinqanaba eliphezulu kakhulu kwaye kuya kufuneka kwenziwe kwakhona ngakumbi. Umzekelo, ndisebenzisa iqhosha leWin lasekunene ukukhetha umqolo wesi-3. Kwaye kuphela Win ekhohlo igqithiselwa emva.

Iibugs ezaziwayo

  • Asazi nto malunga negalelo "elidibeneyo" (umzekelo: Β½). Ayifunwa ngoku.
  • Sidlala Win elungileyo ngokungachanekanga. Kwimeko yam, iphula ugxininiso.
  • Akukho galelo licacileyo lokwahlulahlula. Endaweni yoko, kukho imisebenzi emininzi: Thelekisa(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Бпасибо nsmcan ngenxa yenkathalo yakho: ilungiswe kwikhowudi kwaye apha. Ngokunokwenzeka okuthile, ungabamba iibugs xa utshintsha.
    Ngeli xesha andazi "njani" kwaye ndingakwamkela naziphi na iingcebiso.
  • (Oh Thixo) ukusetyenziswa okukhuphisanayo kwamajelo (keyboardEvents, miceEvents).

isiphelo

Ikhowudi yeyona nkqubo ilula. Kwaye usisidenge njengam. Ke, ndiyazingca ngethemba lokuba phantse naliphi na igcisa liya kukwazi ukugqiba oko likufunayo. Kwaye ngenxa yoku, le mveliso ayiyi kutshabalala ngaphandle kwenkxaso, njengoninzi nje-ukuzonwabisa.

nethamsanqa!

umthombo: www.habr.com

Yongeza izimvo