Punto Switcheri uus analoog Linuxile: xswitcher

Xneuri toe lõppemine on mulle viimase kuue kuu jooksul kannatusi põhjustanud. (OpenSUSE 15.1 tulekuga minu lauaarvutitele: kui xneur on lubatud, kaotavad aknad fookuse ja vilguvad aja jooksul klaviatuuri sisendiga naljakalt).

"Oh, kurat, ma hakkasin jälle vales paigutuses tippima" - minu töös juhtub seda sündsusetult sageli. Ja see ei lisa midagi positiivset.

Punto Switcheri uus analoog Linuxile: xswitcher
Samas oskan mina (projekteerimisinsenerina) üsna selgelt sõnastada, mida tahan. Aga ma tahtsin (kõigepealt Punto Switcherist ja siis tänu Windows Vistale lõpuks Linuxile üleminek, xneurilt) täpselt ühte asja. Olles mõistnud, et ekraanil olev prügi on vale paigutusega (tavaliselt juhtub see uue sõna tippimise lõpus), vajuta "Paus/Paus". Ja hankige see, mida printisite.

Hetkel on tootel optimaalne (minu vaatevinklist) funktsionaalsuse/keerukuse suhe. On aeg jagada.

TL.DR

Hiljem tuleb igasuguseid tehnilisi üksikasju, nii et kõigepealt - link "puudutada" kannatamatute jaoks.

Praegu on järgmine käitumine kõvasti kodeeritud:

  • "Paus/Paus": teeb viimase sõna tagasilükke, vahetab aktiivses aknas paigutust (0 ja 1 vahel) ja valib uuesti.
  • “Vasak Ctrl ilma millegita”: lülitab aktiivses aknas paigutust (0 ja 1 vahel).
  • “Vasak tõuge ilma millegita”: lülitab aktiivses aknas sisse paigutuse nr 0.
  • “Parem nihe ilma midagi”: lülitab aktiivses aknas sisse paigutuse nr 1.

Nüüdsest kavatsen käitumist kohandada. Ilma tagasisideta pole see huvitav (ma olen sellega igatahes korras). Usun, et Habrel on piisav protsent sarnaste probleemidega publikut.

NB Sest praeguses versioonis on klahvilogija lisatud kataloogi "/dev/input/", xswitcher tuleb käivitada juurõigustega:

chown root:root xswitcher
chmod +xs xswitcher

Pange tähele: Suid faili omanik peab olema root, sest kes iganes on omanik, muudetakse käivitamisel suidiks.

Paranoidid (ma pole erand) saavad kloonida GIT ja kokku panna kohapeal. Nagu see:

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

Lisa maitse järgi automaatkäivitust (olenevalt DE-st).

See töötab, "ei küsi putru" (≈30 sekundit CPU päevas, ≈12 MB RSS-is).

Detailid

Nüüd - üksikasjad.

Kogu hoidla oli algselt pühendatud minu lemmikloomaprojektile ja ma olen liiga laisk, et uut projekti alustada. Niisiis, kõik on kuhjatud (lihtsalt kaustadesse) ja kaetud AGPL-iga ("tagurpidi patent").

Xswitcheri kood on kirjutatud golangi keeles, minimaalselt C-d. Eeldatakse, et see lähenemine toob kaasa väikseima pingutuse (seni on see tehtud). Säilitades samas võimaluse ühendada puuduv, kasutades cgo-d.

Tekst sisaldab kommentaare selle kohta, kust see on laenatud ja miks. Sest xneur kood "ei inspireerinud mind", võtsin selle lähtepunktiks loloswitcher.

"/dev/input/" kasutamisel on nii oma eelised (kõik on näha, sealhulgas vajutatud automaatse kordusklahv) kui ka puudused. Puudused on järgmised:

  • Automaatne kordus (sündmused koodiga "2") ei ole korrelatsioonis x-iga kordamisega.
  • X11 liideste kaudu sisend pole nähtav (nii töötab näiteks VNC).
  • Vaja juurt.

Teisest küljest on võimalik tellida X sündmust "XSelectExtensionEvent()" kaudu. Saate piiluda xinput kood. Ma ei leidnud midagi sellist ja umbkaudne rakendamine võttis kohe sada rida C-koodi. Pange see praegu kõrvale.

"Tagurpidi" väljund tehakse praegu virtuaalse klaviatuuri kruvimise teel. Aitäh keybd_event autorile, aga sealne abstraktsioon on liiga kõrgetasemeline ja seda tuleb edasi teha. Näiteks kasutan paremat Win klahvi 3. rea valimiseks. Ja ainult vasakpoolne Võit edastatakse tagasi.

Tuntud vead

  • Me ei tea midagi liitsisendist (näide: ½). Seda pole praegu vaja.
  • Mängime õigesti võitu valesti. Minu puhul rikub see rõhuasetust.
  • Selge sisendi sõelumine puudub. Selle asemel on mitu funktsiooni: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Tänan nsmcan teie hooleks: parandage see koodis ja siin. Teatud tõenäosusega võite asendamisel vigu tabada.
    Praegu ma ei tea, kuidas seda teha, ja ootan kõiki ettepanekuid.
  • (Oh jumal) konkurentsivõimeline kanalite kasutamine (keyboardEvents, miceEvents).

Järeldus

Kood on kõige lihtsam protseduuriline. Ja loll nagu mina. Niisiis, ma meelitan ennast lootusega, et peaaegu iga tehnik saab valmis selle, mida ta tahab. Ja tänu sellele ei hävi see toode ilma toetuseta, nagu enamik lihtsalt lõbu pärast.

Õnn kaasa!

Allikas: www.habr.com

Lisa kommentaar