انتقل إلى المحتوى

تسلسلات هروب أنسي

من ويكيبيديا، الموسوعة الحرة
معيار أنسي X3.64
مخرجات أداة مراقبة النظام إتش توب، وهي تطبيق يعمل ضمن الـ "إنكورس".
معلومات عامة
المعايير
  • إكما-48
  • آيزو/إيك 6429
  • فيبس 86
  • أنسي X3.64
  • جيس إكس 0211
التصنيف
مجموعة رموز تحكم وتسلسلات تحكم مبنية على آيزو/إيك 2022
التسلسل
ترميزات مرتبطة

معايير وظائف تحكم أخرى:
  • آيتو ت.101
  • جيس إكس 0207
  • آيزو 6630
  • دن 31626
  • إيتس 300 706

تسلسلات هروب أنسي أو شيفرة هروب أنسي أو شيفرة الهروب وفق المعيار الأمريكي الوطني (بالإنجليزية: ANSI escape sequences)، هي معيار يُستخدم في الإشارة داخل النطاق للتحكم في موضع المؤشر، ولون النص، وتنسيق الخط، وخيارات أخرى على الطرفيات المرئية ومحاكيات الطرفية. تُدرج داخل النص سلاسل معينة من البايتات، يبدأ معظمها بمحرف الهروب متبوعًا بمحرف حصر، وتُفسَّر هذه السلاسل من قبل الطرفية على أنها أوامر تُنفَّذ، وليس كنص يُعرض حرفيًا.

قُدِّمت تسلسلات أنسي في سبعينيات القرن العشرين كبديل لتسلسلات التحكم الخاصة بالشركات المُصنِّعة، وسرعان ما انتشرت في سوق معدات الحاسوب بحلول أوائل الثمانينيات. وعلى الرغم من أن الطرفيات النصية المادية أصبحت نادرة في القرن الحادي والعشرين، فإن أهمية معيار أنسي ما زالت قائمة، نظرًا لأن الغالبية العظمى من محاكيات الطرفية ووحدات الأوامر تفسر على الأقل جزءًا من هذا المعيار.

التاريخ

[عدل]

أضاف تقريبًا جميع مصنِّعي الطرفيات المرئية تسلسلات هروب خاصة بالشركة المصنعة لتنفيذ عمليات مثل وضع المؤشر في مواضع عشوائية على الشاشة. من الأمثلة على ذلك طرفية VT52، التي سمحت بوضع المؤشر في موضع x,y على الشاشة عبر إرسال المحرف ESC، متبوعًا بمحرف Y، ثم محرفين يمثلان القيم العددية x وy مضافًا إليهما 32 (وبالتالي تبدأ من محرف المسافة في أسكي وتتجنب محارف التحكم). وكانت هازلتين 1500 تحتوي على ميزة مشابهة، تُفعَّل باستخدام ~، وDC1 ثم موضعي X وY مفصولين بفاصلة. وعلى الرغم من أن الطرفيتين كانتا تؤديان نفس الوظيفة، إلا أن تسلسلات التحكم المستخدمة فيهما كانت مختلفة.

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

حاول معيار أنسي معالجة هذه المشكلات من خلال وضع مجموعة أوامر تستخدمها جميع الطرفيات، مع اشتراط إرسال جميع البيانات الرقمية كأرقام ASCII. وكان أول معيار في هذه السلسلة هو ECMA-48، الذي اعتُمد عام 1976.[1] وكان امتدادًا لسلسلة من معايير ترميز المحارف، أولها آيزو/آي إي سي 646 لعام 1965، وهو معيار من 7 بتات اشتُق منه آيزو/آي إي سي 646. أما اسم "تسلسل الهروب ANSI" فقد ظهر عام 1979 عندما اعتمد المعهد الأمريكي للمعايير الوطنية المعيار أنسي X3.64. وقد تعاونت لجنة أنسي X3L2 مع لجنة ECMA TC 1 لإنتاج معايير متطابقة تقريبًا. وتم دمج هذين المعيارين في معيار دولي هو ISO 6429.[1] وفي عام 1994، سحبت أنسي معيارها لصالح المعيار الدولي.

طرفية DEC VT100
طرفية العرض المرئي DEC VT100.

أول طرفية عرض مرئي شائعة دعمت هذه التسلسلات كانت ديجيتال إكوبمينت VT100، التي قُدّمت عام 1978.[2] وقد حقق هذا الطراز نجاحًا كبيرًا في السوق، مما أدى إلى ظهور عدد كبير من النسخ المقلَّدة لطرفية VT100، وكان من أوائلها وأشهرها الطرفية Zenith Z-89 الأرخص سعرًا في عام 1979.[3] وظهرت طرفيات أخرى مثل Qume QVT-108، وTelevideo TVI-970، وWyse WY-99GT، بالإضافة إلى أوضاع اختيارية مثل "VT100" أو "VT103" أو "أنسي" بدرجات متفاوتة من التوافق في العديد من العلامات التجارية الأخرى. وقد أدت شعبية هذه الطرفيات تدريجيًا إلى افتراض معظم البرمجيات (وخاصة نظام لوحة البيانات والخدمات الإلكترونية الأخرى) أن تسلسلات الهروب مدعومة، مما أدى إلى دعمها في جميع الطرفيات الجديدة تقريبًا، وكذلك في برامج المحاكاة.

وفي عام 1981، اعتُمد معيار أنسي X3.64 للاستخدام في الحكومة الأمريكية عبر منشور المعايير الاتحادية لمعالجة المعلومات رقم 86. ولاحقًا، توقفت الحكومة الأمريكية عن تكرار معايير الصناعة، ولذلك تم سحب المنشور رقم 86.[4]

وقد تم تحديث ECMA-48 عدة مرات، وهو حاليًا في الإصدار الخامس منذ عام 1991.[5] وقد اعتمدته أيضًا المنظمة الدولية للمعايير واللجنة الكهرتقنية الدولية كمعيار ISO/IEC 6429.[6] وقد تبنته المعايير الصناعية اليابانية كذلك تحت اسم JIS X 0211.

ومن المعايير ذات الصلة: الاتحاد الدولي للاتصالات، ومعيار Teletex، ومعيار ISO/IEC 8613، وهو معيار بنية الوثيقة المفتوحة (خاصة ISO/IEC 8613-6 أو ITU T.416). تشترك هذه الأنظمة في العديد من تسلسلات الهروب مع نظام ANSI، مع امتدادات قد لا تكون ذات معنى للطرفيات الحاسوبية. ومع أن النظامين سرعان ما خرجا من الاستخدام، إلا أن معيار ECMA-48 ما زال يحتفظ بهذه الامتدادات كـ "محجوزة".

الدعم على المنصات

[عدل]
محاكي الطرفية Xterm
محاكي الطرفية Xterm.

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

غالبًا ما تدعم محاكيات الطرفيات التي تتواصل مع أجهزة بعيدة تسلسلات أنسي الهروب. يشمل ذلك أي برنامج كُتب للتواصل مع أنظمة لوحة الإعلانات على الحواسيب المنزلية والشخصية. كما أن محاكيات الطرفيات على أنظمة يونكس مثل xterm يمكنها التواصل مع البرمجيات التي تعمل على نفس الجهاز، وبالتالي يمكن للبرمجيات العاملة ضمن بيئة X11 عبر محاكي طرفية أن تفترض إمكانية استخدام هذه التسلسلات.

ومع تطور قدرات الحواسيب، بدأت الشاشات المدمجة تدعم هذه التسلسلات أيضًا، مما سمح للبرمجيات بأن تكون قابلة للنقل بين أنظمة CP/M. كما وُجدت محاولات لتوسيع تسلسلات الهروب لتشمل دعم الطابعات[7] واستخدامها كصيغة مبكرة لتخزين المستندات مشابهة لـ PDF، أي هندسة المستندات المفتوحة (بالإنجليزية: Open Document Architecture).[بحاجة لمصدر]

نظام دوس وويندوز

[عدل]

لم يدعم حاسوب آي بي إم بي سي، الذي تم طرحه عام 1981، هذه التسلسلات أو أي تسلسلات هروب أخرى لتحديث الشاشة. فقد كانت قلة من محارف التحكم (مثل بيل، إرجاع الحامل، سطر جديد، مفتاح إرجاع) تُفسّر من قبل نظام بيوس الأساسي فقط. وكان يجب تنفيذ أي تأثيرات عرض من خلال استدعاءات بيوس، والتي كانت بطيئة جدًا، أو عبر التلاعب المباشر بأجهزة حاسوب آي بي إم بي سي. وقد أدى ذلك إلى جعل البرمجيات المعقدة غير قابلة للنقل، وفرض الحاجة إلى تكرار تفاصيل العتاد في الحواسيب المتوافقة مع آي بي إم.

تضمن الإصدار الثاني من نظام دوس برنامج تعريف اختياري يدعى ANSI.SYS، والذي يشير إلى المعهد الأمريكي للمعايير الوطنية. إلا أن الأداء الضعيف، وحقيقة أنه لم يكن مُثبّتًا افتراضيًا، جعلا البرمجيات نادرًا ما تستخدمه (إن وُجد).

لم تكن وحدة تحكم ويندوز تدعم تسلسلات هروب أنسي، كما أن مايكروسوفت لم توفّر وسيلة لتفعيلها. وقد ظهرت بدائل مثل تي سي سي من JP Software (وكان يُعرف سابقًا بـ 4NT)، وبرنامج أنسي.كوم من مايكل جي. ميفورد، وأنسيكون من جيسون هود[8]، بالإضافة إلى كونسول إمولاتور من Maximus5، والتي مكّنت دعم تسلسلات أنسي. كما استخدمت برمجيات مثل مكتبة colorama في Python[9] وسيج وين تقنيات لمعالجة النصوص أثناء تنفيذها، حيث كانت تحلل تسلسلات أنسي وتقوم بمحاكاتها عبر استدعاءات نظام ويندوز.

وفي عام 2016، أصدرت مايكروسوفت تحديثًا لنظام ويندوز 10 ضمن تاريخ إصدارات ويندوز 10، وقد تضمّن هذا التحديث بشكل غير متوقع دعمًا لتسلسلات هروب ANSI، وذلك بعد أكثر من ثلاثين عامًا على إطلاق نظام ويندوز.[10] وقد تم تنفيذ هذا التحديث جنبًا إلى جنب مع نظام ويندوز الفرعي للينكس، ويبدو أن الهدف منه كان السماح للبرمجيات الطرفية المبنية على شبيه يونكس باستخدام وحدة تحكم ويندوز. وقد فعّل PowerShell 5.1 هذا الدعم افتراضيًا، بينما مكّن PowerShell 6 تضمين رمز ESC اللازم ضمن سلسلة نصية باستخدام `e.[11]

يدعم طرفية ويندوز، الذي تم تقديمه في 2019، هذه التسلسلات افتراضيًا، وتنوي مايكروسوفت استبدال وحدة تحكم ويندوز بمحطة طرفية لنظام التشغيل ويندوز.[12]

رموز التحكم C0

[عدل]

يفترض معظم المستخدمين بعض الوظائف المرتبطة ببعض المحارف أحادية البايت. وقد تم تعريف مجموعة رموز التحكم C0 مبدئيًا كجزء من معيار أسكي، وهي تُعرف الآن افتراضيًا ضمن معيار آيزو 6429 (المعروف أيضًا باسم ECMA-48)، مما يجعلها جزءًا من نفس المعيار الذي يضم مجموعة C1 المستخدمة ضمن تسلسلات هروب أنسي (على الرغم من أن آيزو 2022 يسمح باستخدام مجموعة C0 من آيزو 6429 دون مجموعة C1 منه، والعكس صحيح، بشرط أن يكون 0x1B دائمًا هو رمز الهروب ESC). وتُستخدم هذه الرموز لتقليل كمية البيانات المنقولة، أو لتنفيذ بعض الوظائف التي لا يمكن تنفيذها باستخدام تسلسلات الهروب:

رموز التحكم C0 الشائعة (ليست قائمة شاملة)
^ C0 الاختصار الاسم التأثير
^G 0x07 BEL جرس (Bell) يُصدر صوتًا مسموعًا.
^H 0x08 BS التراجع (Backspace) يُحرّك المؤشر إلى اليسار (وقد "يلتف للخلف" إذا كان المؤشر في بداية السطر).
^I 0x09 HT الجدولة الأفقية (Tab) يُحرّك المؤشر إلى اليمين نحو نقطة التبويب التالية.
^J 0x0A LF تغذية سطر (Line Feed) ينتقل إلى السطر التالي، ويُمرر العرض إلى الأعلى إذا كان في أسفل الشاشة. عادةً لا يُغيّر الموقع أفقيًا، رغم أنه لا ينبغي للبرامج الاعتماد على هذا.
^L 0x0C FF تغذية نموذج (Form Feed) يُحرّك الطابعة إلى أعلى الصفحة التالية. عادةً لا يُغيّر الموقع أفقيًا، لكن تأثيره على الطرفيات المرئية يختلف.
^M 0x0D CR إرجاع الحامل (Carriage Return) يُحرّك المؤشر إلى العمود صفر.
^[ 0x1B ESC هروب (Escape) يبدأ جميع تسلسلات الهروب.

تختلف تسلسلات الهروب في الطول. ويُحدَّد الشكل العام لتسلسل هروب متوافق مع أنسي من قِبل المعهد الأمريكي للمعايير الوطنية (وهو ما يعادل ECMA-35 أو ISO/IEC 2022).[13]:13.1 تتكون تسلسلات الهروب فقط من بايتات ضمن النطاق 0x20—0x7F (جميع محارف أسكي غير الخاصة بالتحكم)، ويمكن تحليلها دون الحاجة إلى النظر للأمام. أما السلوك الناتج عند مواجهة محرف تحكم، أو بايت ذي البت الأعلى مُفعّل، أو بايت لا يشكل جزءًا من أي تسلسل صحيح قبل الوصول إلى النهاية، فهو غير معرف.

تسلسلات الهروب من النوع Fe

[عدل]

إذا تبِعَت ESC بايت يقع في النطاق من 0x40 إلى 0x5F، فإن تسلسل الهروب يُعد من النوع Fe. وتُحال عملية تفسيره إلى معيار رموز التحكم من نوع C1 المعمول به.[13]:13.2.1 وبناءً على ذلك، تتبع جميع تسلسلات الهروب التي تتوافق مع رموز التحكم C1 من أنسي X3.64 / ECMA-48 هذا الشكل.[14]:5.3.a

يشير المعيار إلى أنه في البيئات التي تستخدم 8 بت، يمكن تمثيل دوال التحكم المقابلة لتسلسلات الهروب من النوع Fe (تلك التابعة لمجموعة رموز التحكم C1) كبايتات منفردة تقع في النطاق 0x80–0x9F.[14]:5.3.b وهذا ممكن في ترميزات المحارف المتوافقة مع مواصفات الترميز ثُماني البت التي يحددها معيار ISO 2022، مثل سلسلة آيزو/آي إي سي 8859. ومع ذلك، فإن ترميزات المحارف المستخدمة في الأجهزة الحديثة مثل صيغة التحويل الموحد-8 (UTF-8) أو ويندوز-1252 كثيرًا ما تُخصّص هذه الرموز لاستخدامات أخرى، لذا يُستخدم غالبًا تسلسل مكوّن من بايتين فقط. في حالة UTF-8، يؤدي تمثيل رمز تحكم من نوع C1 عبر كتلة عناصر التحكم C1 واللاتينية التكميلية-1 إلى توليد رمز ثنائي البايت مختلف (مثال: 0xC2,0x8E للمحرف U+008E)، ولكن لا يتم توفير مساحة بهذه الطريقة.

بعض تسلسلات الهروب أنسي من النوع Fe (عناصر من مجموعة C1) — ليست قائمة شاملة
الرمز C1 الاختصار الاسم التأثير
ESC N 0x8E SS2 التحول الفردي الثاني (Single Shift Two) يختار حرفًا مفردًا من إحدى مجموعات المحارف البديلة. يختار SS2 مجموعة G2، ويختار SS3 مجموعة G3.[15] في بيئة 7-بت، يتبع هذا برموز GL (0x20–0x7F) تمثل الحرف من تلك المجموعة.[13]:9.4 في بيئة 8-بت، قد تكون هذه الرموز من نوع GR (0xA0–0xFF).[13]:8.4
ESC O 0x8F SS3 التحول الفردي الثالث (Single Shift Three)
ESC P 0x90 DCS سلسلة التحكم بالجهاز (Device Control String) تُنهى بـ ST.[14]:5.6 تشمل استخدامات xterm لهذا التسلسل تعريف مفاتيح معرفة من قبل المستخدم، وطلب أو ضبط بيانات Termcap/Terminfo.[15]
ESC [ 0x9B CSI مقدمة تسلسل التحكم (Control Sequence Introducer) يبدأ معظم التسلسلات المفيدة، وينتهي ببايت ضمن النطاق من 0x40 إلى 0x7E.[14]:5.4
ESC \ 0x9C ST محدد نهاية السلسلة (String Terminator) يُنهى سلاسل النصوص في أوامر التحكم الأخرى.[14]:8.3.143
ESC ] 0x9D OSC أمر نظام التشغيل (Operating System Command) يبدأ سلسلة تحكم لاستخدام نظام التشغيل، وتنتهي بـ ST.[14]:8.3.89
ESC X 0x98 SOS بداية سلسلة (Start of String) تأخذ هذه الرموز وسيطًا عبارة عن سلسلة نصية تُنهى بـ ST.[14]:5.6 تحدد التطبيقات أو سياسات الخصوصية استخدامات هذه التسلسلات.[14]:8.3.2,8.3.128[14]:8.3.94 نادرًا ما تُطبّق هذه الوظائف، وغالبًا ما يتجاهلها xterm.[15] تسمح بعض عملاء كيرميت للسيرفر بتنفيذ أوامر كيرميت تلقائيًا على العميل عن طريق تضمينها في تسلسلات APC، مما قد يُشكل خطرًا أمنيًا إذا كان السيرفر غير موثوق به.[16]
ESC ^ 0x9E PM رسالة خصوصية (Privacy Message)
ESC _ 0x9F APC أمر برنامج تطبيقي (Application Program Command)

أوامر مُعرّف تسلسل التحكم (CSI)

[عدل]

بالنسبة لأوامر مُعرّف تسلسل التحكم، أو CSI، فإن الرمز ESC [ (ويُكتب في بعض لغات البرمجة كـ \e[ أو \x1b[ أو \033[) يتبعه أي عدد (بما في ذلك الصفر) من «بايتات المعامل» ضمن النطاق 0x30–0x3F (أي الحروف 0–9:;<=>? في ASCII)، ثم أي عدد من «بايتات التوسيط» في النطاق 0x20–0x2F (أي المسافة وعلامات الترقيم !"#$%&'()*+,-./)، وأخيرًا بايت واحد «نهائي» في النطاق 0x40–0x7E (أي الحروف @A–Z[\]^_`a–z{|}~ في ASCII).[14]:5.4

جميع التسلسلات الشائعة تستخدم المعاملات كسلسلة من الأرقام مفصولة بفواصل منقوطة مثل 1;2;3.[14](ص.5.4.2) تُعامل الأرقام المفقودة على أنها 0 (على سبيل المثال، 1;;3 يُعامل الرقم الأوسط على أنه 0، وعدم وجود معاملات على الإطلاق في ESC[m يُعادل الكود 0 لإعادة الضبط). بعض التسلسلات (مثل CUU) تُعامل 0 على أنه 1 لجعل المعاملات المفقودة مفيدة.[14]:F.4.2

تم اعتبار مجموعة فرعية من الترتيبات "خاصة" حتى يتمكن مصنعو الطرفيات من إدراج تسلسلاتهم الخاصة دون التعارض مع المعيار. التسلسلات التي تحتوي على بايتات المعامل <=>? أو البايتات النهائية من 0x70 إلى 0x7E (أي p–z{|}~) تُعد خاصة.

سلوك الطرفية غير محدد إذا احتوى تسلسل CSI على أي حرف خارج النطاق 0x20–0x7E. تُعد هذه الأحرف غير قانونية وتشمل أحرف التحكم C0 (النطاق 0–0x1F)، وحرف DEL (0x7F)، أو بايتات ذات البت الأعلى مفعّل. الاستجابات المحتملة تشمل تجاهل البايت، أو معالجته فورًا، وأيضًا ما إذا كان ينبغي متابعة تسلسل CSI، أو إيقافه فورًا، أو تجاهل بقية التسلسل.[بحاجة لمصدر]

بعض تسلسلات تحكم أنسي (ليست قائمة شاملة)
الرمز الاختصار الاسم التأثير
CSI n A CUU تحريك المؤشر للأعلى يُحرّك المؤشر بمقدار n (الافتراضي 1) خلية في الاتجاه المحدد. إذا كان المؤشر على حافة الشاشة، لا يحدث أي تأثير.
CSI n B CUD تحريك المؤشر للأسفل
CSI n C CUF تحريك المؤشر للأمام
CSI n D CUB تحريك المؤشر للخلف
CSI n E CNL السطر التالي للمؤشر يُحرّك المؤشر إلى بداية السطر بمقدار n (الافتراضي 1) سطرًا للأسفل. (غير تابع للمعهد الأمريكي للمعايير الوطنية)
CSI n F CPL السطر السابق للمؤشر يُحرّك المؤشر إلى بداية السطر بمقدار n (الافتراضي 1) سطرًا للأعلى. (غير تابع للمعهد الأمريكي للمعايير الوطنية)
CSI n G CHA التموضع الأفقي للمؤشر يُحرّك المؤشر إلى العمود n (الافتراضي 1). (غير تابع للمعهد الأمريكي للمعايير الوطنية)
CSI n ; m H CUP تحديد موقع المؤشر يُحرّك المؤشر إلى الصف n، العمود m. القيم تبدأ من 1، والافتراض هو 1 (أعلى الزاوية اليسرى) إذا لم تُذكر. تسلسل مثل CSI ;5H يُعادل CSI 1;5H، وكذلك CSI 17;H يعادل CSI 17H وCSI 17;1H.
CSI n J ED مسح الشاشة يمسح جزءًا من الشاشة. إذا كانت القيمة n تساوي 0 (أو مفقودة)، يُمسح من المؤشر حتى نهاية الشاشة. إذا كانت 1، يُمسح من المؤشر إلى بداية الشاشة. إذا كانت 2، تُمسح الشاشة بالكامل (ويُعاد المؤشر إلى الأعلى اليسار على دوس). إذا كانت 3، تُمسح الشاشة كاملة ويُحذف كل ما تم حفظه في ذاكرة التمرير (هذه الميزة أضيفت لـ xterm وتدعمها تطبيقات طرفية أخرى).
CSI n K EL مسح في السطر يمسح جزءًا من السطر. إذا كانت n تساوي 0 (أو مفقودة)، يُمسح من المؤشر حتى نهاية السطر. إذا كانت 1، يُمسح من المؤشر حتى بداية السطر. إذا كانت 2، يُمسح السطر بأكمله. لا يتغير موضع المؤشر.
CSI n S SU تمرير لأعلى يُمرر الصفحة بالكامل للأعلى بمقدار n (الافتراضي 1) سطرًا. تُضاف أسطر جديدة في الأسفل. (غير تابع للمعهد الأمريكي للمعايير الوطنية)
CSI n T SD تمرير لأسفل يُمرر الصفحة بالكامل للأسفل بمقدار n (الافتراضي 1) سطرًا. تُضاف أسطر جديدة في الأعلى. (غير تابع للمعهد الأمريكي للمعايير الوطنية)
CSI n ; m f HVP الموقع الأفقي والعمودي نفس تأثير CUP، لكن يُعتبر مؤثر تنسيقي (مثل قالب:رمز تحكم أو قالب:رمز تحكم) بدلًا من كونه أمر تحرير (مثل CUD أو CNL)، مما قد يؤدي إلى اختلاف في التعامل في بعض أوضاع الطرفية.[14]:Annex A
CSI n m SGR اختيار العرض الرسومي يُحدد الألوان ونمط النصوص التي تلي هذا الكود.
CSI 5i تفعيل منفذ AUX يُفعّل منفذ التسلسل المحلي عادةً لطابعة محلية.
CSI 4i تعطيل منفذ AUX يُعطّل منفذ التسلسل المحلي عادةً لطابعة محلية.

CSI 6n DSR تقرير حالة الجهاز يُبلغ عن موقع المؤشر (CPR) عن طريق إرسال ESC[n;mR، حيث n هو الصف وm هو العمود.
بعض التسلسلات الخاصة الشائعة
الرمز الاختصار الاسم التأثير
CSI s SCP, SCOSC حفظ موقع المؤشر الحالي يحفظ موقع/حالة المؤشر في نمط وحدة تحكم SCO.[17] في نمط الشاشة المقسومة رأسيًا، يُستخدم لضبط (كـ CSI n ; n s) أو إعادة ضبط الهوامش اليمنى واليسرى.[18]
CSI u RCP, SCORC استعادة موقع المؤشر المحفوظ يستعيد موقع/حالة المؤشر في نمط وحدة تحكم SCO.[19]
CSI ? 25 h DECTCEM إظهار المؤشر، كما في VT220.
CSI ? 25 l DECTCEM إخفاء المؤشر.
CSI ? 1004 h تفعيل التبليغ عن التركيز. يُبلّغ عند دخول أو خروج المحاكي من التركيز باستخدام ESC [I وESC [O على التوالي.
CSI ? 1004 l تعطيل التبليغ عن التركيز.
CSI ? 1049 h تفعيل ذاكرة الشاشة البديلة، من xterm.
CSI ? 1049 l تعطيل ذاكرة الشاشة البديلة، من xterm.
CSI ? 2004 h تفعيل وضع اللصق المحاط.[20] في هذا الوضع، يتم إحاطة النص الملصوق داخل الطرفية بـ ESC [200~ وESC [201~؛ ولا ينبغي للبرامج التعامل مع النص المحاط بهذه التسلسلات كأوامر (فيم، على سبيل المثال، لا يعامله كأوامر).[21] من xterm[22]
CSI ? 2004 l تعطيل وضع اللصق المحاط.

محددات اختيار العرض الرسومي

[عدل]

تُستخدم سلسلة التحكم CSI n m، المعروفة باسم "اختيار العرض الرسومي" (SGR)، لتعيين سمات العرض. يمكن تعيين عدة سمات في نفس السلسلة، مفصولة بفواصل منقوطة.[23] تظل كل سمة عرض مفعّلة حتى تحدث سلسلة SGR لاحقة تقوم بإعادة ضبطها.[14] إذا لم تُعطَ رموز، تُعامل CSI m كما لو كانت CSI 0 m (إعادة ضبط / الوضع الطبيعي).

n الاسم الملاحظة
0 إعادة ضبط أو عادي يتم إيقاف تشغيل جميع السمات
1 عريض أو زيادة في الشدة كما هو الحال مع الخافت، فإن تغيير اللون هو اختراع خاص بالحواسيب الشخصية (SCO / سي جي إيه)[24][بحاجة لمصدر أفضل]
2 خافت، تقليل في الشدة، أو باهت قد يُنفّذ كبنط خفيف مثل العريض.[25]
3 مائل غير مدعوم على نطاق واسع. أحيانًا يُعامل كعكس أو وميض.[24]
4 تسطير توجد امتدادات أسلوبية لـ كيتي وڤي تي إي ومينتي وآي تيرم 2 وكونسول.[26][27][28]
5 وميض بطيء يجعل الوميض أقل من 150 مرة في الدقيقة
6 وميض سريع ANSI.SYS في MS-DOS، أكثر من 150 مرة في الدقيقة؛ غير مدعوم على نطاق واسع
7 عكس الفيديو أو معكوس تبادل ألوان المقدمة والخلفية؛ محاكاة غير متسقة[29][محل شك]
8 إخفاء أو كتم غير مدعوم على نطاق واسع
9 شخط، أو شطب الأحرف مقروءة لكن عليها شطب وكأنها محذوفة. غير مدعومة في Terminal.app
10 الخط الأساسي (الافتراضي)
11–19 خط بديل تحديد خط بديل n − 10
20 فرَكتوُر (قوطي) نادرًا ما يُدعم
21 تسطير مزدوج؛ أو: ليس عريضًا تسطير مزدوج حسب ECMA-48,[14]:8.3.117 لكنه بدلاً من ذلك يُلغي خاصية العريض في عدة طرفيات، منها نواة لينكس في وحدة تحكم لينكس قبل الإصدار 4.17.[30]
22 شدة عادية لا عريض ولا خافت؛ تغيرات الألوان إذا كانت الشدة تُنفذ بهذه الطريقة
23 لا مائل ولا فرَكتوُر
24 غير مُسطّر لا تسطير فردي ولا مزدوج
25 لا وميض إيقاف الوميض
26 تباعد نسبي من ITU وT.416، غير معروف استخدامه في الطرفيات
27 غير معكوس
28 إظهار غير مخفي
29 غير مشطوب
30–37 تعيين لون المقدمة الأساسي
38 تعيين لون المقدمة الموسع المعاملات التالية هي 5;n أو 2;r;g;b
39 لون المقدمة الافتراضي حسب ما تُحدده الجهة المنفذة (وفقًا للمعيار)
40–47 تعيين لون الخلفية الأساسي
48 تعيين لون الخلفية الموسع المعاملات التالية هي 5;n أو 2;r;g;b
49 لون الخلفية الافتراضي حسب ما تُحدده الجهة المنفذة (وفقًا للمعيار)
50 تعطيل التباعد النسبي T.61 وT.416
51 مؤطَّر يُنفّذ كـ "محدد تنويع إيموجي" في mintty.[31]
52 مُحاط بدائرة
53 فوقه خط غير مدعوم في Terminal.app
54 غير مؤطّر ولا محاط بدائرة
55 لا خط فوقي
58 تعيين لون التسطير الموسع غير قياسي؛ مدعوم في Kitty وVTE وmintty وiTerm2.[26][27] المعاملات التالية هي 5;n أو 2;r;g;b
59 لون التسطير الافتراضي غير قياسي؛ مدعوم في Kitty وVTE وmintty وiTerm2.[26][27]
60 تسطير أيديوغرامي أو خط جانبي أيمن نادراً ما يُدعم
61 تسطير أيديوغرامي مزدوج، أو خط مزدوج على الجانب الأيمن
62 خط علوي أيديوغرامي أو خط جانبي أيسر
63 خط علوي أيديوغرامي مزدوج، أو خط مزدوج على الجانب الأيسر
64 تمييز أيديوغرامي
65 لا سمات أيديوغرامية إعادة ضبط تأثيرات 6064
73 مرتفع (فوقي) مدعوم فقط في mintty[31]
74 منخفض (تحتي)
75 لا مرتفع ولا منخفض
90–97 تعيين لون مقدمة ساطع غير قياسي؛ نُفذ أصلاً في aixterm[15]
100–107 تعيين لون خلفية ساطع

الألوان

[عدل]

ألوان 3-بت و4-بت

[عدل]

المواصفة الأصلية احتوت فقط على 8 ألوان، وتم تحديدها بالأسماء فقط. كانت المعلمات SGR من 30 إلى 37 تُستخدم لاختيار لون المقدمة، في حين أن القيم من 40 إلى 47 كانت تُستخدم لاختيار لون الخلفية. عدد كبير من الطرفيات قامت بتنفيذ خاصية "عريض" (رمز SGR هو 1) على أنها لون أكثر سطوعًا بدلاً من خط مختلف، مما أتاح 8 ألوان إضافية للمقدمة. غالبًا لم يكن بالإمكان استخدام هذه الألوان الأكثر سطوعًا للخلفية، رغم أن بعض الأحيان كان تفعيل "عكس الفيديو" (رمز SGR هو 7) يتيح ذلك. على سبيل المثال: للحصول على حروف سوداء على خلفية بيضاء استخدم ESC[30;47m، وللحصول على اللون الأحمر استخدم ESC[31m، وللحصول على اللون الأحمر الساطع استخدم ESC[1;31m. لإعادة ضبط الألوان إلى الإعدادات الافتراضية، استخدم ESC[39;49m (غير مدعوم في بعض الطرفيات)، أو أعد ضبط جميع السمات باستخدام ESC[0m. لاحقًا، أضافت بعض الطرفيات القدرة على تحديد الألوان "الساطعة" مباشرة باستخدام القيم من 90 إلى 97 للمقدمة، و100 إلى 107 للخلفية.

يوضح الجدول أدناه بعض الأمثلة حول كيفية تحويل رموز الألوان ذات 4-بت إلى رموز ألوان ذات 24-بت وفقًا لمعيار VGA وبعض محاكيات الطرفية الحديثة.

FG (المقدمة) BG (الخلفية) الاسم VGA[ا] وحدة تحكم ويندوز إكس بي[ب] باورشل[ج] فيجوال ستوديو كود[د] وحدة تحكم ويندوز 10[ه] Terminal.app (ماك) بوتي mIRC xterm أوبونتو[و] طرفية Eclipse
30 40 أسود 0، 0، 0 12، 12، 12 0، 0، 0 1، 1، 1 0، 0، 0
31 41 أحمر 170، 0، 0 128، 0، 0 205، 49، 49 197، 15، 31 153، 0، 0 187، 0، 0 127، 0، 0 205، 0، 0 222، 56، 43 205، 0، 0
32 42 أخضر 0، 170، 0 0، 128، 0 13، 188، 121 19، 161، 14 0، 166، 0 0، 187، 0 0، 147، 0 0، 205، 0 57، 181، 74 0، 205، 0
33 43 أصفر 170، 85، 0
يُعرض كبرتقالي في شاشات CGA
128، 128، 0 238، 237، 240 229، 229، 16 193، 156، 0 153، 153، 0 187، 187، 0 252، 127، 0 205، 205، 0 255، 199، 6 205، 205، 0
34 44 أزرق 0، 0، 170 0، 55، 218 36، 114، 200 0، 55، 218 0، 0، 128 0، 0، 187 0، 0، 127 0، 0، 238 60، 94، 169 0، 0، 238
35 45 أرجواني 170، 0، 170 128، 0، 128 188، 63، 188 136، 23، 152 166، 0، 166 187، 0، 187 127، 0، 127 205، 0، 205 208، 99، 195 205، 0، 205
36 46 سماوي 0، 170، 170 0، 128، 128 17، 168، 205 58، 150، 221 0، 166، 166 0، 187، 187 0، 147، 147 0، 205، 205 68، 185، 177 0، 205، 205
37 47 أبيض 170، 170، 170 192، 192، 192 255، 255، 255 229، 229، 229 204، 204، 204 204، 204، 204 187، 187، 187 178، 178، 178 229، 229، 229 238، 238، 236 229، 229، 229

8-بت

[عدل]

مع شيوع جداول البحث في لون 8-بت على بطاقات الرسومات، أُضيفت تسلسلات الهروب لتمكين اختيار الألوان من مجموعة محددة مسبقًا تتكون من 256 لونًا:[32]

 ESC[38;5;{{Angbr|n}}m لاختيار لون المقدمة، حيث n رقم من الجدول أدناه
 ESC[48;5;{{Angbr|n}}m لاختيار لون الخلفية
   0–7:    الألوان القياسية (كما في ESC[30–37m)
   8–15:   ألوان عالية السطوع (كما في ESC[90–97m)
  16–231: مكعب ألوان 6×6×6 (216 لونًا): 16 + 36 × r + 6 × g + b (حيث 0 ≤ r وg وb ≤ 5)
 232–255: تدرج رمادي من الداكن إلى الفاتح على 24 مستوى

تختلف الألوان المعروضة لهذه القيم بين تطبيقات الطرفيات والمحاكيات، إذ إن المواصفات المعترف بها مثل ECMA-48 ومواصفة T.416 الصادرة عن الاتحاد الدولي للاتصالات لا تُعرّف لوحة ألوان ثابتة لهذا الجدول المرجعي. ورغم أن استخدام الصيغة المذكورة أعلاه شائع في توليد لوحة الألوان، فإن الخوارزمية وخيارات الألوان لقيم مكعب الألوان من 16 إلى 231 تختلف حسب التطبيق. تُعرض أدناه لوحة الألوان والخوارزمية المستخدمة في XTerm كمثال.[14][33]

تستخدم مواصفة الاتحاد الدولي للاتصالات T.416 بعنوان *تقنية المعلومات – بنية الوثيقة المفتوحة (ODA) وتنسيق التبادل: بُنى محتوى الأحرف* [33] الرمز ":" كفاصل بدلاً من ذلك.

 ESC[38:5:{{Angbr|n}}m لاختيار لون المقدمة، حيث n رقم من الجدول أدناه
 ESC[48:5:{{Angbr|n}}m لاختيار لون الخلفية

256-color mode — المقدمة: ESC[38;5;#m   الخلفية: ESC[48;5;#m
الألوان القياسية ألوان عالية الكثافة
 0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15
216 لون
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
ألوان تدرج الرمادي
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

لِحساب قيمة RGB لرمزٍ ما في مكعب الألوان 6 × 6 × 6، يمكن استخدام الشيفرة التالية:

# print a list of the 256-color red/green/blue values used by xterm.
#
# reference:
# https://github.com/ThomasDickey/ncurses-snapshots/blob/master/test/xterm-16color.dat
# https://github.com/ThomasDickey/xterm-snapshots/blob/master/XTerm-col.ad
# https://github.com/ThomasDickey/xterm-snapshots/blob/master/256colres.pl

print("colors 0-16 correspond to the أنسي and aixterm naming")
for code in range(0, 16):
    if code > 8:
        level = 255
    elif code == 7:
        level = 229
    else:
        level = 205
    r = 127 if code == 8 else level if (code & 1) != 0 else 92 if code == 12 else 0
    g = 127 if code == 8 else level if (code & 2) != 0 else 92 if code == 12 else 0
    b = 127 if code == 8 else 238 if code == 4 else level if (code & 4) != 0 else 0
    print(f"{code:3d}: {r:02X} {g:02X} {b:02X}")

print("colors 16-231 are a 6x6x6 color cube")
for red in range(0, 6):
    for green in range(0, 6):
        for blue in range(0, 6):
            code = 16 + (red * 36) + (green * 6) + blue
            r = red   * 40 + 55 if red   != 0 else 0
            g = green * 40 + 55 if green != 0 else 0
            b = blue  * 40 + 55 if blue  != 0 else 0
            print(f"{code:3d}: {r:02X} {g:02X} {b:02X}")

print("colors 232-255 are a grayscale ramp, intentionally leaving out black and white")
code = 232
for gray in range(0, 24):
    level = gray * 10 + 8
    code = 232 + gray
    print(f"{code:3d}: {level:02X} {level:02X} {level:02X}")

هناك أيضًا ترميز مشابه لكن غير متوافق يتكون من 88 لونًا، يستخدم نفس تسلسل الهروب، وقد ظهر في rxvt وxterm-88color.[34] ويعتمد على مكعب ألوان بأبعاد 4×4×4.

24-بت

[عدل]

مع انتشار بطاقات الرسومات التي تدعم "الألوان الحقيقية" بـ16 إلى 24 بت، بدأت التطبيقات تدعم ألوان 24-بت. من بين محاكيات الطرفية التي تدعم تعيين ألوان الواجهة والخلفية بدقة 24-بت باستخدام تسلسلات الهروب: Xterm،[15] وكونسول الخاص ببيئة كدي،[35][36] وiTerm، وكذلك جميع الطرفيات المبنية على مكتبة libvte،[37] بما في ذلك طرفية جنوم.[38]

ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m Select RGB foreground color
ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m Select RGB background color

يُعتقد أن هذه الصيغة مستندة إلى معيار الاتحاد الدولي للاتصالات T.416 حول هندسة المستندات المفتوحة (ODA) وتنسيق التبادل: معمارية محتوى الأحرف،[33] والذي تم اعتماده لاحقًا تحت اسم ISO/IEC 8613-6، لكنه فشل تجاريًا.[بحاجة لمصدر] وتكون نسخة ODA أكثر تعقيدًا وبالتالي غير متوافقة:

  • المعلمات بعد الرقم '2' (r وg وb) اختيارية ويمكن تركها فارغة.
  • يتم استبدال الفواصل المنقوطة بنقطتين، كما هو موضح أعلاه.
  • يوجد "معرّف مساحة اللون" في البداية.[15] تعريف هذا المعرّف غير مضمَّن في ذلك المعيار، لذا يمكن تركه فارغًا لتمثيل القيمة الافتراضية غير المحددة. بالنسبة لمواصفات اللون بنظام CMYK، يفسّر برنامج mintty هذا المعامل على أنه يحدد القيمة القصوى التي تُقاس منها قنوات الألوان (مثل 100 أو 255).[31]
  • بالإضافة إلى القيمة '2' بعد 48 التي تحدد تنسيق الأحمر-الأخضر-الأزرق (RGB) (و'5' أعلاه لترميز اللون المؤشر 0–255)، توجد بدائل أخرى: '0' لتمثيل "مُعرّف حسب التطبيق"، و'1' للشفافية – وكلاهما لا يحتوي على معلمات إضافية؛ و'3' لتحديد الألوان باستخدام نظام السماوي-الأرجواني-الأصفر (CMY)، و'4' لنظام السماوي-الأرجواني-الأصفر-الأسود (CMYK)، حيث يُستخدم الموضع المسمى "غير مستخدم" لتمثيل مكوّن اللون الأسود.[33]
ESC[38:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space⟩m Select RGB foreground color
ESC[48:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space⟩m Select RGB background color

حيث تشير مساحة اللون إلى نوع مساحة اللون المرتبطة بالتحمّل المُعطى: 0 لـCIELUV أو 1 لـCIELAB.

يتم دعم إصدار ITU-RGB من قِبل xterm، حيث يتم تجاهل معرّف مساحة اللون ومعامل التحمّل. أما الصيغة الأبسط باستخدام الفواصل المنقوطة، فقد ظهرت لأول مرة في Konsole.[15](Can I set a color by its number?)

متغيرات البيئة في يونكس المتعلقة بدعم الألوان

[عدل]

بدلاً من استخدام دعم الألوان في termcap وterminfo الذي تم تقديمه في إصدار SVr3.2 (عام 1987)،[39] استخدمت مكتبة S-Lang (الإصدار 0.99-32، يونيو 1996) متغير بيئة منفصلًا هو $COLORTERM للإشارة إلى ما إذا كان محاكي الطرفية يمكنه استخدام الألوان على الإطلاق، وأضافت لاحقًا قيماً تشير إلى ما إذا كان يدعم الألوان ذات 24-بت.[40][41] هذا النظام، رغم توثيقه الضعيف، أصبح شائعًا بدرجة كافية دفعت توزيعات مثل Fedora وRHEL إلى التفكير في استخدامه كآلية أبسط وأكثر شمولًا للكشف مقارنة باستعلام المكتبات المحدّثة.[42]

تقوم بعض محاكيات الطرفية (مثل urxvt وkonsole) بتعيين المتغير $COLORFGBG للإبلاغ عن نظام ألوان الطرفية (وخاصة الخلفية الفاتحة مقابل الداكنة). نشأ هذا السلوك في مكتبة S-Lang[41] ويُستخدم في برنامج vim. أما gnome-terminal، فيرفض إضافة هذا السلوك، لأن صيغة القيمة غير متفق عليها، ولا يمكن تغيير القيمة عند تغيير لوحة الألوان أثناء التشغيل، كما أن تسلسلات xterm OSC 4/10/11 "الأكثر ملاءمة" موجودة بالفعل.[43]

تسلسلات أوامر نظام التشغيل

[عدل]

تم تعريف معظم تسلسلات أوامر نظام التشغيل (OSC) بواسطة الطرفية Xterm، لكن العديد منها مدعوم أيضًا من قِبل محاكيات طرفية أخرى. ولأسباب تاريخية، يمكن للطرفية Xterm أن تُنهي الأمر إما برمز BEL (0x07) أو بالتسلسل القياسي ST (0x9C أو 0x1B 0x5C).[15] على سبيل المثال، تتيح Xterm تعيين عنوان النافذة باستخدام الأمر ESC ]0;هذا هو عنوان النافذة BEL.

من الإضافات غير التابعة لـ Xterm ميزة الارتباط التشعبي، والتي تُستخدم بتسلسل ESC ]8;;الرابط ST منذ عام 2017، وتُستخدم من قِبل مكتبة VTE،[44] وiTerm2،[44] وmintty،[45] من بين محاكيات أخرى.[46]

تستخدم وحدة التحكم في لينكس التسلسل ESC ] P n rr gg bb لتغيير لوحة الألوان، والذي، في حال تم تضمينه بشكل صلب في تطبيق ما، قد يؤدي إلى تعليق (تجميد) محاكيات طرفية أخرى.[47] ومع ذلك، فإن إلحاق التسلسل ST به سيتم تجاهله من قِبل لينكس، ويكوّن تسلسلًا سليمًا يمكن تجاهله من قِبل الطرفيات الأخرى.[بحاجة لمصدر]

تسلسلات الهروب من نوع Fs

[عدل]

إذا تبع ESC بايت ضمن النطاق 0x60—0x7E، فإن تسلسل الهروب يكون من نوع Fs. يُستخدم هذا النوع للوظائف التحكمية المسجلة بشكل فردي في سجل ISO-IR.[48] يتم عرض جدول لهذه الوظائف تحت قسم ISO/IEC 2022.

تسلسلات الهروب من نوع Fp

[عدل]

إذا تبع ESC بايت ضمن النطاق 0x30—0x3F، فإن تسلسل الهروب يكون من نوع Fp، وهو مخصص لما يصل إلى ستة عشر وظيفة تحكم للاستخدام الخاص.[13]:6.5.3

بعض تسلسلات الهروب من نوع Fp (للاستخدام الخاص) المعترف بها من قبل VT100
الاختصار الاسم التأثير
ESC 7 DECSC حفظ المؤشر DEC يقوم بحفظ موضع المؤشر، وحالة التبديل في التشفير، وسمات التنسيق.[49][15]
ESC 8 DECRC استعادة المؤشر DEC يقوم باستعادة موضع المؤشر، وحالة التبديل في التشفير، وسمات التنسيق من تسلسل DECSC السابق إن وجد، وإلا يعيد تعيينها إلى الإعدادات الافتراضية.[49][15]

تسلسلات الهروب من نوع nF

[عدل]

إذا تبع ESC بايت ضمن النطاق 0x20—0x2F، فإن تسلسل الهروب يكون من نوع nF. يتبع هذا البايت أي عدد من البايتات الإضافية في هذا النطاق، ثم بايت ضمن النطاق 0x30-0x7E. تُصنف هذه التسلسلات بشكل فرعي حسب أقل بتين في البايت الأول، على سبيل المثال "النوع 2F" للتسلسلات التي يبدأ فيها البايت الأول بـ 0x22؛ وحسب ما إذا كان البايت النهائي ضمن النطاق 0x30—0x3F، مما يشير إلى الاستخدام الخاص (على سبيل المثال "النوع 2Fp") أو لا (على سبيل المثال "النوع 2Ft").[13]:13.2.1

تُستخدم معظم تسلسلات nFt لتغيير مجموعة الأحرف الحالية، وهي مدرجة في ISO/IEC 2022. وبعض التسلسلات الأخرى:

بعض تسلسلات الهروب من نوع 0Ft (الإعلان) المعترف بها من أنسي[15][13]:15.2
الاختصار الاسم التأثير
ESC SP F
  • ACS6
  • S7C1T
  • إعلان هيكل الشيفرة 6
  • إرسال حرف تحكم C1 ذو 7 بتات إلى المضيف
يجعل مفاتيح الوظائف ترسل ESC + حرف بدلاً من أكواد C1 ذات 8 بتات.
ESC SP G
  • ACS7
  • S8C1T
  • إعلان هيكل الشيفرة 7
  • إرسال حرف تحكم C1 ذو 8 بتات إلى المضيف
يجعل مفاتيح الوظائف ترسل أكواد C1 ذات 8 بتات.

إذا كان البايت الأول هو '#'، فإن التسلسلات العامة محجوزة لوظائف التحكم الفردية المسجلة في ISO-IR.[13]:6.5.2 لا توجد تسلسلات مسجلة حالياً.[48] تتوفر تسلسلات من النوع 3Fp (التي تشمل تلك التي تبدأ بـ '#') لوظائف التحكم للاستخدام الخاص.[13]:6.5.3

بعض تسلسلات الهروب من نوع 3Fp (الاستخدام الخاص) المعترف بها من VT100
الاختصار الاسم التأثير
ESC # 3 DECDHL حروف DEC مزدوجة الارتفاع، النصف العلوي يجعل السطر الحالي يستخدم حروفاً بارتفاع مزدوج. هذا الكود مخصص للنصف العلوي.[50]
ESC # 4 DECDHL حروف DEC مزدوجة الارتفاع، النصف السفلي يجعل السطر الحالي يستخدم حروفاً بارتفاع مزدوج. هذا الكود مخصص للنصف السفلي.[50]
ESC # 5 DECSWL سطر DEC ذو عرض فردي يجعل السطر الحالي يستخدم حروفاً بعرض فردي، وفقاً للسلوك الافتراضي.[51][15]
ESC # 6 DECDWL سطر DEC ذو عرض مزدوج يجعل السطر الحالي يستخدم حروفاً ذات عرض مزدوج، متجاهلاً أي حروف في النصف الثاني من السطر.[52][15]

أمثلة

[عدل]

CSI 2 J — هذا يقوم بمسح الشاشة، وعلى بعض الأجهزة، يقوم بتحديد موقع المؤشر في الموضع y,x 1,1 (الزاوية العلوية اليسرى).

CSI 32 m — هذا يجعل النص باللون الأخضر. قد يكون اللون الأخضر داكنًا أو باهتًا، لذا قد ترغب في تفعيل النص العريض باستخدام تسلسل CSI 1 m مما يجعله أخضر لامعًا، أو دمجها معًا مثل CSI 32 ; 1 m. بعض التطبيقات تستخدم الحالة العريضة لجعل الحرف لامعًا.

CSI 0 ; 6 8 ; "DIR" ; 13 p — هذا يعيد تعيين المفتاح F10 لإرسال السلسلة "DIR" وENTER إلى المخزن المؤقت للوحة المفاتيح، مما يعرض محتويات الدليل الحالي في سطر أوامر DOS. (خاص بـ MS-DOS ANSI.SYS فقط) كان يُستخدم أحيانًا للـ المعهد الأمريكي للمعايير الوطنية. هذا هو رمز استخدام خاص (كما يشار إليه بالحرف p)، باستخدام تمديد غير قياسي لإضافة معلمة من نوع سلسلة. وفقًا للحرف الموجود في المعيار، ينتهي التسلسل عند الحرف D.

CSI s — هذا يحفظ موضع المؤشر. باستخدام التسلسل CSI u سيتم استعادته إلى نفس الموضع. على سبيل المثال، إذا كان الموضع الحالي للمؤشر هو 7(y) و 10(x)، فإن التسلسل CSI s سيحفظ هذين الرقمين. الآن يمكنك الانتقال إلى موضع مؤشر آخر، مثل 20(y) و 3(x)، باستخدام التسلسل CSI 20 ; 3 H أو CSI 20 ; 3 f. الآن إذا استخدمت التسلسل CSI u، سيعود موضع المؤشر إلى 7(y) و 10(x). بعض المحطات تتطلب تسلسلات DEC ESC 7 / ESC 8 بدلاً منها، والتي تُعتبر مدعومة بشكل أوسع.

في البرمجة النصية

[عدل]

يتم استخدام رموز الهروب أنسي بشكل شائع في يونكس والأنظمة المشابهة لوحدة التحكم UNIX لتوفير إبراز النحو. على سبيل المثال، على المحطات المتوافقة، يقوم أمر إل إس التالي بتلوين أسماء الملفات والدلائل حسب النوع.

ls --color

يمكن للمستخدمين استخدام رموز الهروب في سكريبتاتهم من خلال تضمينها كجزء من تيارات البيانات الموحدة أو تيارات البيانات الموحدة. على سبيل المثال، يقوم أمر محرر التيار GNU التالي بتجميل مخرجات أمر صنع عن طريق عرض الأسطر التي تحتوي على كلمات تبدأ بـ "WARN" في الفيديو العكسي والكلمات التي تبدأ بـ "ERR" باللون الأصفر الساطع على خلفية حمراء داكنة (نسق الحرف مُتجاهل). تم تمييز تمثيلات الرموز.

make 2>&1 | sed -e 's/.*\bWARN.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bERR.*/\x1b[93;41m&\x1b[0m/i'

الوظيفة التالية في باش تقوم بوميض المحطة (عن طريق إرسال رموز وضع الفيديو العكسي والطبيعي بالتناوب) حتى يضغط المستخدم على مفتاح.

flasher () { while true; do printf \\e[?5h; sleep 0.1; printf \\e[?5l; read -s -n1 -t1 && break; done; }

يمكن استخدام هذا لتنبيه المبرمج عندما تنتهي أمر طويل، مثل make ; flasher.

printf \\033c

سيقوم هذا بإعادة ضبط وحدة التحكم، مماثلاً لأمر reset في أنظمة Linux الحديثة؛ ومع ذلك، يجب أن يعمل حتى على أنظمة Linux القديمة وبعض نسخ UNIX الأخرى (غير Linux).

في C

[عدل]

البرنامج التالي ينشئ جدولًا للأرقام من 0 إلى 109، كل منها يتم عرضه بالتنسيق المحدد بواسطة تسلسل الهروب سي جي آر باستخدام ذلك الرقم كرمز لتنسيق الرسوم البيانية.

مخرجات البرنامج المثال على طرفية جنوم
#include <stdio.h>

int main(void)
{
    int i, j, n;

    for (i = 0; i < 11; i++) {
        for (j = 0; j < 10; j++) {
            n = 10 * i + j;
            if (n > 108) break;
            printf("\033[%dm %3d\033[m", n, n);
        }
        printf("\n");
    }
    return 0;
}

تسلسلات إدخال الطرفية

[عدل]

الضغط على المفاتيح الخاصة على لوحة المفاتيح، بالإضافة إلى إخراج العديد من تسلسلات xterm CSI و DCS أو OSC، غالبًا ما ينتج تسلسل CSI أو DCS أو OSC، يُرسل من الطرفية إلى الكمبيوتر كما لو أن المستخدم قد كتبه.

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

هناك عدة مخططات ترميز، وللأسف تقوم معظم الطرفيات بخلط التسلسلات من مخططات مختلفة، لذا يجب أن يكون البرنامج المضيف قادرًا على التعامل مع تسلسلات الإدخال باستخدام أي مخطط. لتعقيد الأمر، تحتوي طرفيات VT نفسها على مخططان للإدخال، وضع عادي ووضع التطبيق، يمكن التبديل بينهما بواسطة التطبيق.

<char>                                         -> char

<esc> <nochar>                                 -> esc

<esc> <esc>                                    -> esc

<esc> <char>                                   -> Alt-keypress or keycode sequence

<esc> '[' <nochar>                             -> Alt-[
<esc> '[' (<modifier>) <char>                  -> keycode sequence, <modifier> is a decimal                                             number and defaults to 1 (xterm)

<esc> '[' (<keycode>) (';'<modifier>) '~'      -> keycode sequence, <keycode> and <modifier>
                                                  are decimal numbers and default to 1 (vt)

إذا كان الحرف النهائي هو '~'، يجب أن يكون الرقم الأول موجودًا وهو رقم رمز المفتاح، بينما الرقم الثاني هو قيمة معدّل اختيارية. أما إذا كان الحرف النهائي هو حرف، فيكون الحرف هو قيمة رمز المفتاح، والرقم الاختياري هو قيمة المعدّل.

قيمة المعدّل تكون افتراضيًا 1، وبعد خصم 1 تصبح بت خريطة المفاتيح المعدّلة التي تم الضغط عليها: Meta+Ctrl+Alt+⇧ Shift. على سبيل المثال، <esc>[4;2~ هو ⇧ Shift+End، <esc>[20~ هو مفتاح الوظيفة F9، <esc>[5C هو Ctrl+.

بعبارة أخرى، المعدّل هو مجموع الأرقام التالية:

المفتاح المضغوط الرقم التعليق
1 يُضاف دائمًا، والبقية اختيارية
Shift 1
(يسار) Alt 2
Control 4
Meta 8
vt sequences:
<esc>[1~    - Home        <esc>[16~   -             <esc>[31~   - F17
<esc>[2~    - Insert      <esc>[17~   - F6          <esc>[32~   - F18
<esc>[3~    - Delete      <esc>[18~   - F7          <esc>[33~   - F19
<esc>[4~    - End         <esc>[19~   - F8          <esc>[34~   - F20
<esc>[5~    - PgUp        <esc>[20~   - F9          <esc>[35~   - 
<esc>[6~    - PgDn        <esc>[21~   - F10         
<esc>[7~    - Home        <esc>[22~   -             
<esc>[8~    - End         <esc>[23~   - F11         
<esc>[9~    -             <esc>[24~   - F12         
<esc>[10~   - F0          <esc>[25~   - F13         
<esc>[11~   - F1          <esc>[26~   - F14         
<esc>[12~   - F2          <esc>[27~   -             
<esc>[13~   - F3          <esc>[28~   - F15         
<esc>[14~   - F4          <esc>[29~   - F16         
<esc>[15~   - F5          <esc>[30~   -

xterm sequences:
<esc>[A     - Up          <esc>[K     -             <esc>[U     -
<esc>[B     - Down        <esc>[L     -             <esc>[V     -
<esc>[C     - Right       <esc>[M     -             <esc>[W     -
<esc>[D     - Left        <esc>[N     -             <esc>[X     -
<esc>[E     -             <esc>[O     -             <esc>[Y     -
<esc>[F     - End         <esc>[1P    - F1          <esc>[Z     -
<esc>[G     - Keypad 5    <esc>[1Q    - F2       
<esc>[H     - Home        <esc>[1R    - F3       
<esc>[I     -             <esc>[1S    - F4       
<esc>[J     -             <esc>[T     - 

<esc>[A إلى <esc>[D هي نفسها تسلسلات الإخراج أنسي. يتم عادةً حذف <modifier> إذا لم يتم الضغط على مفاتيح معدلة، ولكن معظم التطبيقات تقوم دائمًا بإصدار <modifier> عند الضغط على F1+F4. (قسم مسودة)

تحتوي Xterm على صفحة توثيق شاملة حول مخططات تسلسل إدخال المفاتيح الوظيفية والفأرة المختلفة من محطات VT الخاصة بشركة DEC وتمت إضافة الكثير من الدعم لها عبر الزمن بواسطة توماس ديكي؛[53] كما أنه يحافظ على قائمة بالمفاتيح الافتراضية المستخدمة من قبل محاكيات الطرفيات الأخرى للمقارنة.[54]

  • على وحدة تحكم لينوكس، بعض مفاتيح الوظائف تولد تسلسل من الشكل CSI [ char. يجب أن ينتهي تسلسل CSI على [.
  • إصدارات قديمة من "Terminator" تولد SS3 1; modifiers char عندما يتم الضغط على F1+F4 مع المفاتيح المعدلة. تم نسخ هذا السلوك من طرفية جنوم.[بحاجة لمصدر]
  • xterm يرد بـ CSI row ; column R إذا طُلب موقع المؤشر وCSI 1 ; modifiers R إذا تم الضغط على مفتاح F3 مع المفاتيح المعدلة، مما يؤدي إلى تصادم في حالة row == 1. يمكن تجنب ذلك باستخدام المعدل الخاص ? كـ CSI ? 6 n، والذي سينعكس في الاستجابة كـ CSI ? row ; column R.
  • العديد من المحاكيات تضيف ESC إلى أي حرف يتم كتابته مع الضغط على مفتاح Alt. هذا يخلق غموضًا في الحروف الكبيرة والرموز @[\]^_، التي ستشكل أكواد C1.[بحاجة لتوضيح]
  • كونسول يولد SS3 modifiers char عندما يتم الضغط على F1+F4 مع المفاتيح المعدلة.[بحاجة لتوضيح]
  • iTerm2 يدعم الإبلاغ عن مفاتيح إضافية عبر وضع CSI u المحسن.[55]

انظر أيضًا

[عدل]

الملاحظات

[عدل]
  1. ^ الألوان النموذجية عند إقلاع الحواسيب وبقائها في وضع النص.
  2. ^ موجودة في ويندوز إكس بي حتى 8.1
  3. ^ تغير الألوان الصفراء والأرجوانية لإعطاء طابع مميز عن موجّه الأوامر.
  4. ^ وحدة تصحيح الأخطاء، سمة "Dark+"
  5. ^ سمة كامبل منذ الإصدار 1709
  6. ^ في الطرفيات الافتراضية من "/etc/vtrgb"

المراجع

[عدل]
  1. ^ ا ب "Standard ECMA-48: Control Functions for Character-Imaging I/O Devices" (PDF) (ط. Second). Ecma International. أغسطس 1979. Brief History. مؤرشف من الأصل (PDF) في 2025-05-03.
  2. ^ Williams، Paul (2006). "Digital's Video Terminals". VT100.net. مؤرشف من الأصل في 2025-05-12. اطلع عليه بتاريخ 2011-08-17.
  3. ^ Heathkit Company (1979). "Heathkit Catalog 1979". Heathkit Company. مؤرشف من الأصل في 2012-01-13. اطلع عليه بتاريخ 2011-11-04.
  4. ^ "Withdrawn FIPS Listed by Number" (PDF). المعهد الوطني للمعايير والتقانة. 15 ديسمبر 2016. مؤرشف من الأصل (PDF) في 2025-05-24. اطلع عليه بتاريخ 2022-01-02.
  5. ^ "ECMA-48 — Control functions for coded character sets". ECMA International. مؤرشف من الأصل في 2025-05-25.
  6. ^ قالب:Cite ISO standard
  7. ^ "تعريفات أوامر الطابعات في أميجا". Commodore. مؤرشف من الأصل في 2025-05-30. اطلع عليه بتاريخ 2013-07-10.
  8. ^ Hood، Jason (2005). "معالجة تسلسلات هروب أنسي لبرامج وحدة تحكم ويندوز". صفحة Jason Hood الشخصية. مؤرشف من الأصل في 2025-05-22. اطلع عليه بتاريخ 2013-05-09.
  9. ^ "colorama · PyPI". فهرس حزم بايثون. مؤرشف من الأصل في 2018-04-02. اطلع عليه بتاريخ 2022-02-27.
  10. ^ bitcrazed. "تسلسلات الطرفية الافتراضية لوحدة تحكم ويندوز". docs.microsoft.com (بالإنجليزية الأمريكية). Archived from the original on 2022-08-31. Retrieved 2018-05-30.
  11. ^ "مساعدة PowerShell: حول المحارف الخاصة". 12 يناير 2023. مؤرشف من الأصل في 2020-11-11.
  12. ^ "خارطة طريق نظام وحدة التحكم وطرفية ويندوز". مايكروسوفت. 2018. مؤرشف من الأصل في 2022-08-27. اطلع عليه بتاريخ 2021-03-13. يشمل هذا إحالة واجهة المستخدم الكلاسيكية لوحدة التحكم إلى التقاعد لصالح Windows Terminal وConPTY وتسلسلات الطرفية الافتراضية.
  13. ^ ا ب ج د ه و ز ح ط "Standard ECMA-35: Character Code Structure and Extension Techniques" (PDF) (ط. Sixth). Ecma International. 1994. مؤرشف من الأصل (PDF) في 2025-05-12.
  14. ^ ا ب ج د ه و ز ح ط ي يا يب يج يد يه يو "Standard ECMA-48: Control Functions for Coded Character Sets" (PDF) (ط. Fifth). Ecma International. يونيو 1991. مؤرشف من الأصل (PDF) في 2025-05-14.
  15. ^ ا ب ج د ه و ز ح ط ي يا يب يج اكتب عنوان المرجع بين علامتي الفتح <ref> والإغلاق </ref> للمرجع xtc
  16. ^ Frank da Cruz؛ Christine Gianone (1997). Using C-Kermit. Digital Press. ص. 278. ISBN:978-1-55558-164-0. مؤرشف من الأصل في 2023-10-09.
  17. ^ "SCOSC—Save Current Cursor Position". VT510 Video Terminal Programmer Information. ديجيتال إكوبمينت. مؤرشف من الأصل في 2025-05-12.
  18. ^ "DECSLRM—Set Left and Right Margins". VT510 Video Terminal Programmer Information. ديجيتال إكوبمينت. مؤرشف من الأصل في 2025-04-14.
  19. ^ "SCORC—Restore Saved Cursor Position". VT510 Video Terminal Programmer Information. ديجيتال إكوبمينت. مؤرشف من الأصل في 2025-05-28.
  20. ^ Moy، Edward؛ Gildea، Stephen؛ Dickey، Thomas. "XTerm Control Sequences". Functions using CSI, ordered by the final character(s). مؤرشف من الأصل في 2025-05-26. اطلع عليه بتاريخ 2022-02-04.
  21. ^ Conrad Irwin (أبريل 2013). "bracketed paste mode". cirw.in. مؤرشف من الأصل في 2025-05-13.
  22. ^ Moy، Edward؛ Gildea، Stephen؛ Dickey، Thomas. "XTerm Control Sequences". Bracketed Paste Mode. مؤرشف من الأصل في 2025-05-26. اطلع عليه بتاريخ 2022-02-04.
  23. ^ "console_codes(4) - Linux manual page". man7.org. مؤرشف من الأصل في 2025-05-27. اطلع عليه بتاريخ 2018-03-23.
  24. ^ ا ب "screen(HW)". SCO OpenServer Release 5.0.7 Manual. 11 فبراير 2003. مؤرشف من الأصل في 2025-05-12.
  25. ^ "Bug 791596 – Thoughts about faint (SGR 2)". bugzilla.gnome.org. مؤرشف من الأصل في 2025-02-12.
  26. ^ ا ب ج "Curly and colored underlines (#6382) · Issues · George Nachman / iterm2". GitLab (بالإنجليزية). 11 Dec 2017. Archived from the original on 2025-05-12.
  27. ^ ا ب ج "Extensions to the xterm protocol". kitty documentation (بالإنجليزية). Archived from the original on 2025-05-03. Retrieved 2020-07-01.
  28. ^ "Curly and colored underlines". KDE bugtracker (بالإنجليزية). 27 Aug 2022. Archived from the original on 2025-05-12.
  29. ^ "console-termio-realizer". jdebp.uk. مؤرشف من الأصل في 2025-05-12.
  30. ^ "console_codes(4)". Linux Programmer's Manual. 5.10. Linux man-pages project. مؤرشف من الأصل في 2025-05-27.
  31. ^ ا ب ج "mintty/mintty: Text attributes and rendering". GitHub (بالإنجليزية). Archived from the original on 2025-05-22.
  32. ^ Dickey، Thomas E. "XTerm FAQ: Can I set a color by its number?". مؤرشف من الأصل في 2025-05-11. اطلع عليه بتاريخ 2025-03-28.
  33. ^ ا ب ج د "T.416 Information technology - Open Document Architecture (ODA) and interchange format: Character content architectures". مؤرشف من الأصل في 2025-02-12.
  34. ^ Dickey، Thomas E. [[1](https://invisible-island.net/ncurses/ncurses.faq.html#xterm_256color) "Ncurses FAQ: Why not make "xterm" equated to "xterm-256color"?"]. اطلع عليه بتاريخ 2025-03-28. {{استشهاد ويب}}: تحقق من قيمة |مسار= (مساعدة)
  35. ^ "color-spaces.pl (نسخة من 256colors2.pl من xterm بتاريخ 1999-07-11)". KDE. 6 ديسمبر 2006.[وصلة مكسورة]
  36. ^ "README.moreColors". KDE. 22 أبريل 2010. مؤرشف من الأصل في 2025-05-12.
  37. ^ "تقرير علة libvte وتصحيحاتها: دعم 16 مليون لون". GNOME Bugzilla. 4 أبريل 2014. مؤرشف من الأصل في 2025-05-27. اطلع عليه بتاريخ 2016-06-05.
  38. ^ "كيفية تفعيل دعم الألوان الحقيقية 24-بت في طرفية جنوم". مؤرشف من الأصل في 2025-05-12.
  39. ^ "History". curs_color(3X) - manipulate terminal colors with curses. مؤرشف من الأصل في 2025-05-03.
  40. ^ "Midnight Commander: lib/tty/color-slang.c". Fossies. مؤرشف من الأصل في 2025-05-12.
  41. ^ ا ب Dickey، Thomas E. (2017). "NCURSES — comments on S-Lang". invisible-island.net. مؤرشف من الأصل في 2025-04-09.
  42. ^ "Features/256 Color Terminals - Fedora Project Wiki". Fedora Project. مؤرشف من الأصل في 2012-10-04.
  43. ^ "Bug 733423 – Please set COLORFGBG environment variable for automatic color detection". bugzilla.gnome.org. مؤرشف من الأصل في 2025-05-03.
  44. ^ ا ب Koblinger, Egmont. "الروابط التشعبية (أو ما يُعرف بالمرسى المشابه لـ HTML) في محاكيات الطرفية". GitHub Gists (بالإنجليزية). Archived from the original on 2025-05-18.
  45. ^ "mintty/mintty: تسلسلات التحكم". GitHub (بالإنجليزية). Archived from the original on 2025-05-30.
  46. ^ Koblinger, Egmont. "اعتماد تسلسل OSC 8 في محاكيات الطرفية". غيت هاب (بالإنجليزية). Archived from the original on 2025-05-25.
  47. ^ "console_codes — تسلسلات الهروب والتحكم في وحدة تحكم لينكس". دليل مبرمج لينكس. مؤرشف من الأصل في 2025-05-27.
  48. ^ ا ب ISO-IR: سجل ISO/IEC الدولي للمجموعات الرمزية المشفرة التي ستُستخدم مع تسلسلات الهروب (PDF). ITSCJ/IPSJ. مؤرشف من الأصل (PDF) في 2025-04-01. اطلع عليه بتاريخ 2023-05-12.
  49. ^ ا ب Digital. "DECSC—حفظ المؤشر". معلومات مبرمج طرفية الفيديو VT510. مؤرشف من الأصل في 2025-02-12.
  50. ^ ا ب تسلسلات الهروب أنسي - VT100 / VT52، مؤرشف من الأصل في 2009-02-27، اطلع عليه بتاريخ 2020-08-21
  51. ^ Digital. "DECSWL—سطر ذو عرض فردي وارتفاع فردي". معلومات مبرمج طرفية الفيديو VT510. مؤرشف من الأصل في 2025-02-12.
  52. ^ Digital. "DECDWL—سطر ذو عرض مزدوج وارتفاع فردي". معلومات مبرمج طرفية الفيديو VT510. مؤرشف من الأصل في 2025-05-06.
  53. ^ Dickey، Thomas. "XTerm FAQ: Comparing versions, by counting controls". Invisible Island. مؤرشف من الأصل في 2025-05-11. اطلع عليه بتاريخ 2020-01-25.
  54. ^ Dickey، Thomas (2016). "Table of function-keys for XTerm and other Terminal Emulators". Invisible Island. مؤرشف من الأصل في 2025-04-17. اطلع عليه بتاريخ 2020-01-25.
  55. ^ "CSI u - Documentation - iTerm2 - macOS Terminal Replacement". iTerm2. مؤرشف من الأصل في 2025-05-12. اطلع عليه بتاريخ 2023-08-15.

الروابط الخارجية

[عدل]