Nova analogo de Punto Switcher por linukso: xswitcher

La fino de xneur-subteno kaŭzis al mi iom da sufero dum la pasintaj ses monatoj. (kun la apero de OpenSUSE 15.1 sur miaj labortabloj: kun xneur ebligita, fenestroj perdas fokuson kaj flagras amuza en tempo kun klavara enigo).

"Ho, diablo, mi denove komencis tajpi en malĝusta aranĝo" - en mia laboro tio okazas maldece ofte. Kaj ĝi aldonas nenion pozitivan.

Nova analogo de Punto Switcher por linukso: xswitcher
Samtempe mi (kiel projektinĝeniero) povas sufiĉe klare formuli tion, kion mi volas. Sed mi deziris (unue de Punto Switcher, kaj poste, dank' al Vindozo Vista, finfine ŝanĝi al Linukso, de xneur) ĝuste unu aferon. Rimarkinte, ke la rubo sur la ekrano estas en malĝusta aranĝo (tio kutime okazas ĉe la fino de tajpado de nova vorto), frapu "Paŭzo/Paŭzo". Kaj akiru tion, kion vi presis.

Nuntempe, la produkto havas la optimuman (laŭ mia vidpunkto) funkciecon/kompleksecon. Estas tempo dividi.

TL.DR

Poste estos ĉiaj teknikaj detaloj, do unue - ligo "tuŝi" por la senpacienculoj.

Nuntempe la sekva konduto estas malmola kodita:

  • "Paŭzo/Paŭzo": malantaŭeniras la lastan vorton, ŝanĝas la aranĝon en la aktiva fenestro (inter 0 kaj 1) kaj diskas denove.
  • "Maldekstra Ctrl sen io": ŝanĝas la aranĝon en la aktiva fenestro (inter 0 kaj 1).
  • "Maldekstra Shift sen io": ŝaltas aranĝon n-ro 0 en la aktiva fenestro.
  • "Dekstra Shift sen io": ŝaltas aranĝon n-ro 1 en la aktiva fenestro.

De nun mi planas personecigi la konduton. Sen sugestoj, ĝi ne estas interesa (ĉiuokaze mi fartas bone). Mi kredas, ke ĉe Habré estos sufiĉa procento de la publiko kun similaj problemoj.

NB Ĉar en la nuna versio, la klavregistrilo estas alfiksita al "/dev/input/", xswitcher devas esti lanĉita kun radikrajtoj:

chown root:root xswitcher
chmod +xs xswitcher

Bonvolu noti: La posedanto de la dosiero kun suid devas esti root, ĉar kiu ajn estas la posedanto, estos igita suid post ekfunkciigo.

Paranojoj (mi ne estas escepto) povas kloni de GIT kaj kunveni surloke. Tiel:

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

Aldonu aŭtomatan lanĉon al gusto (depende de DE).

Ĝi funkcias, "ne petas kaĉon" (≈30 sekundoj CPU tage, ≈12 MB en RSS).

Vidi detalojn

Nun - la detaloj.

La tuta deponejo estis origine dediĉita al mia dorlotbesta projekto, kaj mi estas tro maldiligenta por komenci alian. Do, ĉio estas amasigita (nur en dosierujoj) kaj kovrita de AGPL ("inversa patento").

La xswitcher-kodo estas skribita en golango, kun minimumaj inkludoj de C. Oni supozas, ke ĉi tiu aliro rezultigos la malplej da fortostreĉo (ĝis nun ĝi havas). Dum konservante la kapablon konekti tion mankas uzante cgo.

La teksto enhavas komentojn pri kie ĝi estis pruntita kaj kial. Ĉar la xneur-kodo "ne inspiris min", mi prenis ĝin kiel deirpunkton loloswitcher.

Uzado de "/dev/input/" havas kaj ĝiajn avantaĝojn (ĉio estas videbla, inkluzive de la premita aŭtomata ripeta klavo) kaj malavantaĝoj. La malavantaĝoj estas:

  • Aŭtomata ripeto (okazaĵoj kun kodo "2") ne korelacias kun ripeto kun x.
  • Enigo tra X11-interfacoj ne estas videbla (tiel funkcias VNC, ekzemple).
  • Bezonas radikon.

Aliflanke, eblas aboni X-eventojn per "XSelectExtensionEvent()". Vi povas rigardi xinput-kodo. Mi ne trovis ion tian por iri, kaj la malglata efektivigo tuj prenis cent liniojn de C-kodo. Metu ĝin flanken por nun.

La "inversa" eligo estas nuntempe farita per ŝraŭbi la virtualan klavaron. Dankon al la aŭtoro de keybd_event, sed la abstraktaĵo tie estas tro altnivela kaj devos esti refarita plu. Ekzemple, mi uzas la dekstran Win-klavon por elekti la 3an vicon. Kaj nur la maldekstra Win estas transdonita reen.

Konataj Cimoj

  • Ni scias nenion pri "komponita" enigo (ekzemplo: ½). Ĝi ne estas bezonata nun.
  • Ni malĝuste ludas la ĝustan Venkon. En mia kazo, ĝi rompas la emfazon.
  • Ne estas klara eniga analizo. Anstataŭe, ekzistas pluraj funkcioj: Komparu(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Спасибо nsmcan por via zorgo: korektis ĝin en la kodo kaj ĉi tie. Kun certa probablo, vi povas kapti cimojn kiam vi anstataŭas.
    Ĉi-momente mi ne scias "kiel" kaj bonvenigus ajnajn sugestojn.
  • (Ho dio) konkurenciva uzo de kanaloj (keyboardEvents, miceEvents).

konkludo

La kodo estas la plej simpla procedura. Kaj stulta kiel mi. Do, mi flatas min kun la espero, ke preskaŭ ĉiu teknikisto povos plenumi tion, kion li volas. Kaj danke al ĉi tio, ĉi tiu produkto ne pereos sen subteno, kiel la plej multaj nur por amuzo.

Bonŝancon!

fonto: www.habr.com

Aldoni komenton