کدهای فرار انسی

کدهای فرار انسی
در رایانش، کدهای فرار انسی (همچنین رشته‌ها یا توالی‌های فرار) (انگلیسی: ANSI escape codes (or escape sequences)) روشی مورد استفاده درسیگنال‌دهی درون‌مداری (ارسال فرمان از طریق همان کابل صوتی یا تصویری) برای کنترل قالب‌بندی، رنگ‌آمیزی، ویرایش صفحه نمایش و دیگر ویژگی‌های خروجی روی ترمینال‌های متنی می‌باشد. برای کدگذاری این اطلاعات، توالی‌های خاصی از بایت‌ها (دقیقاً رشته‌های خاصی از کاراکتر) درون متن جاسازی می‌شوند، که ترمینال آنها را تفسیر می‌کند، البته نه به عنوان کدهای کاراکتری معمولی. انسی مخفف عبارت انگلیسی مؤسسه استانداردهای ملی آمریکایی می‌باشد.
کدهای انسی در دهه ۱۹۷۰ معرفی شدند و در اوائل دهه ۱۹۸۰ در بازار مینی‌کامپیوترها و سرورهای اصلی (سرور پردازنده مرکزی) رایج شدند. کدهای انسی توسط بازار سیستم تخته بولتن برای ارائه نمایشگرهای بهبودیافته در مقایسه با سیستم‌های اولیه که فاقد حرکت نشانه‌گر یا کرسر بودند مورد استفاده قرار گرفتند که به استفاده بسیار گسترده‌تر آنها منتهی شد.
اگرچه ترمینال‌های متنی سخت‌افزاری در قرن ۲۱ به صورت فزاینده‌ای کمیاب شده‌اند، اما همچنان ارتباط استاندارد انسی پابرجاست زیرا اکثریت شبیه‌سازان ترمینال (مانند ترمینال لینوکس) حداقل برخی از توالی‌های فرار انسی را در متن خروجی تفسیر می‌کنند؛ و تنها یک استثنای برجسته در بین ترمینال‌های متنی بود، آن هم کنسول ویندوز ۳۲بیتی از اجزاء مایکروسافت ویندوز پیش از روزرسانی تی‌اچ۲ در ویندوز ۱۰.
از کاربردهای رایج امروزی انسی در ترمینال مجازی لینوکس (شل یونیکس) مانند بش است برای مثال در ابزارها و کتابخانه‌های کنترل سرورهای وب، ابزارهای مایگریت کردن دیتابیس بواسطه گیت یا به منظور نوشتن اسکریپت کنسول‌های آسان برای فریم‌ابزارهای آزمایش کد پی‌اچ‌پی یا جاوا مانند پی‌اچ‌پی یونیت یا کدسپشن که ترمینال بش در محیط‌های خارج از لینوکس نیز از طریق سیگوین یا گیت‌بش یا ماشین مجازی لینوکس نیز در دسترس است و آی‌دی‌ای‌هایی همچون نت‌بینز شرایط استفاده از این ترمینال‌ها به صورت لوکال یا ریموت را فراهم می‌کنند.
جدول برخی از کاراکترهای کنترل کرسر و متن (این فهرست کامل نیست و CSI نماینده کاراکتر اسکیپ است که در انسی کلا \۰۳۳ است و میان‌بر آن در بش \e[ ) :
| کد | نام | ویژگی |
| --- | --- | --- |
|  CSI n A  |  CUU – Cursor Up  | کرسر را به تعداد ن با پیشفرض ۱ سلول در جهت تعیین شده منتقل می‌کند. اگر کرسر قبلاً در لبه نمایشگر بوده باشد تأثیری نخواهد داشت. |
|  CSI n B  |  CUD – Cursor Down  | کرسر را به تعداد ن با پیشفرض ۱ سلول در جهت تعیین شده منتقل می‌کند. اگر کرسر قبلاً در لبه نمایشگر بوده باشد تأثیری نخواهد داشت. |
|  CSI n C  |  CUF – Cursor Forward  | کرسر را به تعداد ن با پیشفرض ۱ سلول در جهت تعیین شده منتقل می‌کند. اگر کرسر قبلاً در لبه نمایشگر بوده باشد تأثیری نخواهد داشت. |
|  CSI n D  |  CUB – Cursor Back  | کرسر را به تعداد ن با پیشفرض ۱ سلول در جهت تعیین شده منتقل می‌کند. اگر کرسر قبلاً در لبه نمایشگر بوده باشد تأثیری نخواهد داشت. |
|  CSI n E  |  CNL – Cursor Next Line  | کرسر را به ابتدای خط ن‌ام بعد (پایین‌تر) از این خط می‌برد. (در ANSI.SYS نیست) |
|  CSI n F  |  CPL – Cursor Previous Line  | برعکس قبلی (در ANSI.SYS نیست) |
|  CSI n G  |  CHA – Cursor Horizontal Absolute  | کرسر را به ستون ن (جایگشت شماره ن‌ام در کاراکترهای یک خط) داخل یک خط می‌برد. (در ANSI.SYS نیست) |
|  CSI n ; m H  |  CUP – Cursor Position  | کرسر را به ردیف ن و ستون میم می‌برد. مقادیر عدد طبیعی هستند (پایه ۱) با پیشفرض ۱ (گوشه سمت چپ بالا) اگر تعیین نشده باشند. حذف هر یک از پارامترها به معنی مقدار پیشفرض است و بدون سمی‌کالن به معنی فقط شماره ردیف است یعنی ن. |
|  CSI n J  |  ED – Erase in Display  | بخشی از صفحه نمایش را تمیز می‌کند. اگر ن صفر باشد یا کلا نباشد از کرسر تا پایان صفحه، اگر یک باشد تا آغاز صفحه اگر ۲ کل صفحه را پاک می‌کند (و در ANSI.SYS داس کرسر را به گوشه چپ بالا می‌فرستد) اگر ۳ باشد کل صفحه نمایش بعلاوه حذف تمام خطوط ذخیره شده در حافظه بافر اسکرول‌بار (این ویژگی برای xterm اضافه شد و توسط دیگر برنامه‌های ترمینال پشتیبانی می‌شود) |
|  CSI n K  |  EL – Erase in Line  | بخشی از داخل یک خط را پاک می‌کند. اگر ن صفر باشد یا نباشد، از کرسر تا پایان خط، اگر یک باشد تا آغاز خط، اگر ۲ باشد کل خط را پاک می‌کند و مکان کرسر تغییر نمی‌کند. |
|  CSI n S  |  SU – Scroll Up  | کل صفحه را به تعداد ن خط به بالا اسکرول می‌کند با پیشفرض یک. خطوط جدید به پایین اضافه می‌شوند. (در ANSI.SYS نیست) |
|  CSI n T  |  SD – Scroll Down  | برعکس قبلی و خطوط جدید به بالا اضافه می‌شوند. (در ANSI.SYS نیست) |
|  CSI n ; m f  |  HVP – Horizontal and Vertical Position  | دقیقاً همانند CUP است. |
|  CSI n m  |  SGR – Select Graphic Rendition  | پارامترهای اس‌جی‌آر را تنظیم می‌کند از جمله رنگ متن. بعد از اسکیپ (CSI) می‌تواند صفر به معنی Reset یا معمولی یا پارامترهای دیگری باشد. بدون پارامتر معادل صفر است. رنگ‌های اولیه از ۳۰ یعنی رنگ سیاه برای متن تا ۳۷ برای ۸ رنگ مختلف. ۴۰ تا ۴۷ برای زمینه. ۱ برای متن درشت، ۴ برای زیرخط یا آندرلاین و ۷ برای تعویض رنگ زمینه و متن با یکدیگر. رنگ‌های بیشتری تا حد ۳۲ بیت و رنگ‌های حقیقی نیز در برخی افزونه‌های برخی ترمینال‌ها افزوده شدند اما برای ساخت و پرداخت امور گرافیکی ابزارهای دیگری وجود دارند. |
|  CSI 5i  |  AUX Port On  | درگاه آیوایکس (پورت کمکی یا آکسیلری در داس یا ترمینال) را فعال یا باز می‌کند که معمولاً برای پرینتر محلی سریال پورت است. |
|  CSI 4i  |  AUX Port Off  | برعکس قبلی |
|  CSI 6n  |  DSR – Device Status Report  | گزارش محل کرسر (CPR) به برنامه به صورت (همان‌طور که روی کیبورد نیز هست) ESC[n;mR، که ن ردیف و میم ستون است. |
|  CSI s  |  SCP – Save Cursor Position  | مکان فعلی کرسر را ذخیره می‌کند. |
|  CSI u  |  RCP – Restore Cursor Position  | محل ذخیره‌شده قبلی کرسر را فراخوانی می‌کند. |
|  CSI ?25l  |  DECTCEM  | کرسر را مخفی می‌کند. نکته: حرف آخر بعد از ۲۵ حرف ال کوچک لاتین است. |
|  CSI ?25h  |  DECTCEM  | برعکس قبلی |
مثالی از یک تابع بش برای فلاشر یک ثانیه‌ای که سیگنال معکوس و طبیعی کردن رنگ نمایشگر را می‌فرستد تا زمانی که یک کلید فشرده شود:
flasher () { while true; do printf "\e[?5h"; sleep 1; printf \\e[?5l; read -s -n1 -t1 && break; done; }
این تابع می‌تواند همراه یک سمی‌کالن پس از یک فرمان زمان‌بر دیگر بیاید تا برنامه‌نویس را نهایتاً با فلاش زدن از تکمیل شدن پروسه مطلع کند. استفاده از printf در اینجا معادل echo -e -n است.