user_caps(5) File formats user_caps(5)

user_caps - قالب قابلیت‌های تعریف‌شده توسط کاربر در terminfo

infocmp -x

tic -x

پیش از ncurses 5.0 (1999)، پایگاه‌های دادهٔ terminfo از یک مجموعهٔ ثابت از قابلیت‌های پایانه استفاده می‌کردند که برای پایگاه دادهٔ پایانهٔ SVr2 در سال ۱۹۸۴ طراحی شده بود، در مراحلی در طول SVr4 (1989) به آن افزوده شد، و از سال ۱۹۹۵ در X/Open Curses استانداردسازی گشت.

بیشتر این افزوده‌ها به این مجموعهٔ ثابت، جداول قابلیت‌های بولی، عددی، و رشته‌ای را تکمیل می‌کردند. به‌جای تغییر معنای یک قابلیت موجود، نام جدیدی اضافه می‌شد. پایگاه دادهٔ terminfo از یک قالب باینری استفاده می‌کند؛ سازگاری باینری با استفاده از یک سرایند تضمین می‌شد که تعداد موارد موجود در جداول را برای هر نوع از قابلیت‌ها می‌شمرد. از آنجا که هر ارائه‌دهندهٔ curses فهرست‌های قابلیت استاندارد را به روش‌های متمایزی گسترش می‌داد، یک کتابخانه را می‌شد به‌گونه‌ای برنامه‌ریزی کرد که تنها ورودی‌های کامپایل‌شدهٔ terminfo را بشناسد که برای تفسیر آن‌ها آماده شده بود. استانداردسازی ناقص بود.

•
استاندارد X/Open Curses تنها قالب مبدأ (source) را توصیف می‌کند، نه نمایش باینری آن بر روی دیسک را.
توسعه‌دهندگان کتابخانه برای تطبیق با قالب باینری، به مستندات SVr4 و مهندسی معکوس پرونده‌های کامپایل‌شدهٔ terminfo اتکا می‌کنند.
•
به دلیل نبود یک استاندارد برای قالب باینری، بیشتر پیاده‌سازی‌ها از قالب باینری SVr2 الگوبرداری می‌کنند که از اعداد صحیح علامت‌دار ۱۶ بیتی استفاده می‌کند، و به ورودی‌های ۴۰۹۶ بایتی محدود است.
قالب SVr2 نمی‌تواند مقادیر قابلیت عددی بسیار بزرگ را نشان دهد، و همچنین نمی‌تواند تعداد زیادی از تعاریف کلید را نمایش دهد، آن‌گونه که برای تشخیص چندین کلید تغییردهنده (modifier) استفاده‌شده در ترکیب با یک کلید تابعی مورد نیاز است.
•
جداول نام‌های قابلیت میان پیاده‌سازی‌های گوناگون متفاوت است.
اگرچه آن‌ها ممکن است تمام نام‌های قابلیت استاندارد را ارائه دهند، اما هر کدام ورودی‌های جدول خود را به‌گونه‌ای متفاوت مرتب می‌کنند زیرا برخی ویژگی‌ها بر حسب نیاز اضافه شدند، در حالی که ویژگی‌های دیگر — خارج از ترتیب — برای سازگاری با X/Open Curses افزوده شدند.
در حالی که مجموعه قابلیت‌های ncurses بیش از همه به سولاریس نزدیک است، مجموعه قابلیت‌های پشتیبانی‌شده توسط پایگاه دادهٔ terminfo هر ارائه‌دهنده با فهرست منتشرشده توسط X/Open Curses متفاوت است. ncurses می‌تواند با جداولی پیکربندی شود که با پایگاه داده‌های پایانهٔ AIX، HP-UX، یا OSF/1 مطابقت داشته باشند، به‌جای پیکربندی پیش‌فرض شبیه به سولاریس.
•
در curses مربوط به SVr4 و ncurses، پایگاه دادهٔ پایانه در زمان کامپایل با درون‌گذاری یک فایل متنی تعریف می‌شود که قابلیت‌های مختلف پایانه را فهرست می‌کند.
در اصل، می‌توان این فایل متنی را گسترش داد، اما انجام این کار نیازمند کامپایل مجدد و نصب دوبارهٔ کتابخانه است. فایل متنی استفاده‌شده توسط ncurses برای قابلیت‌های پایانه، شامل جزئیات گسترش‌های ایجادشده روی X/Open Curses توسط سیستم‌های گوناگون است. برای نمونه، ncurses از قابلیت‌های غیراستاندارد زیر در هر پیکربندی پشتیبانی می‌کند.
(meml) قفل کردن حافظه در بالای مکان‌نما
(memu) باز کردن قفل حافظه
(box1) مجموعهٔ اصلی نویسه‌های رسم کادر
قابلیت‌های قفل/باز کردن قفل حافظه به این دلیل گنجانده شدند که در شرح پایانهٔ X11R6 برای xterm(1) استفاده شده بودند. tic از قابلیت box1 برای سازگاری با شرح‌های پایانهٔ نوشته‌شده برای AIX استفاده می‌کند.

در طول دههٔ ۱۹۹۰، برخی توسعه‌دهندگان برنامه‌ها علی‌رغم مزایای عملکردی (و سایر مزایای) terminfo نسبت به termcap، از به‌کارگیری آن اکراه داشتند.

  • مجموعهٔ ثابت مانع از آن می‌شد که کاربران بتوانند پشتیبانی از ویژگی‌های پایانه‌ای را که توسط X/Open Curses پیش‌بینی نشده بود اضافه کنند (یا آن‌ها را وادار می‌کرد به‌عنوان یک راهکار موقت از قابلیت‌های موجود دوباره استفاده کنند).
  • محدودیت به اعداد صحیح علامت‌دار ۱۶ بیتی نیز ذکر شده بود. از آنجا که termcap همه‌چیز را به‌صورت رشته ذخیره می‌کند، می‌توانست اعداد بزرگ‌تری را نمایش دهد.

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

ابزارهای ncurses شامل tic و infocmp دارای گزینهٔ خط فرمانی “-x” هستند تا ذخیره یا بازیابی شدن قابلیت‌های غیراستاندارد را کنترل کنند. ncurses تابع use_extended_names(3X) را برای همین منظور در اختیار برنامه‌ها قرار می‌دهد.

هنگام کامپایل یک پایگاه دادهٔ پایانه، اگر “-x” به کار رود، در صورتی که نام قابلیت غیراستاندارد باشد، tic یک قابلیت تعریف‌شده توسط کاربر را ذخیره می‌کند.

از آنجا که ncurses یک رابط کتابخانه‌ای termcap ارائه می‌دهد، این قابلیت‌های تعریف‌شده توسط کاربر ممکن است برای برنامه‌های termcap نیز قابل مشاهده باشند.

•
رابط termcap (مانند تمامی پیاده‌سازی‌های termcap) نام‌های قابلیت را به دو نویسه محدود می‌کند.
هنگامی که قابلیت برای استفاده در یک برنامهٔ termcap به‌اندازهٔ کافی ساده باشد، به‌صورت یک نام دو نویسه‌ای ارائه می‌شود.
  • سایر قابلیت‌های تعریف‌شده توسط کاربر از ویژگی‌هایی استفاده می‌کنند که در termcap قابل استفاده نیستند، مانند رشته‌های پارامتردار که بیش از دو پارامتر به کار می‌برند یا به عباراتی قدرتمندتر از آنچه termcap پشتیبانی می‌کند نیاز دارند. چنین قابلیت‌هایی باید در پایگاه دادهٔ terminfo دارای نام‌هایی با دست‌کم سه نویسه باشند.
  • برخی پایانه‌ها می‌توانند بسته به کلیدهای تغییردهنده (shift، control و غیره) رشته‌های متمایزی برای کلیدهای ویژه (کلیدهای مکان‌نما، صفحه‌کلید عددی یا کلیدهای تابعی) ارسال کنند. در حالی که terminfo و termcap مجموعه‌ای از شصت نام کلید تابعی را تعریف می‌کنند که می‌توان مجموعه‌ای از کلیدها را به آن‌ها اختصاص داد، این مقدار برای بیش از دوازده کلید ضرب در بیش از چندین ترکیب کلید تغییردهنده ناکافی است. پایگاه دادهٔ ncurses از قراردادی بر پایهٔ xterm(1) برای ارائهٔ نام‌های کلید ویژهٔ گسترش‌یافته استفاده می‌کند.
گنجاندن آن در محدودیت نام‌های ۲ نویسه‌ای termcap بی‌فایده خواهد بود. این کلیدهای گسترش‌یافته تنها با terminfo در دسترس هستند.

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

(بولی) بیانگر آن است که پایانه SGR 39 و SGR 49 را با بازنشانی رنگ‌های پیش‌زمینه و پس‌زمینه به ترتیب به مقدار پیش‌فرض تفسیر می‌کند.
برنامهٔ screen(1) نیز این قابلیت را می‌شناسد.
(رشته) به برنامه می‌گوید چگونه بافر پیمایش به عقب (scrollback) پایانه را پاک کند. در صورت وجود، برنامهٔ clear(1) پیش از پاک کردن پایانه این مورد را ارسال می‌کند.
دستور “tput clear” نیز همین کار را انجام می‌دهد.
(بولی) یک بررسی سازگاری را در tic برای قابلیت‌های رشته‌ای ncurses از user6 (u6) تا user9 (u9) نادیده می‌گیرد؛ این قابلیت‌ها به برنامه می‌گویند چگونه موقعیت مکان‌نمای پایانه و ویژگی‌های دستگاه (device attributes) آن را جویا شود.
(بولی، عددی، یا رشته‌ای) بیانگر آن است که قابلیت‌های set_a_foreground (setaf) و set_a_background (setab) از رنگ‌های مستقیم (direct colors) با استفاده از قرارداد RGB (قرمز/سبز/آبی) استفاده می‌کنند. این قابلیت به color_content(3X) اجازه می‌دهد بدون نیاز به مقداردهی اولیه رنگ‌ها توسط برنامه با استفاده از init_color(3X)، مقادیر مناسب را بازگرداند.
نوع قابلیت، مقادیری را که ncurses می‌بیند تعیین می‌کند.
بولی
بدین معناست که تعداد بیت‌ها برای قرمز، سبز، و آبی یکسان است. با شروع از مقدار قابلیت max_colors (colors؛ termcap: co)، کتابخانهٔ ncurses عدد دو را اضافه می‌کند، مجموع را بر سه تقسیم می‌کند، و نتیجه را به ترتیب به قرمز، سبز، و آبی اختصاص می‌دهد.
اگر تعداد بیت‌های مورد نیاز برای تعداد رنگ‌ها مضربی از سه نباشد، کانال‌های رنگی آبی (و سبز) در مقایسه با قرمز افت می‌کنند (بیت کمتری دریافت می‌کنند).
عددی
به ncurses می‌گوید چه مقداری را به قرمز، سبز، و آبی اضافه کند. اگر ncurses با کمبود بیت مواجه شود، آبی (و سبز) درست مانند حالت بولی افت می‌کنند.
رشته‌ای
تعداد بیت‌های استفاده‌شده برای کانال‌های رنگی قرمز، سبز، و آبی را به‌صورت فهرستی از اعداد صحیح ده‌دهی جداشده با خط مورب (slash) مشخص می‌کند.
از آنجا که چندین کدگذاری RGB در حال استفاده است، بعید است برنامه‌هایی که فرضیاتی دربارهٔ تعداد بیت‌ها در هر کانال رنگی مطرح می‌کنند به‌طور قابل اعتمادی کار کنند. به‌عنوان یک حالت ساده، می‌توان RGB#1 را برای نمایش هشت رنگ استاندارد ANSI X3.64/ECMA-48/ISO 6429 با استفاده از یک بیت برای هر کانال رنگی تعریف کرد.
(عددی) مشخص می‌کند که آیا ncurses باید از مقادیر یونیکد (Unicode) برای نویسه‌های رسم خط استفاده کند یا خیر، و اینکه باید قابلیت‌های مجموعه نویسه‌های جایگزین (ACS) را هنگامی که محلی‌سازی (locale) از کدگذاری UTF-8 استفاده می‌کند نادیده بگیرد. به بحث دربارهٔ NCURSES_NO_UTF8_ACS در بخش “ENVIRONMENT” از ncurses(3X) مراجعه کنید.
برای فعال کردن این قابلیت، آن را روی یک مقدار غیر صفر تنظیم کنید.
(رشته) رشتهٔ توکار ncurses را که به xterm(1) دستور فعال یا غیرفعال کردن حالت موشواره (ماوس) را می‌دهد، بازنویسی (override) می‌کند.
کتابخانهٔ ncurses یک دنباله از نویسه‌ها را برای مقداردهی اولیهٔ حالت ماوس به پایانه ارسال می‌کند، و هنگامی که کاربر دکمه‌های ماوس را کلیک می‌کند یا (در برخی حالت‌ها) ماوس را حرکت می‌دهد، نویسه‌های بازگردانده‌شده از پایانه را مدیریت می‌کند تا به برنامه بگوید چه عملی با ماوس انجام شده است.
پروتکل ماوس زمانی فعال می‌شود که آرگومان mask در تابع mousemask(3X) غیر صفر باشد. به‌طور پیش‌فرض، ncurses پاسخ‌های مربوط به پروتکل ماوس X11 در xterm را مدیریت می‌کند. همچنین پروتکل ماوس SGR 1006 در xterm را می‌شناسد، اما باید به‌طور خاص به آن گفته شود که به دنبال آن باشد. کتابخانهٔ ncurses نمی‌تواند حدس بزند کدام‌یک از این دو حالت استفاده شده است، زیرا پاسخ‌ها به اندازهٔ کافی شبیه یکدیگرند و فقط موجب سردرگمی خواهد شد.
قابلیت XM دارای یک پارامتر عددی منفرد است. اگر غیر صفر باشد، پروتکل ماوس باید فعال شود. اگر صفر باشد، پروتکل ماوس باید غیرفعال شود. در صورت وجود این قابلیت، ncurses آن را بررسی می‌کند تا ببیند آیا از پروتکل 1006 استفاده شده است یا خیر. اگر چنین باشد، انتظار دارد پاسخ‌ها از پروتکل ماوس SGR 1006 در xterm استفاده کنند.
پروتکل ماوس xterm توسط شبیه‌سازهای پایانهٔ دیگر نیز استفاده می‌شود. پایگاه دادهٔ پایانه از بلوک‌های سازنده برای پروتکل‌های مختلف ماوس xterm استفاده می‌کند که در شرح‌های سفارشی پایانه قابل استفاده هستند.
بلوک‌های سازندهٔ پایگاه دادهٔ پایانه برای این ویژگی ماوس، دارای یک قابلیت آزمایشی به نام xm نیز هست که پاسخ ماوس را توصیف می‌کند. هیچ مفسر شناخته‌شده‌ای از این اطلاعات استفاده نمی‌کند، اطلاعاتی که می‌توانست پشتیبانی از ماوس را کاملاً داده‌محور (data-driven) کند.
قابلیت xm قالب پاسخ‌های ماوس را نشان می‌دهد. در این قابلیت آزمایشی، پارامترها به شرح زیر هستند:
مختصات عمودی (y-ordinate)
مختصات افقی (x-ordinate)
دکمه (کلید ماوس)
وضعیت، مثلاً فشرده یا رها شده
ناحیهٔ شروع مختصات عمودی
ناحیهٔ شروع مختصات افقی
ناحیهٔ پایان مختصات عمودی
ناحیهٔ پایان مختصات افقی
در اینجا مثال‌هایی از پایگاه دادهٔ پایانه برای پرکاربردترین پروتکل‌های ماوس xterm آورده شده است.
xterm+x11mouse|X11 xterm mouse protocol,
        kmous=\E[M, XM=\E[?1000%?%p1%{1}%=%th%el%;,
        xm=\E[M
           %?%p4%t%p3%e%{3}%;%' '%+%c
           %p2%'!'%+%c
           %p1%'!'%+%c,
xterm+sm+1006|xterm SGR-mouse,
        kmous=\E[<, XM=\E[?1006;1000%?%p1%{1}%=%th%el%;,
        xm=\E[<%i%p3%d;
           %p1%d;
           %p2%d;
           %?%p4%tM%em%;,

چندین پایانه این توانایی را فراهم می‌کنند که برای ترکیب‌های کلیدهای ویژهٔ تغییریافته، رشته‌های متمایزی ارسال شود. هیچ استانداردی برای آنچه این کلیدها می‌توانند ارسال کنند وجود ندارد.

از سال ۱۹۹۹، xterm(1) از تغییردهنده‌های shift، control، alt، و meta پشتیبانی کرده است که رشته‌های کلید ویژهٔ متمایزی تولید می‌کنند. در یک توصیف پایانه، ncurses هیچ آگاهی خاصی از تغییردهنده‌های استفاده‌شده ندارد. برنامه‌ها می‌توانند از قرارداد نام‌گذاری ایجادشده برای xterm استفاده کنند تا این کلیدهای ویژه را در شرح پایانه بیابند.

با شروع از قرارداد curses که کدهای قابلیت توصیف‌کنندهٔ ورودی تولیدشده توسط کلیدهای پایانه با “k” آغاز می‌شوند، و اینکه کلیدهای ویژهٔ تبدیل‌یافته (shifted) از حروف بزرگ در نام‌هایشان استفاده می‌کنند، پایگاه دادهٔ پایانهٔ ncurses نام‌ها و کدهای زیر را تعریف می‌کند که پسوندی به آن‌ها افزوده می‌شود.

Code Description
kDC shifted kdch1 (delete character)
kDN shifted kcud1 (cursor down)
kEND shifted kend (end)
kHOM shifted khome (home)
kLFT shifted kcub1 (cursor back)
kNXT shifted knext (next)
kPRV shifted kprev (previous)
kRIT shifted kcuf1 (cursor forward)
kUP shifted kcuu1 (cursor up)

نام‌گذاری کلیدها در سیستم‌های یونیکس که curses برای آن‌ها توسعه یافته بود، با چیدمان‌های صفحه‌کلید نوادگان فراگیر IBM PC/AT امروزی متفاوت است. در موارد فوق، عبارت “backward” را معادل “left” (چپ)، “forward” را معادل “right” (راست)، “next” را معادل “page down” (صفحه بعد)، و “prev(ious)” را معادل “page up” (صفحه قبل) تفسیر کنید.

این‌ها پسوندهایی هستند که برای نشان دادن کلیدهای تغییردهنده استفاده می‌شوند:

Value Description
2 Shift
3 Alt
4 Shift + Alt
5 Control
6 Shift + Control
7 Alt + Control
8 Shift + Alt + Control
9 Meta
10 Meta + Shift
11 Meta + Alt
12 Meta + Alt + Shift
13 Meta + Ctrl
14 Meta + Ctrl + Shift
15 Meta + Ctrl + Alt
16 Meta + Ctrl + Alt + Shift

کتابخانهٔ ncurses هیچ قابلیتی برای کلیدهای F تغییریافته تعریف نمی‌کند؛ شرح‌های پایانه می‌توانند به نام‌هایی ارجاع دهند که ncurses در زمان اجرا به کدهای کلید (key codes) اختصاص می‌دهد. برای استفاده از این کلیدها در یک برنامهٔ ncurses، یک برنامه می‌تواند این کار را انجام دهد:

  • با استفاده از فهرستی از نام‌های کلیدهای گسترش‌یافته، مقادیر آن‌ها را از tigetstr(3X) درخواست کند، و
  • با داشتن فهرست مقادیر، از key_defined(3X) در مورد کد کلیدی که توسط wgetch(3X) برای آن کلیدها بازگردانده می‌شود، استعلام کند.

ویژگی افزونهٔ “-x” در tic و infocmp در curses سیستم‌عامل NetBSD پذیرفته شده است. آن پیاده‌سازی قابلیت‌های تعریف‌شده توسط کاربر را ذخیره می‌کند، اما خودش از این قابلیت‌ها استفاده‌ای نمی‌کند.

Thomas E. Dickey
آغاز از ncurses 5.0 (1999)

infocmp(1M)، tic(1M)

در شکل سورس پایگاه دادهٔ پایانه، terminfo.src، بخش “NCURSES USER-DEFINABLE CAPABILITIES” قابلیت‌های تعریف‌شده توسط کاربر پرکاربرد را که در شرح‌های پایانه به کار می‌روند، خلاصه می‌کند. برخی از این ویژگی‌ها در screen(1) یا tmux(1) ذکر شده‌اند.

سند XTerm Control Sequences اطلاعات بیشتری در مورد ویژگی‌های xterm(1) که در این قابلیت‌های گسترش‌یافته به کار می‌روند، ارائه می‌دهد.

2025-11-11 ncurses 6.6