Analog i ri i Punto Switcher për linux: xswitcher

Fundi i mbështetjes për xneur më ka shkaktuar disa vuajtje gjatë gjashtë muajve të fundit. (me ardhjen e OpenSUSE 15.1 në desktopët e mi: me xneur të aktivizuar, dritaret humbasin fokusin dhe dridhen qesharake në kohë me hyrjen e tastierës).

"Oh, dreqin, fillova të shkruaj përsëri në paraqitjen e gabuar" - në punën time kjo ndodh shpesh në mënyrë të pahijshme. Dhe nuk shton asgjë pozitive.

Analog i ri i Punto Switcher për linux: xswitcher
Në të njëjtën kohë, unë (si inxhinier projektimi) mund të formuloj mjaft qartë atë që dua. Por unë doja (së pari nga Punto Switcher, dhe më pas, falë Windows Vista, më në fund kaloja në Linux, nga xneur) saktësisht një gjë. Pasi të keni kuptuar se mbeturinat në ekran janë në paraqitjen e gabuar (kjo ndodh zakonisht në fund të shtypjes së një fjale të re), shtypni "Pauzë/Pushim". Dhe merrni atë që keni shtypur.

Për momentin, produkti ka raportin optimal (nga këndvështrimi im) funksionalitet/kompleksitet. Është koha për të ndarë.

TL.DR

Do të ketë të gjitha llojet e detajeve teknike më vonë, kështu që së pari - lidhja "për të prekur" për të paduruarit.

Aktualisht sjellja e mëposhtme është e koduar:

  • “Pause/Break”: e kthen në hapësirë ​​fjalën e fundit, ndërron paraqitjen në dritaren aktive (ndërmjet 0 dhe 1) dhe telefonon përsëri.
  • "Left Ctrl pa asgjë": ndërron paraqitjen në dritaren aktive (midis 0 dhe 1).
  • "Left Shift pa asgjë": aktivizon paraqitjen nr. 0 në dritaren aktive.
  • "Right Shift pa asgjë": aktivizon paraqitjen nr. 1 në dritaren aktive.

Që tani e tutje kam në plan të personalizoj sjelljen. Pa reagime, nuk është interesante (gjithsesi jam mirë me të). Besoj se në Habré do të ketë një përqindje të mjaftueshme të audiencës me probleme të ngjashme.

NB Sepse në versionin aktual, keylogger është bashkangjitur në "/dev/input/", xswitcher duhet të lansohet me të drejta rrënjësore:

chown root:root xswitcher
chmod +xs xswitcher

Ju lutemi vini re: Pronari i skedarit me suid duhet të jetë root, sepse kushdo që të jetë pronar do të kthehet në suid pas fillimit.

Paranoidët (unë nuk jam përjashtim) mund të klonohen nga GIT dhe montoni në vend. Kështu:

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

Shtoni autostart sipas shijes (në varësi të DE).

Funksionon, "nuk kërkon qull" (≈30 sekonda CPU në ditë, ≈12 MB në RSS).

Detalet

Tani - detajet.

I gjithë depoja fillimisht iu dedikua projektit tim për kafshët shtëpiake dhe jam shumë dembel të filloj një tjetër. Pra, gjithçka grumbullohet (vetëm në dosje) dhe mbulohet nga AGPL ("patentë e kundërt").

Kodi xswitcher është shkruar në golang, me përfshirje minimale të C. Supozohet se kjo qasje do të rezultojë në përpjekjen më të vogël (deri më tani). Duke ruajtur aftësinë për të lidhur atë që mungon duke përdorur cgo.

Teksti përmban komente se nga është huazuar dhe pse. Sepse kodi xneur "nuk më frymëzoi", e mora atë si pikënisje loloswitcher.

Përdorimi i "/dev/input/" ka si avantazhet e tij (gjithçka është e dukshme, duke përfshirë tastin e shtypur të përsëritjes automatike) dhe disavantazhet. Disavantazhet janë:

  • Përsëritja automatike (ngjarjet me kodin "2") nuk lidhet me përsëritjen me x.
  • Hyrja përmes ndërfaqeve X11 nuk është e dukshme (kështu funksionon VNC, për shembull).
  • Duhet rrënjë.

Nga ana tjetër, është e mundur të abonoheni në X ngjarje përmes "XSelectExtensionEvent()". Mund të shikoni kodi xinput. Unë nuk gjeta asgjë të tillë për të shkuar, dhe zbatimi i përafërt mori menjëherë njëqind rreshta të kodit C. Lëreni mënjanë për momentin.

Dalja "e kundërt" bëhet aktualisht duke vidhosur tastierën virtuale. Faleminderit autorit të keybd_event, por abstraksioni atje është shumë i nivelit dhe do të duhet të ribëhet më tej. Për shembull, unë përdor tastin e djathtë Win për të zgjedhur rreshtin e 3-të. Dhe vetëm Winja e majtë transmetohet prapa.

Mete të njohura

  • Ne nuk dimë asgjë rreth hyrjes "të përbërë" (shembull: ½). Nuk është e nevojshme për momentin.
  • Ne po luajmë gabimisht fitoren e duhur. Në rastin tim, e thyen theksin.
  • Nuk ka analizë të qartë të hyrjes. Në vend të kësaj, ka disa funksione: Krahaso(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Falënderim nsmcan për kujdesin tuaj: korrigjuar atë në kod dhe këtu. Me një probabilitet të caktuar, mund të kapni defekte kur zëvendësoni.
    Në këtë pikë unë nuk e di "si të" dhe do të mirëpres çdo sugjerim.
  • (O Zot) përdorimi konkurrues i kanaleve (keyboardEvents, miceEvents).

Përfundim

Kodi është procedural më i thjeshtë. Dhe budalla si unë. Pra, i bëj lajka vetes me shpresën se pothuajse çdo teknik do të jetë në gjendje të përfundojë atë që dëshiron. Dhe falë kësaj, ky produkt nuk do të humbasë pa mbështetje, si shumica e tyre thjesht për argëtim.

Good luck!

Burimi: www.habr.com

Shto një koment