لینکس کے لیے پنٹو سوئچر کا نیا اینالاگ: xswitcher

xneur سپورٹ کے خاتمے نے مجھے پچھلے چھ مہینوں میں کچھ تکلیف دی ہے۔ (میرے ڈیسک ٹاپس پر OpenSUSE 15.1 کی آمد کے ساتھ: xneur فعال ہونے کے ساتھ، کی بورڈ ان پٹ کے ساتھ وقت کے ساتھ ونڈوز فوکس کھو دیتی ہے اور مضحکہ خیز جھلکتی ہے).

"اوہ، لعنت، میں نے دوبارہ غلط ترتیب میں ٹائپ کرنا شروع کر دیا" - میرے کام میں یہ اکثر بے حیائی سے ہوتا ہے۔ اور یہ کچھ بھی مثبت شامل نہیں کرتا ہے۔

لینکس کے لیے پنٹو سوئچر کا نیا اینالاگ: xswitcher
ایک ہی وقت میں، میں (بطور ایک ڈیزائن انجینئر) بالکل واضح طور پر تیار کر سکتا ہوں جو میں چاہتا ہوں۔ لیکن میں چاہتا تھا (پہلے پنٹو سوئچر سے، اور پھر، ونڈوز وسٹا کی بدولت، آخر میں، xneur سے لینکس پر جانا) بالکل ایک چیز۔ یہ محسوس کرنے کے بعد کہ اسکرین پر موجود کوڑا غلط ترتیب میں ہے (یہ عام طور پر ایک نیا لفظ ٹائپ کرنے کے اختتام پر ہوتا ہے)، "توقف/بریک" پر تھپتھپائیں۔ اور جو آپ نے پرنٹ کیا ہے اسے حاصل کریں۔

اس وقت، پروڈکٹ میں بہترین (میرے نقطہ نظر سے) فعالیت/پیچیدگی کا تناسب ہے۔ یہ اشتراک کرنے کا وقت ہے.

TL.DR

ہر قسم کی تکنیکی تفصیلات بعد میں ہوں گی، اس لیے پہلے - لنک "چھونے کے لئے" بے صبروں کے لیے

فی الحال درج ذیل طرز عمل کو ہارڈ کوڈ کیا گیا ہے:

  • "توقف/بریک": آخری لفظ کو بیک اسپیس کرتا ہے، فعال ونڈو میں لے آؤٹ کو تبدیل کرتا ہے (0 اور 1 کے درمیان) اور دوبارہ ڈائل کرتا ہے۔
  • "بغیر کسی چیز کے بائیں Ctrl": ایکٹو ونڈو میں لے آؤٹ کو سوئچ کرتا ہے (0 اور 1 کے درمیان)۔
  • "بغیر کسی چیز کے بائیں شفٹ": فعال ونڈو میں لے آؤٹ نمبر 0 کو آن کرتا ہے۔
  • "بغیر کسی چیز کے دائیں شفٹ": فعال ونڈو میں لے آؤٹ نمبر 1 کو آن کرتا ہے۔

اب سے میں رویے کو اپنی مرضی کے مطابق کرنے کا ارادہ رکھتا ہوں. رائے کے بغیر، یہ دلچسپ نہیں ہے (بہرحال میں اس کے ساتھ ٹھیک ہوں)۔ مجھے یقین ہے کہ Habré پر اسی طرح کے مسائل کے ساتھ سامعین کی کافی فیصد ہوگی۔

این بی کیونکہ موجودہ ورژن میں، keylogger "/dev/input/" سے منسلک ہے، xswitcher کو روٹ رائٹس کے ساتھ لانچ کیا جانا چاہیے:

chown root:root xswitcher
chmod +xs xswitcher

براہ مہربانی نوٹ کریں: سوڈ والی فائل کا مالک جڑ ہونا چاہیے، کیونکہ جو بھی مالک ہے اسے شروع ہونے پر سود میں تبدیل کردیا جائے گا۔

Paranoids (میں کوئی استثنا نہیں ہوں) سے کلون کر سکتے ہیں جی آئی ٹی اور سائٹ پر جمع. اس کی طرح:

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

ذائقہ کے لئے آٹو اسٹارٹ شامل کریں (ڈی ای پر منحصر ہے)۔

یہ کام کرتا ہے، "دلیہ نہیں مانگتا" (≈30 سیکنڈ CPU فی دن، RSS میں ≈12 MB)۔

تفصیل

اب - تفصیلات.

پورا ذخیرہ اصل میں میرے پالتو جانوروں کے پروجیکٹ کے لیے وقف تھا، اور میں ایک اور شروع کرنے میں بہت سست ہوں۔ لہذا، سب کچھ ڈھیر ہو گیا ہے (صرف فولڈرز میں) اور AGPL ("ریورس پیٹنٹ") کے ذریعے احاطہ کیا گیا ہے۔

xswitcher کوڈ گولانگ میں لکھا جاتا ہے، جس میں C کی کم سے کم شمولیت ہوتی ہے۔ یہ خیال کیا جاتا ہے کہ اس نقطہ نظر کے نتیجے میں کم سے کم کوششیں ہوں گی (اب تک اس میں ہے)۔ سی جی او کا استعمال کرتے ہوئے جو غائب ہے اسے جوڑنے کی صلاحیت کو برقرار رکھتے ہوئے

متن میں تبصرے ہیں کہ یہ کہاں سے اور کیوں لیا گیا تھا۔ کیونکہ xneur کوڈ نے "مجھے متاثر نہیں کیا"، میں نے اسے نقطہ آغاز کے طور پر لیا۔ loloswitcher.

"/dev/input/" استعمال کرنے کے اس کے دونوں فائدے ہیں (ہر چیز نظر آتی ہے، بشمول دبائی ہوئی آٹو ریپیٹ کلید) اور نقصانات۔ نقصانات یہ ہیں:

  • خودکار اعادہ (کوڈ "2" والے واقعات) x کے ساتھ تکرار کے ساتھ کوئی تعلق نہیں رکھتے۔
  • X11 انٹرفیس کے ذریعے ان پٹ نظر نہیں آتا ہے (مثال کے طور پر VNC اس طرح کام کرتا ہے)۔
  • جڑ کی ضرورت ہے۔

دوسری طرف، "XSelectExtensionEvent()" کے ذریعے X ایونٹس کو سبسکرائب کرنا ممکن ہے۔ آپ جھانک سکتے ہیں۔ xinput کوڈ. مجھے جانے کے لئے ایسا کچھ نہیں ملا، اور کسی نہ کسی طرح کے نفاذ نے فوری طور پر سی کوڈ کی سو لائنیں لیں۔ اسے فی الحال ایک طرف رکھ دیں۔

"ریورس" آؤٹ پٹ فی الحال ورچوئل کی بورڈ کو اسکریونگ کے ذریعے بنایا گیا ہے۔ keybd_event کے مصنف کا شکریہ، لیکن وہاں کا خلاصہ بہت اعلیٰ درجے کا ہے اور اسے مزید دوبارہ کرنا پڑے گا۔ مثال کے طور پر، میں تیسری قطار کو منتخب کرنے کے لیے دائیں Win کلید کا استعمال کرتا ہوں۔ اور صرف بائیں جیت کو واپس منتقل کیا جاتا ہے۔

معروف کیڑے

  • ہم "کمپوزٹ" ان پٹ کے بارے میں کچھ نہیں جانتے ہیں (مثال: ½)۔ ابھی اس کی ضرورت نہیں ہے۔
  • ہم صحیح جیت کو غلط طریقے سے کھیل رہے ہیں۔ میرے معاملے میں، اس سے زور ٹوٹ جاتا ہے۔
  • کوئی واضح ان پٹ پارس نہیں ہے۔ اس کے بجائے، کئی فنکشنز ہیں: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence()۔ شکریہ nsmcan آپ کی دیکھ بھال کے لیے: اسے کوڈ میں اور یہاں درست کیا۔ ایک خاص امکان کے ساتھ، آپ بدلتے وقت کیڑے پکڑ سکتے ہیں۔
    اس وقت میں "کیسے" نہیں جانتا ہوں اور کسی بھی تجاویز کا خیرمقدم کروں گا۔
  • (اوہ خدایا) چینلز کا مسابقتی استعمال (کی بورڈ ایونٹس، چوہوں کے ایونٹس)۔

حاصل يہ ہوا

کوڈ سب سے آسان طریقہ کار ہے۔ اور میری طرح بیوقوف۔ لہذا، میں اپنے آپ کو اس امید کے ساتھ خوش کرتا ہوں کہ تقریباً کوئی بھی ٹیکنیشن اپنی خواہش کو پورا کرنے کے قابل ہو جائے گا۔ اور اس کی بدولت، یہ پراڈکٹ سپورٹ کے بغیر فنا نہیں ہوگی، جیسے کہ صرف تفریح ​​کے لیے۔

گڈ لک!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں