عن المشروع

هذا المستودع يعالج مشكلة توافق محددة في محرر VS Code على نظام لينكس: عند استخدام طريقة الإدخال Sogou Pinyin ضمن إطار fcitx 4، يفقد الطرفية المدمجة (Integrated Terminal) الحرف الصيني الفردي عند إرساله. على سبيل المثال، كتابة `ni` ثم الضغط على مفتاح المسافة يؤدي إلى إرسال حرف مسافة حرفي بدلاً من الحرف `你`، ويحدث هذا في موجه bash وواجهات TUI مثل Claude Code. بينما يعمل إرسال الأحرف المتعددة (مثل `nihao` + مسافة للحصول على `你好`) بشكل طبيعي. يحتوي المستودع على برنامج تصحيح بلغة بايثون باسم `fix-vscode-xterm-ime.py`، والذي يقوم بتعديل طريقة `_keyDown` في مكتبة xterm.js المدمجة في VS Code. يقوم البرنامج بإدراج سطر تمرير مباشر قبل استدعاء `preventDefault()`، مما يسمح بتمرير ضغطات المفاتيح الفردية عبر حدث `keypress` إلى PTY. يدعم البرنامج التشغيل التجريبي (`--check`)، والتراجع (`--revert`)، وتحديد مسار التثبيت المخصص (`--asar`)، ويقوم بإجراء فحص نحوي قبل التعديل لضمان الأمان. بالإضافة إلى ذلك، يوفر المستودع أداتين تشخيصيتين: `tools/ime-probe.js` الذي يسجل أحداث DOM على textarea المخفي في xterm.js عبر بروتوكول Chrome DevTools Protocol لتأكيد المشكلة؛ و`tools/pty-tee.py` الذي يسجل البايتات التي يتلقاها البرنامج من stdin للتحقق من فقدان الأحرف. يشرح ملف README بالتفصيل تحليل السبب الجذري: يقوم fcitx4 وSogou برسم نافذة التحرير المسبق (preedit window) بأنفسهم، مما يمنع الصفحة من استقبال أحداث composition؛ وبالتالي لا يتم تنشيط CompositionHelper في xterm.js. عند إرسال حرف فردي، يقوم Chromium بإرسال keydown للمفتاح الأصلي مع keypress الذي يحمل الحرف، ولكن xterm.js يعالج keydown ويستدعي `preventDefault()` مما يمنع keypress. بيئة الاختبار هي Ubuntu 22.04 (X11)، VS Code 1.137.0 (تثبيت .deb)، fcitx 4.2.9.8، Sogou Pinyin 4.2.1.145. يُلاحظ أن ترقية VS Code ستستبدل ملف node_modules.asar، مما يتطلب إعادة تشغيل البرنامج النصي؛ ولا يمكن تطبيق التصحيح على إصدارات Snap وFlatpak بسبب نظام الملفات للقراءة فقط. الترخيص هو MIT.