terminfo(5) File formats terminfo(5)

terminfo - پایگاه داده قابلیتهای پایانه (terminal capability database)

/usr/share/terminfo/*/*

Terminfo یک پایگاه داده برای توصیف پایانه‌ها است که توسط برنامه‌های مبتنی بر صفحه مانند nvi(1)، lynx(1)، mutt(1) و دیگر برنامه‌های curses، با استفاده از فراخوانی‌های سطح بالا به کتابخانه‌هایی مانند curses(3X) به کار می‌رود. همچنین از طریق فراخوانی‌های سطح پایین توسط برنامه‌های غیر curses که ممکن است مبتنی بر صفحه باشند (مانند clear(1)) یا غیر مبتنی بر صفحه (مانند tabs(1)) استفاده می‌شود.

Terminfo پایانه‌ها را با ارائهٔ مجموعه‌ای از قابلیت‌هایی که دارند، با مشخص کردن نحوهٔ انجام عملیات صفحه، و با تعیین نیازمندی‌های فاصله‌گذاری (padding) و توالی‌های مقداردهی اولیه توصیف می‌کند.

این سند نسخهٔ 6.6 از ncurses (وصلهٔ 20251230) را توصیف می‌کند.

ورودی‌ها در terminfo از دنباله‌ای از فیلدها تشکیل شده‌اند:

  • هر فیلد با یک کاما “,” پایان می‌یابد (کاماهای درون متن را می‌توان با یک اسلش وارونه گریز داد یا به صورت “\054” نوشت).
  • فاصله‌های خالی (white space) میان فیلدها نادیده گرفته می‌شوند.
  • نخستین فیلد در یک ورودی terminfo از ستون اول آغاز می‌شود.
  • از خطوط جدید و فاصله‌های خالی ابتدای سطر (فاصله‌ها یا تب‌ها) می‌توان برای قالب‌بندی ورودی‌ها جهت خوانایی بهتر استفاده کرد. این موارد از ورودی‌های تجزیه‌شده حذف می‌شوند.
گزینه‌های -f و -W در infocmp برای قالب‌بندی عبارات if-then-else یا اعمال حداکثر پهنای خط به این ویژگی تکیه دارند. شرح پایانهٔ قالب‌بندی‌شدهٔ حاصل می‌تواند توسط tic خوانده شود.
•
نخستین فیلد برای هر پایانه، نام‌هایی را مشخص می‌کند که پایانه با آن‌ها شناخته می‌شود، که با نویسه‌های “|” از یکدیگر جدا شده‌اند.
نخستین نام ارائه‌شده، متداول‌ترین کوته‌نوشت برای پایانه (نام اصلی آن) است، آخرین نام ارائه‌شده باید نامی طولانی باشد که پایانه را به طور کامل مشخص کند (نگاه کنید به longname(3X))، و تمامی نام‌های دیگر به عنوان هم‌نام‌ها (نام‌های مستعار یا aliases) برای نام پایانهٔ اصلی در نظر گرفته می‌شوند.
استاندارد X/Open Curses توصیه می‌کند که تمام نام‌ها به جز نام آخر باید با حروف کوچک و بدون فاصله باشند؛ نام آخر ممکن است برای خوانایی شامل حروف بزرگ و فاصله‌ها باشد.
این پیاده‌سازی چندان سخت‌گیر نیست؛ حروف بزرگ و کوچک ترکیبی را در نام اصلی و نام‌های مستعار مجاز می‌داند. اگر آخرین نام فاقد فاصله‌های درونی باشد، به آن اجازه می‌دهد تا هم یک نام مستعار و هم یک نام تفصیلی باشد (اما در مورد این ابهام هشدار خواهد داد).
•
سطرهایی که با “#” در ستون اول آغاز می‌شوند، به عنوان توضیح (کامنت) تلقی می‌گردند.
در حالی که سطرهای توضیح در هر نقطه‌ای معتبر هستند، خروجی captoinfo و infotocap (نام‌های مستعار برای tic) توضیحات را جابه‌جا می‌کنند تا فقط میان ورودی‌ها قرار گیرند.

نام‌های پایانه (به جز آخرین ورودی تفصیلی) باید با استفاده از قراردادهای زیر انتخاب شوند. قطعهٔ سخت‌افزاری خاصی که پایانه را تشکیل می‌دهد باید یک نام ریشه داشته باشد، مانند “hp2621”. این نام نباید حاوی خط تیره باشد. حالت‌هایی که سخت‌افزار می‌تواند در آن‌ها قرار گیرد، یا اولویت‌های کاربر، باید با افزودن یک خط تیره و پسوند حالت نشان داده شوند. بنابراین، یک vt100 در حالت ۱۳۲ ستونی vt100-w خواهد بود. در صورت امکان، پسوندهای زیر باید استفاده شوند:

پسوند مثال معنا
-nn aaa-60 تعداد خطوط روی صفحه
-np c100-4p تعداد صفحات حافظه
-am vt100-am با حاشیه‌های خودکار (معمولاً پیش‌فرض)
-m ansi-m حالت تک‌رنگ (mono)؛ حذف رنگ
-mc wy30-mc کوکی جادویی؛ فاصله‌ها هنگام برجسته‌سازی
-na c100-na بدون کلیدهای پیکان (باقی گذاشتن آن‌ها در حالت محلی)
-nam vt100-nam بدون حاشیه‌های خودکار
-nl hp2621-nl بدون خط وضعیت
-ns hp2626-ns بدون خط وضعیت
-rv c100-rv ویدئوی معکوس (reverse video)
-s vt100-s فعال‌سازی خط وضعیت
-vb wy370-vb استفاده از زنگ بصری به‌جای بوق
-w vt100-w حالت عریض (بیش از ۸۰ ستون، معمولاً ۱۳۲)

برای اطلاعات بیشتر در مورد قراردادهای نام‌گذاری پایانه، صفحهٔ راهنمای term(7) را ببینید.

ورودی terminfo از چندین قابلیت تشکیل شده است، یعنی ویژگی‌هایی که پایانه دارد، یا روش‌هایی برای به کار انداختن ویژگی‌های پایانه.

پس از فیلد اول (که نام یا نام‌های ورودی پایانه را مشخص می‌کند)، باید یک یا چند فیلد قابلیت وجود داشته باشد. این‌ها نام‌های بولی، عددی یا رشته‌ای به همراه مقادیر متناظر هستند:

  • قابلیت‌های بولی زمانی که حضور دارند مقدار درستی (true) و در صورت عدم حضور نادرستی (false) دارند. هیچ مقدار صریحی برای قابلیت‌های بولی وجود ندارد.
  • قابلیت‌های عددی دارای یک “#” در پسِ نام خود هستند، که به دنبال آن یک مقدار عدد صحیح ده‌دهی بدون علامت می‌آید.
  • قابلیت‌های رشته‌ای دارای یک “=” در پسِ نام خود هستند، که به دنبال آن یک رشته از نویسه‌ها که مقدار قابلیت را می‌سازند قرار می‌گیرد.
قابلیت‌های رشته‌ای را می‌توان به چندین خط تقسیم کرد، درست همان‌طور که فیلدهای تشکیل‌دهندهٔ یک ورودی پایانه می‌توانند به چندین خط تقسیم شوند. در حالی که فاصله‌ها میان فیلدها نادیده گرفته می‌شوند، فاصله‌های قرارگرفته در درون یک مقدار رشته‌ای حفظ می‌شوند، به جز فاصله‌های ابتدایی یک سطر.

هر قابلیتی را می‌توان لغو (cancel) کرد، یعنی از ورودی پایانه حذف نمود، با قرار دادن “@” در پسِ نام آن به‌جای مقدار قابلیت.

اگر دو پایانهٔ بسیار مشابه وجود داشته باشد، یکی (گونه یا variant) را می‌توان به عنوان عیناً همانند دیگری (پایه یا base) با برخی استثناها تعریف کرد. در تعریف گونه، قابلیت رشته‌ای use را می‌توان همراه با نام پایانهٔ پایه آورد:

  • قابلیت‌هایی که پیش از use آورده شده‌اند، بر قابلیت‌های نوع پایه که توسط use نام‌گذاری شده است، اولویت دارند (آن‌ها را رونویسی می‌کنند).
  • اگر چندین قابلیت use وجود داشته باشد، آن‌ها به ترتیب معکوس ادغام می‌شوند. یعنی، راست‌ترین ارجاع use ابتدا پردازش می‌شود، سپس ارجاع سمت چپ آن، و به همین ترتیب.
  • قابلیت‌هایی که به‌طور صریح در ورودی مشخص شده‌اند بر قابلیت‌هایی که از طریق ارجاعات use وارد می‌شوند اولویت دارند.

یک قابلیت را می‌توان با قرار دادن xx@ در سمت چپِ ارجاعِ use که آن را وارد می‌کند لغو کرد، که در آن xx همان قابلیت است. به عنوان مثال، ورودیِ

2621-nl, smkx@, rmkx@, use=2621,

پایانهٔ 2621-nl را تعریف می‌کند که فاقد قابلیت‌های smkx یا rmkx است، و بنابراین برچسب‌های کلیدهای تابعی را هنگام قرار داشتن در حالت بصری روشن نمی‌کند. این ویژگی برای حالت‌های مختلف یک پایانه، یا برای ترجیحات مختلف کاربر مفید است.

ورودیِ گنجانده‌شده از طریق use می‌تواند حاوی قابلیت‌های لغو شده باشد، که همان اثری را دارد که گویی آن لغوها درونِ خودِ ورودی پایانهٔ استفاده‌کننده قرار داشته‌اند.

جداول قابلیت‌هایی که ncurses در توصیف نوع پایانهٔ terminfo شناسایی می‌کند و در دسترسِ کدهای استفاده‌کننده از terminfo قرار می‌دهد، در ادامه آمده‌اند.

  • نام قابلیت نمادی را مشخص می‌کند که برنامه‌نویس با استفاده از رابط برنامه‌نویسی کاربردی (API) terminfo به آن قابلیت دسترسی پیدا می‌کند.
  • کد TI (terminfo) نام کوتاهی است که فرد هنگام تدوین یا به‌روزرسانی ورودی نوع پایانه استفاده می‌کند.
در صورت امکان، این کدها همانند یا مشابه کدهای استاندارد ANSI X3.64-1979 هستند (که اکنون با ECMA-48 جایگزین شده است، که از نام‌های یکسان یا بسیار مشابه استفاده می‌کند). همچنین معناشناسی آن‌ها برای مطابقت با آن مشخصات در نظر گرفته شده است.
کدهای terminfo محدودیت سخت‌گیرانه‌ای برای طول ندارند، اما ncurses یک محدودیت غیررسمی ۵ نویسه‌ای را حفظ می‌کند تا آن‌ها را کوتاه نگه دارد و امکان دهد که تب‌ها در پروندهٔ مبدأ Caps به‌خوبی تراز شوند. (با این حال، برخی از کدهای استاندارد از این حد فراتر می‌روند.)
  • کد TC (termcap) کدی است که توسط API متناظر در ncurses استفاده می‌شود. (برخی از قابلیت‌ها جدید هستند، و نام‌هایی دارند که از BSD termcap سرچشمه نگرفته‌اند.)
  • فیلد توضیحات تلاش می‌کند معنای هر قابلیت را بیان کند.

فیلد توضیحات از چند نشانه‌گذاری بهره می‌برد.

(P)
نشان می‌دهد که می‌توان فاصله‌گذاری (padding) را مشخص کرد.
(P*)
نشان می‌دهد که فاصله‌گذاری ممکن است متناسب با تعداد خطوط خروجیِ تحت تأثیر تغییر کند.
#i
نشان‌دهندهٔ i-امین پارامتر یک قابلیت رشته‌ای است؛ برنامه‌نویس باید رشته را به همراه پارامترهای فهرست‌شده به tparm(3X) ارسال کند.
اگر در توضیحات هیچ پارامتری ذکر نشده باشد، ارسال رشته به tparm(3X) ممکن است رفتار غیرمنتظره‌ای ایجاد کند، برای نمونه اگر رشته شامل علامت‌های درصد باشد.
Code
Boolean Capability Name TI TC Description
auto_left_margin bw bw حرکت cub1 از ستون ۰ به آخرین ستون می‌پیچد
auto_right_margin am am پایانه دارای حاشیه‌های خودکار است
no_esc_ctlc xsb xb beehive (کلید f1=escape، کلید f2=ctrl C)
ceol_standout_glitch xhp xs حالت برجسته با بازنویسی پاک نمی‌شود (hp)
eat_newline_glitch xenl xn خط جدید پس از ۸۰ ستون نادیده گرفته می‌شود (concept)
erase_overstrike eo eo می‌تواند روی‌نویسی‌ها را با فاصله پاک کند
generic_type gn gn نوع خط عمومی
hard_copy hc hc پایانه با نسخهٔ چاپی سخت (hardcopy)
has_meta_key km km دارای کلید متا است (یعنی بیت هشتم را تنظیم می‌کند)
has_status_line hs hs دارای خط وضعیت اضافی است
insert_null_glitch in in حالت درج میان نویسه‌های تهی تمایز قائل می‌شود
memory_above da da نمایش ممکن است در بالای صفحه حفظ شود
memory_below db db نمایش ممکن است در پایین صفحه حفظ شود
move_insert_mode mir mi حرکت در حالت درج ایمن است
move_standout_mode msgr ms حرکت در حالت برجسته ایمن است
over_strike os os پایانه می‌تواند روی‌نویسی کند
status_line_esc_ok eslok es می‌توان از کلید گریز در خط وضعیت استفاده کرد
dest_tabs_magic_smso xt xt تب‌های مخرب، نویسهٔ جادویی standout (t1061)
tilde_glitch hz hz نمی‌تواند ~ را چاپ کند (Hazeltine)
transparent_underline ul ul نویسهٔ زیرخط روی‌نویسی می‌کند
xon_xoff xon xo پایانه از دست‌تکانی xon/xoff استفاده می‌کند
needs_xon_xoff nxon nx فاصله‌گذاری (padding) کار نخواهد کرد، xon/xoff الزامی است
prtr_silent mc5i 5i چاپگر بر روی صفحه انعکاس نخواهد داشت
hard_cursor chts HC مکان‌نما به‌سختی دیده می‌شود
non_rev_rmcup nrrmc NR دستور smcup اثر rmcup را معکوس نمی‌کند
no_pad_char npc NP نویسهٔ فاصله‌گذاری وجود ندارد
non_dest_scroll_region ndscr ND ناحیهٔ پیمایش غیرمخرب است
can_change ccc cc پایانه می‌تواند رنگ‌های موجود را بازتعریف کند
back_color_erase bce ut صفحه با رنگ پس‌زمینه پاک می‌شود
hue_lightness_saturation hls hl پایانه فقط از نشانه‌گذاری رنگ HLS استفاده می‌کند (Tektronix)
col_addr_glitch xhpa YA فقط حرکت مثبت برای قابلیت‌های hpa/mhpa
cr_cancels_micro_mode crxm YB استفاده از cr حالت ریز (micro) را خاموش می‌کند
has_print_wheel daisy YC چاپگر برای تغییر مجموعه‌نویسه نیاز به اپراتور دارد
row_addr_glitch xvpa YD فقط حرکت مثبت برای قابلیت‌های vpa/mvpa
semi_auto_right_margin sam YE چاپ در آخرین ستون باعث بازگشت به ابتدای سطر (cr) می‌شود
cpi_changes_res cpix YF تغییر گام نویسه باعث تغییر وضوح می‌شود
lpi_changes_res lpix YG تغییر گام خط باعث تغییر وضوح می‌شود
Code
Numeric Capability Name TI TC Description
columns cols co تعداد ستون‌ها در یک سطر
init_tabs it it تب‌ها در ابتدا در هر # فاصله تنظیم می‌شوند
lines lines li تعداد خطوط روی صفحه یا برگه
lines_of_memory lm lm خطوط حافظه اگر > line باشد. ۰ یعنی متغیر است
magic_cookie_glitch xmc sg تعداد نویسه‌های خالی به‌جامانده توسط smso یا rmso
padding_baud_rate pb pb کمترین نرخ باد که در آن فاصله‌گذاری مورد نیاز است
virtual_terminal vt vt شمارهٔ پایانهٔ مجازی (CB/unix)
width_status_line wsl ws تعداد ستون‌ها در خط وضعیت
num_labels nlab Nl تعداد برچسب‌ها روی صفحه
label_height lh lh تعداد سطرها در هر برچسب
label_width lw lw تعداد ستون‌ها در هر برچسب
max_attributes ma ma حداکثر ویژگی‌های ترکیبی که پایانه می‌تواند مدیریت کند
maximum_windows wnum MW حداکثر تعداد پنجره‌های قابل‌تعریف
max_colors colors Co حداکثر تعداد رنگ‌ها روی صفحه
max_pairs pairs pa حداکثر تعداد جفت‌رنگ‌ها روی صفحه
no_color_video ncv NC ویژگی‌های ویدئویی که نمی‌توان با رنگ‌ها استفاده کرد

قابلیت‌های عددی زیر در ساختار term مربوط به SVr4.0 وجود دارند، اما هنوز در صفحهٔ راهنما مستند نشده‌اند. آن‌ها همراه با پشتیبانی چاپگر در SVr4 اضافه شدند.

Code
Numeric Capability Name TI TC Description
buffer_capacity bufsz Ya تعداد بایت‌های بافرشده پیش از چاپ
dot_vert_spacing spinv Yb فاصله‌گذاری پین‌ها به‌صورت عمودی بر حسب پین در اینچ
dot_horz_spacing spinh Yc فاصله‌گذاری نقطه‌ها به‌صورت افقی بر حسب نقطه در اینچ
max_micro_address maddr Yd حداکثر مقدار در micro_..._address
max_micro_jump mjump Ye حداکثر مقدار در parm_..._micro
micro_col_size mcs Yf اندازهٔ گام نویسه هنگام قرار داشتن در حالت ریز (micro)
micro_line_size mls Yg اندازهٔ گام خط هنگام قرار داشتن در حالت ریز (micro)
number_of_pins npins Yh تعداد پین‌ها در سرِ چاپگر
output_res_char orc Yi وضوح افقی بر حسب واحد در هر خط
output_res_line orl Yj وضوح عمودی بر حسب واحد در هر خط
output_res_horz_inch orhi Yk وضوح افقی بر حسب واحد در هر اینچ
output_res_vert_inch orvi Yl وضوح عمودی بر حسب واحد در هر اینچ
print_rate cps Ym نرخ چاپ بر حسب نویسه در ثانیه
wide_char_size widcs Yn اندازهٔ گام نویسه هنگام قرار داشتن در حالت پهن مضاعف
buttons btns BT تعداد دکمه‌های ماوس
bit_image_entwining bitwin Yo تعداد پاس‌ها برای هر ردیف تصویر بیتی
bit_image_type bitype Yp نوع دستگاه تصویر بیتی
Code
String Capability Name TI TC Description
back_tab cbt bt تب رو به عقب (P)
bell bel bl سیگنال صوتی (زنگ) (P)
carriage_return cr cr بازگشت به ابتدای سطر (P*) (P*)
change_scroll_region csr cs تغییر ناحیه به خط 1# تا خط 2# (P)
clear_all_tabs tbc ct پاک کردن تمام نقاط توقف تب (P)
clear_screen clear cl پاک کردن صفحه و انتقال مکان‌نما به مبدا (P*)
clr_eol el ce پاک کردن تا انتهای خط (P)
clr_eos ed cd پاک کردن تا انتهای صفحه (P*)
column_address hpa ch موقعیت افقی 1#، مطلق (P)
command_character cmdch CC نویسهٔ دستوری قابل‌تنظیم پایانه در پیش‌نمونه !?
cursor_address cup cm انتقال به سطر 1# ستون 2#
cursor_down cud1 do یک خط به پایین
cursor_home home ho مبدا مکان‌نما (اگر بدون cup باشد)
cursor_invisible civis vi نامرئی کردن مکان‌نما
cursor_left cub1 le یک فضا به چپ
cursor_mem_address mrcup CM آدرس‌دهی مکان‌نما وابسته به حافظه، انتقال به سطر 1# ستون 2#
cursor_normal cnorm ve بازگرداندن مکان‌نما به حالت عادی (لغو civis/cvvis)
cursor_right cuf1 nd یک فضا به راست
cursor_to_ll ll ll انتقال به گوشهٔ پایین سمت چپ
cursor_up cuu1 up یک خط به بالا
cursor_visible cvvis vs بسیار قابل‌مشاهده کردن مکان‌نما
delete_character dch1 dc حذف نویسه (P*)
delete_line dl1 dl حذف خط (P*)
dis_status_line dsl ds غیرفعال کردن خط وضعیت
down_half_line hd hd نیم خط به پایین
enter_alt_charset_mode smacs as آغاز مجموعه نویسهٔ جایگزین (P)
enter_blink_mode blink mb روشن کردن چشمک‌زن
enter_bold_mode bold md روشن کردن حالت پررنگ (bold)
enter_ca_mode smcup ti رشته برای آغاز برنامه‌هایی که از cup استفاده می‌کنند
enter_delete_mode smdc dm ورود به حالت حذف
enter_dim_mode dim mh روشن کردن حالت کم‌نور (dim)
enter_insert_mode smir im ورود به حالت درج
enter_secure_mode invis mk روشن کردن حالت امن (پنهان)
enter_protected_mode prot mp روشن کردن حالت حفاظت‌شده
enter_reverse_mode rev mr روشن کردن حالت ویدئوی معکوس
enter_standout_mode smso so آغاز حالت برجسته (standout)
enter_underline_mode smul us آغاز حالت زیرخط‌دار
erase_chars ech ec پاک کردن 1# نویسه (P)
exit_alt_charset_mode rmacs ae پایان مجموعه نویسهٔ جایگزین (P)
exit_attribute_mode sgr0 me خاموش کردن تمام ویژگی‌ها
exit_ca_mode rmcup te رشته برای پایان برنامه‌هایی که از cup استفاده می‌کنند
exit_delete_mode rmdc ed پایان حالت حذف
exit_insert_mode rmir ei پایان حالت درج
exit_standout_mode rmso se پایان حالت برجسته (standout)
exit_underline_mode rmul ue پایان حالت زیرخط‌دار
flash_screen flash vb فلش زدن قابل‌مشاهدهٔ صفحه (زنگ بصری)
form_feed ff ff تغذیهٔ برگه (form feed) سخت‌کپی (P*)
from_status_line fsl fs بازگشت از خط وضعیت
init_1string is1 i1 رشتهٔ مقداردهی اولیه پایانه
init_2string is2 is رشتهٔ مقداردهی اولیه پایانه
init_3string is3 i3 رشتهٔ مقداردهی اولیه پایانه
init_file if if نام پروندهٔ مقداردهی اولیه
insert_character ich1 ic درج نویسه (P)
insert_line il1 al درج سطر (P*)
insert_padding ip ip درج فاصله‌گذاری پس از نویسهٔ درج‌شده
key_backspace kbs kb کلید پس‌بر (backspace)
key_catab ktbc ka کلید پاک کردن تمام تب‌ها
key_clear kclr kC کلید پاک کردن صفحه یا محو کردن
key_ctab kctab kt کلید پاک کردن تب
key_dc kdch1 kD کلید حذف نویسه
key_dl kdl1 kL کلید حذف سطر
key_down kcud1 kd کلید پیکان پایین
key_eic krmir kM ارسال‌شده توسط rmir یا smir در حالت درج
key_eol kel kE کلید پاک کردن تا انتهای سطر
key_eos ked kS کلید پاک کردن تا انتهای صفحه
key_f0 kf0 k0 کلید تابعی F0
key_f1 kf1 k1 کلید تابعی F1
key_f10 kf10 k; کلید تابعی F10
key_f2 kf2 k2 کلید تابعی F2
key_f3 kf3 k3 کلید تابعی F3
key_f4 kf4 k4 کلید تابعی F4
key_f5 kf5 k5 کلید تابعی F5
key_f6 kf6 k6 کلید تابعی F6
key_f7 kf7 k7 کلید تابعی F7
key_f8 kf8 k8 کلید تابعی F8
key_f9 kf9 k9 کلید تابعی F9
key_home khome kh کلید مبدا (home)
key_ic kich1 kI کلید درج نویسه
key_il kil1 kA کلید درج سطر
key_left kcub1 kl کلید پیکان چپ
key_ll kll kH کلید پایین-چپ (مبدا پایین)
key_npage knp kN کلید صفحه بعد
key_ppage kpp kP کلید صفحه قبل
key_right kcuf1 kr کلید پیکان راست
key_sf kind kF کلید پیمایش به جلو
key_sr kri kR کلید پیمایش به عقب
key_stab khts kT کلید تنظیم تب
key_up kcuu1 ku کلید پیکان بالا
keypad_local rmkx ke خروج از حالت ارسال صفحه‌کلید عددی
keypad_xmit smkx ks ورود به حالت ارسال صفحه‌کلید عددی
lab_f0 lf0 l0 برچسب کلید تابعی f0 اگر روی کلید f0 نباشد
lab_f1 lf1 l1 برچسب کلید تابعی f1 اگر روی کلید f1 نباشد
lab_f10 lf10 la برچسب کلید تابعی f10 اگر روی کلید f10 نباشد
lab_f2 lf2 l2 برچسب کلید تابعی f2 اگر روی کلید f2 نباشد
lab_f3 lf3 l3 برچسب کلید تابعی f3 اگر روی کلید f3 نباشد
lab_f4 lf4 l4 برچسب کلید تابعی f4 اگر روی کلید f4 نباشد
lab_f5 lf5 l5 برچسب کلید تابعی f5 اگر روی کلید f5 نباشد
lab_f6 lf6 l6 برچسب کلید تابعی f6 اگر روی کلید f6 نباشد
lab_f7 lf7 l7 برچسب کلید تابعی f7 اگر روی کلید f7 نباشد
lab_f8 lf8 l8 برچسب کلید تابعی f8 اگر روی کلید f8 نباشد
lab_f9 lf9 l9 برچسب کلید تابعی f9 اگر روی کلید f9 نباشد
meta_off rmm mo خروج از حالت متا
meta_on smm mm ورود به حالت متا (بیت هشتم روشن)
newline nel nw خط جدید (مانند cr و lf)
pad_char pad pc نویسهٔ فاصله‌گذاری (به‌جای تهی)
parm_dch dch DC حذف 1# نویسه (P*)
parm_delete_line dl DL حذف 1# سطر (P*)
parm_down_cursor cud DO پایین بردن مکان‌نما به اندازهٔ 1# خط (P*)
parm_ich ich IC درج 1# نویسه (P*)
parm_index indn SF پیمایش به جلو به اندازهٔ 1# سطر (P)
parm_insert_line il AL درج 1# سطر (P*)
parm_left_cursor cub LE انتقال مکان‌نما به چپ به اندازهٔ 1# فضا (P*)
parm_right_cursor cuf RI انتقال مکان‌نما به راست به اندازهٔ 1# فضا (P*)
parm_rindex rin SR پیمایش به عقب به اندازهٔ 1# سطر (P)
parm_up_cursor cuu UP بالا بردن مکان‌نما به اندازهٔ 1# خط (P*)
pkey_key pfkey pk برنامه‌ریزی کلید تابعی 1# برای تایپ رشتهٔ 2#
pkey_local pfloc pl برنامه‌ریزی کلید تابعی 1# برای اجرای رشتهٔ 2# به‌صورت محلی
pkey_xmit pfx px برنامه‌ریزی کلید تابعی 1# برای ارسال رشتهٔ 2# به رایانه
print_screen mc0 ps چاپ محتویات صفحه
prtr_off mc4 pf خاموش کردن چاپگر
prtr_on mc5 po روشن کردن چاپگر
repeat_char rep rp تکرار نویسهٔ 1# به تعداد 2# بار (P*)
reset_1string rs1 r1 رشتهٔ بازنشانی پایانه
reset_2string rs2 r2 رشتهٔ بازنشانی پایانه
reset_3string rs3 r3 رشتهٔ بازنشانی پایانه
reset_file rf rf نام پروندهٔ بازنشانی پایانه
restore_cursor rc rc بازیابی موقعیت مکان‌نما به آخرین حالت ذخیره‌شده
row_address vpa cv موقعیت عمودی 1#، مطلق (P)
save_cursor sc sc ذخیرهٔ موقعیت فعلی مکان‌نما (P)
scroll_forward ind sf پیمایش متن به بالا (P)
scroll_reverse ri sr پیمایش متن به پایین (P)
set_attributes sgr sa تعریف ویژگی‌های ویدئویی 1# تا 9# (PG9)
set_tab hts st تنظیم تب در هر سطر، ستون‌های جاری
set_window wind wi پنجرهٔ جاری خطوط 1#-2# ستون‌های 3#-4# است
tab ht ta تب به نقطهٔ توقف تب بعدی
to_status_line tsl ts رفتن به خط وضعیت، ستون 1#
underline_char uc uc زیرخط‌دار کردن نویسهٔ جاری و حرکت به راست
up_half_line hu hu نیم خط به بالا
init_prog iprog iP مسیر برنامه برای مقداردهی اولیه
key_a1 ka1 K1 بالا سمت چپ صفحه‌کلید عددی
key_a3 ka3 K3 بالا سمت راست صفحه‌کلید عددی
key_b2 kb2 K2 مرکز صفحه‌کلید عددی
key_c1 kc1 K4 پایین سمت چپ صفحه‌کلید عددی
key_c3 kc3 K5 پایین سمت راست صفحه‌کلید عددی
prtr_non mc5p pO روشن کردن چاپگر به اندازهٔ 1# بایت
char_padding rmp rP مانند ip اما هنگام عدم قرارگیری در حالت درج
acs_chars acsc ac جفت‌نویسه‌های گرافیکی که به نویسه‌های acs نگاشت می‌شوند
plab_norm pln pn برنامه‌ریزی برچسب 1# برای نمایش رشتهٔ 2#
key_btab kcbt kB کلید تب رو به عقب
enter_xon_mode smxon SX روشن کردن کنترل جریان xon/xoff
exit_xon_mode rmxon RX خاموش کردن کنترل جریان xon/xoff
enter_am_mode smam SA روشن کردن حاشیه‌های خودکار
exit_am_mode rmam RA خاموش کردن حاشیه‌های خودکار
xon_character xonc XN نویسهٔ XON
xoff_character xoffc XF نویسهٔ XOFF
ena_acs enacs eA فعال‌سازی مجموعه نویسهٔ جایگزین
label_on smln LO روشن کردن برچسب‌های نرم (soft labels)
label_off rmln LF خاموش کردن برچسب‌های نرم
key_beg kbeg @1 کلید شروع (begin)
key_cancel kcan @2 کلید لغو (cancel)
key_close kclo @3 کلید بستن (close)
key_command kcmd @4 کلید دستور (command)
key_copy kcpy @5 کلید رونوشت (copy)
key_create kcrt @6 کلید ایجاد (create)
key_end kend @7 کلید پایان (end)
key_enter kent @8 کلید ورود/ارسال (enter/send)
key_exit kext @9 کلید خروج (exit)
key_find kfnd @0 کلید جستجو (find)
key_help khlp %1 کلید راهنما (help)
key_mark kmrk %2 کلید علامت‌گذاری (mark)
key_message kmsg %3 کلید پیام (message)
key_move kmov %4 کلید انتقال (move)
key_next knxt %5 کلید بعدی (next)
key_open kopn %6 کلید باز کردن (open)
key_options kopt %7 کلید گزینه‌ها (options)
key_previous kprv %8 کلید قبلی (previous)
key_print kprt %9 کلید چاپ (print)
key_redo krdo %0 کلید انجام مجدد (redo)
key_reference kref &1 کلید مرجع (reference)
key_refresh krfr &2 کلید بازآوری (refresh)
key_replace krpl &3 کلید جایگزینی (replace)
key_restart krst &4 کلید راه‌اندازی مجدد (restart)
key_resume kres &5 کلید ازسرگیری (resume)
key_save ksav &6 کلید ذخیره (save)
key_suspend kspd &7 کلید تعلیق (suspend)
key_undo kund &8 کلید واگرد (undo)
key_sbeg kBEG &9 کلید شروع تبدیل‌شده (shifted begin)
key_scancel kCAN &0 کلید لغو تبدیل‌شده (shifted cancel)
key_scommand kCMD *1 کلید دستور تبدیل‌شده (shifted command)
key_scopy kCPY *2 کلید رونوشت تبدیل‌شده (shifted copy)
key_screate kCRT *3 کلید ایجاد تبدیل‌شده (shifted create)
key_sdc kDC *4 کلید حذف نویسهٔ تبدیل‌شده (shifted delete-character)
key_sdl kDL *5 کلید حذف سطر تبدیل‌شده (shifted delete-line)
key_select kslt *6 کلید انتخاب (select)
key_send kEND *7 کلید پایان تبدیل‌شده (shifted end)
key_seol kEOL *8 کلید پاک‌کردن تا انتهای سطر تبدیل‌شده
key_sexit kEXT *9 کلید خروج تبدیل‌شده (shifted exit)
key_sfind kFND *0 کلید جستجوی تبدیل‌شده (shifted find)
key_shelp kHLP #1 کلید راهنمای تبدیل‌شده (shifted help)
key_shome kHOM #2 کلید مبدا تبدیل‌شده (shifted home)
key_sic kIC #3 کلید درج نویسهٔ تبدیل‌شده (shifted insert-character)
key_sleft kLFT #4 کلید پیکان چپ تبدیل‌شده (shifted left-arrow)
key_smessage kMSG %a کلید پیام تبدیل‌شده (shifted message)
key_smove kMOV %b کلید انتقال تبدیل‌شده (shifted move)
key_snext kNXT %c کلید بعدی تبدیل‌شده (shifted next)
key_soptions kOPT %d کلید گزینه‌های تبدیل‌شده (shifted options)
key_sprevious kPRV %e کلید قبلی تبدیل‌شده (shifted previous)
key_sprint kPRT %f کلید چاپ تبدیل‌شده (shifted print)
key_sredo kRDO %g کلید انجام مجدد تبدیل‌شده (shifted redo)
key_sreplace kRPL %h کلید جایگزینی تبدیل‌شده (shifted replace)
key_sright kRIT %i کلید پیکان راست تبدیل‌شده (shifted right-arrow)
key_srsume kRES %j کلید ازسرگیری تبدیل‌شده (shifted resume)
key_ssave kSAV !1 کلید ذخیرهٔ تبدیل‌شده (shifted save)
key_ssuspend kSPD !2 کلید تعلیق تبدیل‌شده (shifted suspend)
key_sundo kUND !3 کلید واگرد تبدیل‌شده (shifted undo)
req_for_input rfi RF ارسال پاسخ کد وضعیت بعدی به ترمینال
key_f11 kf11 F1 کلید تابعی F11
key_f12 kf12 F2 کلید تابعی F12
key_f13 kf13 F3 کلید تابعی F13
key_f14 kf14 F4 کلید تابعی F14
key_f15 kf15 F5 کلید تابعی F15
key_f16 kf16 F6 کلید تابعی F16
key_f17 kf17 F7 کلید تابعی F17
key_f18 kf18 F8 کلید تابعی F18
key_f19 kf19 F9 کلید تابعی F19
key_f20 kf20 FA کلید تابعی F20
key_f21 kf21 FB کلید تابعی F21
key_f22 kf22 FC کلید تابعی F22
key_f23 kf23 FD کلید تابعی F23
key_f24 kf24 FE کلید تابعی F24
key_f25 kf25 FF کلید تابعی F25
key_f26 kf26 FG کلید تابعی F26
key_f27 kf27 FH کلید تابعی F27
key_f28 kf28 FI کلید تابعی F28
key_f29 kf29 FJ کلید تابعی F29
key_f30 kf30 FK کلید تابعی F30
key_f31 kf31 FL کلید تابعی F31
key_f32 kf32 FM کلید تابعی F32
key_f33 kf33 FN کلید تابعی F33
key_f34 kf34 FO کلید تابعی F34
key_f35 kf35 FP کلید تابعی F35
key_f36 kf36 FQ کلید تابعی F36
key_f37 kf37 FR کلید تابعی F37
key_f38 kf38 FS کلید تابعی F38
key_f39 kf39 FT کلید تابعی F39
key_f40 kf40 FU کلید تابعی F40
key_f41 kf41 FV کلید تابعی F41
key_f42 kf42 FW کلید تابعی F42
key_f43 kf43 FX کلید تابعی F43
key_f44 kf44 FY کلید تابعی F44
key_f45 kf45 FZ کلید تابعی F45
key_f46 kf46 Fa کلید تابعی F46
key_f47 kf47 Fb کلید تابعی F47
key_f48 kf48 Fc کلید تابعی F48
key_f49 kf49 Fd کلید تابعی F49
key_f50 kf50 Fe کلید تابعی F50
key_f51 kf51 Ff کلید تابعی F51
key_f52 kf52 Fg کلید تابعی F52
key_f53 kf53 Fh کلید تابعی F53
key_f54 kf54 Fi کلید تابعی F54
key_f55 kf55 Fj کلید تابعی F55
key_f56 kf56 Fk کلید تابعی F56
key_f57 kf57 Fl کلید تابعی F57
key_f58 kf58 Fm کلید تابعی F58
key_f59 kf59 Fn کلید تابعی F59
key_f60 kf60 Fo کلید تابعی F60
key_f61 kf61 Fp کلید تابعی F61
key_f62 kf62 Fq کلید تابعی F62
key_f63 kf63 Fr کلید تابعی F63
clr_bol el1 cb پاک کردن تا ابتدای خط
clear_margins mgc MC پاک کردن حاشیه‌های چپ و راست نرم
set_left_margin smgl ML تنظیم حاشیهٔ نرم چپ در ستون جاری (در BSD termcap وجود ندارد)
set_right_margin smgr MR تنظیم حاشیهٔ نرم راست در ستون جاری
label_format fln Lf قالب برچسب
set_clock sclk SC تنظیم ساعت به زمان 1# ساعت، 2# دقیقه، 3# ثانیه
display_clock dclk DK نمایش ساعت
remove_clock rmclk RC حذف ساعت
create_window cwin CW تعریف پنجرهٔ 1# از 2#,3# تا 4#,5#
goto_window wingo WG رفتن به پنجرهٔ 1#
hangup hup HU قطع تماس تلفنی
dial_phone dial DI شماره‌گیری تلفن 1#
quick_dial qdial QD شماره‌گیری سریع تلفن 1#
tone tone TO انتخاب شماره‌گیری تن
pulse pulse PU انتخاب شماره‌گیری پالسی
flash_hook hook fh فلش قلاب تلفن
fixed_pause pause PA مکث به مدت ۲-۳ ثانیه
wait_tone wait WA انتظار برای تن شماره‌گیری
user0 u0 u0 رشتهٔ کاربر شماره ۰
user1 u1 u1 رشتهٔ کاربر شماره ۱
user2 u2 u2 رشتهٔ کاربر شماره ۲
user3 u3 u3 رشتهٔ کاربر شماره ۳
user4 u4 u4 رشتهٔ کاربر شماره ۴
user5 u5 u5 رشتهٔ کاربر شماره ۵
user6 u6 u6 رشتهٔ کاربر شماره ۶
user7 u7 u7 رشتهٔ کاربر شماره ۷
user8 u8 u8 رشتهٔ کاربر شماره ۸
user9 u9 u9 رشتهٔ کاربر شماره ۹
orig_pair op op بازنشانی جفت‌رنگ پیش‌فرض به مقادیر اصلی
orig_colors oc oc بازنشانی تمام رنگ‌ها به مقادیر اصلی
initialize_color initc Ic مقداردهی اولیه رنگ 1# به مقادیر (2#,3#,4#)
initialize_pair initp Ip مقداردهی اولیه جفت‌رنگ 1# به پیش‌زمینه=(2#,3#,4#) و پس‌زمینه=(5#,6#,7#)
set_color_pair scp sp تنظیم جفت‌رنگ جاری روی 1#
set_foreground setf Sf تنظیم رنگ پیش‌زمینه 1#
set_background setb Sb تنظیم رنگ پس‌زمینه 1#
change_char_pitch cpi ZA تغییر تعداد نویسه‌ها در هر اینچ به 1#
change_line_pitch lpi ZB تغییر تعداد خطوط در هر اینچ به 1#
change_res_horz chr ZC تغییر وضوح افقی به 1#
change_res_vert cvr ZD تغییر وضوح عمودی به 1#
define_char defc ZE تعریف یک نویسهٔ 1# به پهنای 2# نقطه، با پایین‌آمدگی 3#
enter_doublewide_mode swidm ZF ورود به حالت پهن مضاعف (double-wide)
enter_draft_quality sdrfq ZG ورود به کیفیت پیش‌نویس (draft)
enter_italics_mode sitm ZH فعال‌سازی حالت ایتالیک
enter_leftward_mode slm ZI فعال‌سازی حرکت به چپ
enter_micro_mode smicm ZJ فعال‌سازی حرکت ریز (micro)
enter_near_letter_quality snlq ZK ورود به کیفیت نزدیک به نامه (NLQ)
enter_normal_quality snrmq ZL ورود به کیفیت معمولی
enter_shadow_mode sshm ZM فعال‌سازی چاپ سایه‌دار
enter_subscript_mode ssubm ZN فعال‌سازی حالت زیرنویس
enter_superscript_mode ssupm ZO فعال‌سازی حالت بالانویس
enter_upward_mode sum ZP فعال‌سازی حرکت به بالا
exit_doublewide_mode rwidm ZQ خروج از حالت پهن مضاعف
exit_italics_mode ritm ZR خروج از حالت ایتالیک
exit_leftward_mode rlm ZS خروج از حالت حرکت به چپ
exit_micro_mode rmicm ZT خروج از حالت حرکت ریز (micro)
exit_shadow_mode rshm ZU خروج از چاپ سایه‌دار
exit_subscript_mode rsubm ZV خروج از حالت زیرنویس
exit_superscript_mode rsupm ZW خروج از حالت بالانویس
exit_upward_mode rum ZX خروج از حالت حرکت به بالا
micro_column_address mhpa ZY مانند column_address در حالت ریز
micro_down mcud1 ZZ مانند cursor_down در حالت ریز
micro_left mcub1 Za مانند cursor_left در حالت ریز
micro_right mcuf1 Zb مانند cursor_right در حالت ریز
micro_row_address mvpa Zc مانند row_address در حالت ریز
micro_up mcuu1 Zd مانند cursor_up در حالت ریز
order_of_pins porder Ze تطابق پین‌ها در سر چاپگر با بیت‌ها در بایت
parm_down_micro mcud Zf مانند parm_down_cursor در حالت ریز
parm_left_micro mcub Zg مانند parm_left_cursor در حالت ریز
parm_right_micro mcuf Zh مانند parm_right_cursor در حالت ریز
parm_up_micro mcuu Zi مانند parm_up_cursor در حالت ریز
select_char_set scs Zj انتخاب مجموعه‌نویسه، 1#
set_bottom_margin smgb Zk تنظیم حاشیهٔ پایین در خط جاری
set_bottom_margin_parm smgbp Zl تنظیم حاشیه پایین در خط 1# یا (در صورت مشخص نشدن smgtp) به اندازهٔ 2# خط از پایین
set_left_margin_parm smglp Zm تنظیم حاشیهٔ چپ در ستون 1#
set_right_margin_parm smgrp Zn تنظیم حاشیهٔ راست در ستون 1#
set_top_margin smgt Zo تنظیم حاشیهٔ بالا در سطر جاری
set_top_margin_parm smgtp Zp تنظیم حاشیه بالا در خط 1#
start_bit_image sbim Zq آغاز تصویر بیتی در حالت 1#
start_char_set_def scsd Zr آغاز تعریف مجموعه‌نویسهٔ 1#، با 2# نویسه در مجموعه
stop_bit_image rbim Zs توقف تصویر بیتی
stop_char_set_def rcsd Zt پایان تعریف مجموعه‌نویسهٔ 1#
subscript_characters subcs Zu فهرست نویسه‌های زیرنویس
superscript_characters supcs Zv فهرست نویسه‌های بالانویس
these_cause_cr docr Zw چاپ هر یک از این نویسه‌ها باعث بازگشت به ابتدای سطر (cr) می‌شود
zero_motion zerom Zx بدون حرکت برای چاپ نویسهٔ بعدی

قابلیت‌های رشته‌ای زیر در ساختار term مربوط به SVr4.0 وجود دارند، اما در ابتدا در صفحهٔ راهنما مستند نشده بودند.

Code
String Capability Name TI TC Description
char_set_names csnm Zy تولید مورد 1#ـم از فهرست نام‌های مجموعه‌نویسه
key_mouse kmous Km رویداد ماوس رخ داده است
mouse_info minfo Mi کد وضعیت ماوس خوانده شده است
req_mouse_pos reqmp RQ درخواست موقعیت ماوس
get_mouse getm Gm curses باید رویدادهای دکمه ماوس را دریافت کند؛ پارامتر 1# مستند نشده است
set_a_foreground setaf AF تنظیم رنگ پیش‌زمینه به 1#، با استفاده از گریز ANSI
set_a_background setab AB تنظیم رنگ پس‌زمینه به 1#، با استفاده از گریز ANSI
pkey_plab pfxl xl برنامه‌ریزی کلید تابعی 1# برای تایپ رشتهٔ 2# و نمایش رشتهٔ 3#
device_type devt dv نشان‌دهندهٔ پشتیبانی از زبان و مجموعه‌کد
code_set_init csin ci توالی مقداردهی اولیه برای چندین مجموعه‌کد
set0_des_seq s0ds s0 تغییر به مجموعه‌کد ۰ (مجموعه EUC 0، اسکی)
set1_des_seq s1ds s1 تغییر به مجموعه‌کد ۱
set2_des_seq s2ds s2 تغییر به مجموعه‌کد ۲
set3_des_seq s3ds s3 تغییر به مجموعه‌کد ۳
set_lr_margin smglr ML تنظیم هر دو حاشیهٔ چپ و راست روی 1# و 2#. (ML در termcap بی‌اس‌دی وجود ندارد)
set_tb_margin smgtb MT تنظیم هر دو حاشیهٔ بالا و پایین روی 1# و 2#
bit_image_repeat birep Xy تکرار سلول تصویر بیتی 1# به تعداد 2# بار
bit_image_newline binel Zz حرکت به ردیف تصویر بیتی بعدی
bit_image_carriage_return bicr Yv حرکت به ابتدای ردیف تصویر بیتی جاری
color_names colornm Yw ارائهٔ مورد 1#ـم از فهرست نام‌های رنگ
define_bit_image_region defbi Yx تعریف ناحیه مستطیلی تصویر بیتی
end_bit_image_region endbi Yy پایان ناحیه مستطیلی تصویر بیتی
set_color_band setcolor Yz تغییر به نوار روبان شماره 1#
set_page_length slines YZ تنظیم طول صفحه به 1# خط
display_pc_char dispc S1 نمایش نویسهٔ PC 1#
enter_pc_charset_mode smpch S2 ورود به حالت مجموعه‌نویسهٔ PC
exit_pc_charset_mode rmpch S3 خروج از حالت مجموعه‌نویسهٔ PC
enter_scancode_mode smsc S4 ورود به حالت کد اسکن (scancode)
exit_scancode_mode rmsc S5 خروج از حالت کد اسکن
pc_term_options pctrm S6 گزینه‌های پایانهٔ PC
scancode_escape scesc S7 پیشوند گریز برای کد اسکن
alt_scancode_esc scesa S8 پیشوند گریز متناوب برای کد اسکن

استاندارد XSI Curses این قابلیت‌های نسخهٔ چاپی سخت (hardcopy) را اضافه کرد. آن‌ها در برخی از نسخه‌های بعد از 4.1 از curses متعلق به System V استفاده می‌شدند، مانند Solaris 2.5 و IRIX 6.x. به جز YI، نام‌های termcap در ncurses برای آن‌ها ابداعی است. طبق استاندارد XSI Curses، آن‌ها هیچ نام termcapای ندارند. اگر ورودی‌های terminfo کامپایل‌شدهٔ شما از این موارد استفاده کنند، ممکن است با ورودی‌های terminfo در System V پس از SVr4.1 سازگاری باینری نداشته باشند؛ مراقب باشید!

Code
String Capability Name TI TC Description
enter_horizontal_hl_mode ehhlm Xh ورود به حالت برجسته‌سازی افقی
enter_left_hl_mode elhlm Xl ورود به حالت برجسته‌سازی چپ
enter_low_hl_mode elohlm Xo ورود به حالت برجسته‌سازی پایین
enter_right_hl_mode erhlm Xr ورود به حالت برجسته‌سازی راست
enter_top_hl_mode ethlm Xt ورود به حالت برجسته‌سازی بالا
enter_vertical_hl_mode evhlm Xv ورود به حالت برجسته‌سازی عمودی
set_a_attributes sgr1 sA تعریف مجموعهٔ دوم ویژگی‌های ویدئویی 1# تا 6#
set_pglen_inch slength YI تنظیم طول صفحه به اندازهٔ 1# صدم اینچ (برخی پیاده‌سازی‌ها از sL برای termcap استفاده می‌کنند)

بخش پیشین قابلیت‌های استاندارد را فهرست کرد. برخی از آن‌ها تخصصی هستند، و از قابلیت‌هایی پشتیبانی می‌کنند که شبیه‌سازهای پایانه آن‌ها را پیاده‌سازی نمی‌کنند، یا ممکن است هرگز در سخت‌افزارهای تولیدشده تحقق نیافته باشند. گاهی اوقات، شبیه‌سازها ویژگی‌های خاصی دارند که نمایش آن‌ها با استفاده از قابلیت‌های استاندارد، دشوار یا ناممکن است.

ncurses این محدودیت را با امکان‌پذیر ساختن قابلیت‌های تعریف‌شده توسط کاربر برطرف می‌کند. برنامه‌های tic و infocmp گزینهٔ -x را برای این منظور ارائه می‌دهند. هنگامی که -x به کار می‌رود، tic با قابلیت‌های ناشناخته به عنوان قابلیت‌های تعریف‌شده توسط کاربر رفتار می‌کند. به این معنا که اگر tic با نام قابلیتی روبرو شود که آن را بازنمی‌شناسد، برنامه نوع قابلیت (بولی، عددی، یا رشته‌ای) را از نحو مقدار قابلیت استنباط کرده و یک مدخل جدول گسترش‌یافته برای آن قابلیت می‌سازد. use_extended_names(3X) این اطلاعات را به صورت مشروط در دسترس برنامه‌ها قرار می‌دهد. توابع کتابخانهٔ ncurses داده‌های قابلیت را در اختیار فراخوان‌ها قرار می‌دهند، که تفسیر آن‌ها تا حد زیادی بر عهدهٔ برنامهٔ کاربردی است.

  • ncurses با قابلیت‌های رشته‌ای تعریف‌شده توسط کاربر که نام آن‌ها با “k” آغاز می‌شود به عنوان کلیدهای تابع رفتار می‌کند.
  • انواع قابلیت (بولی، عددی، یا رشته‌ای) که توسط tic تعیین می‌شوند، می‌توانند از طریق فراخوانی‌های موفق tigetflag(3X)، tigetnum(3X) و tigetstr(3X) استنباط شوند.
  • اگر نام قابلیت تصادفاً دو نویسه‌ای باشد، آن قابلیت از طریق واسط termcap نیز در دسترس خواهد بود.

اگرچه گفته می‌شود termcap گسترش‌پذیر است زیرا هیچ قابلیتی را تحمیل نمی‌کند، اما در عمل به مواردی محدود شده است که توسط پیاده‌سازی‌های terminfo تعریف شده‌اند. به عنوان یک قاعده، تنها قابلیت‌های تعریف‌شده توسط کاربر از نوع بولی و عددی را با برنامه‌های termcap به کار ببرید تا از سرریز شدن حد ۱۰۲۳ بایتی که توسط پیاده‌سازی‌های termcap و برنامه‌های آن‌ها فرض می‌شود، جلوگیری گردد. به‌ویژه، پشتیبانی از مجموعه‌های گسترش‌یافتهٔ کلیدهای تابع (فراتر از ۶۰ کلید شماره‌دار و اندک کلیدهای با نام خاص) بهتر است با نام‌های طولانی‌تر موجود در terminfo انجام پذیرد.

کتابخانهٔ ncurses از تعداد اندکی از این قابلیت‌های تعریف‌شده توسط کاربر استفاده می‌کند، همان‌طور که در user_caps(5) شرح داده شده است. برای سایر قابلیت‌های تعریف‌شده توسط کاربر، از جمله کلیدهای تابع، به فرم منبع پایگاه داده پایانه، یعنی terminfo.src، زیر عنوان “NCURSES USER-DEFINABLE CAPABILITIES” مراجعه کنید.

ورودی زیر که یک پایانهٔ استاندارد ANSI X3.64- (یا ECMA-48-) (از این پس برای اختصار “استاندارد ANSI”) را توصیف می‌کند، نمونه‌ای شاخص از شکل ظاهری معمول یک ورودی terminfo برای یک پایانهٔ مدرن است.

ansi|ansi/pc-term compatible with color,
        am, mc5i, mir, msgr,
        colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
        acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260
             j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303
             u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
        bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
        cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
        cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
        cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
        dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
        el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=\E[I, hts=\EH,
        ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
        indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
        kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
        mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, op=\E[39;49m,
        rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rin=\E[%p1%dT,
        rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m,
        s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
        setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
        sgr=\E[0;10%?%p1%t;7%;
                   %?%p2%t;4%;
                   %?%p3%t;7%;
                   %?%p4%t;5%;
                   %?%p6%t;1%;
                   %?%p7%t;8%;
                   %?%p9%t;11%;m,
        sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m,
        smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
        u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

ورودی‌ها می‌توانند با قرار دادن فاصلهٔ خالی در ابتدای هر سطر به جز سطر نخست، در چندین سطر ادامه یابند. توضیحات (کامنت‌ها) را می‌توان در سطرهایی که با “#” آغاز می‌شوند گنجاند. قابلیت‌ها در terminfo بر سه نوع هستند:

  • قابلیت‌های بولی که نشان می‌دهند پایانه دارای یک ویژگی به خصوص است،
  • قابلیت‌های عددی که اندازهٔ پایانه یا اندازهٔ تأخیرهای خاص را مشخص می‌کنند، و
  • قابلیت‌های رشته‌ای که توالی‌ای را ارائه می‌دهند که می‌توان برای انجام عملیات به خصوص پایانه از آن استفاده کرد.

همهٔ قابلیت‌ها دارای نام هستند. برای نمونه، این واقعیت که پایانه‌های استاندارد ANSI دارای حاشیه‌های خودکار (automatic margins) (یعنی بازگشت سطر و سطرجدید خودکار با رسیدن به انتهای سطر) هستند، با قابلیت am مشخص می‌شود. از این رو توصیف ansi شامل am است. قابلیت‌های عددی با نویسهٔ “#” و سپس یک مقدار مثبت دنبال می‌شوند. بدین ترتیب، cols که تعداد ستون‌های پایانه را نشان می‌دهد، مقدار “80” را برای ansi مشخص می‌کند. مقادیر قابلیت‌های عددی را می‌توان بر اساس قراردادهای زبان برنامه‌نویسی C به صورت ده‌دهی، هشت‌هشتی، یا شانزده‌شانزدهی (مانند 255، 0377 و 0xff یا 0xFF) مشخص کرد.

در نهایت، قابلیت‌های با مقدار رشته‌ای، مانند el (دنبالهٔ پاک‌کردن تا انتهای سطر) با کد دو نویسه‌ای، یک “=”، و سپس رشته‌ای که به کامای بعدی “,” ختم می‌شود، مشخص می‌گردند.

تعدادی توالی گریز در قابلیت‌های با مقدار رشته‌ای برای کدگذاری آسان نویسه‌ها در آن ارائه شده است:

  • هر دو مورد \E و \e به یک نویسهٔ ESCAPE نگاشت می‌شوند،
  • ^x به یک control-x برای هر x مناسب نگاشت می‌شود، و
  • توالی‌های

\n، \l، \r، \t، \b، \f، و \s

تولیدکنندهٔ

newline، line-feed، return، tab، backspace، form-feed، و space

به ترتیب هستند.

استاندارد X/Open Curses مشخص نمی‌کند که “x مناسب” چه چیزی می‌تواند باشد. در عمل، آن یک نویسهٔ گرافیکی اسکی چاپ‌پذیر است. حالت خاص “^?” به عنوان DEL (127) تفسیر می‌شود. در تمامی حالات دیگر، مقدار نویسه به صورت منطقی با 0x1f عملیات “and” می‌شود، و به کدهای کنترلی اسکی در محدودهٔ ۰ تا ۳۱ نگاشت می‌گردد.

سایر گریزها عبارتند از:

  • \^ برای ^،
  • \\ برای \،
  • \, برای کاما،
  • \: برای :،
  • و \0 برای تهی (null).
\0 مقدار \200 را تولید می‌کند، که رشته را پایان نمی‌دهد اما در بیشتر پایانه‌ها در صورت مشخص بودن CS7، مانند یک نویسهٔ null رفتار می‌کند. به stty(1) مراجعه کنید.
دلیل این رفتار خاص، حفظ سازگاری باینری فایل‌های کامپایل‌شدهٔ terminfo با سایر پیاده‌سازی‌ها است؛ برای نمونه سیستم‌های SVr4 که این مورد را مستند کرده‌اند. فایل‌های کامپایل‌شدهٔ terminfo از رشته‌های با پایان تهی (null-terminated)، بدون طول مشخص استفاده می‌کنند. اصلاح این مورد نیازمند قالب باینری جدیدی بود، که با سایر پیاده‌سازی‌ها کار نمی‌کرد.

در نهایت، نویسه‌ها را می‌توان به صورت سه رقم هشت‌هشتی پس از یک \ مشخص کرد.

یک تأخیر بر حسب میلی‌ثانیه می‌تواند در هر جای یک قابلیت رشته‌ای، درون براکت‌های $<..> ظاهر شود، مانند el=\EK$<5>، و نویسه‌های لایی (padding) توسط tputs(3X) برای تأمین این تأخیر فراهم می‌شوند.

  • تأخیر باید عددی با حداکثر یک رقم اعشار باشد؛ ممکن است پسوندهای “*” یا “/” یا هر دو را به دنبال داشته باشد.
  • یک “*” نشان می‌دهد که لایه‌گذاری (padding) مورد نیاز متناسب با تعداد سطرهای تحت تأثیر عملیات است، و مقدار داده‌شده، لایه‌گذاری مورد نیاز به ازای هر واحدِ تحت تأثیر است. (در مورد نویسهٔ درج، این ضریب همچنان تعداد سطرهای تحت تأثیر است.)
به طور معمول، اگر دستگاه دارای قابلیت xon باشد، لایه‌گذاری جنبهٔ توصیه‌ای دارد؛ برای محاسبهٔ هزینه استفاده می‌شود اما موجب ایجاد تأخیر نمی‌گردد.
•
یک پسوند “/” نشان می‌دهد که لایه‌گذاری اجباری است و تأخیری به میزان میلی‌ثانیهٔ داده‌شده را تحمیل می‌کند، حتی روی دستگاه‌هایی که xon برای نشان دادن کنترل جریان در آن‌ها وجود دارد.

گاهی اوقات باید قابلیت‌های منفرد را به صورت نظر (توضیح) درآورد. برای این کار، یک نقطه پیش از نام قابلیت قرار دهید. برای نمونه، به دومین ind در مثال بالا نگاه کنید.

شرح‌های پایانه در ncurses در پایگاه‌های دادهٔ پایانه ذخیره می‌شوند. این پایگاه‌های داده که با نام مسیرشان پیدا می‌شوند، ممکن است به صورت درخت‌های دایرکتوری یا پایگاه‌های دادهٔ درهم‌سازی‌شده (hashed) پیکربندی شده باشند (به term(5) نگاه کنید)،

کتابخانه از فهرستی از نام‌های مسیر که در هنگام کامپایل درون آن تعبیه شده استفاده می‌کند، که می‌توان آن‌ها را توسط متغیرهای محیطی بازنویسی (override) کرد. پیش از آغاز جستجو، ncurses فهرست جستجو را بررسی می‌کند، و موارد تکراری و مسیرهایی را که هیچ پایگاه داده پایانه‌ای در آن‌ها یافت نمی‌شود، حذف می‌نماید. کتابخانهٔ ncurses نخستین شرحی را که از آزمون‌های سازگاری‌اش با موفقیت بگذرد، می‌خواند.

  • ابتدا متغیر محیطی TERMINFO برای یافتن یک پایگاه داده پایانهٔ حاوی شرح پایانه بررسی می‌شود.
  • سپس، ncurses در $HOME/.terminfo به دنبال یک شرح کامپایل‌شده می‌گردد.
این یک ویژگی اختیاری است که ممکن است به طور کامل از کتابخانه حذف شده باشد، یا برای جلوگیری از استفادهٔ تصادفی توسط برنامه‌های ممتاز محدود شده باشد.
•
سپس، اگر متغیر محیطی TERMINFO_DIRS تنظیم شده باشد، ncurses محتوای آن متغیر را به عنوان فهرستی از مسیرهای پایگاه‌های داده پایانه جداشده با دونقطه برای جستجو تفسیر می‌کند.
یک نام مسیر خالی (یعنی اگر متغیر با یک دونقطه آغاز شود یا پایان یابد، یا حاوی دونقطه‌های مجاور باشد) به عنوان مکان سیستمی /usr/share/terminfo تفسیر می‌شود.
•
در نهایت، ncurses این مکان‌های تعبیه‌شده در زمان کامپایل را جستجو می‌کند:
  • فهرستی از دایرکتوری‌ها (/usr/share/terminfo)، و
  • دایرکتوری سیستمی terminfo، یعنی /usr/share/terminfo

متغیر TERMINFO می‌تواند به جای نام مسیر یک پایگاه داده پایانه، مستقیماً حاوی شرح پایانه باشد. اگر این متغیر با “hex:” یا “b64:” آغاز شود، آنگاه ncurses شرح پایانه را از داده‌های کدگذاری‌شده با هگزادسیمال یا base64 می‌خواند، و اگر آن شرح با نام مورد نظر مطابقت داشته باشد، از آن استفاده خواهد کرد. این داده‌های کدگذاری‌شده را می‌توان با استفاده از گزینهٔ “-Q” در tic یا infocmp تنظیم کرد.

مطالب پیشین به پیکربندی معمول ncurses مربوط می‌شود، که از شرح‌های پایانهٔ آماده‌شده در قالب terminfo استفاده می‌کند. اگرچه termcap بیانگری کمتری دارد، ncurses می‌تواند برای خواندن شرح‌های termcap نیز پیکربندی شود. در آن پیکربندی، این کتابخانه متغیرهای TERMCAP و TERMPATH را (به ترتیب برای محتوا و مسیر جستجو) پس از پایگاه داده پایانهٔ سیستم بررسی می‌کند.

اکنون چگونگی آماده‌سازی شرح‌های پایانه‌ها را به طور خلاصه شرح می‌دهیم. کارآمدترین راه برای آماده‌سازی یک شرح پایانه، تقلید از شرح یک پایانهٔ مشابه در terminfo و ساخت تدریجی یک شرح با استفاده از شرح‌های جزئی در کنار vi یا برنامه‌ای دیگر از برنامه‌های مبتنی بر صفحه برای بررسی درستی آن‌هاست. آگاه باشید که یک پایانهٔ بسیار نامتعارف ممکن است کمبودهای موجود در توانایی فایل terminfo برای توصیف آن، یا اشکالات موجود در کد مدیریت صفحهٔ برنامهٔ آزمایش را آشکار سازد.

برای تنظیم دقیق لایه‌گذاری (padding) مربوط به سطر درج (insert line) (اگر سازندهٔ پایانه آن را مستند نکرده باشد)، یک آزمون دشوار این است که فایلی بزرگ را با سرعت ۹۶۰۰ باود ویرایش کنید، حدود ۱۶ سطر را از میانهٔ صفحه حذف کنید، و سپس کلید “u” را چندین بار به سرعت فشار دهید. اگر پایانه به هم ریخت، معمولاً به لایه‌گذاری بیشتری نیاز است. آزمون مشابهی را می‌توان برای نویسهٔ درج (insert character) به کار برد.

تعداد ستون‌ها در هر سطر برای پایانه با قابلیت عددی cols مشخص می‌شود. اگر پایانه یک CRT باشد، آنگاه تعداد سطرهای روی صفحه با قابلیت lines مشخص می‌شود. اگر پایانه با رسیدن به حاشیهٔ راست به آغاز سطر بعدی بپیچد (wrap around)، باید قابلیت am را داشته باشد. اگر پایانه بتواند صفحه‌اش را پاک کند و مکان‌نما را در موقعیت آغازین (home) قرار دهد، این با قابلیت رشته‌ای clear مشخص می‌شود. اگر پایانه روچاپ (overstrike) انجام می‌دهد (به جای پاک کردن یک موقعیت هنگام چاپ روی نویسه) آنگاه باید قابلیت os را داشته باشد. اگر پایانه یک پایانهٔ چاپی بدون واحد تصویر نرم (نمایشگر) باشد، هر دو قابلیت hc و os را به آن بدهید. (os برای پایانه‌های صفحه ذخیره‌ساز، مانند سری TEKTRONIX 4010، و نیز پایانه‌های نسخهٔ چاپی و APL کاربرد دارد.) اگر کدی برای انتقال مکان‌نما به لبهٔ چپ سطر جاری وجود دارد، آن را به صورت cr مشخص کنید. (معمولاً این carriage return، یعنی control/M خواهد بود.) اگر کدی برای تولید هشدار صوتی (زنگ، بوق و غیره) وجود دارد، آن را به صورت bel مشخص کنید.

اگر کدی برای انتقال مکان‌نما به اندازهٔ یک موقعیت به چپ وجود دارد (مانند پس‌بر یا backspace)، آن قابلیت باید به صورت cub1 مشخص شود. به همین ترتیب، کدهای انتقال به راست، بالا و پایین باید به صورت cuf1، cuu1، و cud1 مشخص شوند. این حرکت‌های محلی مکان‌نما نباید متنی را که از روی آن عبور می‌کنند تغییر دهند؛ برای نمونه، معمولاً نباید از “cuf1= ” استفاده کنید زیرا فاصله، نویسه‌ای را که از روی آن عبور کرده پاک می‌کند.

یک نکتهٔ بسیار مهم در اینجا این است که حرکت‌های محلی مکان‌نما که در terminfo کدگذاری شده‌اند، در لبه‌های چپ و بالای یک پایانهٔ CRT تعریف‌نشده هستند. برنامه‌ها هرگز نباید تلاش کنند که در لبهٔ چپ به عقب برگردند (backspace کنند)، مگر اینکه bw داده شده باشد، و هرگز نباید تلاش کنند که به صورت محلی از بالا به بیرون بروند. برای پیمایش متن به سمت بالا، برنامه به گوشهٔ پایین چپ صفحه می‌رود و رشتهٔ ind (index) را ارسال می‌کند.

برای پیمایش متن به سمت پایین، برنامه به گوشهٔ بالا چپ صفحه می‌رود و رشتهٔ ri (reverse index) را ارسال می‌کند. رشته‌های ind و ri هنگامی که در گوشه‌های مربوط به خود روی صفحه نباشند، تعریف‌نشده هستند.

نسخه‌های پارامتردار توالی‌های پیمایش عبارتند از indn و rin که همان معنای ind و ri را دارند، با این تفاوت که یک پارامتر دریافت می‌کنند و به همان تعداد سطر پیمایش انجام می‌دهند. این‌ها نیز به جز در لبهٔ مناسب صفحه تعریف‌نشده هستند.

قابلیت am مشخص می‌کند که آیا هنگام خروج متن، مکان‌نما در لبهٔ راست صفحه متوقف می‌شود یا خیر، اما این امر لزوماً برای یک cuf1 از ستون آخر صدق نمی‌کند. تنها حرکت محلی که از لبهٔ چپ تعریف شده این است که اگر bw داده شده باشد، آنگاه یک cub1 از لبهٔ چپ به لبهٔ راست سطر پیشین منتقل خواهد شد. اگر bw داده نشده باشد، اثر آن تعریف‌نشده است. این برای نمونه برای رسم یک جعبه به دور لبهٔ صفحه مفید است. اگر پایانه دارای حاشیه‌های خودکار قابل انتخاب با سوییچ باشد، فایل terminfo معمولاً فرض می‌کند که این ویژگی روشن است؛ یعنی am. اگر پایانه دستوری دارد که به ستون نخست سطر بعدی می‌رود، آن دستور را می‌توان به صورت nel (newline) مشخص کرد. مهم نیست که آیا دستور بقیهٔ سطر جاری را پاک می‌کند یا خیر، بنابراین اگر پایانه فاقد cr و lf باشد، ممکن است همچنان بتوان یک nel کارآمد را از یکی از آن‌ها یا هر دو ساخت.

این قابلیت‌ها برای توصیف پایانه‌های نسخهٔ چاپی و “glass-tty” کفایت می‌کنند. بدین ترتیب تله‌تایپ مدل ۳۳ به صورت زیر توصیف می‌شود:

33|tty33|tty|model 33 teletype,
        bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,

در حالی که Lear Siegler ADM-3 به این صورت توصیف می‌شود:

adm3|3|lsi adm3,
        am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
        ind=^J, lines#24,

آدرس‌دهی مکان‌نما و سایر رشته‌های نیازمند پارامتر در پایانه توسط یک قابلیت رشته‌ای پارامتردار توصیف می‌شوند، همراه با گریزهای شبه-printf مانند %x در آن. برای نمونه، برای آدرس‌دهی مکان‌نما، قابلیت cup با استفاده از دو پارامتر مشخص می‌شود: سطر و ستونی که باید به آن آدرس‌دهی شود. (سطرها و ستون‌ها از صفر شماره‌گذاری می‌شوند و به صفحهٔ فیزیکی قابل مشاهده توسط کاربر اشاره دارند، نه به هرگونه حافظهٔ نادیدنی.) اگر پایانه دارای آدرس‌دهی مکان‌نمای نسبی نسبت به حافظه باشد، می‌توان آن را با mrcup نشان داد.

سازوکار پارامتر از یک پشته و کدهای ویژهٔ % برای دستکاری آن استفاده می‌کند. به طور معمول یک توالی یکی از پارامترها را روی پشته می‌گذارد (push می‌کند) و سپس آن را در قالبی چاپ می‌کند. چاپ کردن (مانند “%d”) یک حالت خاص است. سایر عملیات، از جمله “%t” عملوند خود را از پشته برمی‌دارند (pop می‌کنند). باید توجه داشت که اغلب عملیات پیچیده‌تری لازم است، برای نمونه در رشتهٔ sgr.

کدگذاری‌های % معانی زیر را دارند:

%%
خروجی دادن “%”
%[[:]flags][width[.precision]][doxXs]
مانند printf(3)، پرچم‌ها عبارتند از [-+#] و فاصله. از یک “:” برای مجاز کردن نویسهٔ بعدی به عنوان پرچم “-” استفاده کنید، تا از تفسیر “%-” به عنوان یک عملگر جلوگیری شود.
%c
چاپ pop() مانند %c در printf
%s
چاپ pop() مانند %s در printf
%p[1-9]
قرار دادن (push) پارامتر iام در پشته
%P[a-z]
تنظیم متغیر پویای [a-z] با مقدار pop()
%g[a-z]
دریافت متغیر پویای [a-z] و قرار دادن آن در پشته
%P[A-Z]
تنظیم متغیر ایستای [a-z] با مقدار pop()
%g[A-Z]
دریافت متغیر ایستای [a-z] و قرار دادن آن در پشته
اصطلاحات “ایستا” (static) و “پویا” (dynamic) گمراه‌کننده هستند. از نظر تاریخی، این‌ها صرفاً دو مجموعهٔ متفاوت از متغیرها هستند، که مقادیر آن‌ها بین فراخوانی‌های tparm(3X) بازنشانی نمی‌شود. با این حال، این واقعیت در سایر پیاده‌سازی‌ها مستند نشده است. تکیه بر آن تأثیر منفی بر سازگاری با سایر پیاده‌سازی‌ها خواهد گذاشت:
  • کتابخانهٔ SVr2 curses از متغیرهای پویا پشتیبانی می‌کرد. آن‌ها فقط توسط عملگر %P تنظیم می‌شوند. یک %g برای متغیری مشخص بدون تنظیم اولیهٔ آن با %P نتایج غیرقابل پیش‌بینی خواهد داد، زیرا متغیرهای پویا یک آرایهٔ محلی مقداردهی‌نشده روی پشته در تابع tparm هستند.
  • کتابخانهٔ SVr3.2 curses از متغیرهای ایستا پشتیبانی می‌کرد. آن‌ها یک آرایه در ساختار TERMINAL (تعریف‌شده در term.h) هستند، و هنگامی که تابع setupterm داده‌ها را تخصیص می‌دهد به طور خودکار صفر می‌شوند.
  • کتابخانهٔ SVr4 curses هیچ بهبود دیگری در ویژگی متغیرهای پویا/ایستا ایجاد نکرد.
  • کتابخانهٔ Solaris XPG4 curses تفاوتی میان متغیرهای پویا و ایستا قائل نمی‌شود. آن‌ها یکی هستند. همانند SVr4 curses، استاندارد XPG4 curses این‌ها را به طور صریح مقداردهی اولیه نمی‌کند.
  • پیش از نسخهٔ 6.3، ncurses هم متغیرهای پویا و هم ایستا را در حافظهٔ پایدار ذخیره می‌کرد که با صفر مقداردهی اولیه می‌شدند.
  • با آغاز نسخهٔ 6.3، ncurses متغیرهای ایستا و پویا را به همان شیوهٔ SVr4 ذخیره می‌کند.
  • برخلاف سایر پیاده‌سازی‌ها، ncurses متغیرهای پویا را پیش از نخستین عملگر %g یا %P صفر می‌کند.
  • مانند SVr2، حوزهٔ (scope) متغیرهای پویا در ncurses درون فراخوانی جاری به tparm است. اگر حافظهٔ پایدار مورد نیاز است از متغیرهای ایستا استفاده کنید.
%'c'
ثابت نویسه‌ای c
%{nn}
ثابت عدد صحیح nn
%l
قرار دادن strlen(pop) در پشته
%+, %-, %*, %/, %m
محاسبات ریاضی (%m همان mod است): push(pop() op pop())
%&, %|, %^
عملیات بیتی (“and”، “or” و “or” مانعةالجمع [xor]): push(pop() op pop())
%=, %>, %<
عملیات منطقی: push(pop() op pop())
%A, %O
عملیات منطقی “and” و “or” (برای شرط‌ها)
%!, %~
عملیات یگانی (متمم منطقی و بیتی): push(op pop())
%i
افزودن ۱ به دو پارامتر نخست (برای پایانه‌های ANSI)
%? expr %t thenpart %e elsepart %;
این ساختار یک if-then-else تشکیل می‌دهد. بخش %e elsepart اختیاری است. معمولاً بخش %? expr مقداری را روی پشته می‌گذارد، و %t آن را از پشته برمی‌دارد و بررسی می‌کند که آیا غیرصفر (درست) است یا خیر. اگر صفر (نادرست) باشد، کنترل به بخش %e (else) منتقل می‌شود.
امکان تشکیل else-ifها به سبک Algol 68 وجود دارد:
%? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %;
که در آن ci شرط‌ها و bi بدنه‌ها هستند.
از گزینهٔ -f در tic یا infocmp برای دیدن ساختار if-then-elseها استفاده کنید. برخی رشته‌ها، برای نمونه sgr هنگامی که در یک سطر نوشته شوند می‌توانند بسیار پیچیده باشند. گزینهٔ -f رشته را به چندین سطر می‌شکند و بخش‌های آن را با تورفتگی مرتب می‌کند.

عملیات دوتایی به صورت پسوندی (postfix) همراه با عملوندها به ترتیب معمول هستند. به این معنا که برای به دست آوردن x-5 باید از “%gx%{5}%-” استفاده کرد. متغیرهای %P و %g در بین ارزیابی‌های رشته‌های گریز پایدار هستند.

پایانهٔ HP2645 را در نظر بگیرید که برای رفتن به سطر ۳ و ستون ۱۲، نیاز است که \E&a12c03Y همراه با ۶ میلی‌ثانیه لایه‌گذاری برای آن ارسال شود. ترتیب سطرها و ستون‌ها در اینجا معکوس است، و سطر و ستون به صورت دو رقم چاپ می‌شوند. شرح پایانهٔ مربوطه به این صورت بیان می‌شود:

cup=\E&a%p2%dc%p1%dY$<6>,

پایانهٔ Microterm ACT-IV نیازمند ارسال سطر و ستون جاری با پیشوند یک ^T است، در حالی که سطر و ستون صرفاً به صورت باینری کدگذاری شده‌اند:

cup=^T%p1%c%p2%c

پایانه‌هایی که از “%c” استفاده می‌کنند باید بتوانند مکان‌نما را به عقب ببرند (cub1)، و مکان‌نما را یک سطر روی صفحه به بالا ببرند (cuu1). این امر ضروری است زیرا ارسال \n، ^D و \r همیشه ایمن نیست، چرا که سیستم ممکن است آن‌ها را تغییر دهد یا نادیده بگیرد. (روال‌های کتابخانه که با terminfo سروکار دارند حالت‌های tty را به گونه‌ای تنظیم می‌کنند که تب‌ها هرگز بسط نیابند، بنابراین ارسال \t ایمن است. مشخص شده است که این مورد برای Ann Arbor 4080 حیاتی است.)

مثال پایانی LSI ADM-3A است، که از سطر و ستونی با آفستِ یک فاصله استفاده می‌کند، بدین ترتیب:

cup=\E=%p1%' '%+%c%p2%' '%+%c

پس از ارسال “\E=”، این عبارت پارامتر اول را در پشته قرار می‌دهد، مقدار اسکی فاصله (32) را در پشته می‌گذارد، آن‌ها را جمع می‌کند (حاصل‌جمع را به جای دو مقدار پیشین در پشته قرار می‌دهد) و آن مقدار را به صورت یک نویسه خروجی می‌دهد. سپس همین کار برای پارامتر دوم انجام می‌شود. محاسبات ریاضی پیچیده‌تر با استفاده از پشته امکان‌پذیر است.

اگر پایانه روشی سریع برای بردن مکان‌نما به موقعیت آغازین (home) دارد (به بالاترین گوشهٔ سمت چپ صفحه)، آنگاه می‌توان این را با home مشخص کرد؛ به همین ترتیب یک راه سریع برای رسیدن به گوشهٔ پایین سمت چپ را می‌توان به صورت ll تعیین نمود؛ این ممکن است شامل بالا رفتن با cuu1 از موقعیت آغازین باشد، اما برنامه هرگز نباید خودش این کار را انجام دهد (مگر اینکه ll این کار را انجام دهد) چرا که نمی‌تواند هیچ فرضی دربارهٔ اثر بالا رفتن از موقعیت آغازین داشته باشد. توجه داشته باشید که موقعیت آغازین (home) همان آدرس‌دهی به (0,0) است: به گوشهٔ بالا چپ صفحه، نه حافظه. (بنابراین، توالی \EH در پایانه‌های HP را نمی‌توان برای home به کار برد.)

اگر پایانه دارای آدرس‌دهی مطلق سطر یا ستون مکان‌نما باشد، می‌توان آن‌ها را به صورت قابلیت‌های تک‌پارامتری hpa (موقعیت افقی مطلق یا horizontal position absolute) و vpa (موقعیت عمودی مطلق یا vertical position absolute) مشخص کرد. گاهی این موارد کوتاه‌تر از توالی عمومی‌تر دوپارامتری هستند (مانند hp2645) و می‌توان آن‌ها را ترجیحاً به جای cup به کار برد. اگر حرکت‌های محلی پارامتردار وجود دارند (مانند حرکت به اندازهٔ n فاصله به راست)، می‌توان آن‌ها را با cud، cub، cuf، و cuu با یک پارامتر منفرد که نشان‌دهندهٔ تعداد فاصله‌ها برای حرکت است مشخص کرد. این‌ها در درجهٔ نخست زمانی مفید هستند که پایانه فاقد cup باشد، مانند TEKTRONIX 4025.

اگر پایانه هنگام اجرای برنامه‌ای که از این قابلیت‌ها استفاده می‌کند نیاز به قرار گرفتن در یک حالت خاص دارد، کدهای ورود و خروج از این حالت را می‌توان به صورت smcup و rmcup تعیین کرد. این موضوع برای نمونه در پایانه‌هایی مانند Concept با بیش از یک صفحه حافظه پیش می‌آید. اگر پایانه تنها دارای آدرس‌دهی مکان‌نما نسبت به حافظه باشد و نه آدرس‌دهی نسبت به صفحه، باید پنجره‌ای به اندازهٔ یک صفحه در پایانه ثابت شود تا آدرس‌دهی مکان‌نما به درستی کار کند. این مورد برای TEKTRONIX 4025 نیز استفاده می‌شود، که در آن smcup نویسهٔ فرمان را روی نویسهٔ مورد استفادهٔ terminfo تنظیم می‌کند. اگر توالی smcup صفحه را پس از خروجی دادن توالی rmcup به حالت پیشین بازنگرداند (به حالت پیش از خروجی دادن rmcup)، nrrmc را مشخص کنید.

SVr4 (و X/Open Curses) چندین قابلیت رشته‌ای را برای تنظیم حاشیه‌ها فهرست می‌کنند. دو مورد برای استفاده با پایانه‌ها، و شش مورد دیگر برای استفاده با چاپگرها در نظر گرفته شده بودند.

  • دو قابلیت پایانه فرض می‌کنند که پایانه ممکن است قابلیت تنظیم حاشیهٔ چپ و/یا راست در موقعیت فعلی ستون مکان‌نما را داشته باشد.
  • قابلیت‌های چاپگر فرض می‌کنند که چاپگر ممکن است دو نوع قابلیت داشته باشد:
  • توانایی تنظیم حاشیهٔ بالا و/یا پایین با استفاده از موقعیت فعلی سطر، و
  • قابلیت‌های پارامتردار برای تنظیم حاشیه‌های بالا، پایین، چپ و راست با توجه به تعداد خطوط یا ستون‌ها.

در عمل، دسته‌بندی به “پایانه” و “چاپگر” مناسب نیست:

•
پایگاه دادهٔ پایانهٔ AT&T SVr4 چهار بار از smgl برای سخت‌افزار AT&T استفاده می‌کند.
سه مورد از این چهار مورد، چاپگر هستند. آن‌ها فاقد توانایی تنظیم حاشیه‌های چپ/راست با مشخص کردن ستون هستند.
•
سایر پایانه‌ها (غیر AT&T) ممکن است از حاشیه‌ها پشتیبانی کنند اما با فرضیاتی متفاوت از AT&T.
به عنوان نمونه، DEC VT420 از حاشیه‌های چپ/راست پشتیبانی می‌کند، اما تنها با استفاده از پارامتر ستون. به عنوان یک پیچیدگی اضافه، VT420 از دو تنظیم برای فعال‌سازی کامل حاشیه‌های چپ/راست استفاده می‌کند (حالت حاشیهٔ چپ/راست، و حالت مبدأ). مورد اول حاشیه‌ها را فعال می‌کند، که باعث می‌شود متن چاپ‌شده درون حاشیه‌ها شکسته شود، اما مورد دوم برای جلوگیری از آدرس‌دهی مکان‌نما در خارج از آن حاشیه‌ها مورد نیاز است.
•
هر دو حاشیهٔ چپ/راست DEC VT420 با یک توالی کنترلی واحد تنظیم می‌شوند. اگر هر یک حذف شود، حاشیهٔ مربوطه روی لبهٔ چپ یا راست صفحهٔ نمایش تنظیم می‌شود (به‌جای دست‌نخورده گذاشتن حاشیه).

این‌ها قابلیت‌های مربوط به حاشیه هستند:

نام توضیحات
smgl تنظیم حاشیهٔ چپ در ستون فعلی
smgr تنظیم حاشیهٔ راست در ستون فعلی
smgb تنظیم حاشیهٔ پایین در سطر فعلی
smgt تنظیم حاشیهٔ بالا در سطر فعلی
smgbp تنظیم حاشیهٔ پایین در سطر N
smglp تنظیم حاشیهٔ چپ در ستون N
smgrp تنظیم حاشیهٔ راست در ستون N
smgtp تنظیم حاشیهٔ بالا در سطر N
smglr تنظیم هر دو حاشیهٔ چپ و راست به L و R
smgtb تنظیم هر دو حاشیهٔ بالا و پایین به T و B

هنگام نوشتن برنامه‌ای که از این قابلیت‌های رشته‌ای استفاده می‌کند، ابتدا باید جفت‌ها بررسی شوند تا مشخص گردد آیا هر دو قابلیت در جفت تنظیم شده‌اند یا تنها یکی از آن‌ها تنظیم شده است:

  • اگر هر دو قابلیت smglp و smgrp تنظیم شده باشند، هر یک با یک آرگومان منفرد، N، استفاده می‌شوند که به ترتیب شمارهٔ ستون حاشیهٔ چپ و راست را مشخص می‌کند.
  • اگر هر دو قابلیت smgtp و smgbp تنظیم شده باشند، هر یک به ترتیب برای تنظیم حاشیهٔ بالا و پایین استفاده می‌شوند:
  • smgtp با یک آرگومان منفرد، N، یعنی شمارهٔ سطر حاشیهٔ بالا استفاده می‌شود.
  • smgbp با دو آرگومان، N و M، استفاده می‌شود که شمارهٔ سطر حاشیهٔ پایین را مشخص می‌کنند؛ اولی با شمارش از بالای صفحه و دومی با شمارش از پایین. این کار با دو شیوهٔ تعیین حاشیهٔ پایین در چاپگرهای سازندگان مختلف سازگار است.
هنگام طراحی یک ورودی terminfo برای چاپگری که حاشیهٔ پایین قابل تنظیم دارد، بسته به چاپگر، فقط باید از آرگومان اول یا دوم استفاده شود. هنگام توسعهٔ برنامه‌ای که از smgbp برای تنظیم حاشیهٔ پایین استفاده می‌کند، باید هر دو آرگومان داده شوند.

برعکس، زمانی که تنها یک قابلیت در جفت تنظیم شده باشد:

  • اگر تنها یکی از smglp و smgrp تنظیم شده باشد، آنگاه با دو آرگومان استفاده می‌شود: شمارهٔ ستون حاشیه‌های چپ و راست، به همان ترتیب.
  • به همین ترتیب، اگر تنها یکی از smgtp و smgbp تنظیم شده باشد، آنگاه با دو آرگومان استفاده می‌شود که حاشیه‌های بالا و پایین را، به همان ترتیب، با شمارش از بالای صفحه مشخص می‌کنند.
هنگام طراحی یک ورودی terminfo برای چاپگری که نیازمند تنظیم هم‌زمان حاشیه‌های چپ و راست یا بالا و پایین است، تنها یک قابلیت در جفت‌های smglp و smgrp یا smgtp و smgbp باید تعریف شود، و دیگری تعریف‌نشده باقی بماند.

به جز برای توصیف‌های بسیار قدیمی پایانه، مانند مواردی که برای SVr4 توسعه یافته‌اند، طرحی که بیان شد باید منسوخ تلقی شود. مجموعهٔ بهبودیافته‌ای از قابلیت‌ها در اواخر نسخه‌های SVr4 افزوده شد (smglr و smgtb)، که صریحاً از دو پارامتر برای تنظیم حاشیه‌های چپ/راست یا بالا/پایین استفاده می‌کنند.

هنگام تنظیم حاشیه‌ها، مقادیر سطر و ستون مبنای صفر دارند.

قابلیت رشته‌ای mgc باید تعریف شود. برنامه‌هایی مانند tabs(1) برای بازنشانی تمام حاشیه‌ها به این تکیه می‌کنند.

اگر پایانه بتواند از موقعیت فعلی تا انتهای سطر را پاک کند، در حالی که مکان‌نما را در جای خود باقی می‌گذارد، این باید به صورت el داده شود. اگر پایانه بتواند از ابتدای سطر تا موقعیت فعلی (شامل خود آن) را پاک کند، در حالی که مکان‌نما را در جای خود باقی می‌گذارد، این باید به صورت el1 داده شود. اگر پایانه بتواند از موقعیت فعلی تا انتهای صفحهٔ نمایش را پاک کند، آنگاه این باید به صورت ed داده شود. Ed تنها از ستون اول یک سطر تعریف می‌شود. (بنابراین، در صورتی که یک ed واقعی در دسترس نباشد، می‌تواند با درخواستی برای حذف تعداد زیادی خط شبیه‌سازی شود.)

اگر پایانه بتواند یک خط خالی جدید پیش از خطی که مکان‌نما در آن قرار دارد باز کند، این باید به صورت il1 داده شود؛ این کار تنها از موقعیت نخست یک خط انجام می‌شود. سپس مکان‌نما باید در خط خالی جدید ظاهر شود. اگر پایانه بتواند خطی را که مکان‌نما در آن قرار دارد حذف کند، آنگاه این باید به صورت dl1 داده شود؛ این کار تنها از نخستین موقعیت در خطی که باید حذف شود انجام می‌پذیرد. نسخه‌هایی از il1 و dl1 که یک پارامتر منفرد می‌گیرند و به همان تعداد خط درج یا حذف می‌کنند را می‌توان به صورت il و dl مشخص کرد.

اگر پایانه دارای یک ناحیهٔ پیمایش قابل تنظیم باشد (مانند vt100) دستور تنظیم آن را می‌توان با قابلیت csr توصیف کرد، که دو پارامتر می‌گیرد: خطوط بالا و پایین ناحیهٔ پیمایش. متأسفانه، موقعیت مکان‌نما پس از استفاده از این دستور تعریف‌نشده است.

می‌توان اثر درج یا حذف خط را با استفاده از csr بر روی یک ناحیهٔ به‌درستی انتخاب‌شده به دست آورد؛ دستورهای sc و rc (ذخیره و بازیابی مکان‌نما) ممکن است برای اطمینان از اینکه رشتهٔ درج/حذف ترکیبی شما مکان‌نما را جابه‌جا نمی‌کند مفید باشند. (توجه داشته باشید که کتابخانهٔ ncurses(3X) این ترکیب را به‌طور خودکار انجام می‌دهد، بنابراین نیازی نیست برای یک ورودی دارای csr رشته‌های درج/حذف بسازید).

روش دیگر برای ساخت درج و حذف ممکن است استفاده از ترکیبی از نمایه (index) با ویژگی قفل حافظه موجود در برخی پایانه‌ها باشد (مانند سری HP-700/90، که البته دارای درج/حذف نیز هستند).

درج خطوط در بالا یا پایین صفحه را نیز می‌توان در بسیاری از پایانه‌ها بدون درج/حذف خط واقعی، با استفاده از ri یا ind انجام داد، و اغلب حتی در پایانه‌های دارای آن ویژگی‌ها سریع‌تر است.

قابلیت بولی non_dest_scroll_region در صورتی باید تنظیم شود که هر پنجرهٔ پیمایش در واقع یک درگاه دید (view port) بر روی یک بوم (canvas) به اندازهٔ صفحه باشد. برای آزمودن این قابلیت، یک ناحیهٔ پیمایش در وسط صفحه ایجاد کنید، مطلبی در خط پایین بنویسید، مکان‌نما را به بالای ناحیه ببرید، و ri و به دنبال آن dl1 یا ind را اجرا کنید. اگر داده‌هایی که توسط ri از پایین ناحیه به بیرون پیمایش شده بودند دوباره ظاهر شوند، پیمایش غیرمخرب است. System V و X/Open Curses انتظار دارند که ind، ri، indn و rin پیمایش مخرب را شبیه‌سازی کنند؛ مستندات آن‌ها هشدار می‌دهند که csr را تعریف نکنید مگر اینکه این موضوع درست باشد. این پیاده‌سازی curses انعطاف‌پذیرتر است و در صورت تعریف بودن ndsrc پس از پیمایش پاک‌کردن‌های صریح را انجام می‌دهد.

اگر پایانه توانایی تعریف یک پنجره به عنوان بخشی از حافظه را داشته باشد، که همهٔ دستورها بر آن اثر بگذارند، باید به عنوان رشتهٔ پارامتردار wind مشخص شود. چهار پارامتر به ترتیب عبارتند از: خطوط آغازین و پایانی در حافظه و ستون‌های آغازین و پایانی در حافظه.

اگر پایانه بتواند حافظهٔ نمایش را در بالا نگه دارد، آنگاه قابلیت da باید مشخص شود؛ اگر حافظهٔ نمایش را بتوان در پایین نگه داشت، آنگاه db باید داده شود. این‌ها نشان می‌دهند که حذف یک خط یا پیمایش ممکن است خطوط غیرخالی را از پایین به بالا بیاورد یا اینکه پیمایش به عقب با ri ممکن است خطوط غیرخالی را به پایین بیاورد.

در رابطه با درج/حذف نویسه، دو نوع اصلی پایانهٔ هوشمند وجود دارد که می‌توان با استفاده از terminfo توصیف کرد. رایج‌ترین عملیات درج/حذف نویسه تنها بر نویسه‌های روی خط فعلی اثر می‌گذارند و نویسه‌ها را به طور صلب به بیرون از انتهای خط شیفت می‌دهند. پایانه‌های دیگر، مانند Concept 100 و Perkin Elmer Owl، میان فاصله‌های تایپ‌شده و تایپ‌نشده بر روی صفحه تمایز قائل می‌شوند، و هنگام یک درج یا حذف تنها تا یک فاصلهٔ تایپ‌نشده بر روی صفحه شیفت می‌دهند که یا حذف می‌شود یا به دو فاصلهٔ تایپ‌نشده گسترش می‌یابد.

می‌توانید نوع پایانهٔ خود را با پاک کردن صفحه و سپس تایپ کردن متن جداشده با حرکات مکان‌نما مشخص کنید. عبارت “abc    def” را با استفاده از حرکات محلی مکان‌نما (نه فاصله‌ها) میان “abc” و “def” تایپ کنید. سپس مکان‌نما را پیش از “abc” قرار دهید و پایانه را در حالت درج بگذارید. اگر تایپ کردن نویسه‌ها باعث شود بقیهٔ خط به طور صلب شیفت یابد و نویسه‌ها از انتها بیرون بیفتند، پایانهٔ شما میان فاصله‌ها و موقعیت‌های تایپ‌نشده تفاوتی قائل نمی‌شود. اگر با انجام درج، “abc” به سمت “def” شیفت یابد و سپس هر دو با هم دور انتهای خط فعلی بچرخند و به خط بعدی بروند، شما نوع دوم پایانه را دارید، و باید قابلیت in را مشخص کنید که مخفف “insert null” (درج تهی) است.

در حالی که این‌ها دو ویژگی از نظر منطقی جداگانه هستند (حالت درج تک‌خطی در برابر چندخطی، و رفتار ویژه با فاصله‌های تایپ‌نشده)، ما هیچ پایانه‌ای ندیده‌ایم که حالت درج آن نتواند با این ویژگی منفرد توصیف شود.

پایگاه دادهٔ Terminfo می‌تواند هم پایانه‌هایی که دارای حالت درج هستند و هم پایانه‌هایی که یک توالی ساده برای باز کردن موقعیت خالی در خط فعلی ارسال می‌کنند را توصیف کند. توالی ورود به حالت درج را به عنوان smir مشخص کنید. توالی خروج از حالت درج را به عنوان rmir مشخص کنید. اکنون هر توالی لازم برای ارسال درست پیش از ارسال نویسه‌ای که باید درج شود را به عنوان ich1 مشخص کنید. بیشتر پایانه‌های دارای حالت درج واقعی، ich1 را مشخص نخواهند کرد؛ پایانه‌هایی که توالی‌ای برای باز کردن یک موقعیت در صفحه ارسال می‌کنند باید آن را در اینجا مشخص نمایند.

اگر پایانهٔ شما هر دو را دارد، حالت درج معمولاً به ich1 ترجیح داده می‌شود. از نظر فنی، نباید هر دو را مشخص کنید مگر اینکه پایانه واقعاً نیاز داشته باشد که هر دو به صورت ترکیبی استفاده شوند. بر این اساس، برخی از برنامه‌های غیر curses در صورت وجود هر دو دچار سردرگمی می‌شوند؛ نشانهٔ آن تکرار مضاعف نویسه‌ها در یک به‌روزرسانی با استفاده از درج است. این الزام اکنون نادر است؛ بیشتر توالی‌های ich به smir قبلی نیاز ندارند، و بیشتر حالت‌های درج smir به ich1 پیش از هر نویسه نیازی ندارند. بنابراین، curses جدید در واقع فرض می‌کند که وضعیت چنین است و بسته به مورد از rmir/smir یا ich/ich1 استفاده می‌کند (اما نه از هر دو). اگر ناچارید برای پایانه‌ای به اندازهٔ کافی قدیمی که به هر دو نیاز دارد، ورودی‌ای بنویسید که تحت curses جدید استفاده شود، توالی‌های rmir/smir را در ich1 بگنجانید.

اگر به فاصله‌گذاری پس از درج (post insert padding) نیاز است، آن را به عنوان تعداد میلی‌ثانیه‌ها در ip (یک گزینهٔ رشته‌ای) مشخص کنید. هر توالی دیگری که ممکن است لازم باشد پس از درج یک نویسهٔ منفرد ارسال شود را نیز می‌توان در ip مشخص کرد. اگر پایانهٔ شما هم نیازمند قرار گرفتن در یک “حالت درج” است و هم یک کد ویژه پیش از هر نویسهٔ درج‌شده، آنگاه هر دو smir/rmir و ich1 را می‌توان ارائه داد، و هر دو استفاده خواهند شد. قابلیت ich با یک پارامتر، n، اثرات ich1 را n بار تکرار خواهد کرد.

اگر بین نویسه‌های تایپ‌شده در حالی که در حالت درج نیستید فاصله‌گذاری لازم است، این را به عنوان تعداد میلی‌ثانیه‌ها فاصله‌گذاری در rmp مشخص کنید.

گاهی لازم است در حین حضور در حالت درج جابه‌جا شوید تا نویسه‌ها را روی همان خط حذف کنید (برای نمونه، اگر یک تب پس از موقعیت درج وجود داشته باشد). اگر پایانهٔ شما اجازهٔ حرکت در حین حضور در حالت درج را می‌دهد، می‌توانید قابلیت mir را برای سرعت بخشیدن به درج در این حالت مشخص کنید. حذف mir تنها بر سرعت اثر می‌گذارد. برخی پایانه‌ها (به‌ویژه پایانه‌های Datamedia) نباید به دلیل نحوهٔ کارکرد حالت درجشان mir داشته باشند.

در نهایت، می‌توانید dch1 را برای حذف یک نویسهٔ منفرد، dch را با یک پارامتر، n، برای حذف n نویسه، و حالت حذف را با ارائهٔ smdc و rmdc جهت ورود به حالت حذف و خروج از آن (هر حالتی که پایانه برای کارکردن dch1 لازم است در آن قرار گیرد) مشخص کنید.

دستوری برای پاک کردن n نویسه (معادل خروجی دادن n فاصله بدون جابه‌جا کردن مکان‌نما) می‌تواند به صورت ech با یک پارامتر مشخص شود.

اگر پایانهٔ شما یک یا چند نوع از ویژگی‌های نمایشی را دارد، این‌ها را می‌توان به روش‌های گوناگونی نمایش داد. باید یکی از شیوه‌های نمایش را به عنوان حالت برجسته (standout mode) انتخاب کنید، که قالبی مناسب، با کنتراست بالا و ملایم برای چشم‌ها را جهت برجسته‌سازی پیام‌های خطا و سایر موارد جلب‌توجه ارائه می‌دهد. (اگر حق انتخاب دارید، ویدئوی معکوس به‌همراه روشنایی نیمه مناسب است، یا ویدئوی معکوس به تنهایی). توالی‌های ورود به حالت برجسته و خروج از آن به ترتیب به صورت smso و rmso داده می‌شوند. اگر کد تغییر به حالت برجسته یا خروج از آن، یک یا حتی دو فاصلهٔ خالی روی صفحه بر جای بگذارد، همان‌طور که TVI 912 و Teleray 1061 انجام می‌دهند، آنگاه xmc باید مشخص شود تا بگوید چند فاصله باقی مانده است.

کدهای شروع زیرخط‌دار کردن و پایان زیرخط‌دار کردن را می‌توان به ترتیب به صورت smul و rmul مشخص کرد. اگر پایانه کدی برای زیرخط‌دار کردن نویسهٔ فعلی و جابه‌جا کردن مکان‌نما به اندازهٔ یک فاصله به سمت راست دارد، مانند Microterm Mime، این را می‌توان به صورت uc ارائه داد.

سایر قابلیت‌ها برای ورود به حالت‌های گوناگون برجسته‌سازی شامل موارد زیر است: blink (چشمک‌زن) bold (ضخیم یا بسیار روشن) dim (کم‌نور یا نیمه‌روشن) invis (خالی یا متن نامرئی) prot (محافظت‌شده) rev (ویدئوی معکوس) sgr0 (خاموش کردن همهٔ حالت‌های ویژگی‌ها) smacs (ورود به حالت مجموعه نویسهٔ جایگزین) و rmacs (خروج از حالت مجموعه نویسهٔ جایگزین). روشن کردن هر یک از این حالت‌ها به تنهایی ممکن است حالت‌های دیگر را خاموش کند یا نکند.

اگر توالی‌ای برای تنظیم ترکیب‌های اختیاری از حالت‌ها وجود داشته باشد، این باید به صورت sgr (تنظیم ویژگی‌ها) داده شود، که ۹ پارامتر می‌گیرد. هر پارامتر صفر (0) یا غیرصفر است، بسته به اینکه ویژگی متناظر روشن باشد یا خاموش. این ۹ پارامتر به ترتیب عبارتند از: برجسته (standout)، زیرخط (underline)، معکوس (reverse)، چشمک‌زن (blink)، کم‌نور (dim)، ضخیم (bold)، خالی (blank)، محافظت‌شده (protect)، مجموعه نویسهٔ جایگزین (alternate character set). نیازی نیست همهٔ حالت‌ها توسط sgr پشتیبانی شوند، تنها آن‌هایی که دستورهای ویژگی جداگانهٔ متناظر برایشان وجود دارد کافی است.

برای نمونه، DEC vt220 از بیشتر حالت‌ها پشتیبانی می‌کند:

پارامتر tparm ویژگی توالی گریز
none none \E[0m
p1 standout \E[0;1;7m
p2 underline \E[0;4m
p3 reverse \E[0;7m
p4 blink \E[0;5m
p5 dim در دسترس نیست
p6 bold \E[0;1m
p7 invis \E[0;8m
p8 protect استفاده نشده
p9 altcharset ^O (خاموش) ^N (روشن)

ما هر توالی گریز را با خاموش کردن هرگونه حالت موجود آغاز می‌کنیم، زیرا روش سریعی برای تعیین فعال بودن آن‌ها وجود ندارد. حالت برجسته به عنوان ترکیبی از معکوس و ضخیم تنظیم شده است. پایانهٔ vt220 دارای حالت محافظت‌شده (protect mode) است، اگرچه معمولاً در sgr استفاده نمی‌شود زیرا از نویسه‌های روی صفحه در برابر پاک‌کردن‌های میزبان محافظت می‌کند. حالت altcharset نیز متفاوت است از این حیث که بسته به اینکه خاموش یا روشن باشد، یا ^O است یا ^N. اگر همهٔ حالت‌ها روشن شوند، توالی حاصل \E[0;1;4;5;7;8m^N خواهد بود.

برخی از توالی‌ها میان حالت‌های گوناگون مشترک هستند. برای نمونه، ;7 زمانی ارسال می‌شود که p1 یا p3 درست باشد، یعنی اگر هر یک از حالت‌های برجسته یا معکوس روشن شوند.

نوشتن توالی‌های بالا همراه با وابستگی‌های آن‌ها موارد زیر را حاصل می‌کند:

توالی زمان ارسال در خروجی ترجمهٔ terminfo
\E[0 همیشه \E[0
;1 اگر p1 یا p6 باشد %?%p1%p6%|%t;1%;
;4 اگر p2 باشد %?%p2%|%t;4%;
;5 اگر p4 باشد %?%p4%t;5%;
;7 اگر p1 یا p3 باشد %?%p1%p3%|%t;7%;
;8 اگر p7 باشد %?%p7%t;8%;
m همیشه m
^N یا ^O اگر p9 باشد ^N، وگرنه ^O %?%p9%t^N%e^O%;

قرار دادن همهٔ این‌ها با هم در توالی sgr عبارت زیر را به دست می‌دهد:

sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
    %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,

به یاد داشته باشید که اگر sgr را مشخص می‌کنید، باید sgr0 را نیز مشخص نمایید. همچنین، برخی پیاده‌سازی‌ها بر این امر متکی هستند که در صورت ارائهٔ sgr0 باید sgr نیز مشخص شود، با این وجود لزوماً همهٔ ورودی‌های terminfo دارای یک رشتهٔ sgr نیستند. بسیاری از ورودی‌های terminfo از ورودی‌های termcap مشتق شده‌اند که رشتهٔ sgr ندارند. تنها نقص افزودن یک رشتهٔ sgr این است که termcap همچنین فرض می‌کند که sgr0 از حالت مجموعه نویسهٔ جایگزین خارج نمی‌شود.

پایانه‌های دارای اشکال “کوکی جادویی” (magic cookie) (xmc) هنگام دریافت توالی‌های تنظیم حالت، “کوکی‌های” ویژه‌ای بر جای می‌گذارند، که به‌جای داشتن بیت‌های اضافی برای هر نویسه، الگوریتم نمایش را تحت تأثیر قرار می‌دهند. برخی پایانه‌ها، مانند HP 2621، هنگام رفتن به یک خط جدید یا آدرس‌دهی مکان‌نما، به‌طور خودکار از حالت برجسته خارج می‌شوند. برنامه‌هایی که از حالت برجسته استفاده می‌کنند باید پیش از حرکت مکان‌نما یا ارسال خط جدید از حالت برجسته خارج شوند، مگر اینکه قابلیت msgr که اطمینان می‌دهد حرکت در حالت برجسته ایمن است، وجود داشته باشد.

اگر پایانه روشی برای فلاش زدن صفحه جهت نمایش بی‌صدای خطا دارد (جایگزینی برای زنگ) آنگاه این را می‌توان به صورت flash مشخص کرد؛ این دستور نباید مکان‌نما را جابه‌جا کند.

اگر مکان‌نما در زمانی که در خط پایینی نیست نیاز دارد که نسبت به حالت عادی نمایان‌تر باشد (برای نمونه، تبدیل یک زیرخط غیرچشمک‌زن به یک بلوک خواناتر یا زیرخط چشمک‌زن) این توالی را به عنوان cvvis مشخص کنید. اگر روشی برای کاملاً نامرئی کردن مکان‌نما وجود دارد، آن را به عنوان civis مشخص کنید. قابلیت cnorm باید ارائه شود که اثرات هر دوی این حالت‌ها را باطل می‌کند.

اگر پایانهٔ شما نویسه‌های زیرخط‌دار را به درستی تولید می‌کند (بدون نیاز به کدهای ویژه) حتی اگر بازنویسی نکند (overstrike)، آنگاه باید قابلیت ul را مشخص کنید. اگر بازنویسی یک نویسه روی نویسهٔ دیگر هر دو نویسه را روی صفحه بر جای می‌گذارد، قابلیت os را مشخص نمایید. اگر بازنویسی‌ها با یک فاصله قابل پاک شدن باشند، آنگاه این موضوع باید با مشخص کردن eo نشان داده شود.

اگر پایانه دارای صفحهٔ کلید عددی (کی‌پد) باشد که هنگام فشردن کلیدها کد مخابره می‌کند، این اطلاعات را می‌توان ارائه داد. توجه داشته باشید که مدیریت پایانه‌هایی که صفحهٔ کلید عددی در آن‌ها تنها به صورت محلی کار می‌کند امکان‌پذیر نیست (این امر برای نمونه، در مورد کلیدهای بدون شیفت HP 2621 صدق می‌کند). اگر صفحهٔ کلید عددی را بتوان برای مخابره کردن یا مخابره نکردن تنظیم کرد، این کدها را به صورت smkx و rmkx مشخص کنید. در غیر این صورت فرض می‌شود که صفحهٔ کلید عددی همیشه کد مخابره می‌کند.

کدهای ارسالی توسط کلیدهای پیکان چپ، پیکان راست، پیکان بالا، پیکان پایین و کلید home را می‌توان به ترتیب به صورت kcub1، kcuf1، kcuu1، kcud1 و khome مشخص کرد. اگر کلیدهای تابعی مانند f0، f1، ...، f10 وجود دارند، کدهایی که ارسال می‌کنند را می‌توان به صورت kf0, kf1, ..., kf10 ارائه داد. اگر این کلیدها برچسب‌هایی به جز f0 تا f10 پیش‌فرض دارند، برچسب‌ها را می‌توان به صورت lf0, lf1, ..., lf10 مشخص نمود.

کدهای مخابره‌شده توسط برخی کلیدهای ویژهٔ دیگر را می‌توان مشخص کرد:

  • kll (رفتن به انتهای صفحه یا home down)،
  • kbs (پس‌بر یا backspace)،
  • ktbc (پاک کردن تمام تب‌ها)،
  • kctab (پاک کردن توقف‌گاه تب در این ستون)،
  • kclr (پاک کردن صفحه یا کلید erase)،
  • kdch1 (حذف نویسه)،
  • kdl1 (حذف خط)،
  • krmir (خروج از حالت درج)،
  • kel (پاک کردن تا انتهای خط)،
  • ked (پاک کردن تا انتهای صفحه)،
  • kich1 (درج نویسه یا ورود به حالت درج)،
  • kil1 (درج خط)،
  • knp (صفحهٔ بعدی)،
  • kpp (صفحهٔ قبلی)،
  • kind (پیمایش به جلو/پایین)،
  • kri (پیمایش به عقب/بالا)،
  • khts (تنظیم توقف‌گاه تب در این ستون).

علاوه بر این، اگر صفحهٔ کلید عددی دارای یک آرایهٔ ۳ در ۳ از کلیدها شامل چهار کلید پیکان باشد، پنج کلید دیگر را می‌توان به صورت ka1، ka3، kb2، kc1 و kc3 مشخص کرد. این کلیدها زمانی مفید هستند که اثرات یک پد جهت‌دار ۳ در ۳ مورد نیاز باشد.

رشته‌های برنامه‌ریزی کلیدهای تابعی را می‌توان به صورت pfkey، pfloc و pfx مشخص کرد. رشته‌ای برای برنامه‌ریزی برچسب‌های صفحهٔ نمایش باید به صورت pln مشخص شود. هر یک از این رشته‌ها دو پارامتر می‌گیرند: شمارهٔ کلید تابعی برای برنامه‌ریزی (از 0 تا 10) و رشته‌ای که باید با آن برنامه‌ریزی شود. شماره‌های کلید تابعی خارج از این محدوده ممکن است به شیوه‌ای وابسته به پایانه، کلیدهای تعریف‌نشده را برنامه‌ریزی کنند. تفاوت میان این قابلیت‌ها این است که pfkey باعث می‌شود فشردن کلید داده‌شده همانند تایپ کردن رشتهٔ داده‌شده توسط کاربر باشد؛ pfloc باعث می‌شود رشته توسط پایانه به صورت محلی اجرا شود؛ و pfx باعث می‌شود رشته به رایانه مخابره شود.

قابلیت‌های nlab، lw و lh تعداد برچسب‌های صفحهٔ نمایشِ قابل برنامه‌ریزی و پهنا و ارتفاع آن‌ها را تعریف می‌کنند. اگر دستورهایی برای روشن و خاموش کردن برچسب‌ها وجود دارد، آن‌ها را در smln و rmln مشخص کنید. smln معمولاً پس از یک یا چند توالی pln در خروجی ارسال می‌شود تا اطمینان حاصل شود که تغییر قابل مشاهده می‌گردد.

تعداد اندکی از قابلیت‌ها تنها برای مدیریت توقفگاه‌های تب استفاده می‌شوند.

  • اگر پایانه دارای تب‌های سخت‌افزاری است، توالی نویسه‌ای را که به توقفگاه تب بعدی پیش می‌رود، به عنوان مقدار قابلیت رشته‌ای tab (ht) مشخص کنید (معمولاً Control+I).
  • توالی نویسه‌ای را که به توقفگاه تب پیشین عقب‌نشینی می‌کند (به سمت چپ حرکت می‌کند) به عنوان مقدار قابلیت رشته‌ای back_tab (cbt) مشخص کنید.
طبق قرارداد، اگر حالت‌های پایانه به گونه‌ای پیکربندی شده باشند که تب‌ها به جای پایانه، توسط میزبان بسط یابند، برنامه‌ها حتی در صورت وجود قابلیت‌های tab (ht) یا back_tab (cbt) نباید از آن‌ها استفاده کنند، زیرا ممکن است توقفگاه‌های تب توسط کاربر به درستی تنظیم نشده باشند.
•
اگر پایانه هنگام روشن شدن دارای توقفگاه‌های تب سخت‌افزاری باشد که در هر n سلول نویسه تنظیم شده‌اند، n را به عنوان مقدار قابلیت عددی init_tabs (it).
دستورهای tset و “tput init” وجود قابلیت init_tabs (it) را به این معنا تفسیر می‌کنند که پایانه مسئول بسط دادن توقفگاه تب است و همچنین آن را به عنوان دستوری برای تنظیم توقفگاه‌های تب روی مقدار آن در نظر می‌گیرند. اگر پایانه دارای توقفگاه‌های تبی باشد که بتوان آن‌ها را در حافظهٔ پایدار ذخیره کرد، شرح نوع terminfo آن می‌تواند فرض کند که آن‌ها به درستی تنظیم شده‌اند.

سایر قابلیت‌ها عبارت‌اند از:

  • is1، is2 و is3، رشته‌های مقداردهی اولیه برای پایانه،
  • iprog، نام مسیر برنامه‌ای که باید برای مقداردهی اولیهٔ پایانه اجرا شود،
  • و if، نام فایلی حاوی رشته‌های طولانیِ مقداردهی اولیه.

انتظار می‌رود این رشته‌ها پایانه را در حالت‌هایی سازگار با بقیهٔ شرح terminfo قرار دهند. آن‌ها معمولاً هر بار که کاربر وارد سیستم می‌شود، توسط گزینهٔ init برنامهٔ tput به پایانه فرستاده می‌شوند. آن‌ها به ترتیب زیر چاپ خواهند شد:

اجرای برنامهٔ
iprog
ارسال خروجیِ

is1 و
is2
تنظیم حاشیه‌ها با استفاده از
mgc یا
smglp و smgrp یا
smgl و smgr
تنظیم تب‌ها با استفاده از
tbc و hts
چاپ فایل
if
و در نهایت ارسال خروجیِ
is3.

بیشترِ مقداردهی اولیه با is2 انجام می‌شود. حالت‌های ویژهٔ پایانه را می‌توان بدون تکرار رشته‌ها، با قرار دادن توالی‌های مشترک در is2 و حالت‌های خاص در is1 و is3 تنظیم نمود.

مجموعه‌ای از توالی‌ها که بازنشانی اساسی‌تری را از یک حالت کاملاً نامشخص انجام می‌دهند، می‌توانند به صورت rs1، rs2، rf و rs3 ارائه شوند، که به ترتیب مشابه is1، is2، if و is3 هستند. این رشته‌ها توسط گزینهٔ reset در tput، یا توسط برنامهٔ reset (یک نام مستعار برای tset)، که هنگام قفل شدن یا به بن‌بست رسیدن پایانه استفاده می‌شود، به خروجی فرستاده می‌شوند. دستورها معمولاً تنها زمانی در rs1، rs2 rs3 و rf قرار داده می‌شوند که اثرات آزاردهنده‌ای روی صفحه ایجاد کنند و هنگام ورود به سیستم ضروری نباشند. به عنوان مثال، دستور قرار دادن vt100 در حالت ۸۰ ستونی معمولاً بخشی از is2 خواهد بود، اما باعث یک پرش بصری آزاردهنده در صفحه می‌شود و از آنجا که پایانه معمولاً از پیش در حالت ۸۰ ستونی قرار دارد، در حالت عادی نیازی به آن نیست.

برنامهٔ reset رشته‌هایی از جمله iprog و غیره را به همان ترتیب برنامهٔ init می‌نویسد، با این تفاوت که به جای is1 و غیره از rs1 و غیره استفاده می‌کند. اگر هر یک از رشته‌های قابلیت بازنشانیِ rs1، rs2، rs3 یا rf وجود نداشته باشند، برنامهٔ reset به رشتهٔ قابلیت مقداردهی اولیهٔ متناظر بازمی‌گردد.

اگر دستورهایی برای تنظیم و پاک کردن توقفگاه‌های تب وجود داشته باشد، می‌توان آن‌ها را به عنوان tbc (پاک کردن همهٔ توقفگاه‌های تب) و hts (تنظیم یک توقفگاه تب در ستون جاری از هر سطر) ارائه کرد. اگر برای تنظیم تب‌ها توالی پیچیده‌تری از آنچه با این دستورها قابل توصیف است نیاز باشد، توالی را می‌توان در is2 یا if قرار داد.

دستور tput reset از همان رشته‌های قابلیتی استفاده می‌کند که دستور reset به کار می‌برد، اگرچه این دو برنامه (tput و reset) گزینه‌های خط فرمان متفاوتی را ارائه می‌دهند.

در عمل، این قابلیت‌های terminfo اغلب در مقداردهی اولیهٔ تب‌ها استفاده نمی‌شوند (اگرچه برای برنامهٔ tabs الزامی هستند):

•
تقریباً تمام پایانه‌های سخت‌افزاری (دست‌کم آن‌هایی که از تب‌ها پشتیبانی می‌کردند) آن‌ها را روی هر هشت ستون مقداردهی اولیه می‌کردند:
تنها استثنا سری AT&T 2300 بود که تب‌ها را روی هر پنج ستون تنظیم می‌کرد.
  • به‌ویژه، سازندگان پایانه‌های سخت‌افزاری که معمولاً به عنوان الگو برای شبیه‌سازهای پایانهٔ امروزی استفاده می‌شوند، مستنداتی ارائه کردند که نشان می‌داد هشت ستون استاندارد بوده است.
  • به همین دلیل، برنامه‌های مقداردهی اولیهٔ پایانه tput و tset تنها زمانی از قابلیت‌های tbc (clear_all_tabs) و hts (set_tab) مستقیماً استفاده می‌کنند که قابلیت it (init_tabs) روی مقداری غیر از هشت تنظیم شده باشد.

بسیاری از پایانه‌های قدیمی‌تر و کندتر نه از دست‌دهی XON/XOFF و نه از DTR پشتیبانی می‌کنند، از جمله پایانه‌های نسخهٔ چاپی و برخی CRTهای بسیار قدیمی (برای نمونه DEC VT100ها). این پایانه‌ها ممکن است پس از برخی حرکات مکان‌نما و تغییرات صفحه، به نویسه‌های فاصله‌گذاری (padding) نیاز داشته باشند.

اگر پایانه برای کنترل جریان از دست‌دهی xon/xoff استفاده می‌کند (یعنی هنگامی که بافرهای ورودی آن نزدیک به پر شدن هستند، خودکار ^S را به میزبان بازمی‌فرستد)، xon را تنظیم کنید. این قابلیت ارسال فاصله‌گذاری را متوقف می‌کند. همچنین می‌توانید آن را برای دستگاه‌های کنسول نگاشت‌شده در حافظه که عملاً محدودیت سرعت ندارند تنظیم کنید. اطلاعات فاصله‌گذاری همچنان باید درج شوند تا روال‌ها بتوانند دربارهٔ هزینه‌های نسبی تصمیم‌گیری بهتری داشته باشند، اما نویسه‌های فاصله‌گذاری واقعی مخابره نخواهند شد.

اگر pb (نرخ باود فاصله‌گذاری) مشخص شده باشد، فاصله‌گذاری در نرخ‌های باود پایین‌تر از مقدار pb متوقف می‌شود. اگر ورودی فاقد نرخ باود فاصله‌گذاری باشد، آن‌گاه ارسال یا عدم ارسال فاصله‌گذاری کاملاً توسط xon کنترل می‌شود.

اگر پایانه به نویسه‌ای غیر از نویسهٔ تهی (صفر) به عنوان پرکننده نیاز دارد، می‌توان آن را به صورت pad مشخص کرد. تنها نویسهٔ اول از رشتهٔ pad استفاده می‌شود.

برخی از پایانه‌ها دارای یک “خط وضعیت” اضافی هستند که معمولاً توسط نرم‌افزارها استفاده نمی‌شود (و بنابراین در قابلیت lines پایانه شمرده نمی‌شود).

ساده‌ترین حالت، خط وضعیتی است که مکان‌نمای آن قابل آدرس‌دهی است اما بخشی از ناحیهٔ پیمایش اصلی روی صفحه نیست؛ Heathkit H19 دارای خط وضعیتی از این نوع است، همانند یک VT100 با ۲۴ خط و ناحیهٔ پیمایش ۲۳ خطی که در هنگام مقداردهی اولیه تنظیم شده باشد. این وضعیت توسط قابلیت hs نشان داده می‌شود.

برخی پایانه‌های دارای خط وضعیت برای دسترسی به خط وضعیت به توالی‌های ویژه‌ای نیاز دارند. این موارد را می‌توان به صورت یک رشته با تک‌پارامتر tsl بیان کرد که مکان‌نما را به ستونی مشخص بر مبنای صفر در خط وضعیت می‌برد. قابلیت fsl باید به موقعیت‌های مکان‌نما در صفحهٔ اصلی پیش از آخرین tsl بازگردد. شاید لازم باشد مقادیر رشته‌ای sc (ذخیرهٔ مکان‌نما) و rc (بازیابی مکان‌نما) را در tsl و fsl تعبیه کنید تا این کار انجام شود.

خط وضعیت معمولاً هم‌عرض با عرض پایانه در نظر گرفته می‌شود. اگر این‌گونه نباشد، می‌توانید آن را با قابلیت عددی wsl مشخص کنید.

دستوری برای پاک کردن یا خالی کردن خط وضعیت را می‌توان با dsl مشخص کرد.

قابلیت بولی eslok مشخص می‌کند که توالی‌های گریز، تب‌ها و غیره طبق معمول در خط وضعیت کار می‌کنند.

پیاده‌سازی ncurses هنوز از هیچ‌یک از این قابلیت‌ها استفاده نمی‌کند. آن‌ها در اینجا مستند شده‌اند تا در صورتی که روزی مهم شدند در دسترس باشند.

بسیاری از پایانه‌ها دارای مجموعه‌نویسه‌های جایگزینی هستند که برای رسم فرم‌ها مفیدند. Terminfo و curses پشتیبانی درونی از بیشتر نویسه‌های ترسیمیِ پشتیبانی‌شده توسط VT100 را به همراه برخی نویسه‌های افزوده‌شده از AT&T 4410v1 دارا هستند. این مجموعه‌نویسهٔ جایگزین می‌تواند با قابلیت acsc مشخص شود.

acsc
نام ACS مقدار نماد جایگزین ASCII / نام گلیف
ACS_RARROW 0x2b + > پیکان رو به راست
ACS_LARROW 0x2c , < پیکان رو به چپ
ACS_UARROW 0x2d - ^ پیکان رو به بالا
ACS_DARROW 0x2e . v پیکان رو به پایین
ACS_BLOCK 0x30 0 # بلوک مربعی توپر
ACS_DIAMOND 0x60 ` + لوزی
ACS_CKBOARD 0x61 a : تخته شطرنجی (نقطه‌چین)
ACS_DEGREE 0x66 f \ نماد درجه
ACS_PLMINUS 0x67 g # مثبت/منفی
ACS_BOARD 0x68 h # تختهٔ مربع‌ها
ACS_LANTERN 0x69 i # نماد فانوس
ACS_LRCORNER 0x6a j + گوشهٔ پایین راست
ACS_URCORNER 0x6b k + گوشهٔ بالا راست
ACS_ULCORNER 0x6c l + گوشهٔ بالا چپ
ACS_LLCORNER 0x6d m + گوشهٔ پایین چپ
ACS_PLUS 0x6e n + بعلاوهٔ بزرگ یا تقاطع
ACS_S1 0x6f o ~ خط پویش ۱
ACS_S3 0x70 p - خط پویش ۳
ACS_HLINE 0x71 q - خط افقی
ACS_S7 0x72 r - خط پویش ۷
ACS_S9 0x73 s _ خط پویش ۹
ACS_LTEE 0x74 t + اتصال T رو به راست
ACS_RTEE 0x75 u + اتصال T رو به چپ
ACS_BTEE 0x76 v + اتصال T رو به بالا
ACS_TTEE 0x77 w + اتصال T رو به پایین
ACS_VLINE 0x78 x | خط عمودی
ACS_LEQUAL 0x79 y < کوچک‌تر یا مساوی
ACS_GEQUAL 0x7a z > بزرگ‌تر یا مساوی
ACS_PI 0x7b { * پی یونانی
ACS_NEQUAL 0x7c | ! نامساوی
ACS_STERLING 0x7d } f نماد پوند بریتانیا
ACS_BULLET 0x7e ~ o گلوله (bullet)

چند نکته در مورد خود جدول صدق می‌کند:

  • استاندارد X/Open Curses به نادرست بیان می‌کند که نگاشت lantern (فانوس) حرف بزرگ “I” است، گرچه پیاده‌سازی‌های یونیکس از نگاشت حرف کوچک “i” استفاده می‌کنند.
  • پایانهٔ DEC VT100 گرافیک را با استفاده از ویژگی مجموعه‌نویسهٔ جایگزین پیاده‌سازی می‌کرد، که به طور موقت بین حالت‌ها جابه‌جا می‌شد و نویسه‌هایی در محدودهٔ 0x60 (96) تا 0x7e (126) (ستون acsc Value در جدول) ارسال می‌کرد.
  • پایانهٔ AT&T نویسه‌های گرافیکی خارج از این محدوده را اضافه کرد.
برخی از نویسه‌های درون این محدوده با VT100 مطابقت ندارند؛ احتمالاً آن‌ها در پایانهٔ AT&T استفاده می‌شده‌اند: تختهٔ مربع‌ها جایگزین نماد newline در VT100 می‌شود، در حالی که نماد فانوس جایگزین نماد vertical tab در VT100 می‌گردد. سایر نمادهای VT100 برای نویسه‌های کنترلی (horizontal tab، carriage return و line-feed) در curses دوباره استفاده نشده‌اند.

بهترین روش برای تعریف مجموعهٔ گرافیکی یک دستگاه جدید، افزودن یک ستون به کپی‌ای از این جدول برای پایانهٔ خود است، که نویسه‌ای را مشخص کند که (هنگامی که بین کلیدهای تغییر حالت smacs/rmacs ارسال می‌شود) به عنوان گرافیک متناظر رندر خواهد شد. سپس جفت‌نویسه‌های VT100/پایانهٔ خود را به ترتیب از راست به چپ بخوانید؛ این‌ها رشتهٔ ACSC را تشکیل می‌دهند.

توابع curses در کتابخانه با نام‌های init_pair و init_color به دستکاری جفت‌های رنگ و رنگ‌ها (مقادیر یا شاخص‌های رنگ، مانند “1=red”) که در این بخش مورد بحث قرار می‌گیرند، می‌پردازند (برای جزئیات دربارهٔ این توابع و توابع مرتبط، curs_color(3X) را ببینید).

بیشتر پایانه‌های رنگی در رویکرد خود به مدیریت رنگ، یا “شبیه تکترونیکس” یا “شبیه اچ‌پی” هستند.

  • پایانه‌های شبیه تکترونیکس مجموعه‌ای متشکل از n رنگ را تعریف می‌کنند (که در آن n معمولاً ۸ است)، و می‌توانند رنگ‌های پیش‌زمینه و پس‌زمینهٔ سلول نویسه را به طور مستقل تغییر دهند، و آن‌ها را در n×n جفت رنگ ترکیب کنند. پایانه‌های استاندارد ANSI شبیه تکترونیکس هستند.
  • در پایانه‌های شبیه اچ‌پی، کاربر باید هر جفت رنگ را به طور جداگانه تنظیم کند؛ پیش‌زمینه و پس‌زمینه به طور مستقل قابل تغییر نیستند. حداکثر m جفت رنگ را می‌توان از 2×m رنگ مختلف پیکربندی کرد.

برخی از قابلیت‌های پایه‌ای مدیریت رنگ مستقل از روش کدگذاری رنگ هستند. قابلیت‌های عددی max_colors (colors) و max_pairs (pairs) حداکثر تعداد رنگ‌ها و جفت‌های رنگی را که دستگاه می‌تواند هم‌زمان نمایش دهد، مشخص می‌کنند. قابلیت رشته‌ای orig_pair (op) (“جفت رنگ اصلی”) رنگ‌های پیش‌زمینه و پس‌زمینه را به مقادیر پیش‌فرض آن‌ها برای پایانه بازنشانی می‌کند. قابلیت رشته‌ای orig_colors (oc) (“رنگ‌های اصلی”) تمامی رنگ‌ها یا جفت‌های رنگی را به مقادیر پیش‌فرض آن‌ها برای پایانه بازنشانی می‌کند. برخی از انواع پایانه‌ها (از جمله بسیاری از شبیه‌سازهای پایانهٔ PC) نواحی صفحه را به جای پس‌زمینهٔ پیش‌فرض زمان روشن شدن، با رنگ پس‌زمینهٔ فعلی پاک می‌کنند؛ این‌ها باید قابلیت بولی back_color_erase (bce) را اعلام کنند.

در حالی که کتابخانهٔ curses با جفت‌های رنگ کار می‌کند (که نشان‌دهندهٔ ناتوانی برخی دستگاه‌ها در تنظیم مستقل رنگ‌های پیش‌زمینه و پس‌زمینه است)، قابلیت‌های جداگانه‌ای برای تنظیم این ویژگی‌ها وجود دارد:

  • برای تغییر رنگ پیش‌زمینه یا پس‌زمینهٔ فعلی در یک پایانهٔ نوع تکترونیکس، از setaf (تنظیم پیش‌زمینهٔ ANSI) و setab (تنظیم پس‌زمینهٔ ANSI) یا setf (تنظیم پیش‌زمینه) و setb (تنظیم پس‌زمینه) استفاده کنید. این قابلیت‌ها یک پارامتر می‌گیرند که همان شمارهٔ رنگ است. مستندات SVr4 تنها setaf/setab را توصیف می‌کند؛ پیش‌نویس XPG4 بیان می‌دارد که «اگر پایانه از توالی‌های گریز ANSI برای تنظیم پس‌زمینه و پیش‌زمینه پشتیبانی می‌کند، آن‌ها باید به ترتیب به صورت setaf و setab کدگذاری شوند».
  • اگر پایانه از سایر توالی‌های گریز برای تنظیم پس‌زمینه و پیش‌زمینه پشتیبانی کند، آن‌ها باید به ترتیب به صورت setf و setb کدگذاری شوند. توابع vidputs و refresh(3X) در صورت تعریف بودن قابلیت‌های setaf و setab از آن‌ها استفاده می‌کنند.

قابلیت‌های setaf/setab و setf/setb هر کدام یک آرگومان عددی منفرد می‌گیرند. مقادیر آرگومان ۰ تا ۷ در setaf/setab به صورت سازگار و قابل‌حمل به شرح زیر تعریف شده‌اند (ستون میانی همان #define نمادین موجود در سرایند کتابخانه‌های curses یا ncurses است). سخت‌افزار پایانه آزاد است که این‌ها را به دلخواه خود نگاشت کند، اما مقادیر RGB مکان‌های معمول در فضای رنگی را نشان می‌دهند.

رنگ #define مقدار RGB
سیاه COLOR_BLACK 0 0, 0, 0
قرمز COLOR_RED 1 max, 0, 0
سبز COLOR_GREEN 2 0, max, 0
زرد COLOR_YELLOW 3 max, max, 0
آبی COLOR_BLUE 4 0, 0, max
سرخابی COLOR_MAGENTA 5 max, 0, max
فیروزه‌ای COLOR_CYAN 6 0, max, max
سفید COLOR_WHITE 7 max, max, max

مقادیر آرگومان setf/setb از لحاظ تاریخی با نگاشت متفاوتی مطابقت دارند، یعنی:

رنگ #define مقدار RGB
سیاه COLOR_BLACK 0 0, 0, 0
آبی COLOR_BLUE 1 0, 0, max
سبز COLOR_GREEN 2 0, max, 0
فیروزه‌ای COLOR_CYAN 3 0, max, max
قرمز COLOR_RED 4 max, 0, 0
سرخابی COLOR_MAGENTA 5 max, 0, max
زرد COLOR_YELLOW 6 max, max, 0
سفید COLOR_WHITE 7 max, max, max

بسیار مهم است که این دو مجموعه از قابلیت‌های رنگی با یکدیگر اشتباه گرفته نشوند؛ در غیر این صورت رنگ‌های قرمز و آبی روی صفحه نمایش جابه‌جا خواهند شد.

در یک پایانهٔ شبیه اچ‌پی، از scp با پارامتر شمارهٔ جفت رنگ استفاده کنید تا مشخص شود کدام جفت رنگ جاری است.

برخی از پایانه‌ها اجازه می‌دهند که مقادیر رنگ تغییر داده شوند:

  • در یک پایانهٔ شبیه تکترونیکس، ممکن است قابلیت ccc برای نشان دادن این‌که رنگ‌ها قابل تغییر هستند وجود داشته باشد. در این صورت، قابلیت initc یک شمارهٔ رنگ (۰ تا colors - 1) و سه پارامتر دیگر را می‌گیرد که رنگ را توصیف می‌کنند. این سه پارامتر به طور پیش‌فرض به صورت مقادیر RGB (قرمز، سبز، آبی / Red, Green, Blue) تفسیر می‌شوند. اگر قابلیت بولی hls وجود داشته باشد، به جای آن به عنوان شاخص‌های HLS (فام، روشنایی، اشباع / Hue, Lightness, Saturation) تفسیر می‌گردند. محدوده‌ها وابسته به پایانه هستند.
  • در یک پایانهٔ شبیه اچ‌پی، initp ممکن است قابلیتی برای تغییر مقدار یک جفت رنگ ارائه دهد. این قابلیت هفت پارامتر می‌گیرد: یک شمارهٔ جفت رنگ (۰ تا max_pairs - 1)، و دو سه‌تایی که ابتدا رنگ پس‌زمینه و سپس رنگ پیش‌زمینه را توصیف می‌کنند. بسته به hls، این پارامترها باید (قرمز، سبز، آبی) یا (فام، روشنایی، اشباع) باشند.

در برخی پایانه‌های رنگی، رنگ‌ها با برجسته‌سازی‌ها تداخل پیدا می‌کنند. می‌توانید این تداخل‌ها را با قابلیت ncv ثبت کنید. این یک ماسک بیتی از ویژگی‌هایی است که هنگام فعال بودن رنگ‌ها نباید استفاده شوند. تطابق با ویژگی‌های شناخته‌شده توسط curses به صورت زیر است:

ویژگی بیت ده‌دهی تنظیم توسط
A_STANDOUT 0 1 sgr
A_UNDERLINE 1 2 sgr
A_REVERSE 2 4 sgr
A_BLINK 3 8 sgr
A_DIM 4 16 sgr
A_BOLD 5 32 sgr
A_INVIS 6 64 sgr
A_PROTECT 7 128 sgr
A_ALTCHARSET 8 256 sgr
A_HORIZONTAL 9 512 sgr1
A_LEFT 10 1024 sgr1
A_LOW 11 2048 sgr1
A_RIGHT 12 4096 sgr1
A_TOP 13 8192 sgr1
A_VERTICAL 14 16384 sgr1
A_ITALIC 15 32768 sitm

برای مثال، در بسیاری از کنسول‌های IBM PC، ویژگی زیرخط‌دار با رنگ پیش‌زمینهٔ آبی تداخل دارد و در حالت رنگی در دسترس نیست. این پایانه‌ها باید دارای یک قابلیت ncv با مقدار ۲ باشند.

نسخهٔ SVr4 curses هیچ کاری با ncv انجام نمی‌دهد، اما ncurses آن را شناسایی کرده و خروجی را به نفع رنگ‌ها بهینه‌سازی می‌کند.

اگر پایانه به نویسه‌ای غیر از نویسهٔ تهی (صفر یا null) به عنوان پرکننده (pad) نیاز داشته باشد، می‌توان آن را با pad مشخص کرد. تنها نخستین نویسه از رشتهٔ pad استفاده می‌شود. اگر پایانه نویسهٔ پرکننده ندارد، npc را مشخص کنید. توجه داشته باشید که ncurses متغیر PC سازگار با termcap را پیاده‌سازی می‌کند؛ اگرچه ممکن است برنامه این مقدار را روی چیزی غیر از تهی تنظیم کند، اما ncurses ابتدا npc را آزمایش کرده و در صورتی که پایانه نویسهٔ پرکننده نداشته باشد، از napms استفاده خواهد کرد.

اگر پایانه بتواند نیم‌خط به بالا یا پایین حرکت کند، این موضوع را می‌توان با hu (نیم‌خط به بالا) و hd (نیم‌خط به پایین) مشخص کرد. این ویژگی عمدتاً برای بالانویس‌ها و زیرنویس‌ها در پایانه‌های نسخهٔ چاپی (hard-copy) سودمند است. اگر یک پایانهٔ نسخهٔ چاپی بتواند به صفحهٔ بعدی برود (form feed)، این را با ff (معمولاً control/L) مشخص کنید.

اگر دستوری برای تکرار یک نویسهٔ معین به تعداد دفعات مشخص وجود داشته باشد (جهت صرفه‌جویی در زمان ارسال شمار زیادی از نویسه‌های یکسان)، می‌توان آن را با رشتهٔ پارامتردار rep نشان داد. پارامتر نخست، نویسه‌ای است که باید تکرار شود و پارامتر دوم تعداد دفعات تکرار آن است. بنابراین، tparm(repeat_char, 'x', 10) همانند “xxxxxxxxxx” خواهد بود.

اگر پایانه دارای نویسهٔ فرمان قابل تنظیم باشد، مانند TEKTRONIX 4025، می‌توان آن را با cmdch مشخص کرد. یک نویسهٔ فرمان نمونه (prototype) انتخاب می‌شود که در تمامی قابلیت‌ها استفاده می‌گردد. این نویسه در قابلیت cmdch برای شناسایی داده می‌شود. قرارداد زیر در برخی سیستم‌های یونیکس پشتیبانی می‌شود: محیط برای یافتن یک متغیر CC جستجو می‌شود، و در صورت یافت شدن، تمام موارد تکرار نویسهٔ نمونه با نویسهٔ موجود در متغیر محیطی جایگزین می‌شوند.

توصیف‌های پایانه‌ای که نشان‌دهندهٔ نوع مشخصی از یک پایانهٔ شناخته‌شده نیستند، مانند switch، dialup، patch، و network، باید شامل قابلیت gn (عمومی یا generic) باشند تا برنامه‌ها بتوانند اعلام کنند که روش برقراری ارتباط با پایانه را نمی‌دانند. (این قابلیت در مورد توصیف‌های پایانهٔ مجازی که توالی‌های گریز آن‌ها شناخته شده است، صدق نمی‌کند.)

اگر پایانه یک “کلید متا” داشته باشد که همانند یک کلید تبدیل (shift) عمل کند، و بیت هشتم هر نویسهٔ ارسال‌شده را یک کند، این موضوع را می‌توان با km مشخص کرد. در غیر این صورت، نرم‌افزار فرض خواهد کرد که بیت هشتم بیت توازن (parity) است و معمولاً پاک خواهد شد. اگر رشته‌هایی برای روشن و خاموش کردن این “حالت متا” وجود داشته باشند، می‌توان آن‌ها را به صورت smm و rmm مشخص کرد.

اگر پایانه خطوط حافظهٔ بیشتری نسبت به آنچه در یک لحظه روی صفحه جا می‌شود داشته باشد، تعداد خطوط حافظه را می‌توان با lm مشخص کرد. مقدار lm#0 نشان می‌دهد که تعداد خطوط ثابت نیست، اما هنوز حافظهٔ بیشتری نسبت به گنجایش صفحه وجود دارد.

اگر پایانه یکی از پایانه‌های پشتیبانی‌شده توسط پروتکل پایانهٔ مجازی یونیکس باشد، شمارهٔ پایانه را می‌توان با vt مشخص کرد.

رشته‌های رونوشت رسانه (Media copy) که یک چاپگر کمکیِ متصل به پایانه را کنترل می‌کنند می‌توانند به این صورت مشخص شوند: mc0: چاپ محتویات صفحه، mc4: خاموش کردن چاپگر، و mc5: روشن کردن چاپگر. هنگامی که چاپگر روشن است، تمام متن ارسال‌شده به پایانه به چاپگر نیز فرستاده خواهد شد. این موضوع که آیا متن در هنگام روشن بودن چاپگر روی صفحهٔ نمایش پایانه نیز نشان داده می‌شود یا خیر، تعریف‌نشده است. گونهٔ دیگر mc5p یک پارامتر می‌گیرد، و چاپگر را به تعداد نویسه‌هایی برابر با مقدار آن پارامتر روشن نگه می‌دارد، سپس چاپگر را خاموش می‌کند. این پارامتر نباید از 255 فراتر رود. تمام متن، از جمله mc4، در مدتی که یک mc5p برقرار است، به طور شفاف به چاپگر منتقل می‌شود.

پایانه‌های Hazeltine، که اجازه نمی‌دهند نویسه‌های “~” نمایش داده شوند، باید hz را مشخص کنند.

پایانه‌هایی که تغییر خط (line-feed) را بلافاصله پس از شکست خودکار خط am نادیده می‌گیرند، مانند Concept و vt100، باید xenl را مشخص کنند.

اگر el برای خلاص شدن از حالت برجسته‌سازی (standout) الزامی باشد (به جای نوشتنِ صِرفِ متن عادی روی آن)، باید xhp داده شود.

پایانه‌های Teleray، که در آن‌ها نویسه‌های تب تمامی نویسه‌هایی را که مکان‌نما از روی آن‌ها می‌گذرد به نویسهٔ فاصله تبدیل می‌کنند، باید xt (تب‌های مخرب یا destructive tabs) را مشخص کنند. نکته: متغیری که این موضوع را نشان می‌دهد اکنون “dest_tabs_magic_smso” است؛ در نسخه‌های قدیمی‌تر، teleray_glitch بود. این اشکال همچنین به این معنا در نظر گرفته می‌شود که قرار دادن مکان‌نما روی یک “کوکی جادویی” (magic cookie) امکان‌پذیر نیست، و برای پاک کردن حالت برجسته‌سازی، در عوض استفاده از حذف و درج خط ضروری است. پیاده‌سازی ncurses این اشکال را نادیده می‌گیرد.

پایانهٔ Beehive Superbee، که قادر به ارسال صحیح نویسه‌های گریز (escape) یا control/C نیست، دارای xsb است، که نشان می‌دهد کلید f1 برای گریز و کلید f2 برای control/C به کار می‌رود. (تنها برخی از مدل‌های Superbee بسته به نسخهٔ ROM این مشکل را دارند.) توجه داشته باشید که در نسخه‌های قدیمی‌تر terminfo، این قابلیت “beehive_glitch” نامیده می‌شد؛ اکنون “no_esc_ctl_c” است.

سایر مشکلات خاص پایانه‌ها ممکن است با افزودن قابلیت‌های بیشتری به صورت xx اصلاح شوند.

ورودی‌های طولانی terminfo بعید است مشکلی ایجاد کنند؛ تا به امروز هیچ ورودی‌ای حتی به حداکثر ۴۰۹۶ بایتیِ جدول رشته‌های terminfo نزدیک هم نشده است. متأسفانه، ترجمه‌های termcap بسیار سخت‌گیرانه‌تر محدود شده‌اند (به ۱۰۲۳ بایت)، بنابراین ترجمه‌های termcap از ورودی‌های طولانی terminfo می‌توانند مشکل‌ساز شوند.

صفحات راهنمای 4.3BSD و نسخه‌های قدیمی‌تر tgetent به کاربر دستور می‌دهند که یک بافر ۱۰۲۴ بایتی برای ورودی termcap تخصیص دهد. این ورودی توسط کتابخانهٔ termcap به نویسهٔ تهی (null) ختم می‌شود، بنابراین حداکثر طول امن برای یک ورودی termcap برابر با 1k-1 (۱۰۲۳) بایت است. بسته به اینکه برنامه و کتابخانهٔ termcap مورد استفاده چه می‌کنند، و اینکه نوع پایانهٔ مورد جستجوی tgetent در کجای فایل termcap قرار دارد، چندین اتفاق ناگوار ممکن است رخ دهد:

  • برخی کتابخانه‌های termcap یک پیام هشدار چاپ می‌کنند،
  • برخی در صورت یافتن ورودیِ طولانی‌تر از ۱۰۲۳ بایت خارج می‌شوند،
  • برخی نه خارج می‌شوند و نه هشدار می‌دهند، و هیچ کار مفیدی انجام نمی‌دهند، و
  • برخی صرفاً ورودی‌ها را به ۱۰۲۳ بایت کوتاه (truncate) می‌کنند.

برخی برنامه‌های کاربردی بیش از ۱ کیلوبایتِ توصیه‌شده را برای ورودی termcap تخصیص می‌دهند؛ برخی دیگر این کار را نمی‌کنند.

هر ورودی termcap دارای دو اندازهٔ مهم مربوط به خود است: پیش از گسترش “tc” و پس از گسترش “tc”. “tc” قابلیتی است که یک ورودی دیگر termcap را به انتهای ورودی فعلی می‌افزاید تا قابلیت‌های آن را اضافه کند. اگر یک ورودی termcap از قابلیت “tc” استفاده نکند، مسلماً هر دو طول یکسان خواهند بود.

طول “پیش از گسترش tc” مهم‌ترین است، زیرا فراتر از صرفاً کاربران آن پایانهٔ خاص اثر می‌گذارد. این برابر است با طول ورودی همان‌گونه که در /etc/termcap وجود دارد، منهای جفت‌های اسلش وارونه-خط جدید، که tgetent هنگام خواندن آن را حذف می‌کند. برخی کتابخانه‌های termcap خط جدید پایانی را نیز حذف می‌کنند (termcap متعلق به GNU چنین نمی‌کند). اکنون فرض کنید:

  • یک ورودی termcap پیش از گسترش بیش از ۱۰۲۳ بایت طول داشته باشد،
  • و برنامه فقط یک بافر ۱ کیلوبایتی تخصیص داده باشد،
  • و کتابخانهٔ termcap (مانند مورد موجود در BSD/OS 1.1 و GNU) کل ورودی را صرف‌نظر از طول آن در بافر بخواند تا ببیند آیا این همان ورودی مورد نظر است یا خیر،
  • و tgetent در حال جستجو برای نوع پایانه‌ای باشد که یا همان ورودی طولانی است، یا پس از ورودی طولانی در فایل termcap ظاهر می‌شود، یا اصلاً در فایل وجود ندارد (به طوری که tgetent مجبور است تمام فایل termcap را جستجو کند).

در این صورت tgetent حافظه و احتمالاً پشتهٔ خود را بازنویسی (overwrite) کرده و به احتمال زیاد موجب تخلیهٔ حافظه (core dump) و فروپاشی برنامه خواهد شد. برنامه‌هایی مانند telnet به طور ویژه‌ای آسیب‌پذیر هستند؛ برنامه‌های امروزی telnet مقدارهایی مانند نوع پایانه را به طور خودکار منتقل می‌کنند. نتایج با یک کتابخانهٔ termcap، مانند سامانه‌های SunOS 4.1.3 و Ultrix 4.4، که هنگام خواندن یک ورودی بیش از حد طولانی termcap پیام‌های هشدار چاپ می‌کند، تقریباً به همان اندازه نامطلوب است. اگر یک کتابخانهٔ termcap ورودی‌های طولانی را کوتاه کند، مانند OSF/1 3.0، در اینجا از فروپاشی مصون خواهد بود اما داده‌های نادرستی را برای پایانه بازمی‌گرداند.

طول “پس از گسترش tc” اثری مشابه موارد فوق خواهد داشت، اما تنها برای افرادی که در عمل TERM را روی آن نوع پایانه تنظیم کرده‌اند؛ زیرا tgetent گسترش “tc” را تنها پس از یافتن نوع پایانهٔ مورد نظر انجام می‌دهد، نه در حین جستجو.

به طور خلاصه، یک ورودی termcap که طولانی‌تر از ۱۰۲۳ بایت باشد می‌تواند در ترکیب‌های گوناگون از کتابخانه‌های termcap و برنامه‌های کاربردی، موجب تخلیهٔ حافظه (core dump)، هشدارها یا عملکرد نادرست شود. اگر حتی پیش از گسترش “tc” بیش از حد طولانی باشد، این اثر را حتی برای کاربران برخی دیگر از انواع پایانه‌ها و کاربرانی که متغیر TERM آن‌ها فاقد ورودی termcap است خواهد داشت.

هنگامی که در حالت -C (ترجمه به termcap) باشد، پیاده‌سازی ncurses از tic(1M) در صورتی که طول ترجمهٔ termcap پیش از tc بیش از حد طولانی باشد، پیام‌های هشدار صادر می‌کند. گزینهٔ -c (بررسی یا check) نیز طول‌های حل‌شده (پس از گسترش tc) را بررسی می‌نماید.

/usr/share/terminfo
شاخهٔ پایگاه دادهٔ توصیف پایانهٔ کامپایل‌شده

جستجو برای توصیف‌های پایانه در $HOME/.terminfo و TERMINFO_DIRS توسط پیاده‌سازی‌های قدیمی‌تر پشتیبانی نمی‌شود.

برخی پیاده‌سازی‌های curses در SVr4، و تمامی پیاده‌سازی‌های پیش از SVr4، عملگرهای %A و %O را در رشته‌های پارامتر تفسیر نمی‌کنند.

استانداردهای SVr4/XPG4 مشخص نمی‌کنند که آیا msgr در هنگام قرار داشتن در یک حالتِ مجموعه‌نویسهٔ جایگزین (alternate-character-set)، اجازهٔ حرکت را می‌دهد یا خیر (چنین حالت‌هایی ممکن است از جمله، CR و NL را به نویسه‌هایی نگاشت کنند که موجب حرکت‌های محلی نمی‌شوند). پیاده‌سازی ncurses مقدار msgr را در حالت ALTCHARSET نادیده می‌گیرد. این امر این احتمال را به وجود می‌آورد که یک پیاده‌سازی XPG4 با تفسیری مخالف، ممکن است نیاز داشته باشد تا قابلیت msgr در ورودی‌های terminfo که برای ncurses ساخته شده‌اند، غیرفعال (خاموش) باشد.

کتابخانهٔ ncurses درج نویسه و حالت‌های درج نویسه را به روشی اندکی غیر استاندارد مدیریت می‌کند تا به بهره‌وری بهتری در به‌روزرسانی دست یابد. زیربخش درج/حذف نویسه (Insert/Delete Character) در بالا را ببینید.

جایگزینی‌های پارامتر برای set_clock و display_clock در SVr4 یا X/Open Curses مستند نشده‌اند. آن‌ها از مستندات پایانهٔ AT&T 505 استنباط شده‌اند.

در انتساب قابلیت kmous دقت کنید. کتابخانهٔ ncurses تمایل دارد آن را به عنوان KEY_MOUSE تفسیر کند، جهت استفاده توسط پایانه‌ها و شبیه‌سازهایی مانند xterm که می‌توانند اطلاعات ردیابی موشواره را در جریان ورودیِ صفحه‌کلید بازگردانند.

استاندارد X/Open Curses اشاره‌ای به حروف مورب (italics) نکرده است. برنامه‌های با قابلیت حمل باید فرض کنند که قابلیت‌های عددی مقدارهای ۱۶ بیتی علامت‌دار هستند. این شامل قابلیت no_color_video (ncv) نیز می‌شود. مقدار ماسک 32768 که برای حروف مورب با ncv به کار می‌رود ممکن است با یک ncv غایب یا لغوشده اشتباه گرفته شود. اگر حروف مورب باید همراه با رنگ‌ها کار کنند، مقدار ncv باید مشخص شود، حتی اگر صفر باشد.

پورت‌های تجاری مختلف از terminfo و curses از زیرمجموعه‌های متفاوتی از X/Open Curses و (در برخی موارد) گسترش‌های متفاوتی پشتیبانی می‌کنند. در اینجا خلاصه‌ای آورده شده است، که تا اکتبر ۱۹۹۵ دقیق است، زمانی که پس از آن بازار تجاری یونیکس منقبض شد و تنوع خود را از دست داد.

  • سیستم‌های SVr4، Solaris، و ncurses از تمام قابلیت‌های SVr4 پشتیبانی می‌کنند.
  • سیستم IRIX از مجموعهٔ SVr4 پشتیبانی می‌کند و یک قابلیت رشته‌ای گسترش‌یافتهٔ مستندنشده (set_pglen) را اضافه می‌کند.
  • سیستم‌های SVr1 و Ultrix از یک زیرمجموعهٔ محدود از قابلیت‌های terminfo پشتیبانی می‌کنند. قابلیت‌های بولی به xon_xoff ختم می‌شوند؛ قابلیت‌های عددی به width_status_line؛ و قابلیت‌های رشته‌ای به prtr_non.
  • سیستم HP/UX از زیرمجموعهٔ SVr1 پشتیبانی می‌کند، به‌علاوهٔ مقدارهای عددی SVr[234] شامل num_labels، label_height، label_width، به‌علاوهٔ کلیدهای تابعی ۱۱ تا ۶۳، به‌علاوهٔ plab_norm، label_on، و label_off، به‌همراه شماری از گسترش‌های ناسازگار در جدول رشته‌ها.
  • سیستم AIX از زیرمجموعهٔ SVr1 پشتیبانی می‌کند، به‌علاوهٔ کلیدهای تابعی ۱۱ تا ۶۳، به‌همراه شماری از گسترش‌های ناسازگار در جدول رشته‌ها.
  • سیستم OSF/1 هم از مجموعهٔ SVr4 و هم از گسترش‌های AIX پشتیبانی می‌کند.

روی این‌که ورودی‌های کامپایل‌شدهٔ (باینری) terminfo میان سیستم‌های تجاری یونیکس قابل حمل باشند، حساب نکنید. دست‌کم دو پیاده‌سازی از terminfo (پیاده‌سازی‌های مربوط به HP-UX و AIX) پس از SVr1 از دیگر سیستم‌های یونیکس System V فاصله گرفتند، و قابلیت‌های گسترش‌یافته‌ای را به جدول رشته‌ها افزودند که (در قالب باینری) با گسترش‌های بعدی System V و X/Open Curses تداخل پیدا می‌کنند.

Zeyd M. Ben-Halim، Eric S. Raymond، Thomas E. Dickey. بر پایهٔ pcurses اثر Pavel Curtis.

infocmp(1M)، tabs(1)، tic(1M)، curses(3X)، curs_color(3X)، curs_terminfo(3X)، curs_variables(3X)، printf(3)، term_variables(3X)، term(5)، user_caps(5)

2025-08-16 ncurses 6.6