Naujas Punto Switcher analogas Linux: xswitcher

„Xneur“ palaikymo pabaiga per pastaruosius šešis mėnesius man sukėlė kančių. (Staliniuose kompiuteriuose atsiradus OpenSUSE 15.1: įjungus xneur, langai praranda fokusą ir laikui bėgant juokingai mirga įvedant klaviatūrą).

„O, po velnių, aš vėl pradėjau rašyti netinkamą išdėstymą“ - mano darbe tai nutinka nepadoriai dažnai. Ir tai neprideda nieko teigiamo.

Naujas Punto Switcher analogas Linux: xswitcher
Tuo pačiu aš (kaip projektavimo inžinierius) galiu gana aiškiai suformuluoti, ko noriu. Bet aš norėjau (iš pradžių iš Punto Switcher, o paskui, dėka Windows Vista, galiausiai perėjau prie Linux, iš xneur) tiksliai vieno dalyko. Supratę, kad šiukšlės ekrane yra netinkamai išdėstytos (dažniausiai taip nutinka naujo žodžio įvedimo pabaigoje), paspauskite „Pauzė/Pertrauka“. Ir gaukite tai, ką atspausdinote.

Šiuo metu gaminys turi optimalų (mano požiūriu) funkcionalumo/sudėtingumo santykį. Atėjo laikas pasidalinti.

TL.DR

Vėliau bus visokių techninių smulkmenų, todėl pirmiausia - nuoroda "paliesti" nekantriesiems.

Šiuo metu ši elgsena yra užkoduota:

  • „Pauzė/Pertrauka“: perkelia paskutinį žodį atgal, aktyviame lange perjungia išdėstymą (nuo 0 iki 1) ir vėl renka.
  • „Kairysis Ctrl be nieko“: perjungia išdėstymą aktyviame lange (nuo 0 iki 1).
  • „Left Shift be nieko“: aktyviame lange įjungiamas išdėstymas Nr. 0.
  • „Dešinysis poslinkis be nieko“: aktyviame lange įjungiamas išdėstymas Nr. 1.

Nuo šiol planuoju pritaikyti elgesį. Be atsiliepimų tai neįdomu (man ir taip gerai). Manau, kad Habré bus pakankamas procentas auditorijos, turinčios panašių problemų.

NB Nes dabartinėje versijoje klavišų kaupiklis yra prijungtas prie "/dev/input/", xswitcher turi būti paleistas su root teisėmis:

chown root:root xswitcher
chmod +xs xswitcher

Atkreipkite dėmesį: Failo suid savininkas turi būti root, nes kas yra savininkas, paleidžiant bus paverstas suid.

Paranojikai (aš ne išimtis) gali klonuoti iš GIT ir surinkti vietoje. Šitaip:

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

Pridėkite automatinį paleidimą pagal skonį (priklausomai nuo DE).

Jis veikia, „neprašo košės“ (≈30 sekundžių CPU per dieną, ≈12 MB RSS).

Informacija

Dabar – detalės.

Visa saugykla iš pradžių buvo skirta mano augintinio projektui, ir aš tingiu pradėti kitą. Taigi, viskas sukrauta (tiesiog aplankuose) ir padengta AGPL („atvirkštinis patentas“).

Xswitcher kodas parašytas golangu, su minimaliu C įtraukimu. Manoma, kad šis metodas atneš mažiausiai pastangų (iki šiol tai padarė). Išlaikant galimybę prijungti tai, ko trūksta, naudojant cgo.

Tekste yra komentarų, iš kur jis pasiskolintas ir kodėl. Nes xneur kodas "neįkvėpė manęs", aš jį ėmiau kaip atskaitos tašką loloswitcher.

„/dev/input/“ naudojimas turi ir privalumų (viskas matosi, įskaitant paspaustą automatinio kartojimo klavišą), ir trūkumų. Trūkumai yra šie:

  • Automatinis kartojimas (įvykiai su kodu „2“) nesusiję su kartojimu su x.
  • Įvesties per X11 sąsajas nematyti (pavyzdžiui, taip veikia VNC).
  • Reikia šaknies.

Kita vertus, galima užsiprenumeruoti X renginius per „XSelectExtensionEvent()“. Galite žvilgtelėti xinput kodas. Nieko panašaus neradau, o grubus įgyvendinimas iškart užtruko šimtą C kodo eilučių. Kol kas atidėkite į šalį.

„Atvirkštinė“ išvestis šiuo metu atliekama prisukant virtualiąją klaviatūrą. Ačiū keybd_event autoriui, bet abstrakcija ten per aukšto lygio ir teks dar kartą perdaryti. Pavyzdžiui, aš naudoju dešinįjį Win klavišą, kad pasirinkčiau 3 eilutę. Ir tik kairysis laimėjimas perduodamas atgal.

Žinomos klaidos

  • Mes nieko nežinome apie sudėtinę įvestį (pavyzdys: ½). Šiuo metu to nereikia.
  • Neteisingai žaidžiame teisingą laimėjimą. Mano atveju tai sulaužo akcentą.
  • Nėra aiškios įvesties analizės. Vietoj to yra kelios funkcijos: Palyginti (), CtrlSequence (), Kartoti seka (), SpaceSequence (). Ačiū nsmcan jūsų priežiūrai: pataisė jį kode ir čia. Su tam tikra tikimybe galite pagauti klaidų keičiant.
    Šiuo metu nežinau „kaip“ ir lauksiu bet kokių pasiūlymų.
  • (O Dieve) konkurencinis kanalų naudojimas (keyboardEvents, miceEvents).

išvada

Kodas yra paprasčiausias procedūrinis. Ir kvailas kaip aš. Taigi, glostau sau viltimi, kad beveik bet kuris technikas sugebės atlikti tai, ko nori. Ir dėl to šis produktas nepražus be paramos, kaip ir daugelis kitų pramogų.

Sėkmės!

Šaltinis: www.habr.com

Добавить комментарий