كيفية تعطيل اعتراض القذيفة لأحرف التحكم؟
سؤال
أنا أكتب تطبيق لعنات في بيثون تحت يونيكس. أرغب في تمكين المستخدم من استخدام CY للانبعاث من حلقة Kill A La Emacs.
المشكلة هي ، بطبيعة الحال ، أن يتم القبض على CY بواسطة قشرة بلدي الذي يرسل بعد ذلك sigtstp إلى عملي. بالإضافة إلى ذلك ، يؤدي CZ أيضًا إلى إرسال SIGTSTP ، لذا فإن التقاط الإشارة يعني أن CY و CZ لا يمكن تمييزهما (على الرغم من أنه حتى بدون هذا ، فإن الحلول الوحيدة التي يمكنني التفكير فيها هي مخترقة للغاية).
أعلم أن ما أطلبه ممكن (في C إن لم يكن في بيثون) ، لأن Emacs يفعل ذلك. كيف يمكنني تعطيل معالجة Shell الخاصة مع بعض أحرف التحكم المرسلة من لوحة المفاتيح وظهر الأحرف المعنية في عملية Stdin؟
المحلول
انظر termios
الوحدة النمطية و termios(3)
صفحة الرجل.
نصائح أخرى
للوظائف الأساسية ، استخدم tty
. على سبيل المثال ، الاتصال tty.setraw(sys.stdin)
سوف تضع محطة الإدخال القياسية في الوضع الخام.
للحالة الأكثر عمومية ، يأتي بيثون مع أ مكتبة Termios, ، لكن ربما تحتاج إلى بعض الخبرة مع TermiOS لمعرفة كيفية استخدامه.
بدلاً من ذلك ، هناك طريقة رخيصة هي التخلص من stty
, ، وهي واجهة سطر الأوامر إلى termios.