التناظرية الجديدة لبرنامج Punto Switcher لنظام التشغيل Linux: xswitcher

لقد سبب لي انتهاء دعم xneur بعض المعاناة خلال الأشهر الستة الماضية. (مع ظهور OpenSUSE 15.1 على أجهزة الكمبيوتر المكتبية الخاصة بي: مع تمكين xneur، تفقد النوافذ التركيز وتومض بشكل مضحك مع إدخال لوحة المفاتيح).

"أوه، اللعنة، لقد بدأت في الكتابة بالتخطيط الخاطئ مرة أخرى" - في عملي يحدث هذا كثيرًا بشكل غير لائق. ولا يضيف أي شيء إيجابي.

التناظرية الجديدة لبرنامج Punto Switcher لنظام التشغيل Linux: xswitcher
في الوقت نفسه، يمكنني (كمهندس تصميم) صياغة ما أريد بوضوح تام. لكنني أردت (أولاً من Punto Switcher، ثم بفضل Windows Vista، وأخيرًا التحول إلى Linux، من xneur) شيئًا واحدًا بالضبط. بعد أن أدركت أن القمامة التي تظهر على الشاشة موجودة في تخطيط خاطئ (يحدث هذا عادةً في نهاية كتابة كلمة جديدة)، قم بالدوس على "إيقاف مؤقت / استراحة". والحصول على ما طبعته.

في الوقت الحالي، يتمتع المنتج بنسبة الأداء/التعقيد المثلى (من وجهة نظري). حان الوقت للمشاركة.

TL.DR

سيكون هناك كل أنواع التفاصيل التقنية لاحقًا، لذا أولاً - رابط "لللمس" لغير الصبر.

حاليًا يتم ترميز السلوك التالي:

  • ""Pause/Break": يقوم بمسح الكلمة الأخيرة بمسافات للخلف، وتبديل التخطيط في النافذة النشطة (بين 0 و1) والاتصال مرة أخرى.
  • "Left Ctrl بدون أي شيء": لتبديل التخطيط في النافذة النشطة (بين 0 و1).
  • "Left Shift بدون أي شيء": يقوم بتشغيل التخطيط رقم 0 في النافذة النشطة.
  • "التحول الأيمن بدون أي شيء": يقوم بتشغيل التخطيط رقم 1 في النافذة النشطة.

من الآن فصاعدا أخطط لتخصيص السلوك. بدون تعليقات، لن يكون الأمر مثيرًا للاهتمام (أنا بخير معه على أي حال). أعتقد أنه في حبري ستكون هناك نسبة كافية من الجمهور الذين يعانون من مشاكل مماثلة.

ملحوظة: لأن في الإصدار الحالي، يتم ربط برنامج Keylogger بـ "/dev/input/"، ويجب تشغيل xswitcher بحقوق الجذر:

chown root:root xswitcher
chmod +xs xswitcher

يرجى ملاحظة ما يلي: يجب أن يكون مالك الملف الذي يحتوي على suid هو الجذر، لأنه من هو المالك سوف يتحول إلى دعوى قضائية عند بدء التشغيل.

يمكن لجنون العظمة (أنا لست استثناءً) الاستنساخ من GIT وتجميعها في الموقع. مثل هذا:

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

أضف التشغيل التلقائي حسب الرغبة (حسب DE).

إنه يعمل، "لا يطلب العصيدة" (≈30 ثانية لوحدة المعالجة المركزية يوميًا، ≈12 ميجابايت في RSS).

تفاصيل

الآن - التفاصيل.

كان المستودع بأكمله مخصصًا في الأصل لمشروعي المفضل، وأنا كسول جدًا لدرجة أنني لا أستطيع بدء مشروع آخر. لذلك، يتم تكديس كل شيء (فقط في مجلدات) وتغطيته بـ AGPL ("براءة الاختراع العكسية").

كود xswitcher مكتوب بلغة golang، مع الحد الأدنى من تضمينات لغة C. ومن المفترض أن يؤدي هذا الأسلوب إلى أقل قدر من الجهد (حتى الآن). مع الحفاظ على القدرة على توصيل ما هو مفقود باستخدام CGO.

يحتوي النص على تعليقات حول المكان الذي تم استعارته منه ولماذا. لأن كود xneur "لم يلهمني"، لقد أخذته كنقطة بداية com.loloswitcher.

استخدام "/dev/input/" له مزاياه (كل شيء مرئي، بما في ذلك مفتاح التكرار التلقائي المضغوط) وعيوبه. العيوب هي:

  • التكرار التلقائي (الأحداث ذات الرمز "2") لا يرتبط بالتكرار مع x.
  • الإدخال من خلال واجهات X11 غير مرئي (هذه هي الطريقة التي يعمل بها VNC، على سبيل المثال).
  • تحتاج الجذر.

من ناحية أخرى، من الممكن الاشتراك في أحداث X عبر "XSelectExtensionEvent()". يمكنك إلقاء نظرة خاطفة على كود xinput. لم أجد شيئًا كهذا في go، واستغرق التنفيذ التقريبي على الفور مائة سطر من كود C. ضعه جانبا في الوقت الراهن.

يتم إجراء الإخراج "العكسي" حاليًا من خلال ربط لوحة المفاتيح الافتراضية. شكرًا لمؤلف keybd_event، ولكن التجريد هناك مرتفع للغاية وسيتعين إعادة بنائه بشكل أكبر. على سبيل المثال، أستخدم مفتاح Win الأيمن لتحديد الصف الثالث. ويتم إرسال الفوز الأيسر فقط مرة أخرى.

البق المعروفة

  • لا نعرف شيئًا عن المدخلات "المركبة" (مثال: ½). ليست هناك حاجة إليها في الوقت الحالي.
  • نحن نلعب الفوز الصحيح بشكل غير صحيح. في حالتي، فإنه يكسر التركيز.
  • لا يوجد تحليل واضح للمدخلات. بدلاً من ذلك، هناك عدة وظائف: Compare() وCtrlSequence() وRepeatSequence() وSpaceSequence(). شكرا nsmcan لرعايتك: صححه في الكود وهنا. مع احتمال معين، يمكنك التقاط الأخطاء عند الاستبدال.
    في هذه المرحلة لا أعرف "كيفية" وسأرحب بأي اقتراحات.
  • (يا إلهي) الاستخدام التنافسي للقنوات (أحداث لوحة المفاتيح، أحداث الفئران).

اختتام

الكود هو أبسط الإجراءات. وغبي مثلي. لذا، فإنني أغمر نفسي بالأمل في أن يتمكن أي فني تقريبًا من إكمال ما يريده. وبفضل هذا، لن يهلك هذا المنتج بدون دعم، مثل معظم المنتجات التي يتم تقديمها للمتعة فقط.

حظا سعيدا!

المصدر: www.habr.com

إضافة تعليق