Linux uchun Punto Switcherning yangi analogi: xswitcher

Xneur qo'llab-quvvatlashining tugashi so'nggi olti oy ichida menga biroz azob berdi. (Mening ish stolimda OpenSUSE 15.1 paydo bo'lishi bilan: xneur yoqilgan bo'lsa, derazalar diqqatni yo'qotadi va klaviaturadan kiritish bilan vaqt o'tishi bilan kulgili miltillaydi).

"Oh, jin ursin, men yana noto'g'ri tartibda yozishni boshladim" - mening ishimda bu juda tez-tez sodir bo'ladi. Va bu hech qanday ijobiy narsa qo'shmaydi.

Linux uchun Punto Switcherning yangi analogi: xswitcher
Shu bilan birga, men (injener-dizayner sifatida) nimani xohlayotganimni aniq shakllantirishim mumkin. Lekin men (avval Punto Switcher-dan, keyin esa Windows Vista tufayli, nihoyat Linux-ga, xneur-dan) aynan bitta narsani xohlardim. Ekrandagi axlat noto'g'ri joylashtirilganligini tushunib, (bu odatda yangi so'zni kiritish oxirida sodir bo'ladi), "To'xtatib turish / Tanaffus" tugmasini bosing. Va chop etgan narsangizni oling.

Ayni paytda mahsulot optimal (mening nuqtai nazarim bo'yicha) funksionallik / murakkablik nisbatiga ega. Ulashish vaqti keldi.

TL.DR

Keyinchalik har xil texnik tafsilotlar bo'ladi, shuning uchun birinchi navbatda - "tegish" havolasi sabrsizlar uchun.

Hozirgi vaqtda quyidagi xatti-harakatlar qattiq kodlangan:

  • “Pauza/Break”: oxirgi so‘zni orqaga siljitadi, faol oynadagi tartibni o‘zgartiradi (0 va 1 oralig‘ida) va yana terish.
  • “Left Ctrl hech narsasiz”: faol oynadagi tartibni almashtiradi (0 va 1 orasida).
  • "Left Shift hech narsasiz": faol oynada №0 tartibni yoqadi.
  • "Hech narsasiz o'ngga siljish": faol oynada №1 tartibni yoqadi.

Bundan buyon men xatti-harakatni sozlashni rejalashtirmoqdaman. Fikr-mulohazasiz, bu qiziq emas (baribir men bunga roziman). Men Habré-da shunga o'xshash muammolarga duch kelgan tomoshabinlarning etarli foizi bo'lishiga ishonaman.

NB Chunki joriy versiyada keylogger "/dev/input/" ga biriktirilgan, xswitcher ildiz huquqlari bilan ishga tushirilishi kerak:

chown root:root xswitcher
chmod +xs xswitcher

Shuni yodda tuting: Suid bilan fayl egasi root bo'lishi kerak, chunki egasi kim bo'lsa, ishga tushirilganda sudga aylanadi.

Paranoidlar (men bundan mustasno emasman) klonlashi mumkin GIT va saytda yig'ing. Shunga o'xshash:

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

Avtostartni ta'mga qo'shing (DE ga qarab).

U ishlaydi, "bo'tqa so'ramaydi" (kuniga ≈30 soniya CPU, RSSda ≈12 MB).

details

Endi - tafsilotlar.

Butun ombor dastlab mening uy hayvonlari loyihasiga bag'ishlangan edi va men boshqasini boshlashga dangasaman. Shunday qilib, hamma narsa yig'iladi (faqat papkalarda) va AGPL ("teskari patent") bilan qoplangan.

Xswitcher kodi golang tilida yozilgan bo'lib, C ning minimal qo'shilishi bilan. Bu yondashuv eng kam harakatga olib keladi deb taxmin qilinadi (hozirgacha u bor). cgo yordamida etishmayotgan narsalarni ulash qobiliyatini saqlab qolgan holda.

Matnda u qayerdan va nima uchun olinganligi haqida izohlar mavjud. Chunki xneur kodi "menga ilhom bermadi", men uni boshlang'ich nuqtasi sifatida oldim loloswitcher.

"/dev/input/" dan foydalanish o'zining afzalliklari (hamma narsa ko'rinadi, shu jumladan bosilgan avtomatik takrorlash tugmasi) va kamchiliklarga ega. Kamchiliklari quyidagilardir:

  • Avtomatik takrorlash ("2" kodli hodisalar) x bilan takrorlash bilan bog'liq emas.
  • X11 interfeyslari orqali kirish ko'rinmaydi (masalan, VNC shunday ishlaydi).
  • Ildiz kerak.

Boshqa tomondan, "XSelectExtensionEvent()" orqali X hodisalariga obuna bo'lish mumkin. Siz ko'rishingiz mumkin xinput kodi. Men shunga o'xshash narsani topa olmadim va qo'pol dastur darhol yuzlab C kodini oldi. Hozircha bir chetga qo'ying.

Hozirgi vaqtda "teskari" chiqish virtual klaviaturani burish orqali amalga oshiriladi. Keybd_event muallifiga rahmat, lekin u erda abstraksiya juda yuqori va bundan keyin ham qayta ishlashga to'g'ri keladi. Misol uchun, men 3-qatorni tanlash uchun o'ng Win tugmasidan foydalanaman. Va faqat chap Win orqaga uzatiladi.

Ma'lum bo'lgan xatolar

  • Biz “kompozit” kiritish haqida hech narsa bilmaymiz (misol: ½). Bu hozir kerak emas.
  • Biz to'g'ri G'alabani noto'g'ri o'ynayapmiz. Mening holatimda, bu urg'uni buzadi.
  • Aniq kirish tahlili mavjud emas. Buning o'rniga bir nechta funksiyalar mavjud: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Rahmat nsmcan Sizning g'amxo'rligingiz uchun: uni kodda va bu erda tuzatdi. Muayyan ehtimollik bilan siz almashtirishda xatolarga duch kelishingiz mumkin.
    Ayni paytda men "qanday qilishni" bilmayman va har qanday taklifni mamnuniyat bilan qabul qilaman.
  • (Ey Ollohim) kanallardan raqobatbardosh foydalanish (keyboardEvents, miceEvents).

xulosa

Kod eng oddiy protsedura hisoblanadi. Va men kabi ahmoq. Shunday qilib, men deyarli har qanday texnik o'zi xohlagan narsani bajara oladi degan umidda o'zimni xushomad qilaman. Va buning tufayli, bu mahsulot ko'pchilik shunchaki o'yin-kulgi kabi qo'llab-quvvatlanmasdan nobud bo'lmaydi.

Omad tilaymiz!

Manba: www.habr.com

a Izoh qo'shish