واجهت بعض المشكلات في العمل مع بعض سلاسل هروب VT100:
عادة ، يجب أن تحفظ محطة VT100 موضع المؤشر ولكن أيضًا سمات الأحرف عند كتابة تسلسل هروب مؤشر الحفظ
يجب استعادة سمات الأحرف عند كتابة مؤشر الاستعادة.
حاليًا ، يتم حفظ موضع المؤشر واستعادته ولكن ليس سمات الأحرف .
لقد اختبرت سلوك تسلسل الحفظ / الاستعادة في تطبيقات VT100 الأخرى للتأكد من أنها كانت تتعامل معها:
سأقدم بعض التفاصيل أدناه ، وسأبدأ العمل على حل لأنني أحتاجه لنفسي.
استمروا في العمل العظيم!
إليك تسلسلات الهروب VT100 المستخدمة للاختبار:
\x1b[0m (attributes off)
\x1b[1;1f (reset origin)
\x1b[2J (clear)
\x1b7 (save cursor state)
\x1b[7m (set negative color)
<colored> (just some output)
\x1b8 (restore cursor state)
<should not be colored>\n\r (another output - will be printed in negative color in xtermjs)
مع xtermjs ، يتم تلوين عبارة "يجب عدم تلوينها"
xterm.write('\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r');
// will print:
// "<should not be colored> <colored>"
في bash ، لن يتم تلوين عبارة "يجب ألا تكون ملونة"
printf '\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r'
# will print
# "<should not be colored> <colored>"
يبدو لي أنه يجب حفظ سمات النص واستعادتها مع الموضع هنا .
إليك كيفية تعامل hterm مع مؤشر الحفظ / الاستعادة
تحرير :
يتم تخزين جميع سمات الأحرف (fg color ، bg color ، وأنماط العلم الخاصة: bold ، italic ، negative ، ..) في السمة 'curAttr' لفئة 'Terminal'. يجب أن يكون حفظ نسخة من هذه السمة كافيًا لاستعادة جميع سمات الأحرف مرة واحدة.
اعتادت VTE أن تكون عربات التي تجرها الدواب أيضًا ؛ ربما يمكنك العثور على بعض القطع المثيرة للاهتمام في VTE 731205 .
@ 7PH نظرًا لأنك تقوم بتعديل DECSC على أي حال ، فربما يمكنك إلقاء نظرة على https://vt100.net/docs/vt510-rm/DECSC.html ، هناك بعض السمات الطرفية الأخرى التي لا تزال مفقودة ، والتي يجب التعامل معها أيضًا.
إذا لم يكن الأمر كذلك ، فيجب علينا إنشاء مشكلة منفصلة لها. من المحتمل أن يتم التقاط كل هذه الأشياء في شيء مثل كائن الحالة ICursorState
للحفاظ على تنظيم الأشياء.
تم دمجها في العلاقات العامة وتقسيم باقي العقارات إلى https://github.com/xtermjs/xterm.js/issues/1526
التعليق الأكثر فائدة
إذا لم يكن الأمر كذلك ، فيجب علينا إنشاء مشكلة منفصلة لها. من المحتمل أن يتم التقاط كل هذه الأشياء في شيء مثل كائن الحالة
ICursorState
للحفاظ على تنظيم الأشياء.