Prestanak xneur podrške prouzročio mi je neke patnje u proteklih šest mjeseci. (s pojavom OpenSUSE 15.1 na mojim stolnim računalima: s omogućenim xneurom, prozori gube fokus i čudno trepere u ritmu s unosom s tipkovnice).
"Oh, dovraga, opet sam počeo tipkati u krivom rasporedu" - u mom poslu to se događa nepristojno često. I ne dodaje ništa pozitivno.
U isto vrijeme, ja (kao projektant) mogu prilično jasno formulirati što želim. Ali htio sam (prvo s Punto Switchera, a zatim, zahvaljujući Windows Visti, konačno prelazak na Linux, s xneura) točno jednu stvar. Nakon što ste shvatili da je smeće na ekranu u pogrešnom rasporedu (to se obično događa na kraju upisivanja nove riječi), pritisnite "Pauza/Prekid". I uzmi ono što si ispisao.
U ovom trenutku proizvod ima optimalan (s moje točke gledišta) omjer funkcionalnosti i složenosti. Vrijeme je za dijeljenje.
TL.DR
Kasnije će biti raznih tehničkih detalja, pa prvo - veza "na dodir" za nestrpljive.
Trenutno je sljedeće ponašanje tvrdo kodirano:
“Pauza/Prekid”: vraća posljednju riječ unatrag, mijenja raspored u aktivnom prozoru (između 0 i 1) i ponovno bira broj.
“Lijevi Ctrl bez ičega”: mijenja izgled u aktivnom prozoru (između 0 i 1).
“Lijevi pomak bez ičega”: uključuje izgled br. 0 u aktivnom prozoru.
“Desni pomak bez ičega”: uključuje izgled br. 1 u aktivnom prozoru.
Od sada planiram prilagoditi ponašanje. Bez povratne informacije, nije zanimljivo (ionako mi je dobro). Vjerujem da će na Habréu biti dovoljan postotak publike sa sličnim problemima.
NB Jer u trenutnoj verziji, keylogger je priključen na "/dev/input/", xswitcher se mora pokrenuti s root pravima:
chown root:root xswitcher
chmod +xs xswitcher
Imajte na umu: Vlasnik datoteke sa suid mora biti root, jer tko god da je vlasnik bit će pretvoren u suid nakon pokretanja.
Paranoici (nisam iznimka) mogu klonirati iz GIT i sastaviti na licu mjesta. ovako:
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
Dodajte autostart po želji (ovisno o DE).
Radi, "ne traži kašu" (≈30 sekundi CPU-a dnevno, ≈12 MB u RSS-u).
Detalji
Sada - detalji.
Cijelo spremište je izvorno bilo posvećeno mom projektu ljubimaca, a ja sam previše lijen da započnem još jedan. Dakle, sve je nagomilano (samo u mapama) i pokriveno AGPL-om ("obrnuti patent").
Xswitcher kod je napisan u golangu, s minimalnim uključivanjem C-a. Pretpostavlja se da će ovaj pristup rezultirati najmanjim naporom (do sada jest). Zadržavajući mogućnost povezivanja onoga što nedostaje pomoću cgo.
Tekst sadrži komentare odakle je posuđen i zašto. Jer xneur kod "nije me inspirirao", uzeo sam ga kao polazište loloswitcher.
Korištenje "/dev/input/" ima svoje prednosti (sve je vidljivo, uključujući pritisnutu tipku za automatsko ponavljanje) i mane. Nedostaci su:
Automatsko ponavljanje (događaji s kodom “2”) nije u korelaciji s ponavljanjem s x.
Unos preko X11 sučelja nije vidljiv (tako radi npr. VNC).
Potreban root.
S druge strane, moguće je pretplatiti se na X događaje putem "XSelectExtensionEvent()". Možete zaviriti xinput kod. Nisam pronašao ništa slično za go, a za grubu implementaciju odmah je bilo potrebno stotinu redaka C koda. Ostavite to sa strane za sada.
"Obrnuti" izlaz se trenutno izvodi zavrtanjem virtualne tipkovnice. Hvala autoru keybd_eventa, ali tamošnja apstrakcija je previsoke razine i morat će se dalje prepravljati. Na primjer, koristim desnu tipku Win za odabir 3. reda. I samo lijevi Win se prenosi natrag.
Poznate greške
Ne znamo ništa o "kompozitnom" unosu (primjer: ½). Trenutno nije potrebno.
Netočno igramo pravu pobjedu. U mom slučaju razbija naglasak.
Ne postoji jasna analiza unosa. Umjesto toga, postoji nekoliko funkcija: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Hvala nsmcan za vašu brigu: ispravljeno u kodu i ovdje. Uz određenu vjerojatnost, možete uhvatiti greške prilikom zamjene. U ovom trenutku ne znam "kako" i rado bih pozdravio sve prijedloge.
(O Bože) natjecateljsko korištenje kanala (keyboardEvents, miceEvents).
Zaključak
Kod je najjednostavniji proceduralni. I glup poput mene. Dakle, laskam si nadom da će gotovo svaki tehničar moći dovršiti ono što želi. I zahvaljujući tome, ovaj proizvod neće nestati bez podrške, kao većina samo za zabavu.