Nouvo analogue Punto Switcher pou linux: xswitcher

Fin sipò xneur te lakòz mwen kèk soufrans pandan sis mwa ki sot pase yo. (ak avènement OpenSUSE 15.1 sou Desktop mwen yo: ak xneur pèmèt, fenèt yo pèdi konsantre ak tranbleman komik nan tan ak opinyon klavye).

"Oh, modi, mwen te kòmanse tape nan move layout ankò" - nan travay mwen sa a rive endesan souvan. Epi li pa ajoute anyen pozitif.

Nouvo analogue Punto Switcher pou linux: xswitcher
An menm tan an, mwen (tankou yon enjenyè konsepsyon) ka byen klè fòmile sa mwen vle. Men, mwen te vle (premye soti nan Punto Switcher, ak Lè sa a, gras a Windows Vista, finalman chanje nan Linux, soti nan xneur) egzakteman yon sèl bagay. Lè w fin reyalize ke fatra a sou ekran an se nan layout a mal (sa a anjeneral rive nan fen tape yon nouvo mo), stomp sou "Poz / Break". Epi jwenn sa ou enprime.

Nan moman sa a, pwodwi a gen pi bon (soti nan pwen de vi mwen) fonksyonalite / konpleksite rapò. Li lè pou pataje.

TL.DR

Ap gen tout kalite detay teknik pita, kidonk premye - lyen "touche" pou moun ki enpasyan.

Kounye a, konpòtman sa yo kode di:

  • "Poz / Break": backspaces dènye mo a, chanje Layout la nan fenèt aktif la (ant 0 ak 1) ak konpoze ankò.
  • "Left Ctrl san anyen": chanje layout nan fenèt aktif la (ant 0 ak 1).
  • "Left Shift san anyen": vire sou layout No 0 nan fenèt aktif la.
  • "Dwa Shift san anyen": vire sou layout nimewo 1 nan fenèt aktif la.

Depi koulye a mwen planifye pou personnaliser konpòtman an. San yo pa fidbak, li pa enteresan (mwen byen ak li de tout fason). Mwen kwè ke sou Habré pral gen yon pousantaj ase nan odyans lan ak pwoblèm menm jan an.

NB Paske nan vèsyon aktyèl la, kelodje a tache ak "/dev/input/", xswitcher dwe lanse ak dwa rasin:

chown root:root xswitcher
chmod +xs xswitcher

Tanpri sonje: Pwopriyetè a nan dosye a ak suid dwe rasin, paske moun ki se pwopriyetè a pral tounen nan suid sou demaraj.

Paranoids (mwen pa gen okenn eksepsyon) ka klonaj soti nan GIT epi rasanble sou plas. Konsa:

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

Ajoute autostart nan gou (depann sou DE).

Li travay, "pa mande pou labouyl" (≈30 segonn CPU pa jou, ≈12 MB nan RSS).

Detay

Koulye a, - detay yo.

Tout depo a te orijinèlman dedye a pwojè bèt kay mwen an, epi mwen twò parese kòmanse yon lòt. Se konsa, tout bagay se anpile (jis nan dosye) epi kouvri pa AGPL ("patant ranvèse").

Kòd xswitcher ekri nan golang, ak enklizyon minim C. Li sipoze ke apwòch sa a pral lakòz pi piti kantite efò (byen lwen tèlman li genyen). Pandan w ap kenbe kapasite pou konekte sa ki manke lè l sèvi avèk cgo.

Tèks la gen kòmantè sou ki kote yo te prete l ak poukisa. Paske kòd la xneur "pa t 'enspire m'", mwen te pran li kòm yon pwen depa loloswitcher.

Sèvi ak "/dev/input/" gen tou de avantaj li yo (tout bagay se vizib, ki gen ladan kle a bourade oto-repete) ak dezavantaj. Dezavantaj yo se:

  • Oto-repete (evènman ki gen kòd "2") pa gen rapò ak repetisyon ak x.
  • Antre nan koòdone X11 pa vizib (sa a se ki jan VNC travay, pou egzanp).
  • Bezwen rasin.

Nan lòt men an, li posib abònman nan evènman X atravè "XSelectExtensionEvent()". Ou ka gade vit nan kòd xinput. Mwen pa t 'jwenn anyen tankou sa a pou ale, ak aplikasyon an ki graj imedyatman te pran yon santèn liy nan kòd C. Mete l sou kote pou kounye a.

Pwodiksyon "ranvèse" la kounye a fèt nan vise klavye vityèl la. Mèsi a otè a nan keybd_event, men abstraksyon an gen twò wo nivo epi yo pral gen yo dwe refè pi lwen. Pou egzanp, mwen sèvi ak dwa Win kle a pou chwazi 3yèm ranje a. Epi sèlman Win gòch la transmèt tounen.

Pinèz li te ye

  • Nou pa konnen anyen sou opinyon "konpoze" (egzanp: ½). Li pa nesesè kounye a.
  • Nou ap jwe Win dwat la mal. Nan ka mwen an, li kraze anfaz la.
  • Pa gen okenn parsing opinyon klè. Olye de sa, gen plizyè fonksyon: Compare (), CtrlSequence (), RepeatSequence (), SpaceSequence (). Mèsi nsmcan pou swen ou: korije li nan kòd la ak isit la. Avèk yon sèten pwobabilite, ou ka trape pinèz lè w ap ranplase.
    Nan pwen sa a mwen pa konnen "kijan pou" e mwen ta akeyi nenpòt sijesyon.
  • (Oh Bondye) itilizasyon konpetitif nan chanèl (keyboardEvents, miceEvents).

Konklizyon

Kòd la se pwosedi ki pi senp. Ak sòt tankou mwen. Kidonk, mwen flate tèt mwen ak espwa ke prèske nenpòt teknisyen yo pral kapab konplete sa li vle. Ak gras a sa a, pwodui sa a pa pral peri san sipò, tankou pifò jis-pou-amizan.

Bon chans!

Sous: www.habr.com

Add nouvo kòmantè