تسلسل هروب غريب تم إرساله بواسطة vim إلى المحطة
-
21-12-2019 - |
سؤال
يبدو أن vim يرسل عدة رسائل غريبة (أي.غير موثقة) تسلسل الهروب إلى المحطة الأساسية عند استخدام نظام Inkpot.لم أتمكن من مطابقتها مع أي رموز هروب VT-100 أو ANSI؛هل يعرف أحد ما هي هذه التسلسلات؟
^[[3231m
^[[4232m
^[[3130m
تظهر هذه التسلسلات كرموز غير صالحة في المحاكي الطرفي الذي أتولى مسؤوليته، وأود أن أضيف دعمًا لهذه التسلسلات إذا تمكنت من العثور على الوثائق المناسبة لها.
يتم تعيين متغيرات البيئة المتعلقة بالمحطة التالية على الأنظمة المتأثرة:
TERM=xterm
COLORTERM=
لم أجرب أي إعدادات أخرى لهذين المتغيرين.
vim هو الإصدار 7.2، لكني جربت إصدارات أحدث بنفس التأثير.
شكرًا!
المحلول
هل تدعم محطتك وضع 88 أو 256 لونًا؟إذا كان الأمر كذلك، فمن المحتمل أن تستخدم قيمة TERM مثل xterm-88color
أو xterm-256color
بدلا من عادي xterm
.
محبرة ينكر على وجه التحديد دعم المحطات الطرفية التي تدعم فقط 8/16 لونًا.من أعلى محبرة مصدر:
" This should work in the GUI, rxvt-unicode (88 colour mode) and xterm (256 " colour mode). It won't work in 8/16 colour terminals.
يفترض الكود الذي يقوم بإعداد تلوين بناء الجملة أنه إذا كانت الوحدة الطرفية لا تدعم 88 لونًا، فيجب أن تدعم 256 لونًا.لا يحاول توفير قيم احتياطية لحالة الألوان الثمانية (على سبيل المثال.متى TERM=xterm
).ربما سيكون من الجميل إذا محبرة أصدر رسالة خطأ (ولم يعدل إعدادات الألوان) إذا لم يبدو أن الجهاز يتمتع بدعم الألوان المناسب.
تسلسلات التحكم التي تراها ناتجة عن محاولة إنشاء تسلسل تحكم في ألوان طرفية مكون من 8 ألوان لرقم لون يقع خارج نطاق 0-7 من المدخلات المقبولة لهذا النوع من المحطات الطرفية.لذلك، ربما تكون هذه التسلسلات غير صالحة، ولكنها ليست مقصودة تمامًا أيضًا (تنشأ بسبب محبرة يفترض دعم 256 لونًا، لكن xterm
يعرف إدخال terminfo فقط كيفية التعامل مع الدعم الأساسي المكون من 8 ألوان).
على سبيل المثال، محبرة يحدد Normal
بناء جملة اللون الأمامي إلى 79 على المحطات ذات 88 لونًا؛تتم ترجمة هذا إلى 231 للمحطات الطرفية غير ذات 88 لونًا (أي.للمحطات ذات 256 لونًا، ولكن أيضًا للمحطات ذات 8 ألوان xterm
).
عند محاولة تنسيق رقم اللون هذا خارج النطاق باستخدام TERM=xterm
, ، تحصل على النتيجة ^[[3231m
التي وجدتها:
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(أي.إدخال 231
بين ^[[3
و m
)
إذا كنت تستخدم xterm-256color
, ، تحصل على نتيجة ذات مظهر طبيعي أكثر:
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(أي.إدخال 231
بين ^[[38;5;
و m
)
وبالمثل، فإن Normal
بناء الجملة 88 لونًا، لون الخلفية 80 تتم ترجمته إلى قيمة 256 لونًا 232 وينتج الخطأ ^[[4232m
تسلسل ل xterm
(ولكن من شأنه أن ينتج أكثر معقولية ^[[48;5;232m
تحت xterm-256color
).
نصائح أخرى
تبدو وكثيرا وكثيرا تعريف اللون / ذهب خطأ:
giveacodicetagpre.والتي لن تصنع الكثير على أي حال.
هل يحدث ذلك بقيمة محددة للأجيال أو لأي قيمة؟ما إصدار VIM؟ما المحاكي الطرفي الذي نتحدث عنه؟