کتابخانه‌ی استاندارد · سیستم و ابزار

رابط‌پایانه tui

برنامه‌های تمام‌صفحه‌ی پایانه: ویجت‌ها، چیدمان، تمرکز، کلیدها، ماوس و تغییر اندازه، رسم در یک بافر و بازترسیم فقط جاهایی که عوض شده‌اند.

واردسازی رابط‌پایانه

نام آرگومان‌ها شناسه‌ی خود کد است و معادل فارسی ندارد؛ گونه‌ها، کلیدواژه‌ها و نام بسته‌ها با معادل فارسی نوشته می‌شوند.

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

این کتابخانه با نام باسلام به دست پارسا نوشته شد و اکنون بخشی از کتابخانه‌ی استاندارد است.

اجزا:

  • صفحه صاحب پایانه، درخت ویجت‌ها، تمرکز و حلقه‌ی رویداد است. صفحه ترمینال جدید اندازه را از پایانه می‌گیرد؛ صفحه جدید اندازه‌ی ثابت می‌گیرد و هرگز به پایانه دست نمی‌زند و راه آزمودن همین است.
  • ویجت‌ها ساختارهایی‌اند که ویجت‌پایه را در خود دارند و هر چه لازم است را بازنویسی می‌کنند: ترسیم برای رسم، پردازش رویداد برای پاسخ و تمرکز‌پذیر است برای گرفتن کلیدها. ویجت‌های آماده: متن، کادر‌متن، دکمه، کادر‌انتخاب، فهرست، نوار‌پیشرفت، جداکننده، جدول، نمای‌جدول، پنل و مودال.
  • چیدمان: ظرف‌های ردیف، ستون، شبکه و پشته جای فرزندانشان را تعیین می‌کنند و لازم نیست مختصات را دستی حساب کنید.
  • رویدادها اول به ویجتی می‌رسند که تمرکز دارد و تا وقتی یکی مصرفشان کند به والدها بالا می‌روند؛ آنچه کسی مصرف نکند به نگاشت‌کلید اختیاری و سپس به حلقه‌ی شما می‌رسد.

یک برنامه‌ی کامل

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

tui-guide-hello.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ساختار سلام:
    همگانی شامل رابط‌پایانه.ویجت‌پایه
    همگانی شمار فشار: صحیح = 0

    همگانی تابع ترسیم(بافر: رابط‌پایانه.بافر، مرز: رابط‌پایانه.مستطیل):
        بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 1، "سلام از رابط‌پایانه!"، رابط‌پایانه.ظاهر { پررنگ = درست، رنگ پیش‌زمینه = رابط‌پایانه.فیروزه‌ای })
        بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 3، "اینتر " + این.شمار فشار + " بار فشرده شد"، رابط‌پایانه.ظاهر پیش‌فرض)
        بافر.نوشتن متن(مرز.ایکس + 2، مرز.پایین() - 1، "q برای خروج"، رابط‌پایانه.ظاهر { کم‌رنگ = درست })
    پایان

    همگانی تابع پردازش رویداد(رویداد: رابط‌پایانه.رویداد): منطقی:
        اگر رویداد.کلید است(پایانه.کلید ورود):
            این.شمار فشار++
            برگشت درست
        پایان
        برگشت نادرست
    پایان
پایان

تابع ریشه:
    اگر وارونه پایانه.پایانه دارد():
        نادرست‌سرچاپ "مرا در یک پایانه اجرا کنید"
        برگشت 1
    پایان
    ناپایا ص := رابط‌پایانه.صفحه ترمینال جدید(سلام {})
    ص.آغاز()
    دیرکن ص.بستن()
    ص.نمایش تغییرات()
    ناپایا رخداد := رابط‌پایانه.رویداد {}
    تا ص.رویداد بعدی(رخداد):
        مصرف شد := ص.هدایت رویداد(رخداد)
        اگر وارونه مصرف شد و (رخداد.نویسه است("q") یا رخداد.ترکیب کنترل است("c")):
            ص.توقف()
        پایان
        ص.نمایش تغییرات()
    پایان
    برگشت 0
پایان

دیدن فریم بدون پایانه

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

tui-guide-preview.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ساختار سلام:
    همگانی شامل رابط‌پایانه.ویجت‌پایه
    همگانی شمار فشار: صحیح = 0

    همگانی تابع ترسیم(بافر: رابط‌پایانه.بافر، مرز: رابط‌پایانه.مستطیل):
        رابط‌پایانه.ترسیم کادر(بافر، مرز، رابط‌پایانه.سبک‌کادر.گوشه‌گرد، رابط‌پایانه.ظاهر پیش‌فرض، "سلام!")
        بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 1، "سلام از رابط‌پایانه!"، رابط‌پایانه.ظاهر { پررنگ = درست })
        بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 2، "اینتر " + این.شمار فشار + " بار فشرده شد"، رابط‌پایانه.ظاهر پیش‌فرض)
    پایان

    همگانی تابع پردازش رویداد(رویداد: رابط‌پایانه.رویداد): منطقی:
        اگر رویداد.کلید است(پایانه.کلید ورود):
            این.شمار فشار++
            برگشت درست
        پایان
        برگشت نادرست
    پایان
پایان

تابع نمایش(ص: رابط‌پایانه.صفحه):
    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در ردیف:
        سرچاپ ص.بافر.متن ردیف(ردیف)
    پایان
پایان

تابع ریشه:
    ناپایا ص := رابط‌پایانه.صفحه جدید(سلام {}، 30، 4)
    دیرکن ص.بستن()
    نمایش(ص)
    اینتر := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید ورود } }
    _ := ص.هدایت رویداد(اینتر)
    _ := ص.هدایت رویداد(اینتر)
    نمایش(ص)
پایان
خروجی╭─ سلام! ────────────────────╮ │ سلام از رابط‌پایانه! │ │ اینتر 0 بار فشرده شد │ ╰────────────────────────────╯ ╭─ سلام! ────────────────────╮ │ سلام از رابط‌پایانه! │ │ اینتر 2 بار فشرده شد │ ╰────────────────────────────╯

چیدن یک صفحه

ویجت‌ها را به یک ظرف بدهید تا جایشان را تعیین کند. ستون فرزندانش را زیر هم می‌چیند؛ تنظیم ارتفاع با یک قاعده اندازه‌گذاری سهم هر کدام را تعیین می‌کند: ثابت به تعداد خانه، پرکردن فضا با وزنی از باقی‌مانده، یا ترجیحی به اندازه‌ی دلخواه خود ویجت. ظرف را ریشه‌ی صفحه کنید و هر فرزند را به صفحه هم اضافه کنید: ظرف جا را تعیین می‌کند و صفحه رسم و تمرکز را. با تغییر اندازه، صفحه اندازه‌ی تازه را به ریشه می‌دهد و چیدمان دوباره اجرا می‌شود.

tui-guide-layout.salam
// زبان: فارسی
واردسازی رابط‌پایانه

تابع ثابت(تعداد: صحیح): رابط‌پایانه.قاعده‌اندازه‌گذاری:
    برگشت رابط‌پایانه.قاعده‌اندازه‌گذاری { نوع = رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، تعداد سلول = تعداد }
پایان

تابع ریشه:
    عنوان := رابط‌پایانه.متن جدید("دانلودها") برگردان پویا رابط‌پایانه.ویجت
    خط جدا := رابط‌پایانه.جداکننده جدید() برگردان پویا رابط‌پایانه.ویجت
    ناپایا نوار := رابط‌پایانه.نوار پیشرفت جدید()
    نوار.تنظیم پیشرفت(40)
    پیشرفت := نوار برگردان پویا رابط‌پایانه.ویجت
    ناپایا بدنه := رابط‌پایانه.متن جدید("فایل salam-0.6.3.tar.gz تا 40% دانلود شده است. باقی این خط درون ستون شکسته خواهد شد.")
    بدنه.تنظیم شکست خط(رابط‌پایانه.حالت‌شکست‌خط.بر پایه واژه)
    متن := بدنه برگردان پویا رابط‌پایانه.ویجت

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

    ناپایا ص := رابط‌پایانه.صفحه جدید(ستون برگردان پویا رابط‌پایانه.ویجت، 32، 8)
    دیرکن ص.بستن()
    _ := ص.افزودن(رابط‌پایانه.شناسه ریشه، عنوان)
    _ := ص.افزودن(رابط‌پایانه.شناسه ریشه، خط جدا)
    _ := ص.افزودن(رابط‌پایانه.شناسه ریشه، پیشرفت)
    _ := ص.افزودن(رابط‌پایانه.شناسه ریشه، متن)
    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در ردیف:
        سرچاپ "|" + ص.بافر.متن ردیف(ردیف) + "|"
    پایان
پایان
خروجی| | | دانلودها | | ────────────────────────────── | | ##########--------------- 40% | | فایل salam-0.6.3.tar.gz تا 40% | | دانلود شده است. باقی این خط | | درون ستون شکسته خواهد شد. | | |

یک فرم: تمرکز، تایپ و فراخوان‌ها

ویجت‌های تمرکزپذیر به نوبت کلید می‌گیرند. اولین ویجت تمرکزپذیری که اضافه شود تمرکز را می‌گیرد؛ با نصب نگاشت‌کلید پیش‌فرض، Tab و کلیدهای جهت آن را جابه‌جا می‌کنند. مقدارها با فراخوان‌ها برمی‌گردند: هنگام ثبت برای کادر‌متن وقتی Enter زده شود، هنگام تغییر انتخاب برای کادر‌انتخاب و هنگام کلیک برای دکمه. فراخوان‌ها لامبدا هستند و متغیرهای محلی را نمی‌گیرند، پس وضعیتی را که عوض می‌کنند در متغیرهای سراسری یا ویجت خودتان نگه دارید.

tui-guide-form.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا نام := ""
ناپایا مشترک := نادرست
ناپایا شمار ذخیره := 0

تابع مستطیل(ایکس: صحیح، ایگرگ: صحیح، پهنا: صحیح): رابط‌پایانه.مستطیل:
    برگشت رابط‌پایانه.مستطیل { ایکس = ایکس، ایگرگ = ایگرگ، عرض = پهنا، ارتفاع = 1 }
پایان

تابع کلید(دنباله: رشته): رابط‌پایانه.رویداد:
    برگشت رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی(دنباله) }
پایان

تابع تایپ(ص &: رابط‌پایانه.صفحه، متن: رشته):
    تکرار متن.طول() در شماره:
        _ := ص.هدایت رویداد(کلید(متن.زیررشته(شماره، 1)))
    پایان
پایان

تابع ریشه:
    ناپایا ص := رابط‌پایانه.صفحه جدید(رابط‌پایانه.ویجت‌پایه {}، 30، 4)
    دیرکن ص.بستن()
    ص.تنظیم نگاشت کلید(رابط‌پایانه.نگاشت کلید پیش‌فرض())

    برچسب := ص.افزودن(رابط‌پایانه.شناسه ریشه، رابط‌پایانه.متن جدید("نام:") برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(برچسب).تنظیم محدوده(مستطیل(1، 0، 6))
    ناپایا خانه نام := رابط‌پایانه.کادر متن جدید()
    خانه نام.تنظیم متن راهنما("نام شما")
    خانه نام.هنگام ثبت = (مقدار: رشته):
        نام = مقدار
        برگشت درست
    پایان
    فیلد := ص.افزودن(رابط‌پایانه.شناسه ریشه، خانه نام برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(فیلد).تنظیم محدوده(مستطیل(7، 0، 20))
    ناپایا کادر := رابط‌پایانه.کادر انتخاب جدید("خبرنامه بفرست"، نادرست)
    کادر.هنگام تغییر انتخاب = (فعال: منطقی): مشترک = فعال پایان
    خبر := ص.افزودن(رابط‌پایانه.شناسه ریشه، کادر برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(خبر).تنظیم محدوده(مستطیل(1، 1، 20))
    ناپایا دکمه := رابط‌پایانه.دکمه جدید("ثبت")
    دکمه.هنگام کلیک = (): شمار ذخیره++ پایان
    ذخیره := ص.افزودن(رابط‌پایانه.شناسه ریشه، دکمه برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(ذخیره).تنظیم محدوده(مستطیل(1، 2، 10))

    سرچاپ "تمرکز اول:"، ص.شناسه متمرکز() برابر فیلد
    تایپ(ص، "سارا")
    _ := ص.هدایت رویداد(کلید("\r"))
    _ := ص.هدایت رویداد(کلید("\t"))
    _ := ص.هدایت رویداد(کلید(" "))
    _ := ص.هدایت رویداد(کلید("\t"))
    _ := ص.هدایت رویداد(کلید("\r"))
    سرچاپ "نام:"، نام، "خبرنامه:"، مشترک، "ذخیره:"، شمار ذخیره

    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در ردیف:
        سرچاپ "|" + ص.بافر.متن ردیف(ردیف) + "|"
    پایان
پایان
خروجیتمرکز اول: true نام: سارا خبرنامه: true ذخیره: 1 | نام: سارا | | [x] خبرنامه بفرست | | [ ثبت ] | | |

فهرست‌ها و جدول‌ها

فهرست در هر ردیف یک گزینه‌ی انتخاب‌پذیر نشان می‌دهد و با j و k جابه‌جا می‌شود (کلیدهای جهت برای جابه‌جایی تمرکز آزاد می‌مانند)؛ Enter هنگام انتخاب را صدا می‌زند. نمای‌جدول جدولی پیمایش‌پذیر با یک ردیف انتخاب‌شده است؛ بالا و پایین آن را جابه‌جا می‌کنند و Enter فعال‌سازی را با شماره‌ی ردیف داده صدا می‌زند. ستون‌ها یک قاعده اندازه‌گذاری برای عرض، یک تراز و رفتاری برای متنی که جا نمی‌شود می‌گیرند.

tui-guide-lists.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا بازشده := -1

تابع ردیف(اولی: رشته، دومی: رشته): وکتور<رشته>:
    ناپایا خانه‌ها := وکتور {} برگردان وکتور<رشته>
    خانه‌ها.بیفزا(اولی)
    خانه‌ها.بیفزا(دومی)
    برگشت خانه‌ها
پایان

تابع ستون(پهنا: صحیح، چینش: رابط‌پایانه.تراز): رابط‌پایانه.ستون‌جدول:
    برگشت رابط‌پایانه.ستون‌جدول { عرض = رابط‌پایانه.قاعده‌اندازه‌گذاری { نوع = رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، تعداد سلول = پهنا }، تراز = چینش }
پایان

تابع پایین(): رابط‌پایانه.رویداد:
    برگشت رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید پایین } }
پایان

تابع ریشه:
    ناپایا ص := رابط‌پایانه.صفحه جدید(رابط‌پایانه.ویجت‌پایه {}، 34، 6)
    دیرکن ص.بستن()

    ناپایا فایل‌ها := وکتور {} برگردان وکتور<رشته>
    فایل‌ها.بیفزا("main.salam")
    فایل‌ها.بیفزا("util.salam")
    فایل‌ها.بیفزا("README.md")
    فهرست := ص.افزودن(رابط‌پایانه.شناسه ریشه، رابط‌پایانه.فهرست جدید(فایل‌ها) برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(فهرست).تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 12، ارتفاع = 3 })

    ناپایا نما := رابط‌پایانه.نمای جدول جدید()
    _ := نما.افزودن ستون(ستون(8، رابط‌پایانه.تراز.چپ))
    _ := نما.افزودن ستون(ستون(7، رابط‌پایانه.تراز.راست))
    نما.جدول.سرآیند = درست
    _ := نما.افزودن ردیف(ردیف("نام"، "خطوط"))
    _ := نما.افزودن ردیف(ردیف("tui"، "8956"))
    _ := نما.افزودن ردیف(ردیف("signal"، "976"))
    _ := نما.افزودن ردیف(ردیف("term"، "1944"))
    نما.فعال‌سازی = (شماره: صحیح):
        بازشده = شماره
        برگشت درست
    پایان
    شناسه جدول := ص.افزودن(رابط‌پایانه.شناسه ریشه، نما برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(شناسه جدول).تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 13، ایگرگ = 0، عرض = 20، ارتفاع = 5 })

    _ := ص.تمرکز(فهرست)
    _ := ص.هدایت رویداد(رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("j") })
    _ := ص.تمرکز(شناسه جدول)
    _ := ص.هدایت رویداد(پایین())
    _ := ص.هدایت رویداد(رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید ورود } })
    نام‌ها := ["tui"، "signal"، "term"]
    سرچاپ "باز شد:"، نام‌ها[بازشده]
    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در سطر:
        سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
    پایان
پایان
خروجیباز شد: signal |main.salam نام خطوط | |util.salam ─────────────── | |README.md tui 8956 | | signal 976 | | term 1944 | | |
نیازاستفاده
نوشتن متن، پر کردن یا کادربافر.نوشتن متن، پرکردن، ترسیم کادر
رنگ و ویژگی‌هاظاهر با رنگ پیش‌زمینه، رنگ پس‌زمینه، پررنگ و ثابت‌های رنگ
چیدن ویجت‌هاستون جدید، ردیف جدید، شبکه جدید، پشته جدید
جابه‌جایی تمرکزتمرکز، تمرکز بعدی، تمرکز چپ و... یا تنظیم نگاشت‌کلید با نگاشت‌کلید پیش‌فرض
کلیدها و توالی‌های خودتانپیوند کلید، پیوند توالی، نگاشت‌کلید ویم
پنجره‌ی گفت‌وگو روی صفحهمودال با تمرکز با ذخیره قبلی و آوردن زیردرخت به رو
کاری با زمان‌سنجبازه تیک به میلی‌ثانیه و اجرا با تیک
کلیکگزارش ماوس را پیش از آغاز روشن کنید؛ مختصات ماوس
آزمودن یک صفحهصفحه جدید، هدایت رویداد، بازترسیم، بافر.متن ردیف
فقط رنگ یا نوار‌پیشرفت روی خروجی سادهپایانه

آنچه باید در نظر داشت:

  • همیشه در خط بعد از آغاز() بنویسید دیرکن صفحه.بستن().
  • فرزندی که به یک ظرف یا پنل داده می‌شود باید به صفحه هم اضافه شود، وگرنه جا می‌گیرد اما رسم نمی‌شود.
  • dyn ویجت را نمی‌شود دوباره به ساختار اصلی‌اش برگرداند، پس مقدارها را با فراخوان‌ها بخوانید یا در وضعیت خودتان نگه دارید.
  • فقط در ترسیم رسم کنید؛ وضعیت را در پردازش رویداد یا حلقه‌ی خودتان عوض کنید تا نمایش تغییرات بعدی نشانش دهد. پس از تغییر وضعیتی که ویجت‌ها نمی‌بینند، صفحه.نیازمند بازترسیم را درست کنید.
  • در پایانه‌های بدون UTF-8 نویسه‌ها به ASCII برمی‌گردند؛ با SALAM_TUI_GLYPHS برابر ascii یا unicode خودتان انتخاب کنید. رنگ‌ها از NO_COLOR، COLORTERM و TERM پیروی می‌کنند.
  • در ویندوز تغییر اندازه به جای سیگنال با پرسیدن اندازه در هر حدود ۲۰ میلی‌ثانیه فهمیده می‌شود.

گونه‌ها

ویجت Widget

میانجی ویجت
رابطی که هر ویجت پیاده‌سازی می‌کند. ویجت‌ها را به شکل پویا ویجت نگه دارید.
tui-widget.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ساختار شمارنده:
    همگانی شامل رابط‌پایانه.ویجت‌پایه
    همگانی شمار: صحیح = 0

    همگانی تابع تمرکز‌پذیر است(): منطقی:
        برگشت درست
    پایان

    همگانی تابع پردازش رویداد(رویداد: رابط‌پایانه.رویداد): منطقی:
        اگر رویداد.نویسه است("+"):
            این.شمار++
            برگشت درست
        پایان
        برگشت نادرست
    پایان

    همگانی تابع ترسیم(بافر: رابط‌پایانه.بافر، مرز: رابط‌پایانه.مستطیل):
        ناپایا ظاهر := رابط‌پایانه.ظاهر پیش‌فرض
        اگر بافر.در تمرکز:
            ظاهر.معکوس = درست
        پایان
        بافر.نوشتن متن(مرز.ایکس، مرز.ایگرگ، "شمار " + این.شمار، ظاهر)
    پایان
پایان

تابع ریشه:
    پایه := رابط‌پایانه.ویجت‌پایه {}
    سرچاپ "پیش‌فرض‌ها:"، پایه.تمرکز‌پذیر است()، پایه.اصابت‌پذیر است()، پایه.نمایان است()، پایه.اندازه ترجیحی(10).عرض
    سنجش := پایه.اندازه‌گیری(رابط‌پایانه.محور.محور افقی، 10)
    سرچاپ "اندازه‌گیری:"، سنجش.معتبر

    ناپایا درخت := رابط‌پایانه.درخت جدید(رابط‌پایانه.ویجت‌پایه {} برگردان پویا رابط‌پایانه.ویجت)
    شناسه := درخت.افزودن(رابط‌پایانه.شناسه ریشه، شمارنده {} برگردان پویا رابط‌پایانه.ویجت)
    سرچاپ "درخت:"، درخت.تعداد()، درخت.معتبر است(شناسه)، درخت.والد(شناسه) برابر رابط‌پایانه.شناسه ریشه، درخت.معتبر است(رابط‌پایانه.بدون ویجت)
    بعلاوه := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("+") }
    سرچاپ "پردازش توسط خودش:"، درخت.هدایت رویداد(شناسه، بعلاوه) برابر شناسه
    ویجت := درخت.دریافت(شناسه)
    ویجت.تنظیم محدوده(رابط‌پایانه.مستطیل { عرض = 10، ارتفاع = 1 })
    ناپایا بافر := رابط‌پایانه.بافر جدید(10، 1)
    ویجت.ترسیم(بافر، ویجت.محدوده())
    سرچاپ بافر.متن ردیف(0)
    بافر.آزادسازی()
    درخت.آزادسازی()
    _ := پایه.مستطیل
پایان
خروجیپیش‌فرض‌ها: false true true -1 اندازه‌گیری: false درخت: 2 true true false پردازش توسط خودش: true شمار 1

ویجت‌پایه BaseWidget

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
چیزی رسم نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
چیزی را مصرف نمی‌کند: نادرست برمی‌گرداند تا رویداد به بالا برود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
نادرست برمی‌گرداند. برای ویجت‌های تعاملی آن را بازنویسی کنید تا درست برگرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
درست برمی‌گرداند. وقتی ویجت ممکن است رسم کند ولی اصابت را نپذیرد، آن را بازنویسی کنید تا نادرست برگرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

نمایان است Visible

تابع نمایان است(): منطقی

نمایان است visible

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

محدوده Bounds

تابع محدوده(): مستطیل

محدوده bounds

تابع محدوده(): مستطیل
مستطیلی را برمی‌گرداند که آخرین فراخوانی تنظیم محدوده ذخیره کرده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل را ذخیره می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
قادر به اندازه‌گیری نیست: نگهبان منفی (عرض و ارتفاع -1) را برمی‌گرداند که موتور چیدمان آن را به طول در دسترس نگاشت می‌کند. برای گزارش اندازه واقعی آن را بازنویسی کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

اندازه‌گیری Measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه

اندازه‌گیری measure

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

درخت Tree

ساختار درخت
ویجت‌های یک صفحه و پیوندهای والد آن‌ها. آن را با درخت جدید بسازید؛ درخت همیشه دست‌کم ریشه‌اش را دارد.
نامانگلیسیگونهتوضیح
ویجت‌هاwidgetsوکتورویجت‌ها، نمایه‌شده بر اساس شناسه. رونوشت‌های یک مقدار dyn در ویجت شریک‌اند، پس خواندن عضو id از ویجت‌ها به همان ویجتی می‌رسد که فراخواننده افزوده است.
والدهاparentsوکتور<صحیح>والدها[id] شناسه والد است؛ برای ریشه بدون ویجت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

تعداد Count

تابع تعداد(): صحیح

تعداد count

تابع تعداد(): صحیح
تعداد ویجت‌ها، با احتساب ریشه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

معتبر است Valid

تابع معتبر است(id: صحیح): منطقی

معتبر است valid

تابع معتبر است(id: صحیح): منطقی
وقتی id به ویجتی در این درخت اشاره کند true است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

افزودن Add

تابع افزودن(parent: صحیح، w: dyn ویجت): صحیح

افزودن add

تابع افزودن(parent: صحیح، w: dyn ویجت): صحیح
w را به عنوان آخرین فرزند parent می‌افزاید و شناسه جدیدش را برمی‌گرداند. با شناسه والد نامعتبر، ویجت به‌جای آن به ریشه وصل می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

دریافت Get

تابع دریافت(id: صحیح): dyn ویجت

دریافت get

تابع دریافت(id: صحیح): dyn ویجت
ویجت با این شناسه. شناسه نامعتبر ریشه را برمی‌گرداند، پس فراخوانی هرگز شکست نمی‌خورد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

والد Parent

تابع والد(id: صحیح): صحیح

والد parent

تابع والد(id: صحیح): صحیح
شناسه والد، یا بدون ویجت برای ریشه و برای شناسه‌های نامعتبر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

هدایت رویداد Dispatch

تابع هدایت رویداد(from: صحیح، event: رویداد): صحیح

هدایت رویداد dispatch

تابع هدایت رویداد(from: صحیح، event: رویداد): صحیح
رویداد را به ویجت from و سپس به هر یک از نیاکانش تا ریشه عرضه می‌کند تا یکی آن را مصرف کند. شناسه مصرف‌کننده را برمی‌گرداند، یا اگر هیچ‌کدام مصرف نکرد بدون ویجت را. from نامعتبر از ریشه آغاز می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

آزادسازی Free

تابع آزادسازی()

آزادسازی free

تابع آزادسازی()
حافظه خود درخت را آزاد می‌کند. خود ویجت‌ها دست‌نخورده می‌مانند: فراخواننده آن‌ها را ساخته و ممکن است هنوز رونوشت‌هایی از آن‌ها داشته باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

تراز Alignment

جداشمار تراز
جایی که هر خط رسم‌شده به‌صورت افقی درون جعبه ویجت قرار می‌گیرد.
نامانگلیسیگونهتوضیح
چپLeftخط‌ها از لبه چپ جعبه آغاز می‌شوند (پیش‌فرض).
مرکزCenterخط‌ها در مرکز قرار می‌گیرند؛ وقتی فضای اضافه فرد باشد، خانه اضافه در سمت راست است.
راستRightخط‌ها در لبه راست جعبه تمام می‌شوند.
tui-text.salam
// زبان: فارسی
واردسازی رابط‌پایانه

تابع ریشه:
    خطوط := رابط‌پایانه.شکستن خطوط متن("رابط کاربر متنی برای پایانه در سلام"، 12)
    هر خط در خطوط:
        سرچاپ "[" + خط + "]"
    پایان
    اندازه := رابط‌پایانه.اندازه‌گیری متن("خط یک\nخط دو"، 20)
    سرچاپ "اندازه"، اندازه.عرض، "x"، اندازه.ارتفاع

    ناپایا بافر := رابط‌پایانه.بافر جدید(20، 4)
    ناپایا عنوان := رابط‌پایانه.متن جدید("در میانه")
    عنوان.تنظیم تراز(رابط‌پایانه.تراز.مرکز)
    عنوان.تنظیم ظاهر(رابط‌پایانه.ظاهر { پررنگ = درست })
    عنوان.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 20، ارتفاع = 1 })
    عنوان.ترسیم(بافر، عنوان.محدوده())
    ناپایا خط جدا := رابط‌پایانه.جداکننده جدید()
    خط جدا.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 1، عرض = 20، ارتفاع = 1 })
    خط جدا.ترسیم(بافر، خط جدا.محدوده())
    ناپایا نوار := رابط‌پایانه.نوار پیشرفت جدید()
    نوار.تنظیم بیشینه(200)
    نوار.تنظیم پیشرفت(50)
    نوار.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 2، عرض = 20، ارتفاع = 1 })
    نوار.ترسیم(بافر، نوار.محدوده())
    ناپایا بلند := رابط‌پایانه.متن جدید("این خط هرگز شکسته نمی‌شود")
    بلند.تنظیم شکست خط(رابط‌پایانه.حالت‌شکست‌خط.بدون شکست)
    بلند.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 3، عرض = 10، ارتفاع = 1 })
    بافر.محدوده برش = بلند.محدوده()
    بلند.ترسیم(بافر، بلند.محدوده())
    بافر.محدوده برش = بافر.محدوده()
    تکرار بافر.ارتفاع در سطر:
        سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
    پایان
    سرچاپ "پیشرفت"، نوار.مقدار پیشرفت()، "عرض ترجیحی"، عنوان.عرض ترجیحی()
    بافر.آزادسازی()
پایان
خروجی[رابط کاربر] [متنی برای] [پایانه در] [سلام] اندازه 5 x 2 | در میانه | |────────────────────| |###------------ 25%| |این خط هرگ | پیشرفت 50 عرض ترجیحی 8

حالت‌شکست‌خط WrapMode

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

متن Text

ساختار متن
ویجتی که یک رشته را رسم می‌کند: یک بار تنظیم یا بعدا به‌روزرسانی می‌شود، با تراز چپ، وسط یا راست، در جعبه خود شکسته (یا بریده) می‌شود و با یک ظاهر رسم می‌شود. اندازه ترجیحی آن از محتوا می‌آید. آن را جاسازی کنید یا با متن جدید بسازید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
محتواcontentرشته = ""متنی که رسم می‌شود. یک "\n" صریح خط تازه‌ای آغاز می‌کند (نگاه کنید به شکستن خطوط متن).
ترازalignترازجای‌گذاری افقی هر خط. پیش‌فرض تراز.چپ است.
ظاهرstyleظاهرشیوه رسم محتوا. پس‌زمینه کل جعبه را پر می‌کند؛ پیش‌زمینه و ویژگی‌ها فقط بر خانه‌های نویسه‌ها اعمال می‌شوند، از جمله فاصله‌های میانی، تا زیرخط پیوسته بماند. ظاهر پیش‌فرض با پیش‌فرض‌های پایانه رسم می‌کند. بافر آن را در سطح‌رنگ خودش منتشر می‌کند.
شکست خطwrapحالت‌شکست‌خطشیوه تبدیل محتوا به خط‌ها هنگام رسم. پیش‌فرض حالت‌شکست‌خط.بر پایه واژه است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم متن SetText

تابع تنظیم متن(content: رشته)

تنظیم متن set_text

تابع تنظیم متن(content: رشته)
محتوا را جایگزین می‌کند و منبع را پاک می‌کند؛ آخرین تنظیم برنده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم منبع SetSource

تابع تنظیم منبع(src: تابع(): رشته)

تنظیم منبع set_source

تابع تنظیم منبع(src: تابع(): رشته)
src را هنگام رسم و اندازه‌گیری می‌خواند؛ آخرین تنظیم برنده است. مقدار آن را در طول یک فریم ثابت نگه دارید. بستارها مقدار را به‌صورت کپی می‌گیرند، پس وضعیت ماژول یا یک نگه‌دارنده مشترک را بخوانید. منبع را پیش از صفحه.افزودن تنظیم کنید، چون ویجت را کپی می‌کند. تغییرات به‌طور خودکار بازترسیم یا چیدمان دوباره را به دنبال ندارند: علامت‌گذاری برای بازترسیم(id) را فراخوانی کنید، یک تیک ثبت کنید، یا تنظیم محدوده را دوباره فراخوانی کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

پاک‌سازی منبع ClearSource

تابع پاک‌سازی منبع()

پاک‌سازی منبع clear_source

تابع پاک‌سازی منبع()
منبع را پاک می‌کند و به آخرین محتوای تنظیم‌شده بازمی‌گردد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم تراز SetAlign

تابع تنظیم تراز(align: تراز)

تنظیم تراز set_align

تابع تنظیم تراز(align: تراز)
تراز افقی را تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم ظاهر SetStyle

تابع تنظیم ظاهر(style: ظاهر)

تنظیم ظاهر set_style

تابع تنظیم ظاهر(style: ظاهر)
ظاهری را که محتوا با آن رسم می‌شود تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم شکست خط SetWrap

تابع تنظیم شکست خط(wrap: حالت‌شکست‌خط)

تنظیم شکست خط set_wrap

تابع تنظیم شکست خط(wrap: حالت‌شکست‌خط)
حالت‌شکست‌خط را تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
اندازه‌ای که محتوا در max_width می‌خواهد، به شکل یک مستطیل در (0, 0): عرض، بلندترین خط شکسته‌شده بر حسب خانه است و ارتفاع، تعداد خط‌های شکسته‌شده. max_width <= 0 یعنی بی‌کران، پس خط‌های صریح اندازه‌گیری می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

عرض ترجیحی PreferredWidth

تابع عرض ترجیحی(): صحیح

عرض ترجیحی preferred_width

تابع عرض ترجیحی(): صحیح
بلندترین خط صریح محتوا، بر حسب خانه (عرض بی‌کران).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
محتوا را درون محدوده رسم می‌کند. ابتدا جعبه با ظاهر فاصله درونی (فقط پس‌زمینه ظاهر ویجت) پر می‌شود تا رنگ پس‌زمینه تمام‌سطح دیده شود و هیچ چیز دیگری به فاصله درونی نرسد. سپس هر خط با جابه‌جایی تراز جای می‌گیرد و به‌صورت یک تکه پیوسته با ظاهر کامل نوشته می‌شود، از جمله فاصله‌های میانی، تا زیرخط هرگز نشکند؛ حداکثر محدوده.ارتفاع خط رسم می‌شود. جعبه تباهیده چیزی رسم نمی‌کند و هرگز panic نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

سرریز‌سلول CellOverflow

جداشمار سرریز‌سلول
آنچه برای متن خانه‌ای که از ناحیه متنش پهن‌تر است رخ می‌دهد.
نامانگلیسیگونهتوضیح
برشClipمتن فراتر از لبه بریده می‌شود (پیش‌فرض).
سه‌نقطهEllipsisآخرین خانه نمایان با نویسه سه‌نقطه جایگزین می‌شود.
tui-table.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

تابع ردیف(اولی: رشته، دومی: رشته): وکتور<رشته>:
    ناپایا خانه‌ها := وکتور {} برگردان وکتور<رشته>
    خانه‌ها.بیفزا(اولی)
    خانه‌ها.بیفزا(دومی)
    برگشت خانه‌ها
پایان

تابع ریشه:
    ناپایا جدول := رابط‌پایانه.جدول جدید()
    _ := جدول.افزودن ستون(رابط‌پایانه.ستون‌جدول {})
    _ := جدول.افزودن ستون(رابط‌پایانه.ستون‌جدول {})
    جدول.تنظیم عرض ستون(0، رابط‌پایانه.قاعده‌اندازه‌گذاری { نوع = رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، تعداد سلول = 9 })
    جدول.تنظیم تراز ستون(1، رابط‌پایانه.تراز.راست)
    جدول.تنظیم سرریز ستون(0، رابط‌پایانه.سرریز‌سلول.سه‌نقطه)
    جدول.تنظیم فاصله درونی افقی(1)
    جدول.سرآیند = درست
    جدول.خط‌کشی = درست
    جدول.ظاهر سرآیند = رابط‌پایانه.ظاهر { پررنگ = درست }
    _ := جدول.افزودن ردیف(ردیف("بسته"، "حجم"))
    _ := جدول.افزودن ردیف(ردیف("tui"، "8956"))
    _ := جدول.افزودن ردیف(ردیف("os.signal"، "976"))
    _ := جدول.افزودن ردیف(ردیف("encoding.json"، "3100"))
    جدول.تنظیم تراز سلول(3، 1، رابط‌پایانه.تراز.چپ)
    ترجیحی := جدول.اندازه ترجیحی(40)
    سرچاپ "ارتفاع ترجیحی"، ترجیحی.ارتفاع
    ناپایا بافر := رابط‌پایانه.بافر جدید(20، ترجیحی.ارتفاع)
    جدول.تنظیم محدوده(بافر.محدوده())
    جدول.ترسیم(بافر، بافر.محدوده())
    تکرار بافر.ارتفاع در سطر:
        سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
    پایان
    سرچاپ "ستون‌ها"، جدول.ستون‌ها.طول()، "ردیف‌ها"، جدول.ردیف‌ها.طول()، "تمرکزپذیر"، جدول.تمرکز‌پذیر است()
    بافر.آزادسازی()

    ناپایا نما := رابط‌پایانه.نمای جدول جدید()
    _ := نما.افزودن ستون(رابط‌پایانه.ستون‌جدول { عرض = رابط‌پایانه.قاعده‌اندازه‌گذاری { نوع = رابط‌پایانه.نوع‌اندازه‌گذاری.پرکردن فضا، وزن = 1 }، سرریز = رابط‌پایانه.سرریز‌سلول.برش })
    تکرار 10 در شماره:
        ناپایا تک := وکتور {} برگردان وکتور<رشته>
        تک.بیفزا("خط " + شماره)
        _ := نما.افزودن ردیف(تک)
    پایان
    نما.تنظیم محدوده(رابط‌پایانه.مستطیل { عرض = 12، ارتفاع = 3 })
    پایین := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید پایین } }
    تکرار 4:
        _ := نما.پردازش رویداد(پایین)
    پایان
    سرچاپ "انتخاب‌شده"، نما.انتخاب‌شده، "نخستین ردیف نمایان"، نما.جابه‌جایی
پایان
خروجیارتفاع ترجیحی 5 | بسته حجم | |────────────────────| | tui 8956 | | os.sig… 976 | | encodi… 3100 | ستون‌ها 2 ردیف‌ها 4 تمرکزپذیر false انتخاب‌شده 4 نخستین ردیف نمایان 2

ستون‌جدول TableColumn

ساختار ستون‌جدول
یک ستون از جدول. عرض به صورت قاعده اندازه‌گذاری خوانده می‌شود؛ کمینه و بیشینه فقط وقتی عرض برابر ترجیحی است خوانده می‌شوند. بیشینه = -1 یعنی نامحدود. وقتی کمینه و بیشینه با هم تعارض دارند، کمینه برنده است.
نامانگلیسیگونهتوضیح
عرضwidthقاعده‌اندازه‌گذاریثابت دقیقاً به تعداد خانه، ترجیحی به عرض محتوا، پرکردن فضا سهمی وزنی.
کمینهminصحیح = 0کران پایین برای ستون ترجیحی، بر حسب خانه.
بیشینهmaxصحیح = -1کران بالا برای ستون ترجیحی، بر حسب خانه. -1 یعنی نامحدود.
ترازalignترازتراز پیش‌فرض خانه‌ها و سرآیند این ستون.
سرریزoverflowسرریز‌سلولنحوه نمایش متنی که از ستون پهن‌تر است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

جدول Table

ساختار جدول
شبکه‌ای غیرتمرکزپذیر از ردیف‌های یک‌خطی. ستون‌ها و ردیف‌ها را اضافه کنید، سپس آن را رسم کنید. وقتی سرآیند روشن است، ردیف 0 سرآیند است: با ظاهر سرآیند رسم می‌شود و هر خانه تراز ستون خود را می‌گیرد. خط‌کشی خطی از ─ زیر سرآیند در عرض جدول رسم می‌کند. فاصله درونی افقی فضای خالی هر طرف یک خانه است؛ مقدار منفی 0 حساب می‌شود.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه تعبیه‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع آن را بازتعریف نمی‌کند.
ستون‌هاcolumnsوکتور<ستون‌جدول>تعریف ستون‌ها، از چپ به راست.
ردیف‌هاrowsوکتور<وکتور<رشته>>متن خانه‌ها بر اساس ردیف، سپس ستون. وقتی سرآیند روشن است ردیف 0 سرآیند است.
سرآیندheaderمنطقی = نادرستوقتی درست باشد، ردیف 0 سرآیند است.
خط‌کشیruleمنطقی = درستخطی زیر سرآیند رسم می‌کند. فقط وقتی سرآیند روشن است معنادار است.
فاصله درونی افقیpad_xصحیح = 1خانه‌های خالی در هر طرف متن هر خانه.
ظاهرstyleظاهرظاهر ردیف‌های داده.
ظاهر سرآیندheader_styleظاهرظاهر ردیف سرآیند. در آنجا جای ظاهر را می‌گیرد، نه اینکه با آن ادغام شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
نادرست برمی‌گرداند: جدول تمرکز صفحه‌کلید نمی‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
نادرست برمی‌گرداند: کلیک روی جدول به هر آنچه زیر آن است می‌رسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
چیزی را مصرف و چیزی را تغییر نمی‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

افزودن ستون AddColumn

تابع افزودن ستون(col: ستون‌جدول): صحیح

افزودن ستون add_column

تابع افزودن ستون(col: ستون‌جدول): صحیح
ستونی را به انتها اضافه می‌کند و نمایه آن را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

افزودن ردیف AddRow

تابع افزودن ردیف(cells: وکتور<رشته>): صحیح

افزودن ردیف add_row

تابع افزودن ردیف(cells: وکتور<رشته>): صحیح
ردیفی را به انتها اضافه می‌کند و نمایه آن را برمی‌گرداند. خانه‌های جاافتاده خالی خوانده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تنظیم عرض ستون SetColumnWidth

تابع تنظیم عرض ستون(i: صحیح، w: قاعده‌اندازه‌گذاری)

تنظیم عرض ستون set_column_width

تابع تنظیم عرض ستون(i: صحیح، w: قاعده‌اندازه‌گذاری)
قاعده عرض یک ستون را تنظیم می‌کند. نمایه خارج از بازه کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تنظیم تراز ستون SetColumnAlign

تابع تنظیم تراز ستون(i: صحیح، a: تراز)

تنظیم تراز ستون set_column_align

تابع تنظیم تراز ستون(i: صحیح، a: تراز)
تراز پیش‌فرض یک ستون را تنظیم می‌کند. نمایه خارج از بازه کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تنظیم سرریز ستون SetColumnOverflow

تابع تنظیم سرریز ستون(i: صحیح، o: سرریز‌سلول)

تنظیم سرریز ستون set_column_overflow

تابع تنظیم سرریز ستون(i: صحیح، o: سرریز‌سلول)
سرریز یک ستون را تنظیم می‌کند. نمایه خارج از بازه کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تنظیم تراز سلول SetCellAlign

تابع تنظیم تراز سلول(row: صحیح، col: صحیح، a: تراز)

تنظیم تراز سلول set_cell_align

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تنظیم فاصله درونی افقی SetPadX

تابع تنظیم فاصله درونی افقی(n: صحیح)

تنظیم فاصله درونی افقی set_pad_x

تابع تنظیم فاصله درونی افقی(n: صحیح)
فضای خالی هر طرف یک خانه را تنظیم می‌کند. مقدار منفی 0 حساب می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
اندازه طبیعی جدول: عرض‌های تعیین‌شده با ستون‌های وزنی برابر 0، که وقتی max_width مثبت است به آن محدود می‌شود. ارتفاع برابر سرآیند، خط‌کشی و ردیف‌های داده است، پس جدول بدون ردیف ارتفاع 0 دارد. جدول بدون ستون 0 در 0 است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

اندازه‌گیری Measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه

اندازه‌گیری measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه
اندازه ترجیحی را در امتداد axis گزارش می‌کند. معتبر همیشه درست است، پس موتور چیدمان پاسخی واقعی می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
جدول را درون محدوده رسم می‌کند. ردیف‌های فراتر از محدوده.ارتفاع رسم نمی‌شوند. برای جدول خالی یا مستطیل خالی چیزی رسم نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

محاسبه عرض‌ها ResolveWidths

تابع محاسبه عرض‌ها(w: صحیح): وکتور<صحیح>

رسم ردیف PaintRow

تابع رسم ردیف(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، r: صحیح، y: صحیح، style: ظاهر)

رسم خط PaintRule

تابع رسم خط(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، y: صحیح، style: ظاهر)

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

نمای‌جدول TableView

ساختار نمای‌جدول
یک جدول تمرکزپذیر با پیمایش عمودی. جدول را تعبیه می‌کند، پس ستون‌ها، ردیف‌ها، سرآیند، خط‌کشی، ظاهرها و همه تنظیم‌کننده‌ها از آن جدول هستند. سرآیند و خط‌کشی ثابت می‌مانند؛ ردیف‌های داده زیر آن‌ها در پنجره‌ای که از جابه‌جایی آغاز می‌شود پیمایش می‌شوند. انتخاب‌شده ردیف نشانگر است، نمایه‌ای در ردیف‌های داده، یا -1 وقتی ردیفی نیست. نمای‌جدول را در جایگاهی از نوع پرکردن فضا قرار دهید: اندازه ترجیحی برابر ارتفاع کامل جدول است، پس هر جایگاه دیگری همه ردیف‌ها را نشان می‌دهد و هرگز پیمایش نمی‌کند. Up، Down، PageUp، PageDown، Home و End نشانگر را جابه‌جا می‌کنند و همیشه مصرف می‌شوند؛ Enter فعال‌سازی را فراخوانی می‌کند. وقتی تعداد ردیف‌ها از پنجره بیشتر باشد، آخرین ستون خانه‌ها یک نوار پیمایش را نگه می‌دارد.
نامانگلیسیگونهتوضیح
جدولTableجدولجدول تعبیه‌شده: ستون‌ها، ردیف‌ها، سرآیند و ظاهرها، که نما آن‌ها را با پیمایش و یک ردیف انتخاب‌شده رسم می‌کند.
جابه‌جاییoffsetصحیح = 0نمایه نخستین ردیف داده نمایان.
انتخاب‌شدهselectedصحیح = 0ردیف داده انتخاب‌شده، یا -1 وقتی ردیف داده‌ای نیست.
فعال‌سازیactivateتابع(صحیح): منطقیوقتی Enter روی جدول غیرخالی فشرده شود با ردیف انتخاب‌شده فراخوانی می‌شود. نتیجه آن پرچم مصرف است: پیش‌فرض نادرست برمی‌گرداند، پس Enter بالا می‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
درست برمی‌گرداند: صفحه تا وقتی نمای‌جدول تمرکز دارد کلیدها را به آن می‌فرستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
درست برمی‌گرداند. کلیک به جدول تمرکز نمی‌دهد؛ چرخ ماوس هنوز در std/term رمزگشایی نمی‌شود، پس با ماوس چیزی پیمایش نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
Up و Down نشانگر را یک ردیف، PageUp و PageDown به اندازه ارتفاع پنجره، و Home و End به نخستین و آخرین ردیف جابه‌جا می‌کنند. پنجره به کمترین مقداری پیمایش می‌شود که نشانگر را نمایان نگه دارد، و کلید صفحه پنجره را یک صفحه جابه‌جا می‌کند. هر شش کلید، حتی بدون ردیف، مصرف می‌شوند. Enter مقدار فعال‌سازی(انتخاب‌شده) را برمی‌گرداند و وقتی ردیفی نیست مصرف نمی‌شود. هر چیز دیگری نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
سرآیند و خط‌کشی ثابت را رسم می‌کند، سپس ردیف‌های داده از جابه‌جایی تا جابه‌جایی + ارتفاع پنجره را، که هر کدام فقط درون محدوده رسم می‌شوند. ردیف انتخاب‌شده وقتی بافر در تمرکز است وارونه و وقتی نیست پررنگ است؛ وقتی انتخاب بیرون از پنجره باشد هیچ ردیفی علامت نمی‌خورد. نوار پیمایش از │ و █ استفاده می‌کند، یا تحت سیاست نویسه اسکی از | و #.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل
همانند جدول.اندازه ترجیحی، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه
همانند جدول.اندازه‌گیری، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

AddColumn

تابع AddColumn(col: ستون‌جدول): صحیح

add_column

تابع add_column(col: ستون‌جدول): صحیح
همانند جدول.افزودن ستون، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

AddRow

تابع AddRow(cells: وکتور<رشته>): صحیح

add_row

تابع add_row(cells: وکتور<رشته>): صحیح
همانند جدول.افزودن ردیف، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

SetColumnWidth

تابع SetColumnWidth(i: صحیح، w: قاعده‌اندازه‌گذاری)

set_column_width

تابع set_column_width(i: صحیح، w: قاعده‌اندازه‌گذاری)
همانند جدول.تنظیم عرض ستون، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

SetColumnAlign

تابع SetColumnAlign(i: صحیح، a: تراز)

set_column_align

تابع set_column_align(i: صحیح، a: تراز)
همانند جدول.تنظیم تراز ستون، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

SetColumnOverflow

تابع SetColumnOverflow(i: صحیح، o: سرریز‌سلول)

set_column_overflow

تابع set_column_overflow(i: صحیح، o: سرریز‌سلول)
همانند جدول.تنظیم سرریز ستون، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

SetCellAlign

تابع SetCellAlign(row: صحیح، col: صحیح، a: تراز)

set_cell_align

تابع set_cell_align(row: صحیح، col: صحیح، a: تراز)
همانند جدول.تنظیم تراز سلول، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

SetPadX

تابع SetPadX(n: صحیح)

set_pad_x

تابع set_pad_x(n: صحیح)
همانند جدول.تنظیم فاصله درونی افقی، روی جدول درون نما.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

ResolveWidths

تابع ResolveWidths(w: صحیح): وکتور<صحیح>

PaintRow

تابع PaintRow(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، r: صحیح، y: صحیح، style: ظاهر)

PaintRule

تابع PaintRule(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، y: صحیح، style: ظاهر)

سبک‌کادر BorderStyle

جداشمار سبک‌کادر
نوع کادری که یک ظرف رسم می‌کند: هیچ، یا حلقه‌ای یک‌خانه‌ای با خطوط نازک، خطوط دوتایی، یا خطوط نازک با گوشه‌های قوسی. فقط یک مقدار است: رسم حلقه (کدپوینت‌ها، گوشه‌ها و عنوان‌هایش) کار CUR-220 است. هم‌سطح ظاهر است و هرگز فیلدی از آن نیست، پس کادر‌انتخابی برای هر ویجت است و به ارث نمی‌رسد یا ادغام نمی‌شود.
نامانگلیسیگونهتوضیح
بدون کادرNoneبدون کادر؛ ناحیه محتوا کل ناحیه است.
تک خطSingleحلقه‌ای یک‌خانه‌ای از خطوط نازک با گوشه‌های چهارگوش.
دو خطDoubleحلقه‌ای یک‌خانه‌ای از خطوط دوتایی.
گوشه‌گردRoundedحلقه‌ای یک‌خانه‌ای از خطوط نازک با گوشه‌های قوسی.
tui-style.salam
// زبان: فارسی
واردسازی رشته
واردسازی رابط‌پایانه

تابع نمایش(دنباله: رشته): رشته:
    برگشت رشته.جایگزینی(دنباله، "\x1b"، "ESC")
پایان

تابع ریشه:
    سرچاپ نمایش(رابط‌پایانه.دنباله رنگ پیش‌زمینه(رابط‌پایانه.قرمز))، نمایش(رابط‌پایانه.دنباله رنگ پس‌زمینه(رابط‌پایانه.آبی))
    نارنجی := رابط‌پایانه.رنگ.آرجی‌بی(255، 128، 0)
    سرچاپ "رنگ حقیقی:"، نمایش(رابط‌پایانه.دنباله پیش‌زمینه در سطح(نارنجی، رابط‌پایانه.سطح‌رنگ.رنگ حقیقی))
    سرچاپ "256 رنگ:"، نمایش(رابط‌پایانه.دنباله پیش‌زمینه در سطح(نارنجی، رابط‌پایانه.سطح‌رنگ.نمایه‌ای۲۵۶))
    سرچاپ "16 رنگ:"، نمایش(رابط‌پایانه.دنباله پس‌زمینه در سطح(نارنجی، رابط‌پایانه.سطح‌رنگ.انسی۱۶))
    سرچاپ "بی‌رنگ:"، نمایش(رابط‌پایانه.دنباله پیش‌زمینه در سطح(نارنجی، رابط‌پایانه.سطح‌رنگ.خاموش))
    سرچاپ "کاهش‌یافته:"، رابط‌پایانه.کاهش سطح رنگ(رابط‌پایانه.رنگ.نمایه‌ای(196)، رابط‌پایانه.سطح‌رنگ.انسی۱۶) برابر رابط‌پایانه.قرمز روشن
    سرچاپ "رنگ‌ها:"، رابط‌پایانه.مشکی نابرابر رابط‌پایانه.سفید، رابط‌پایانه.سبز نابرابر رابط‌پایانه.سبز روشن، رابط‌پایانه.زرد نابرابر رابط‌پایانه.ارغوانی، رابط‌پایانه.فیروزه‌ای نابرابر رابط‌پایانه.فیروزه‌ای روشن
    سرچاپ "روشن‌ها:"، رابط‌پایانه.مشکی روشن نابرابر رابط‌پایانه.زرد روشن، رابط‌پایانه.آبی روشن نابرابر رابط‌پایانه.ارغوانی روشن، رابط‌پایانه.سفید روشن نابرابر رابط‌پایانه.رنگ.پیش‌فرض
    سرچاپ "سطح پایانه معلوم است:"، رابط‌پایانه.تشخیص سطح رنگ() برابر رابط‌پایانه.تشخیص سطح رنگ()

    پایه := رابط‌پایانه.ظاهر { رنگ پیش‌زمینه = رابط‌پایانه.سبز، پررنگ = درست }
    رویی := رابط‌پایانه.ظاهر { رنگ پس‌زمینه = رابط‌پایانه.مشکی، زیرخط = درست }
    هردو := رابط‌پایانه.ادغام ظاهر(پایه، رویی)
    سرچاپ "ادغام، پررنگ را نگه می‌دارد:"، هردو.پررنگ، "و زیرخط را:"، هردو.زیرخط
    سرچاپ "برابر پیش‌فرض:"، رابط‌پایانه.برابری ظاهر(رابط‌پایانه.ظاهر پیش‌فرض، رابط‌پایانه.ظاهر {})
    سرچاپ "روشن:"، نمایش(رابط‌پایانه.دنباله فعال‌سازی ظاهر(هردو، رابط‌پایانه.سطح‌رنگ.انسی۱۶))، "خاموش:"، نمایش(رابط‌پایانه.دنباله غیرفعال‌سازی ظاهر(هردو، رابط‌پایانه.سطح‌رنگ.انسی۱۶))
    سرچاپ "ضخامت قاب:"، رابط‌پایانه.ضخامت کادر(رابط‌پایانه.سبک‌کادر.تک خط)، رابط‌پایانه.ضخامت کادر(رابط‌پایانه.سبک‌کادر.بدون کادر)
    سرچاپ "ظاهرهای ساخته‌شده:"، رابط‌پایانه.شمار ساخت اس‌جی‌آر() بزرگتر 0
    ناپایا وارون := رابط‌پایانه.ظاهر { کم‌رنگ = درست، کج = درست }
    وارون.معکوس = درست
    _ := وارون
پایان
خروجیESC[31m ESC[44m رنگ حقیقی: ESC[38;2;255;128;0m 256 رنگ: ESC[38;5;208m 16 رنگ: ESC[43m بی‌رنگ: ESC[39m کاهش‌یافته: true رنگ‌ها: true true true true روشن‌ها: true true true سطح پایانه معلوم است: true ادغام، پررنگ را نگه می‌دارد: true و زیرخط را: true برابر پیش‌فرض: true روشن: ESC[1mESC[4mESC[32mESC[40m خاموش: ESC[22mESC[24mESC[39mESC[49m ضخامت قاب: 1 0 ظاهرهای ساخته‌شده: true

ظاهر Style

ساختار ظاهر
شیوه رسم یک خانه: یک رنگ پیش‌زمینه، یک رنگ پس‌زمینه و پنج ویژگی. رنگ‌ها از نوع رنگ هستند، نه Option<Color> (Default خودش یعنی «رنگی انتخاب نشده») و ویژگی false یعنی خاموش. معکوس ذخیره می‌شود و هنگام تولید خروجی ترکیب نمی‌شود تا برابری ظاهر آن را ببیند و تغییری که فقط در وارونگی است به اختلاف بافر برسد. مجموعه به همین هفت مورد بسته می‌ماند: بدون خط‌خورده، چشمک‌زن یا پنهان.
نامانگلیسیگونهتوضیح
رنگ پیش‌زمینهfgرنگپیش‌زمینه نویسه؛ Color.Default پیش‌زمینه خود پایانه را باقی می‌گذارد.
رنگ پس‌زمینهbgرنگپس‌زمینه خانه؛ Color.Default پس‌زمینه خود پایانه را باقی می‌گذارد.
پررنگboldمنطقی = نادرستفقط وزن پررنگ؛ هرگز رنگ پیش‌زمینه را روشن‌تر نمی‌کند.
کم‌رنگdimمنطقی = نادرستشدت کاهش‌یافته.
کجitalicمنطقی = نادرستنویسه‌های کج.
زیرخطunderlineمنطقی = نادرستیک خط زیرین تکی.
معکوسreverseمنطقی = نادرستجای رنگ پیش‌زمینه و پس‌زمینه‌ای را که پایانه با آن رسم می‌کند عوض می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

جهت‌گیری Orientation

جداشمار جهت‌گیری
جهت خط یک جداکننده.
نامانگلیسیگونهتوضیح
افقیHorizontalخطی در امتداد ردیف 0 مستطیل، با تمام عرض. مقدار پیش‌فرض.
عمودیVerticalخطی در امتداد ستون 0 مستطیل، با تمام ارتفاع.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

جداکننده Separator

ساختار جداکننده
خطی یک‌خطی که یک نویسه را در طول نخستین ردیف مستطیل (افقی) یا نخستین ستون آن (عمودی) تکرار می‌کند. جهت را با تنظیم جهت‌گیری، نویسه را با تنظیم نویسه و ظاهر آن را با تنظیم ظاهر تنظیم کنید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه تعبیه‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع آن را بازتعریف نمی‌کند.
جهت‌گیریorientationجهت‌گیریکدام خط رسم شود. به‌طور پیش‌فرض افقی.
نویسهchرشته = ""نویسه، به پهنای یک خانه. خالی یعنی نویسه پیش‌فرض جهت‌گیری.
ظاهرstyleظاهرظاهر خط. رنگ پیش‌زمینه آن خانه‌های نویسه را رنگ می‌کند. رنگ پس‌زمینه تنظیم‌شده، پیش از رسم نویسه، کل مستطیل را پر می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
نادرست برمی‌گرداند: جداکننده هرگز تمرکز نمی‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
نادرست برمی‌گرداند: کلیک روی خط به ویجت زیرین می‌رسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
چیزی را مصرف نمی‌کند: نادرست برمی‌گرداند تا رویداد بالا برود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
افقی: عرض نامعلوم (چیدمان عرض موجود را پر می‌کند) و یک ردیف. عمودی: یک ستون و ارتفاع نامعلوم.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اندازه‌گیری Measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه

اندازه‌گیری measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه
همیشه قابل اندازه‌گیری است. محور عرضی یک خانه است. محور اصلی max_width را می‌گیرد، همان پرکردنی که مقدار نگهبان اندازه ترجیحی درخواست می‌کند. جداکننده هرگز معتبر = نادرست گزارش نمی‌کند، پس چیدمان هرگز به جایگزین موقت برنمی‌گردد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم جهت‌گیری SetOrientation

تابع تنظیم جهت‌گیری(o: جهت‌گیری)

تنظیم جهت‌گیری set_orientation

تابع تنظیم جهت‌گیری(o: جهت‌گیری)
جهت خط را تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم نویسه SetCh

تابع تنظیم نویسه(ch: رشته): منطقی

تنظیم نویسه set_ch

تابع تنظیم نویسه(ch: رشته): منطقی
نویسه را تنظیم می‌کند. نویسه باید از نظر پهنای نمایش دقیقاً یک خانه باشد. رشته خالی آن را به نویسه پیش‌فرض جهت‌گیری بازمی‌گرداند. هر رشته دیگری که پهن یا با پهنای صفر باشد رد می‌شود: چیزی تغییر نمی‌کند، نویسه قبلی می‌ماند و فراخوانی نادرست برمی‌گرداند. این قاعده یک bool است، نه یک خطا، زیرا سازنده‌ها و متدهای کتابخانه خطا نمی‌دهند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم ظاهر SetStyle

تابع تنظیم ظاهر(s: ظاهر)

تنظیم ظاهر set_style

تابع تنظیم ظاهر(s: ظاهر)
ظاهر خط و پس‌زمینه آن را تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
خط را درون محدوده رسم می‌کند. وقتی مستطیل عرض یا ارتفاع ندارد چیزی رسم نمی‌شود. رنگ پس‌زمینه تنظیم‌شده ابتدا کل مستطیل را پر می‌کند. سپس نویسه در طول کامل ردیف 0 (افقی) یا ستون 0 (عمودی) مستطیل تکرار می‌شود. هر نوشتن از طریق تنظیم انجام می‌شود که به بافر برش می‌خورد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

صفحه Screen

ساختار صفحه
نشست پایانه: درخت ویجت‌ها، بافر پشتی، تمرکز و حلقه رویداد. آن را با صفحه جدید بسازید.
نامانگلیسیگونهتوضیح
رویدادهاeventsکانال.کانال<رویداد>کانالی که رشته ورودی رویدادها را روی آن می‌فرستد و رویداد بعدی از آن می‌خواند.
ریشهrootdyn ویجتویجت ریشه (شناسه 0). همیشه کل صفحه را می‌پوشاند.
ویجت متمرکزfocuseddyn ویجتویجتی که در حال حاضر رویدادها را پیش از همه دریافت می‌کند.
بافرbufferبافربافر پشتی که ویجت‌ها در آن رسم می‌کنند.
نویسه‌هاglyphsسیاست‌نویسه‌هاسیاست نویسه‌ای که در رونوشت بافر هر فریم قرار می‌گیرد. به‌طور پیش‌فرض یونیکد؛ آغاز() آن را با تشخیص سیاست نویسه‌ها() جایگزین می‌کند، مگر اینکه برنامه تنظیم نویسه‌ها را فراخوانی کرده باشد.
در حال اجراrunningمنطقی = نادرستاز آغاز() (یا نخستین اجرا) تا توقف() درست است.
درختtreeدرخترجیستری ویجت‌ها. به جای ویرایش مستقیم آن، افزودن() و ویجت() را ترجیح دهید.
بازه تیک به میلی‌ثانیهtick_msصحیح = 0فاصله رویدادهای رویداد تیک به میلی‌ثانیه؛ 0 (پیش‌فرض) هیچ تیکی نمی‌فرستد. آن را پیش از آغاز() تنظیم کنید.
گزارش ماوسmouseمنطقی = نادرستوقتی درست باشد، آغاز() گزارش کلیک را فعال می‌کند: فشردن‌ها و رها کردن‌ها به صورت رویداد ماوس می‌رسند. آن را پیش از آغاز() تنظیم کنید.
گزارش حرکت ماوسmouse_motionمنطقی = نادرستوقتی درست باشد، آغاز() گزارش همه حرکت‌ها را فعال می‌کند و هر حرکت اشاره‌گر، فشردن و رها کردن به صورت رویداد ماوس می‌رسد. کلیک‌ها را هم شامل می‌شود، پس به گزارش ماوس نیازی ندارد، و گزارش‌ها پرتعدادند. آن را پیش از آغاز() تنظیم کنید.
نگاشت کلیدkeymapنگاشت‌کلیدپیوندهای کلید اختیاری، که به عنوان راه جایگزین هدایت برای رویدادهای رویداد کیبوردی که هیچ ویجتی مصرف نکرده بررسی می‌شوند. به‌طور پیش‌فرض خالی است، پس برنامه‌ای که هرگز به آن دست نمی‌زند دقیقاً مانند قبل رفتار می‌کند. برای گسترش درجا از طریق همین فیلد پیوند بزنید، یا یک نگاشت کامل را با تنظیم نگاشت‌کلید نصب کنید. هرگز یک نگاشت‌کلید را مستقیم انتساب ندهید: بافرهای نگاشت فعلی نشت می‌کنند.
نیازمند بازترسیمdirtyمنطقی = درستوقتی درست است که نمایش تغییرات() بعدی باید کل فریم را بازترسیم کند: تغییر اندازه، یک تیک، ویجت افزوده‌شده، آوردن به رو یا بازگرداندن ترتیب، کلیدی که نگاشت‌کلید مصرف کرده، یا علامت‌گذاری برای بازترسیم یک ویجت ناشناخته. تغییر دقیق یک ناحیه است.
پشته تمرکزfocus_stackوکتور<صحیح>شناسه‌های ویجت؛ مدخل بالایی (آخر) ویجت متمرکز است و پشته خالی یعنی هیچ چیز تمرکز ندارد. آن را از طریق تمرکز، تمرکز با ذخیره قبلی، بازیابی تمرکز و متدهای پیمایش تغییر دهید که ویجت متمرکز را همگام نگه می‌دارند و محدوده قدیم و جدید را در صف بازترسیم می‌گذارند.
tui-screen.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

تابع جا(ایکس: صحیح، ایگرگ: صحیح): رابط‌پایانه.مستطیل:
    برگشت رابط‌پایانه.مستطیل { ایکس = ایکس، ایگرگ = ایگرگ، عرض = 8، ارتفاع = 1 }
پایان

تابع کلید(کد: صحیح): رابط‌پایانه.رویداد:
    برگشت رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = کد } }
پایان

تابع ریشه:
    ناپایا ص := رابط‌پایانه.صفحه جدید(رابط‌پایانه.ویجت‌پایه {}، 20، 3)
    دیرکن ص.بستن()
    الف := ص.افزودن(رابط‌پایانه.شناسه ریشه، رابط‌پایانه.دکمه جدید("ا") برگردان پویا رابط‌پایانه.ویجت)
    ب := ص.افزودن(رابط‌پایانه.شناسه ریشه، رابط‌پایانه.دکمه جدید("ب") برگردان پویا رابط‌پایانه.ویجت)
    پ := ص.افزودن(رابط‌پایانه.شناسه ریشه، رابط‌پایانه.دکمه جدید("پ") برگردان پویا رابط‌پایانه.ویجت)
    ص.ویجت(الف).تنظیم محدوده(جا(0، 0))
    ص.ویجت(ب).تنظیم محدوده(جا(10، 0))
    ص.ویجت(پ).تنظیم محدوده(جا(0، 2))
    سرچاپ "هنوز چیزی متمرکز نیست:"، ص.شناسه متمرکز() برابر رابط‌پایانه.بدون ویجت
    _ := ص.تمرکز(الف)
    سرچاپ "تمرکز روی الف:"، ص.شناسه متمرکز() برابر الف، "ب تمرکزپذیر است:"، ص.تمرکز‌پذیر است(ب)
    _ := ص.تمرکز راست()
    سرچاپ "راست:"، ص.شناسه متمرکز() برابر ب
    _ := ص.تمرکز چپ()
    _ := ص.تمرکز پایین()
    سرچاپ "پایین:"، ص.شناسه متمرکز() برابر پ
    _ := ص.تمرکز بالا()
    _ := ص.تمرکز بعدی()
    _ := ص.تمرکز قبلی()
    سرچاپ "پس از بعدی و قبلی:"، ص.شناسه متمرکز() برابر الف
    _ := ص.تمرکز با ذخیره قبلی(پ)
    _ := ص.بازیابی تمرکز()
    سرچاپ "بازیابی برمی‌گرداند:"، ص.شناسه متمرکز() برابر الف، "پشته:"، ص.پشته تمرکز.طول()
    سرچاپ "برخورد در 11,0:"، ص.آزمون برخورد(11، 0) برابر ب، "هیچ چیز در 19,2:"، ص.آزمون برخورد(19، 2) برابر رابط‌پایانه.شناسه ریشه

    ناپایا لایه := وکتور {} برگردان وکتور<صحیح>
    لایه.بیفزا(پ)
    ص.آوردن به رو(لایه)
    سرچاپ "رو آمده تمرکز می‌گیرد:"، ص.شناسه متمرکز() برابر پ
    ص.بازگرداندن ترتیب(لایه)
    ص.آوردن زیردرخت به رو(ب)
    ص.بازگرداندن ترتیب زیردرخت(ب)

    ص.تنظیم نگاشت کلید(رابط‌پایانه.نگاشت کلید پیش‌فرض())
    سرچاپ "در صف رفت:"، ص.صف‌گذاری رویداد(کلید(پایانه.کلید تب))
    ناپایا رخداد := رابط‌پایانه.رویداد {}
    اگر ص.رویداد بعدی(رخداد):
        سرچاپ "مصرف شد:"، ص.هدایت رویداد(رخداد)
    پایان
    ص.علامت‌گذاری برای بازترسیم(الف)
    ص.علامت‌گذاری زیردرخت برای بازترسیم(رابط‌پایانه.شناسه ریشه)
    ص.تغییر اندازه(22، 3)
    ص.جاسازی ریشه()
    ص.بازترسیم()
    ص.نمایش تغییرات()
    سرچاپ "|" + ص.بافر.متن ردیف(0) + "|"
    سرچاپ "|" + ص.بافر.متن ردیف(2) + "|"
    سرچاپ "ویجت‌ها:"، ص.درخت.تعداد()، "نیاز به بازترسیم:"، ص.نیازمند بازترسیم، "عرض محدوده متمرکز:"، ص.ویجت متمرکز.محدوده().عرض
    سرچاپ "ریشه می‌پوشاند"، ص.ریشه.محدوده().عرض، "x"، ص.ریشه.محدوده().ارتفاع، "نویسه‌ها یونیکد:"، ص.نویسه‌ها برابر رابط‌پایانه.سیاست‌نویسه‌ها.یونیکد
    _ := ص.رویدادها
    _ := ص.نگاشت کلید
    ص.توقف()
پایان
خروجیهنوز چیزی متمرکز نیست: true تمرکز روی الف: true ب تمرکزپذیر است: true راست: true پایین: true پس از بعدی و قبلی: true بازیابی برمی‌گرداند: true پشته: 1 برخورد در 11,0: true هیچ چیز در 19,2: true رو آمده تمرکز می‌گیرد: true در صف رفت: true مصرف شد: true |[ ا ] [ ب ] | |[ پ ] | ویجت‌ها: 4 نیاز به بازترسیم: false عرض محدوده متمرکز: 8 ریشه می‌پوشاند 22 x 3 نویسه‌ها یونیکد: true

افزودن Add

تابع افزودن(parent: صحیح، w: dyn ویجت): صحیح

افزودن add

تابع افزودن(parent: صحیح، w: dyn ویجت): صحیح
w را زیر parent (یک شناسه؛ شناسه ریشه برای سطح بالا) اضافه می‌کند و شناسه ویجت جدید را برمی‌گرداند. ویجت‌هایی که به رو آورده نشده‌اند به ترتیب شناسه، یعنی ترتیب افزوده شدن، رسم می‌شوند. نخستین ویجت تمرکزپذیر دسترس‌پذیری که وقتی هیچ چیز تمرکز ندارد افزوده شود تمرکز را می‌گیرد؛ فرزند یک نگه‌دارنده پنهان دسترس‌پذیر نیست، پس از آن گذر می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

آوردن به رو Raise

تابع آوردن به رو(ids: وکتور<صحیح>)

آوردن به رو raise

تابع آوردن به رو(ids: وکتور<صحیح>)
به هر id یک مُهر تازه می‌دهد که در کل این فراخوانی مشترک است، پس شناسه‌ها یک لایه واحد بالای هر ویجتی که پیش‌تر به رو آورده شده و بالای هر ویجت به رو نیاورده می‌سازند. درون لایه، ترتیب رسم همان ترتیب شناسه می‌ماند. وقتی ترتیب تمرکز حاصل خالی نباشد و تمرکز فعلی بیرون از آن باشد، آن تمرکز را ذخیره می‌کند و به نخستین شناسه این ترتیب می‌رود. در غیر این صورت تمرکز و شناسه ذخیره‌شده را تغییر نمی‌دهد. شناسه‌ای که در درخت نیست ثبت می‌شود و باعث خرابی نمی‌شود؛ فقط وقتی آن شناسه ثبت شود رسم را تغییر می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

بازگرداندن ترتیب Unraise

تابع بازگرداندن ترتیب(ids: وکتور<صحیح>)

بازگرداندن ترتیب unraise

تابع بازگرداندن ترتیب(ids: وکتور<صحیح>)
مُهر هر id را به 0 برمی‌گرداند، پس آن ویجت‌ها به ترتیب ساده شناسه بازمی‌گردند. خودتوان است: شناسه‌ای که به رو آورده نشده یا در درخت نیست، 0 می‌ماند. شمارنده مُهر را عقب نمی‌برد. وقتی چیزی به رو آورده‌شده باقی نماند، اگر شناسه ذخیره‌شده هنوز بیرون از زیردرخت پنهان تمرکزپذیر باشد به آن تمرکز می‌دهد، در غیر این صورت به نخستین ویجت تمرکزپذیر بیرون از زیردرخت پنهان، و شناسه ذخیره‌شده را پاک می‌کند. تا وقتی لایه‌ای باقی است، اگر تمرکز فعلی بیرون از ترتیب تمرکز جدید باشد به نخستین شناسه آن تمرکز می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

آوردن زیردرخت به رو RaiseSubtree

تابع آوردن زیردرخت به رو(id: صحیح)

آوردن زیردرخت به رو raise_subtree

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

بازگرداندن ترتیب زیردرخت UnraiseSubtree

تابع بازگرداندن ترتیب زیردرخت(id: صحیح)

بازگرداندن ترتیب زیردرخت unraise_subtree

تابع بازگرداندن ترتیب زیردرخت(id: صحیح)
مُهر id و همه نوادگانش را به 0 برمی‌گرداند تا به ترتیب ساده شناسه بازگردند، و تمرکز را دقیقاً مانند بازگرداندن ترتیب بازمی‌گرداند. شناسه‌ای که در درخت نیست، از جمله بدون ویجت، کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

ویجت Widget

تابع ویجت(id: صحیح): dyn ویجت

ویجت widget

تابع ویجت(id: صحیح): dyn ویجت
ویجتی که این شناسه را دارد (برای شناسه نامعتبر، ریشه).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

شناسه متمرکز FocusedId

تابع شناسه متمرکز(): صحیح

شناسه متمرکز focused_id

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز‌پذیر است CanFocus

تابع تمرکز‌پذیر است(id: صحیح): منطقی

تمرکز‌پذیر است can_focus

تابع تمرکز‌پذیر است(id: صحیح): منطقی
وقتی درست است که id به ویجتی اشاره کند که در حال حاضر تمرکزپذیر است و هیچ ویجتی در مسیرش تا ریشه خود را پنهان گزارش نکند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز Focus

تابع تمرکز(id: صحیح): منطقی

تمرکز focus

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز با ذخیره قبلی PushFocus

تابع تمرکز با ذخیره قبلی(id: صحیح): منطقی

تمرکز با ذخیره قبلی push_focus

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

بازیابی تمرکز PopFocus

تابع بازیابی تمرکز(): منطقی

بازیابی تمرکز pop_focus

تابع بازیابی تمرکز(): منطقی
بالای پشته تمرکز را برمی‌دارد و تمرکز را به هر آنچه پیش از تمرکز با ذخیره قبلی متناظر متمرکز بود بازمی‌گرداند. وقتی پشته از قبل خالی بوده نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز بعدی FocusNext

تابع تمرکز بعدی(): منطقی

تمرکز بعدی focus_next

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز قبلی FocusPrev

تابع تمرکز قبلی(): منطقی

تمرکز قبلی focus_prev

تابع تمرکز قبلی(): منطقی
تمرکز را به ویجت قبلی در ترتیب تمرکز می‌برد و از اولی به آخری دور می‌زند. تمرکز فعلی بیرون از این ترتیب روی آخرین مدخل می‌نشیند. اگر چنین ویجتی نباشد کاری نمی‌کند. وقتی تمرکز جابه‌جا شود درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز بالا FocusUp

تابع تمرکز بالا(): منطقی

تمرکز بالا focus_up

تابع تمرکز بالا(): منطقی
تمرکز را به نزدیک‌ترین ویجت در بالا می‌برد که از ترتیب تمرکز انتخاب می‌شود (نزدیک‌ترین را ببینید). وقتی تمرکز جابه‌جا شود درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز پایین FocusDown

تابع تمرکز پایین(): منطقی

تمرکز پایین focus_down

تابع تمرکز پایین(): منطقی
تمرکز را به نزدیک‌ترین ویجت در پایین، از ترتیب تمرکز، می‌برد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز چپ FocusLeft

تابع تمرکز چپ(): منطقی

تمرکز چپ focus_left

تابع تمرکز چپ(): منطقی
تمرکز را به نزدیک‌ترین ویجت در چپ، از ترتیب تمرکز، می‌برد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تمرکز راست FocusRight

تابع تمرکز راست(): منطقی

تمرکز راست focus_right

تابع تمرکز راست(): منطقی
تمرکز را به نزدیک‌ترین ویجت در راست، از ترتیب تمرکز، می‌برد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

جاسازی ریشه FitRoot

تابع جاسازی ریشه()

جاسازی ریشه fit_root

تابع جاسازی ریشه()
کل بافر را به ویجت ریشه می‌دهد: (0, 0, width, height).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تغییر اندازه Resize

تابع تغییر اندازه(width: صحیح، height: صحیح)

تغییر اندازه resize

تابع تغییر اندازه(width: صحیح، height: صحیح)
اندازه بافر پشتی را به width x height تغییر می‌دهد و ریشه را دوباره جا می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

آزمون برخورد HitTest

تابع آزمون برخورد(x: صحیح، y: صحیح): صحیح

آزمون برخورد hit_test

تابع آزمون برخورد(x: صحیح، y: صحیح): صحیح
شناسه ویجتی که در خانه (x, y) رسم شده، هر دو از 0، یا بدون ویجت وقتی هیچ ویجتی آن را نمی‌پوشاند. پیمایش به ترتیب معکوس رسم است: نخستین ویجتی که مستطیلش نقطه را در بر بگیرد، اصابت‌پذیر است() آن درست باشد و زنجیره نیاکانش نمایان گزارش شود برنده است. ویجت ممکن است رسم شود و باز هم کلیک را نپذیرد، و ویجت درون زیردرخت پنهان هرگز برنده نمی‌شود؛ در این حالت پیمایش ادامه می‌یابد. ویجت‌هایی با محدوده خالی هرگز منطبق نمی‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

هدایت رویداد Dispatch

تابع هدایت رویداد(event: رویداد): منطقی

هدایت رویداد dispatch

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تنظیم نگاشت کلید SetKeymap

تابع تنظیم نگاشت کلید(km: نگاشت‌کلید)

تنظیم نگاشت کلید set_keymap

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

علامت‌گذاری برای بازترسیم Invalidate

تابع علامت‌گذاری برای بازترسیم(id: صحیح)

علامت‌گذاری برای بازترسیم invalidate

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

علامت‌گذاری زیردرخت برای بازترسیم InvalidateSubtree

تابع علامت‌گذاری زیردرخت برای بازترسیم(id: صحیح)

علامت‌گذاری زیردرخت برای بازترسیم invalidate_subtree

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

بازترسیم Draw

تابع بازترسیم()

بازترسیم draw

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

نمایش تغییرات Present

تابع نمایش تغییرات()

نمایش تغییرات present

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

صف‌گذاری رویداد Post

تابع صف‌گذاری رویداد(event: رویداد): منطقی

صف‌گذاری رویداد post

تابع صف‌گذاری رویداد(event: رویداد): منطقی
رویدادی را چنان در صف می‌گذارد که گویی رشته ورودی آن را تولید کرده است. از هر رشته‌ای امن است. پس از توقف صفحه نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

رویداد بعدی NextEvent

تابع رویداد بعدی(event &: رویداد): منطقی

رویداد بعدی next_event

تابع رویداد بعدی(event &: رویداد): منطقی
منتظر رویداد بعدی می‌ماند و آن را در event ذخیره می‌کند. وقتی صفحه متوقف شده و همه رویدادهای صف تحویل داده شده‌اند نادرست برمی‌گرداند. حلقه مورد نظر این است: تا صفحه.رویداد بعدی(ev): ... پایان

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

تنظیم نویسه‌ها SetGlyphs

تابع تنظیم نویسه‌ها(policy: سیاست‌نویسه‌ها)

تنظیم نویسه‌ها set_glyphs

تابع تنظیم نویسه‌ها(policy: سیاست‌نویسه‌ها)
سیاست نویسه را ثابت می‌کند و آن را صریح علامت می‌زند، پس آغاز() سیاستی را از محیط تشخیص نمی‌دهد. می‌توان پیش یا پس از آغاز() فراخوانی کرد.
tui-terminal.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا ثانیه‌ها := 0

ساختار ساعت:
    همگانی شامل رابط‌پایانه.ویجت‌پایه

    همگانی تابع ترسیم(بافر: رابط‌پایانه.بافر، مرز: رابط‌پایانه.مستطیل):
        بافر.نوشتن متن(مرز.ایکس + 1، مرز.ایگرگ، "در حال اجرا از " + ثانیه‌ها + " ثانیه پیش، q برای خروج"، رابط‌پایانه.ظاهر پیش‌فرض)
    پایان

    همگانی تابع پردازش رویداد(رویداد: رابط‌پایانه.رویداد): منطقی:
        اگر رویداد.نویسه است("q"):
            برگشت نادرست
        پایان
        برگشت رویداد.نوع برابر رابط‌پایانه.رویداد ماوس
    پایان
پایان

تابع ریشه:
    اگر وارونه پایانه.پایانه دارد():
        نادرست‌سرچاپ "به یک پایانه نیاز دارد"
        برگشت 1
    پایان
    ناپایا ص := رابط‌پایانه.صفحه ترمینال جدید(ساعت {})
    ص.بازه تیک به میلی‌ثانیه = 1000
    ص.گزارش ماوس = درست
    ص.گزارش حرکت ماوس = نادرست
    ص.تنظیم نویسه‌ها(رابط‌پایانه.سیاست‌نویسه‌ها.یونیکد)
    ص.آغاز()
    دیرکن ص.بستن()
    ص.اجرا با تیک((): ثانیه‌ها++ پایان)
    سرچاپ "پایش هر"، رابط‌پایانه.بازه پایش به میلی‌ثانیه، "میلی‌ثانیه، صف با ظرفیت"، رابط‌پایانه.ظرفیت رویداد، "در حال اجرا:"، ص.در حال اجرا
    برگشت 0
پایان

آغاز Start

تابع آغاز()

آغاز start

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

توقف Stop

تابع توقف()

توقف stop

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

بستن Close

تابع بستن()

بستن close

تابع بستن()
حلقه را متوقف می‌کند، پایانه را دقیقاً به حالتی که آغاز() آن را یافته بود بازمی‌گرداند، منتظر رشته‌های ورودی و winch می‌ماند و حافظه صفحه را آزاد می‌کند. فراخوانی بیش از یک بار امن است؛ برای دیرکن در نظر گرفته شده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

اجرا Run

تابع اجرا()

اجرا run

تابع اجرا()
حلقه را تا توقف() اجرا می‌کند: نمایش تغییرات، سپس برای هر رویداد آن را هدایت می‌کند و اگر چیزی تغییر کرده باشد دوباره نمایش تغییرات. Ctrl+C مصرف‌نشده حلقه را متوقف می‌کند، پس همیشه می‌توان از برنامه‌ای در حالت خام خارج شد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

اجرا با تیک RunWithTick

تابع اجرا با تیک(on_tick: تابع())

اجرا با تیک run_with_tick

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

نقطه Point

ساختار نقطه
یک موقعیت خانه: ایکس ستون و ایگرگ ردیف است، هر دو از 0 شمرده می‌شوند.
نامانگلیسیگونهتوضیح
ایکسxصحیح = 0ستون، که از 0 در لبه چپ شمرده می‌شود.
ایگرگyصحیح = 0ردیف، که از 0 در لبه بالا شمرده می‌شود.
tui-geometry.salam
// زبان: فارسی
واردسازی رابط‌پایانه

تابع ریشه:
    کادر := رابط‌پایانه.مستطیل { ایکس = 2، ایگرگ = 1، عرض = 10، ارتفاع = 4 }
    سرچاپ "راست"، کادر.راست()، "پایین"، کادر.پایین()، "خالی"، کادر.خالی است()
    سرچاپ "شامل 5,2:"، کادر.دربرمی‌گیرد(رابط‌پایانه.نقطه { ایکس = 5، ایگرگ = 2 })
    دیگری := رابط‌پایانه.مستطیل { ایکس = 8، ایگرگ = 3، عرض = 6، ارتفاع = 6 }
    سرچاپ "هم‌پوشانی دارد:"، کادر.هم‌پوشانی دارد(دیگری)
    مشترک := کادر.اشتراک(دیگری)
    سرچاپ "بخش مشترک"، مشترک.ایکس، مشترک.ایگرگ، مشترک.عرض، مشترک.ارتفاع
    میانه := کادر.مرکز()
    سرچاپ "مرکز"، میانه.ایکس، میانه.ایگرگ

    ناپایا جعبه‌ها := وکتور {} برگردان وکتور<رابط‌پایانه.مستطیل>
    جعبه‌ها.بیفزا(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 10، عرض = 4، ارتفاع = 1 })
    جعبه‌ها.بیفزا(رابط‌پایانه.مستطیل { ایکس = 20، ایگرگ = 1، عرض = 4، ارتفاع = 1 })
    سرچاپ "راست:"، رابط‌پایانه.نزدیک‌ترین(کادر، جعبه‌ها، رابط‌پایانه.جهت راست)، "پایین:"، رابط‌پایانه.نزدیک‌ترین(کادر، جعبه‌ها، رابط‌پایانه.جهت پایین)
    سرچاپ "بالا:"، رابط‌پایانه.نزدیک‌ترین(کادر، جعبه‌ها، رابط‌پایانه.جهت بالا)، "چپ:"، رابط‌پایانه.نزدیک‌ترین(کادر، جعبه‌ها، رابط‌پایانه.جهت چپ)
پایان
خروجیراست 12 پایین 5 خالی false شامل 5,2: true هم‌پوشانی دارد: true بخش مشترک 8 3 4 2 مرکز 7 3 راست: 1 پایین: 0 بالا: -1 چپ: -1

مستطیل Rect

ساختار مستطیل
مستطیلی هم‌راستا با محورها و نیمه‌باز از خانه‌های پایانه. ستون‌های ایکس .. ایکس + عرض - 1 و ردیف‌های ایگرگ .. ایگرگ + ارتفاع - 1 را می‌پوشاند.
نامانگلیسیگونهتوضیح
ایکسxصحیح = 0ستون لبه چپ.
ایگرگyصحیح = 0ردیف لبه بالا.
عرضwidthصحیح = 0تعداد ستون‌ها. صفر یا منفی یعنی مستطیل خالی است.
ارتفاعheightصحیح = 0تعداد ردیف‌ها. صفر یا منفی یعنی مستطیل خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

خالی است IsEmpty

تابع خالی است(): منطقی

خالی است is_empty

تابع خالی است(): منطقی
وقتی مستطیل هیچ خانه‌ای را نپوشاند true است (عرض یا ارتفاع <= 0).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

راست Right

تابع راست(): صحیح

راست right

تابع راست(): صحیح
نخستین ستون سمت راست مستطیل (ایکس + عرض)، که خودش بیرون از مستطیل است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

پایین Bottom

تابع پایین(): صحیح

پایین bottom

تابع پایین(): صحیح
نخستین ردیف زیر مستطیل (ایگرگ + ارتفاع)، که خودش بیرون از مستطیل است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

دربرمی‌گیرد Contains

تابع دربرمی‌گیرد(p: نقطه): منطقی

دربرمی‌گیرد contains

تابع دربرمی‌گیرد(p: نقطه): منطقی
وقتی خانه p درون مستطیل باشد true است. از قاعده نیمه‌باز پیروی می‌کند، پس لبه‌های راست و پایین بیرون‌اند و مستطیل خالی هیچ چیز را دربرنمی‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

هم‌پوشانی دارد Intersects

تابع هم‌پوشانی دارد(other: مستطیل): منطقی

هم‌پوشانی دارد intersects

تابع هم‌پوشانی دارد(other: مستطیل): منطقی
وقتی دو مستطیل دست‌کم یک خانه مشترک داشته باشند true است. مستطیل‌هایی که فقط در امتداد یک لبه به هم می‌رسند هم‌پوشانی ندارند و مستطیل خالی با هیچ چیز هم‌پوشانی ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

اشتراک Intersection

تابع اشتراک(other: مستطیل): مستطیل

اشتراک intersection

تابع اشتراک(other: مستطیل): مستطیل
خانه‌های مشترک دو مستطیل. وقتی هم‌پوشانی نداشته باشند، حاصل یک مستطیل خالی در مبدأ است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

مرکز Center

تابع مرکز(): نقطه

مرکز center

تابع مرکز(): نقطه
خانه مرکزی: (ایکس + عرض / 2, ایگرگ + ارتفاع / 2) با تقسیم صحیح. اندازه فرد یک خانه میانی دقیق دارد (3x3 در مبدأ، (1, 1) را می‌دهد). اندازه زوج چنین خانه‌ای ندارد، پس خانه‌ای که درست در راست و پایین مرکز هندسی است به کار می‌رود (4x4 در مبدأ، (2, 2) را می‌دهد). حاصل برای مستطیل خالی معنادار نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

نوار‌پیشرفت Progress

ساختار نوار‌پیشرفت
نوار‌پیشرفت یک‌ردیفی. از چپ به راست بر اساس مقدار پر می‌شود که درصدی از بیشینه است (به‌طور پیش‌فرض 100). مقدار را با تنظیم پیشرفت و بیشینه را با تنظیم بیشینه تنظیم کنید. خانه‌های پر، خانه‌های خالی و دنباله درصد را جداگانه با فیلدهای ظاهر بخش پر، ظاهر بخش خالی و ظاهر متن آرایش دهید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه تعبیه‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع آن را بازتعریف نمی‌کند.
ظاهر بخش پرfill_styleظاهرظاهر خانه‌های پر. ظاهر پیش‌فرض از پیش‌فرض‌های پایانه استفاده می‌کند.
ظاهر بخش خالیempty_styleظاهرظاهر خانه‌های خالی.
ظاهر متنtext_styleظاهرظاهر دنباله پنج‌خانه‌ای درصد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
نادرست برمی‌گرداند: کلیک روی نوار به ویجتی که زیر آن رسم شده می‌رسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
عرض نامعلوم (چیدمان عرض موجود را پر می‌کند) و یک ردیف.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

مقدار پیشرفت Progress

تابع مقدار پیشرفت(): صحیح

مقدار پیشرفت progress

تابع مقدار پیشرفت(): صحیح
مقدار ذخیره‌شده، که از پیش به بازه 0..max محدود شده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم پیشرفت SetProgress

تابع تنظیم پیشرفت(percent: صحیح)

تنظیم پیشرفت set_progress

تابع تنظیم پیشرفت(percent: صحیح)
مقدار را تنظیم و به بازه 0..max محدود می‌کند. مقدارهای بیشتر از max پر و مقدارهای کمتر از 0 خالی نمایش داده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

تنظیم بیشینه SetMax

تابع تنظیم بیشینه(limit: صحیح)

تنظیم بیشینه set_max

تابع تنظیم بیشینه(limit: صحیح)
مقداری را که معادل 100% است تنظیم می‌کند و مقدار ذخیره‌شده را به بازه جدید محدود می‌کند. بیشینه 0 یا کمتر نوار را خالی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
یک ردیف در محدوده.ایگرگ رسم می‌کند، از محدوده.ایکس و به طول محدوده.عرض خانه. وقتی دنباله نمایش داده شود، نوار عرض را منهای دنباله می‌گیرد. وقتی عرض صفر یا کمتر باشد چیزی رسم نمی‌شود. هر خانه از طریق تنظیم نوشته می‌شود که به بافر برش می‌خورد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

پنل Panel

ساختار پنل
تزئین‌کننده‌ای تک‌فرزندی که یک حلقه کادر دور فرزندش رسم می‌کند. فرزند درون حلقه جای می‌گیرد: پنل آن را از هر طرف به اندازه ضخامت کادر مربوط به کادر به داخل می‌برد و آن مستطیل را به تنظیم محدوده فرزند می‌دهد. پنلی با کادر بدون کادر چیزی رسم نمی‌کند و چیزی را به داخل نمی‌برد، پس مانند فرزندش رفتار می‌کند. فرزند را با افزودن اضافه کنید؛ مانند هر فرزند دیگری، برای رسم شدن باید به درخت صفحه هم افزوده شود. پنل اندازه طبیعی فرزند را به‌علاوه ضخامت کادر مربوط به کادر در هر طرف گزارش می‌کند، پس حلقه‌ای که رسم می‌کند بخشی از همان اندازه است. تمرکزپذیر نیست مگر اینکه تمرکز می‌گیرد تنظیم شده باشد.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه تعبیه‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع آن را بازتعریف نمی‌کند.
کادرborderسبک‌کادرحلقه‌ای که دور فرزند رسم می‌شود. بدون کادر چیزی رسم نمی‌کند و چیزی را به داخل نمی‌برد.
ظاهر کادرborder_styleظاهرظاهر قاب. فقط رنگ پیش‌زمینه آن، برای همه خانه‌های حلقه و عنوان، به کار می‌رود؛ ویژگی‌ها نادیده گرفته می‌شوند.
عنوانtitleرشته = ""متن روی لبه بالایی. خالی یا فقط فاصله یعنی بدون عنوان.
تمرکز می‌گیردtakes_focusمنطقی = نادرستوقتی درست باشد پنل تمرکزپذیر است: تمرکز را می‌گیرد و هر رویداد را به فرزندش می‌دهد. فرزند تمرکزپذیر نیست و تمرکز جداگانه‌ای نمی‌گیرد. به‌طور پیش‌فرض نادرست است، پس پنل هرگز ایستگاه تمرکز نیست.
ظاهر تمرکزfocus_styleظاهرظاهر قاب هنگامی که پنل تمرکز دارد. ظاهر پیش‌فرض، که مقدار پیش‌فرض است، یعنی بدون ظاهر تمرکز: قاب همان ظاهر کادر را نگه می‌دارد. مانند ظاهر کادر، فقط رنگ پیش‌زمینه به کار می‌رود.
جایگاهslotوکتور<جایگاه‌چیدمان>فرزند، که به‌صورت تنها جایگاه‌چیدمان نگه داشته می‌شود. تا وقتی افزودن فراخوانی نشده خالی است.
tui-panels.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا شمار بستن := 0

تابع نمایش(ص: رابط‌پایانه.صفحه):
    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در سطر:
        سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
    پایان
پایان

تابع ریشه:
    ناپایا ص := رابط‌پایانه.صفحه جدید(رابط‌پایانه.ویجت‌پایه {}، 24، 6)
    دیرکن ص.بستن()
    ناحیه := رابط‌پایانه.مستطیل { عرض = 24، ارتفاع = 6 }

    بدنه := رابط‌پایانه.متن جدید("درون این قاب") برگردان پویا رابط‌پایانه.ویجت
    ناپایا قاب := رابط‌پایانه.پنل { کادر = رابط‌پایانه.سبک‌کادر.تک خط، عنوان = "پنجره"، تمرکز می‌گیرد = درست، ظاهر تمرکز = رابط‌پایانه.ظاهر { پررنگ = درست } }
    قاب.ظاهر کادر = رابط‌پایانه.ظاهر پیش‌فرض
    قاب.افزودن(بدنه)
    شناسه قاب := ص.افزودن(رابط‌پایانه.شناسه ریشه، قاب برگردان پویا رابط‌پایانه.ویجت)
    _ := ص.افزودن(شناسه قاب، بدنه)
    ص.ویجت(شناسه قاب).تنظیم محدوده(ناحیه)
    سرچاپ "پنل تمرکزپذیر:"، ص.ویجت(شناسه قاب).تمرکز‌پذیر است()، "جایگاه فرزند:"، قاب.جایگاه.طول()

    ناپایا گفتگو := رابط‌پایانه.مودال جدید()
    گفتگو.تنظیم عنوان("خروج؟")
    گفتگو.تنظیم اندازه(رابط‌پایانه.اندازه‌مودال.ثابت(14، 3))
    گفتگو.تنظیم امکان بستن(درست)
    گفتگو.ظاهر کادر = رابط‌پایانه.ظاهر پیش‌فرض
    گفتگو.هنگام بستن = (): شمار بستن++ پایان
    پاسخ := رابط‌پایانه.متن جدید("ب / خ") برگردان پویا رابط‌پایانه.ویجت
    گفتگو.افزودن(پاسخ)
    گفتگو.تنظیم محدوده(ناحیه)
    شناسه گفتگو := ص.افزودن(رابط‌پایانه.شناسه ریشه، گفتگو برگردان پویا رابط‌پایانه.ویجت)
    _ := ص.افزودن(شناسه گفتگو، پاسخ)
    گفتگو.باز کردن()
    _ := ص.تمرکز با ذخیره قبلی(شناسه گفتگو)
    ص.آوردن زیردرخت به رو(شناسه گفتگو)
    نمایش(ص)

    _ := ص.هدایت رویداد(رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید گریز } })
    ص.بازگرداندن ترتیب زیردرخت(شناسه گفتگو)
    _ := ص.بازیابی تمرکز()
    سرچاپ "بسته شد:"، شمار بستن، "تمرکز به پنل برگشت:"، ص.شناسه متمرکز() برابر شناسه قاب
    نمایش(ص)
    _ := گفتگو.تمرکز می‌گیرد
    _ := گفتگو.وضعیت
    گفتگو.بستن()
    _ := رابط‌پایانه.اندازه‌مودال.درصدی(50، 50)
    _ := رابط‌پایانه.ضخامت.سنگین
پایان
خروجیپنل تمرکزپذیر: true جایگاه فرزند: 1 |┌─ پنجره ──────────────┐| |│درون┌─ خروج؟ ────┐ │| |│ │ب / خ │ │| |│ └────────────┘ │| |│ │| |└──────────────────────┘| بسته شد: 1 تمرکز به پنل برگشت: true |┌─ پنجره ──────────────┐| |│درون این قاب │| |│ │| |│ │| |│ │| |└──────────────────────┘|

افزودن Add

تابع افزودن(child: dyn ویجت)

افزودن add

تابع افزودن(child: dyn ویجت)
فرزند را تنظیم می‌کند. فراخوانی دوم جای اولی را می‌گیرد، پس پنل حداکثر یک فرزند دارد. فرزند در تنظیم محدوده بعدی در ناحیه محتوای پنل جای می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل پنل را ذخیره می‌کند، سپس مستطیل فرزند را برابر مستطیل پنل قرار می‌دهد که از هر طرف به اندازه هزینه کادر (ضخامت کادر) به داخل برده شده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
اندازه طبیعی فرزند به‌علاوه ضخامت کادر مربوط به کادر در هر طرف. هر محور با max_width منهای آن فاصله در دو طرف، با کف 1، اندازه‌گیری می‌شود؛ max_width غیرمثبت بدون تغییر و به معنای نامحدود فرستاده می‌شود. فرزندی که نتواند اندازه‌گیری کند به اندازه ترجیحی خود برمی‌گردد. مؤلفه منفی یعنی بدون ترجیح در آن محور و -1 می‌ماند. پنل خالی هیچ ترجیحی گزارش نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
فقط وقتی درست است که تمرکز می‌گیرد تنظیم شده باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
رویداد را به فرزند می‌دهد و همان چیزی را برمی‌گرداند که فرزند برمی‌گرداند. فقط پنل متمرکز رویداد دریافت می‌کند، پس این مسیر کلید فرزند است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

اندازه‌مودال ModalSize

جداشمار اندازه‌مودال:
    درصدی(w: صحیح، h: صحیح)
    ثابت(w: صحیح، h: صحیح)
پایان
اندازه پنجره گفت‌وگو درون محدوده مودال.
نامانگلیسیگونهتوضیح
درصدیPercent(w: صحیح، h: صحیح)سهمی از محدوده، به درصد (0 تا 100) در هر محور. حاصل‌ضرب رو به پایین گرد می‌شود، سپس دست‌کم به 20 در 5 و حداکثر به اندازه محدوده محدود می‌شود. وقتی محدوده کوچک‌تر از 20 در 5 باشد، پنجره گفت‌وگو برابر محدوده است.
ثابتFixed(w: صحیح، h: صحیح)دقیقا w در h خانه، که فقط به محدوده محدود می‌شود و نه چیز دیگر: کف 20 در 5 برای اندازه صریح اعمال نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

ساختار مودال
یک پنجره گفت‌وگوی رویی: حلقه‌ای تک‌خطی با عنوان، در مرکز محدوده مودال و روی پرده‌ای کم‌رنگ (DIM). فرزند یک خانه درون حلقه قرار می‌گیرد. مودال پنهان چیزی رسم نمی‌کند، تمرکز نمی‌گیرد و هیچ برخوردی نمی‌گیرد. آن را با مودال جدید بسازید. وضعیتش میان همه رونوشت‌ها مشترک است، پس متدهای زیر پیش و پس از صفحه.افزودن کار می‌کنند.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
ظاهر کادرborder_styleظاهررنگ حلقه. فقط رنگ پیش‌زمینه آن به کار می‌رود؛ ویژگی‌ها نادیده گرفته می‌شوند، همانند پنل.
تمرکز می‌گیردtakes_focusمنطقی = درستوقتی true باشد، مودال تا زمانی که باز است یک ایستگاه تمرکز است. همین یک ایستگاه تمرکز، Tab را درون لایه خودش نگه می‌دارد.
هنگام بستنon_closeتابع()پس از آنکه Esc مودال را ببندد فراخوانی می‌شود. بستن آن را فراخوانی نمی‌کند.
وضعیتstateوکتور<_ModalState>نگه‌دارنده وضعیت مشترک، با یک عضو. مودال جدید آن را می‌سازد؛ همه رونوشت‌ها در آن شریک‌اند. مودال را از طریق متدهایش بخوانید و بنویسید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

افزودن Add

تابع افزودن(child: dyn ویجت)

افزودن add

تابع افزودن(child: dyn ویجت)
فرزند را تنظیم می‌کند. فراخوانی دوم جای اولی را می‌گیرد. فرزند باید زیر شناسه مودال به درخت صفحه هم افزوده شود تا رسم شود و رویدادها را دریافت کند. در تنظیم محدوده بعدی جای‌گذاری می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

باز کردن Open

تابع باز کردن()

باز کردن open

تابع باز کردن()
مودال را نمایش می‌دهد. فقط وضعیت را تغییر می‌دهد: مودال را به رو نمی‌آورد و تمرکز را جابه‌جا نمی‌کند. برنامه هر دو را با صفحه.تمرکز با ذخیره قبلی و سپس آوردن زیردرخت به رو انجام می‌دهد. روی مقدار محلی یا روی رونوشتی که صفحه.افزودن ذخیره کرده کار می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

بستن Close

تابع بستن()

بستن close

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تنظیم عنوان SetTitle

تابع تنظیم عنوان(t: رشته)

تنظیم عنوان set_title

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تنظیم اندازه SetSize

تابع تنظیم اندازه(sz: اندازه‌مودال)

تنظیم اندازه set_size

تابع تنظیم اندازه(sz: اندازه‌مودال)
اندازه پنجره گفت‌وگو را تنظیم می‌کند و فرزند را برای محدوده فعلی دوباره جای‌گذاری می‌کند. پیش یا پس از صفحه.افزودن کار می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تنظیم امکان بستن SetClosable

تابع تنظیم امکان بستن(b: منطقی)

تنظیم امکان بستن set_closable

تابع تنظیم امکان بستن(b: منطقی)
تعیین می‌کند که Esc مودال را ببندد یا نه. پیش یا پس از صفحه.افزودن کار می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

محدوده Bounds

تابع محدوده(): مستطیل

محدوده bounds

تابع محدوده(): مستطیل
مستطیلی که آخرین تنظیم محدوده ذخیره کرده است، خوانده‌شده از وضعیت مشترک تا صفحه روی رونوشت ذخیره‌شده همان مستطیل را ببیند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
اندازه Fixed مقدار دقیق w در h خود را گزارش می‌کند. اندازه Percent به محدوده‌ای که می‌گیرد وابسته است، پس مقدار نگهبان «بدون ترجیح» را گزارش می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
فقط وقتی باز است و تمرکز می‌گیرد تنظیم شده باشد true است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

تابع اصابت‌پذیر است(): منطقی
فقط وقتی باز است true است. مودال پنهان اجازه می‌دهد کلیک به لایه زیرین برسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

نمایان است Visible

تابع نمایان است(): منطقی

نمایان است visible

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
رویداد را اول به فرزند عرضه می‌کند و اگر فرزند آن را مصرف کند true برمی‌گرداند. سپس اگر بستن مجاز باشد، Esc مودال را می‌بندد، هنگام بستن را فراخوانی می‌کند و true برمی‌گرداند. سپس رویداد ماوس درون محدوده ولی بیرون از پنجره گفت‌وگو true برمی‌گرداند، تا هرگز به ویجت زیرین نرسد. هر چیز دیگری false برمی‌گرداند. مودال پنهان برای همه چیز false برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

فهرست List

ساختار فهرست
فهرستی پیمایش‌پذیر از رشته‌ها با انتخاب تکی. تمرکزپذیر است، پس رویدادهای صفحه‌کلید از طریق توزیع تمرکز صفحه به آن می‌رسند: j انتخاب را پایین و k بالا می‌برد (محدود به دو سر، بدون چرخش) و enter هنگام انتخاب را با نمایه انتخاب‌شده فراخوانی می‌کند. ردیف انتخاب‌شده با تمام پهنا و با ظاهر انتخاب رسم می‌شود و پنجره نمایش به کمترین اندازه لازم پیمایش می‌کند تا آن را نمایان نگه دارد.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
ظاهرstyleظاهرظاهر همه ردیف‌های انتخاب‌نشده. ظاهر پیش‌فرض با پیش‌فرض‌های پایانه رسم می‌کند.
ظاهر انتخابselected_styleظاهرظاهر ردیف انتخاب‌شده هنگام تمرکز؛ روی آن ردیف جای ظاهر را می‌گیرد. پیش‌فرض آن رنگ وارونه است.
ظاهر انتخاب بی‌تمرکزselected_unfocused_styleظاهرظاهر ردیف انتخاب‌شده هنگام بی‌تمرکزی؛ روی آن ردیف جای ظاهر را می‌گیرد. پیش‌فرض آن پس‌زمینه مشکی روشن است.
هنگام انتخابon_selectتابع(صحیح)وقتی enter روی فهرست غیرخالی فشرده شود، با نمایه انتخاب‌شده فراخوانی می‌شود. پیش‌فرض کاری نمی‌کند.
tui-controls.salam
// زبان: فارسی
واردسازی رشته
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا ثبت‌شده := ""
ناپایا برگزیده := -1
ناپایا شمار فشار := 0
ناپایا تغییر کرد := نادرست

تابع کلید(دنباله: رشته): رابط‌پایانه.رویداد:
    برگشت رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی(دنباله) }
پایان

تابع ظاهر وارون(): رابط‌پایانه.ظاهر:
    ناپایا ظاهر := رابط‌پایانه.ظاهر {}
    ظاهر.معکوس = درست
    برگشت ظاهر
پایان

تابع ریشه:
    ناپایا بافر := رابط‌پایانه.بافر جدید(24، 5)

    ناپایا گذرواژه := رابط‌پایانه.کادر متن جدید()
    گذرواژه.پوشانده = درست
    گذرواژه.نماد پوشش = "*"
    گذرواژه.حداکثر طول = 8
    گذرواژه.پالایه = (نامزد: رشته): برگشت وارونه رشته.شامل است(نامزد، " ") پایان
    گذرواژه.هنگام ثبت = (مقدار: رشته):
        ثبت‌شده = مقدار
        برگشت درست
    پایان
    گذرواژه.تنظیم متن راهنما("گذرواژه")
    گذرواژه.تنظیم مقدار("")
    گذرواژه.ظاهر = رابط‌پایانه.ظاهر پیش‌فرض
    گذرواژه.ظاهر مکان‌نما = ظاهر وارون()
    گذرواژه.ظاهر متن راهنما = رابط‌پایانه.ظاهر { کم‌رنگ = درست }
    گذرواژه.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 12، ارتفاع = 1 })
    هر نویسه در ["s"، " "، "e"، "c"]:
        _ := گذرواژه.پردازش رویداد(کلید(نویسه))
    پایان
    _ := گذرواژه.پردازش رویداد(کلید("\r"))
    سرچاپ "ورودی تمرکزپذیر:"، گذرواژه.تمرکز‌پذیر است()، "مقدار:"، گذرواژه.مقدار()، "ثبت شد:"، ثبت‌شده

    ناپایا دکمه خب := رابط‌پایانه.دکمه جدید("خب")
    دکمه خب.هنگام کلیک = (): شمار فشار++ پایان
    دکمه خب.ظاهر تمرکز = رابط‌پایانه.ظاهر { پررنگ = درست }
    دکمه خب.ظاهر = رابط‌پایانه.ظاهر پیش‌فرض
    دکمه خب.غیرفعال = نادرست
    دکمه خب.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 1، عرض = 8، ارتفاع = 1 })
    _ := دکمه خب.پردازش رویداد(کلید(" "))
    سرچاپ "دکمه:"، دکمه خب.برچسب، دکمه خب.تمرکز‌پذیر است()، دکمه خب.اصابت‌پذیر است()، "فشار"، شمار فشار، "عرض"، دکمه خب.اندازه ترجیحی(20).عرض

    ناپایا شکستن := رابط‌پایانه.کادر انتخاب جدید("شکستن خطوط"، نادرست)
    شکستن.هنگام تغییر انتخاب = (روشن: منطقی): تغییر کرد = روشن پایان
    شکستن.ظاهر کادر = رابط‌پایانه.ظاهر پیش‌فرض
    شکستن.ظاهر برچسب = رابط‌پایانه.ظاهر پیش‌فرض
    شکستن.غیرفعال = نادرست
    شکستن.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 0، ایگرگ = 2، عرض = 14، ارتفاع = 1 })
    _ := شکستن.پردازش رویداد(کلید(" "))
    شکستن.تنظیم انتخاب(شکستن.انتخاب شده است())
    سرچاپ "کادر انتخاب:"، شکستن.برچسب، شکستن.انتخاب شده است()، تغییر کرد، شکستن.تمرکز‌پذیر است()، شکستن.اصابت‌پذیر است()، شکستن.اندازه ترجیحی(20).عرض

    ناپایا گزینه‌ها := وکتور {} برگردان وکتور<رشته>
    گزینه‌ها.بیفزا("قرمز")
    گزینه‌ها.بیفزا("سبز")
    ناپایا رنگ‌ها := رابط‌پایانه.فهرست جدید(گزینه‌ها)
    رنگ‌ها.هنگام انتخاب = (شماره: صحیح): برگزیده = شماره پایان
    رنگ‌ها.ظاهر = رابط‌پایانه.ظاهر پیش‌فرض
    رنگ‌ها.ظاهر انتخاب = ظاهر وارون()
    رنگ‌ها.ظاهر انتخاب بی‌تمرکز = رابط‌پایانه.ظاهر { زیرخط = درست }
    رنگ‌ها.تنظیم محدوده(رابط‌پایانه.مستطیل { ایکس = 14، ایگرگ = 0، عرض = 8، ارتفاع = 2 })
    _ := رنگ‌ها.پردازش رویداد(کلید("j"))
    _ := رنگ‌ها.پردازش رویداد(کلید("\r"))
    سرچاپ "فهرست:"، رنگ‌ها.نمایه انتخاب()، رنگ‌ها.گزینه انتخاب‌شده()، برگزیده، رنگ‌ها.تمرکز‌پذیر است()

    گذرواژه.ترسیم(بافر، گذرواژه.محدوده())
    دکمه خب.ترسیم(بافر، دکمه خب.محدوده())
    شکستن.ترسیم(بافر، شکستن.محدوده())
    رنگ‌ها.ترسیم(بافر، رنگ‌ها.محدوده())
    تکرار بافر.ارتفاع در سطر:
        سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
    پایان
    بافر.آزادسازی()
پایان
خروجیورودی تمرکزپذیر: true مقدار: sec ثبت شد: sec دکمه: خب true true فشار 1 عرض 4 کادر انتخاب: شکستن خطوط true true true true 14 فهرست: 1 سبز 1 true |*** قرمز | |[ خب ] سبز | |[x] شکستن خطوط | | | | |

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
true برمی‌گرداند: فهرست تعاملی است، پس توزیع تمرکز صفحه رویدادهای صفحه‌کلید را به آن می‌فرستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
به فشردن کلید واکنش نشان می‌دهد. j انتخاب را پایین و k بالا می‌برد، هر کدام محدود به دو سر (بدون چرخش) و همیشه مصرف‌شده، حتی وقتی فهرست خالی است. Enter مصرف می‌شود و روی فهرست غیرخالی هنگام انتخاب را با نمایه انتخاب‌شده فراخوانی می‌کند. رویدادها و کلیدهای دیگر مصرف نمی‌شوند، پس به بالا منتقل می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

نمایه انتخاب SelectedIndex

تابع نمایه انتخاب(): صحیح

نمایه انتخاب selected_index

تابع نمایه انتخاب(): صحیح
نمایه انتخاب‌شده، یا -1 وقتی فهرست خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

گزینه انتخاب‌شده SelectedItem

تابع گزینه انتخاب‌شده(): رشته

گزینه انتخاب‌شده selected_item

تابع گزینه انتخاب‌شده(): رشته
رشته انتخاب‌شده، یا "" وقتی فهرست خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

محور Axis

جداشمار محور
محوری که اندازه‌گیری روی آن انجام می‌شود. محور افقی افقی و محور عمودی عمودی است.
نامانگلیسیگونهتوضیح
محور افقیXمحور افقی.
محور عمودیYمحور عمودی.
tui-layout.salam
// زبان: فارسی
واردسازی رابط‌پایانه

ساختار جعبه:
    همگانی شامل رابط‌پایانه.ویجت‌پایه
    همگانی نشان: رشته = "#"

    همگانی تابع ترسیم(بافر: رابط‌پایانه.بافر، مرز: رابط‌پایانه.مستطیل):
        بافر.پرکردن(مرز، این.نشان، رابط‌پایانه.ظاهر پیش‌فرض)
    پایان
پایان

تابع ساخت جعبه(نشان: رشته): پویا رابط‌پایانه.ویجت:
    برگشت جعبه { نشان = نشان } برگردان پویا رابط‌پایانه.ویجت
پایان

تابع قاعده(شیوه: رابط‌پایانه.نوع‌اندازه‌گذاری، سلول‌ها: صحیح، وزن: صحیح): رابط‌پایانه.قاعده‌اندازه‌گذاری:
    برگشت رابط‌پایانه.قاعده‌اندازه‌گذاری { نوع = شیوه، تعداد سلول = سلول‌ها، وزن = وزن }
پایان

تابع ریشه:
    الف := ساخت جعبه("a")
    ب := ساخت جعبه("b")
    پ := ساخت جعبه("c")
    ت := ساخت جعبه("d")
    ث := ساخت جعبه("e")
    ج := ساخت جعبه("f")

    ناپایا بالا := رابط‌پایانه.ردیف جدید()
    بالا.تنظیم فاصله(1)
    جای الف := بالا.افزودن(الف)
    جای ب := بالا.افزودن(ب)
    بالا.تنظیم عرض(جای الف، قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، 4، 0))
    بالا.تنظیم عرض(جای ب، قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.پرکردن فضا، 0، 1))
    ردیف بالا := بالا برگردان پویا رابط‌پایانه.ویجت

    ناپایا شبکه := رابط‌پایانه.شبکه جدید(1، 2)
    جای پ := شبکه.افزودن(پ)
    جای ت := شبکه.افزودن(ت)
    شبکه.تنظیم خانه(جای پ، 0، 0)
    شبکه.تنظیم خانه(جای ت، 0، 1)
    ویجت شبکه := شبکه برگردان پویا رابط‌پایانه.ویجت

    ناپایا پشته := رابط‌پایانه.پشته جدید()
    جای ث := پشته.افزودن(ث)
    جای ج := پشته.افزودن(ج)
    پشته.تنظیم حاشیه بیرونی(جای ج، رابط‌پایانه.فاصله‌های چهارگانه جدید(0، 2، 0، 2))
    پشته.تنظیم تراز(جای ث، رابط‌پایانه.تراز‌عرضی.کشیده، رابط‌پایانه.تراز‌عرضی.کشیده)
    ویجت پشته := پشته برگردان پویا رابط‌پایانه.ویجت

    ناپایا ستون := رابط‌پایانه.ستون جدید()
    ستون.تنظیم فاصله درونی(رابط‌پایانه.فاصله‌های چهارگانه یکسان(1))
    جای ردیف := ستون.افزودن(ردیف بالا)
    جای شبکه := ستون.افزودن(ویجت شبکه)
    جای پشته := ستون.افزودن(ویجت پشته)
    ستون.تنظیم ارتفاع(جای ردیف، قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، 1، 0))
    ستون.تنظیم ارتفاع(جای شبکه، قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، 2، 0))
    ستون.تنظیم ارتفاع(جای پشته، قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.پرکردن فضا، 0، 1))

    ناپایا ص := رابط‌پایانه.صفحه جدید(ستون برگردان پویا رابط‌پایانه.ویجت، 20، 8)
    دیرکن ص.بستن()
    هر ویجت در [ردیف بالا، الف، ب، ویجت شبکه، پ، ت، ویجت پشته، ث، ج]:
        _ := ص.افزودن(رابط‌پایانه.شناسه ریشه، ویجت)
    پایان
    ص.بازترسیم()
    تکرار ص.بافر.ارتفاع در سطر:
        سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
    پایان

    ناپایا اندازه‌ها := وکتور {} برگردان وکتور<رابط‌پایانه.قاعده‌اندازه‌گذاری>
    اندازه‌ها.بیفزا(قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.ثابت، 3، 0))
    اندازه‌ها.بیفزا(قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.پرکردن فضا، 0، 2))
    اندازه‌ها.بیفزا(قاعده(رابط‌پایانه.نوع‌اندازه‌گذاری.ترجیحی، 0، 1))
    تقسیم := رابط‌پایانه.تقسیم محور اصلی(12، اندازه‌ها، 0)
    سرچاپ "تقسیم 12:"، تقسیم.دریافت(0)، تقسیم.دریافت(1)، تقسیم.دریافت(2)
    بخش‌ها := رابط‌پایانه.اندازه‌های بخش‌های شبکه(10، 3)
    سرچاپ "بخش‌های 10/3:"، بخش‌ها.دریافت(0)، بخش‌ها.دریافت(1)، بخش‌ها.دریافت(2)
    درون := رابط‌پایانه.کاستن از لبه‌های مستطیل(رابط‌پایانه.مستطیل { عرض = 10، ارتفاع = 4 }، رابط‌پایانه.فاصله‌های چهارگانه جدید(1، 2، 1، 2))
    سرچاپ "تورفتگی:"، درون.ایکس، درون.ایگرگ، درون.عرض، درون.ارتفاع
    جاگرفته := رابط‌پایانه.جاسازی مستطیل(رابط‌پایانه.مستطیل { ایکس = 8، ایگرگ = 0، عرض = 6، ارتفاع = 2 }، رابط‌پایانه.مستطیل { عرض = 10، ارتفاع = 4 })
    سرچاپ "جاسازی:"، جاگرفته.ایکس، جاگرفته.عرض
    سرچاپ "جایابی:"، رابط‌پایانه.اندازه در محور(10، رابط‌پایانه.تراز‌عرضی.مرکز، 4)، رابط‌پایانه.جابه‌جایی در محور(10، رابط‌پایانه.تراز‌عرضی.انتها، 4)
    سنجش := رابط‌پایانه.اندازه { معتبر = درست، گستره = 3 }
    سرچاپ "اندازه:"، سنجش.معتبر، سنجش.گستره، رابط‌پایانه.محور.محور افقی نابرابر رابط‌پایانه.محور.محور عمودی
    جایگاه := ستون.جایگاه‌ها.بگیر(1)
    سرچاپ "گستره جایگاه:"، جایگاه.گستره ردیف، جایگاه.گستره ستون، "ردیف/ستون:"، شبکه.ردیف‌ها، شبکه.ستون‌ها، "فاصله:"، بالا.فاصله، "فاصله درونی:"، ستون.فاصله درونی.بالا
پایان
خروجی| | | aaaa bbbbbbbbbbbbb | | cccccccccddddddddd | | cccccccccddddddddd | | eeffffffffffffffee | | eeffffffffffffffee | | eeffffffffffffffee | | | تقسیم 12: 3 6 3 بخش‌های 10/3: 4 3 3 تورفتگی: 2 1 6 2 جاسازی: 8 2 جایابی: 4 6 اندازه: true 3 true گستره جایگاه: 1 1 ردیف/ستون: 1 2 فاصله: 1 فاصله درونی: 1

اندازه Measure

ساختار اندازه
نتیجه ویجت.اندازه‌گیری. وقتی ویجت قادر به اندازه‌گیری نباشد، معتبر برابر نادرست است. سپس موتور چیدمان اندازه ترجیحی را می‌خواند.
نامانگلیسیگونهتوضیح
معتبرokمنطقی = نادرستوقتی گستره یک اندازه‌گیری واقعی است، درست است. نادرست یعنی اندازه‌گیری ممکن نیست.
گسترهextentصحیح = 0طول اندازه‌گیری‌شده بر حسب خانه، وقتی معتبر برابر درست است. موتور مقدار منفی را به 0 محدود می‌کند. وقتی معتبر برابر نادرست است نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تراز‌عرضی CrossAlign

جداشمار تراز‌عرضی
شیوه قرارگیری فرزند روی محور عرضی ظرف، یعنی محوری که ظرف آن را تقسیم نمی‌کند. کشیده (پیش‌فرض) کل محور را پر می‌کند؛ بقیه، فرزندی با اندازه طبیعی را درون فضای آزاد قرار می‌دهند.
نامانگلیسیگونهتوضیح
آغازStartفرزند از لبه آغازین جعبه شروع می‌شود؛ فضای آزاد پس از آن می‌آید.
مرکزCenterفرزند در مرکز قرار می‌گیرد؛ وقتی فضای آزاد فرد باشد، خانه اضافه به راست (ردیف) یا پایین (ستون) می‌رود.
انتهاEndفرزند در لبه پایانی جعبه تمام می‌شود؛ فضای آزاد پیش از آن می‌آید.
کشیدهStretchفرزند کل محور را پر می‌کند (پیش‌فرض)؛ هر اندازه‌ای نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

نوع‌اندازه‌گذاری SizeKind

جداشمار نوع‌اندازه‌گذاری
شیوه تعیین اندازه فرزند روی یک محور.
نامانگلیسیگونهتوضیح
پرکردن فضاFillسهمی وزن‌دار از هر آنچه پس از فرزندان ثابت باقی می‌ماند (R5). روی محور عرضی، پرکردن فضا مانند ترجیحی رفتار می‌کند و وزن نادیده گرفته می‌شود (R8).
ثابتFixedدقیقا به طول تعداد سلول. مقدار منفی به 0 محدود می‌شود.
ترجیحیPrefاندازه ترجیحی فرزند. روی محور اصلی، ترجیحی اندازه‌گیری‌شده مانند ثابت رزرو می‌شود و اگر قابل اندازه‌گیری نباشد، پرکردن فضا با وزن 1 است. روی محور عرضی، همان اندازه طبیعی اندازه‌گیری‌شده است (R8).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

قاعده‌اندازه‌گذاری LayoutSize

ساختار قاعده‌اندازه‌گذاری
اندازه درخواستی فرزند روی یک محور. تعداد سلول فقط وقتی خوانده می‌شود که نوع برابر ثابت باشد. وزن فقط وقتی خوانده می‌شود که یک پرکردن فضا یا ترجیحی محور اصلی در تقسیم سهم شرکت کند.
نامانگلیسیگونهتوضیح
نوعkindنوع‌اندازه‌گذاریشیوه تعیین اندازه. پیش‌فرض پرکردن فضا است.
تعداد سلولcellsصحیح = 0طول درخواستی، فقط وقتی خوانده می‌شود که نوع برابر ثابت باشد. مقدار منفی هنگام استفاده به 0 محدود می‌شود.
وزنweightصحیح = 1سهم یک پرکردن فضا از باقی‌مانده محور اصلی. پیش‌فرض 1 است. مقدار منفی هنگام استفاده به 0 محدود می‌شود. ثابت آن را نادیده می‌گیرد، و همچنین شبکه، پشته و تراز محور عرضی. تقسیم محور اصلی آن را برای یک ترجیحی که هنوز در بردار است هم می‌خواند. Arrange ابتدا ترجیحی اندازه‌گیری‌شده را به ثابت و ترجیحی غیرقابل اندازه‌گیری را به پرکردن فضا با وزن 1 تبدیل می‌کند، پس این مقدار وزن آن جایگاه نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

فاصله‌های‌چهارگانه Insets

ساختار فاصله‌های‌چهارگانه
چهار طول ضلع بر حسب خانه، به ترتیب بالا، راست، پایین، چپ. هم برای فاصله درونی ظرف و هم برای حاشیه بیرونی فرزند به کار می‌رود. مقادیر منفی هنگام استفاده به 0 محدود می‌شوند (کاستن از لبه‌های مستطیل)؛ فاصله‌های چهارگانه جدید و فاصله‌های چهارگانه یکسان هنگام ساخت محدود می‌کنند.
نامانگلیسیگونهتوضیح
بالاtopصحیح = 0خانه‌هایی که بالای محتوا افزوده می‌شوند (فاصله درونی) یا بالای فرزند رزرو می‌شوند (حاشیه بیرونی).
راستrightصحیح = 0خانه‌هایی که سمت راست محتوا افزوده می‌شوند یا سمت راست فرزند رزرو می‌شوند.
پایینbottomصحیح = 0خانه‌هایی که پایین محتوا افزوده می‌شوند یا پایین فرزند رزرو می‌شوند.
چپleftصحیح = 0خانه‌هایی که سمت چپ محتوا افزوده می‌شوند یا سمت چپ فرزند رزرو می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

جایگاه‌چیدمان LayoutSlot

ساختار جایگاه‌چیدمان
جایگاه یک فرزند در فهرست مرتب جایگاه‌های یک ظرف. جایگاه متعلق به والد است؛ ویجت هرگز آن را نمی‌بیند. حاشیه بیرونی پیش از قرار گرفتن فرزند از جایگاه کم می‌شود، عرض و ارتفاع اندازه‌های درخواستی روی هر محور هستند، و تراز افقی / تراز عمودی فرزندی را که کشیده نمی‌شود جای‌گذاری می‌کنند. ردیف، ستون، گستره ردیف و گستره ستون فقط توسط شبکه خوانده می‌شوند.
نامانگلیسیگونهتوضیح
فرزندchilddyn ویجتویجت فرزند. باید در درخت صفحه هم ثبت شود، وگرنه صفحه هرگز آن را رسم نمی‌کند.
حاشیه بیرونیmarginفاصله‌های‌چهارگانهفضای رزروشده درون جایگاه، پیش از تراز (R4). پیش‌فرض صفر است.
عرضwidthقاعده‌اندازه‌گذاریاندازه درخواستی روی محور x. پیش‌فرض پرکردن فضا است.
ارتفاعheightقاعده‌اندازه‌گذاریاندازه درخواستی روی محور y. پیش‌فرض پرکردن فضا است.
تراز افقیalign_xتراز‌عرضیتراز محور عرضی روی x. پیش‌فرض کشیده است.
تراز عمودیalign_yتراز‌عرضیتراز محور عرضی روی y. پیش‌فرض کشیده است.
ردیفrowصحیح = 0ردیفی از شبکه که این فرزند اشغال می‌کند. پیش‌فرض 0 است.
ستونcolصحیح = 0ستونی از شبکه که این فرزند اشغال می‌کند. پیش‌فرض 0 است.
گستره ردیفrow_spanصحیح = 1تعداد ردیف‌هایی از شبکه که این فرزند از ردیف به بعد پوشش می‌دهد. پیش‌فرض 1 است. مقدار نامثبت یعنی 1، و شبکه آن را به ردیف‌های باقی‌مانده محدود می‌کند.
گستره ستونcol_spanصحیح = 1تعداد ستون‌هایی از شبکه که این فرزند از ستون به بعد پوشش می‌دهد. پیش‌فرض 1 است. مقدار نامثبت یعنی 1، و شبکه آن را به ستون‌های باقی‌مانده محدود می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

ردیف Row

ساختار ردیف
ظرفی که فرزندانش را از چپ به راست روی محور x می‌چیند. جایگاه‌ها از آغاز محتوا پشت سر هم چیده می‌شوند؛ تنظیم فاصله به همان تعداد خانه میانشان فاصله می‌گذارد. ترجیحی اندازه‌گیری‌شده محور اصلی مانند ثابت رزرو می‌شود. سپس پرکردن فضا عرض محتوای باقی‌مانده پس از این رزرو و بودجه فاصله‌ها را تقسیم می‌کند (R5). فرزند ارتفاع محتوا را پر می‌کند مگر اینکه تراز عمودی آن را جای دیگری قرار دهد. فاصله درونی را با تنظیم فاصله درونی و حاشیه بیرونی، اندازه و تراز فرزند را با متدهای جایگاه تنظیم کنید. فرزندان فقط جای‌گذاری می‌شوند، نه رسم، پس آن‌ها را به درخت صفحه هم اضافه کنید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
فاصله درونیpadفاصله‌های‌چهارگانهفاصله میان محدوده ظرف و جعبه محتوای آن (R3).
فاصلهgapصحیح = 0تعداد خانه‌های میان جایگاه‌های مجاور روی محور اصلی (R5). پیش‌فرض صفر است. مقدار منفی به 0 محدود می‌شود.
جایگاه‌هاitemsوکتور<جایگاه‌چیدمان>فرزندان به ترتیب جای‌گذاری، هر کدام یک جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

افزودن Add

تابع افزودن(child: dyn ویجت): صحیح

افزودن add

تابع افزودن(child: dyn ویجت): صحیح
فرزند را به‌عنوان آخرین جایگاه اضافه می‌کند و نمایه آن را برمی‌گرداند. این کار فقط ترتیب فرزند را برای چیدمان مشخص می‌کند؛ برای رسم شدن، آن را به درخت صفحه اضافه کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم حاشیه بیرونی SetMargin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)

تنظیم حاشیه بیرونی set_margin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)
حاشیه بیرونی جایگاه در نمایه i را تنظیم می‌کند (R4). نمایه خارج از بازه نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم عرض SetWidth

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم عرض set_width

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور x جایگاه در نمایه i را تنظیم می‌کند (R5).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم ارتفاع SetHeight

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم ارتفاع set_height

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور y جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم تراز SetAlign

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)

تنظیم تراز set_align

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)
هر دو تراز محور عرضی جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله درونی SetPadding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)

تنظیم فاصله درونی set_padding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)
فاصله درونی ظرف را تنظیم می‌کند (R3).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله SetGap

تابع تنظیم فاصله(gap: صحیح)

تنظیم فاصله set_gap

تابع تنظیم فاصله(gap: صحیح)
فاصله محور اصلی میان جایگاه‌ها را تنظیم می‌کند (R5). مقدار منفی به 0 محدود می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

اندازه‌گیری Measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه

اندازه‌گیری measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه
گستره طبیعی روی axis در max_width، بدون جابه‌جا کردن فرزندان. محور اصلی برابر است با فاصله درونی، به‌علاوه هر اندازه ثابت یا پرکردن فضا یا ترجیحی اندازه‌گیری‌شده، به‌علاوه بودجه فاصله‌ها. محور عرضی برابر است با فاصله درونی به‌علاوه بزرگ‌ترین فرزند اندازه‌گیری‌شده. فرزندی که قابل اندازه‌گیری نباشد معتبر را نادرست می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل خود ظرف را (نرمال‌شده) ذخیره می‌کند، اندازه‌گیری می‌کند، سپس هر فرزند را به ترتیب جایگاه‌ها می‌چیند و جابه‌جا می‌کند (R1). پیش‌فرض ویجت‌پایه را بازنویسی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

Render

تابع Render(buf: بافر، bounds: مستطیل)

render

تابع render(buf: بافر، bounds: مستطیل)

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

ستون Column

ساختار ستون
ظرفی که فرزندانش را از بالا به پایین روی محور y می‌چیند. قرینه ردیف: ترجیحی اندازه‌گیری‌شده محور اصلی مانند ثابت رزرو می‌شود، سپس پرکردن فضا ارتفاع محتوای باقی‌مانده پس از این رزرو و بودجه فاصله‌ها را تقسیم می‌کند (R5). فرزند عرض محتوا را پر می‌کند مگر اینکه تراز افقی آن را جای دیگری قرار دهد. برای متدهای جایگاه، فاصله درونی و فاصله، ردیف را ببینید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
فاصله درونیpadفاصله‌های‌چهارگانهفاصله میان محدوده ظرف و جعبه محتوای آن (R3).
فاصلهgapصحیح = 0تعداد خانه‌های میان جایگاه‌های مجاور روی محور اصلی (R5). پیش‌فرض صفر است. مقدار منفی به 0 محدود می‌شود.
جایگاه‌هاitemsوکتور<جایگاه‌چیدمان>فرزندان به ترتیب جای‌گذاری، هر کدام یک جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

افزودن Add

تابع افزودن(child: dyn ویجت): صحیح

افزودن add

تابع افزودن(child: dyn ویجت): صحیح
فرزند را به‌عنوان آخرین جایگاه اضافه می‌کند و نمایه آن را برمی‌گرداند. این کار فقط ترتیب فرزند را برای چیدمان مشخص می‌کند؛ برای رسم شدن، آن را به درخت صفحه اضافه کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم حاشیه بیرونی SetMargin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)

تنظیم حاشیه بیرونی set_margin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)
حاشیه بیرونی جایگاه در نمایه i را تنظیم می‌کند (R4). نمایه خارج از بازه نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم عرض SetWidth

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم عرض set_width

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور x جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم ارتفاع SetHeight

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم ارتفاع set_height

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور y جایگاه در نمایه i را تنظیم می‌کند (R5).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم تراز SetAlign

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)

تنظیم تراز set_align

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)
هر دو تراز محور عرضی جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله درونی SetPadding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)

تنظیم فاصله درونی set_padding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)
فاصله درونی ظرف را تنظیم می‌کند (R3).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله SetGap

تابع تنظیم فاصله(gap: صحیح)

تنظیم فاصله set_gap

تابع تنظیم فاصله(gap: صحیح)
فاصله محور اصلی میان جایگاه‌ها را تنظیم می‌کند (R5). مقدار منفی به 0 محدود می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

اندازه‌گیری Measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه

اندازه‌گیری measure

تابع اندازه‌گیری(axis: محور، max_width: صحیح): اندازه
گستره طبیعی روی axis در max_width، بدون جابه‌جا کردن فرزندان. قرینه ردیف.اندازه‌گیری: محور اصلی محور عمودی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل خود ظرف را (نرمال‌شده) ذخیره می‌کند، اندازه‌گیری می‌کند، سپس هر فرزند را به ترتیب جایگاه‌ها می‌چیند و جابه‌جا می‌کند (R1). پیش‌فرض ویجت‌پایه را بازنویسی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

Render

تابع Render(buf: بافر، bounds: مستطیل)

render

تابع render(buf: بافر، bounds: مستطیل)

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

شبکه Grid

ساختار شبکه
ظرفی که جعبه محتوای خود را به شبکه‌ای ثابت از ردیف‌ها x ستون‌ها تقسیم می‌کند (R9) و هر فرزند را بر پایه (ردیف, ستون) صریح آن قرار می‌دهد (R10). ستون‌ها و ردیف‌ها فضا را به‌طور برابر تقسیم می‌کنند و باقی‌مانده به نخستین‌ها می‌رسد؛ خانه خارج از بازه یا منفی، جایگاهی 0x0 در مبدأ محتوا است و فرزند همچنان پیمایش می‌شود. تنظیم گستره یک خانه را به اندازه بخش‌های کامل گسترش می‌دهد (R15). دو فرزند در یک خانه آن را به اشتراک می‌گذارند و روی هم می‌افتند.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
فاصله درونیpadفاصله‌های‌چهارگانهفاصله میان محدوده ظرف و جعبه محتوای آن (R3).
جایگاه‌هاitemsوکتور<جایگاه‌چیدمان>فرزندان به ترتیب جای‌گذاری، هر کدام یک جایگاه.
ردیف‌هاrowsصحیح = 0تعداد ردیف‌های شبکه. توسط شبکه جدید تنظیم می‌شود.
ستون‌هاcolsصحیح = 0تعداد ستون‌های شبکه. توسط شبکه جدید تنظیم می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

افزودن Add

تابع افزودن(child: dyn ویجت): صحیح

افزودن add

تابع افزودن(child: dyn ویجت): صحیح
فرزند را به‌عنوان آخرین جایگاه اضافه می‌کند و نمایه آن را برمی‌گرداند. این کار فقط ترتیب فرزند را برای چیدمان مشخص می‌کند؛ برای رسم شدن، آن را به درخت صفحه اضافه کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم حاشیه بیرونی SetMargin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)

تنظیم حاشیه بیرونی set_margin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)
حاشیه بیرونی جایگاه در نمایه i را تنظیم می‌کند (R4). نمایه خارج از بازه نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم عرض SetWidth

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم عرض set_width

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور x جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم ارتفاع SetHeight

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم ارتفاع set_height

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور y جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم تراز SetAlign

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)

تنظیم تراز set_align

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)
هر دو تراز محور عرضی جایگاه در نمایه i را تنظیم می‌کند (R7).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم خانه SetCell

تابع تنظیم خانه(i: صحیح، row: صحیح، col: صحیح)

تنظیم خانه set_cell

تابع تنظیم خانه(i: صحیح، row: صحیح، col: صحیح)
خانه شبکه‌ای جایگاه را تنظیم می‌کند (R10).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم گستره SetSpan

تابع تنظیم گستره(i: صحیح، rows: صحیح، cols: صحیح)

تنظیم گستره set_span

تابع تنظیم گستره(i: صحیح، rows: صحیح، cols: صحیح)
تعداد ردیف‌ها و ستون‌هایی را که جایگاه در نمایه i پوشش می‌دهد تنظیم می‌کند (R15). تعداد نامثبت به‌صورت 1 ذخیره می‌شود. نمایه خارج از بازه نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله درونی SetPadding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)

تنظیم فاصله درونی set_padding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)
فاصله درونی ظرف را تنظیم می‌کند (R3).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل خود ظرف را (نرمال‌شده) ذخیره می‌کند، اندازه‌گیری می‌کند، سپس هر فرزند را به ترتیب جایگاه‌ها می‌چیند و جابه‌جا می‌کند (R1). پیش‌فرض ویجت‌پایه را بازنویسی می‌کند. شبکه قادر به اندازه‌گیری نیست؛ اندازه‌گیری همان پیش‌فرض ویجت‌پایه می‌ماند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

Render

تابع Render(buf: بافر، bounds: مستطیل)

render

تابع render(buf: بافر، bounds: مستطیل)

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

پشته Stack

ساختار پشته
ظرفی که به هر فرزند، جعبه محتوا را منهای حاشیه بیرونی خود آن فرزند می‌دهد (R11)، پس فرزندان دقیقا روی هم می‌افتند. فیلدهای اندازه و تراز نادیده گرفته می‌شوند. ظرف رسم نمی‌کند و چیزی را به رو نمی‌آورد؛ ترتیب رسم صفحه تعیین می‌کند کدام فرزند رو قرار گیرد. فرزند بدون حاشیه بیرونی دقیقا همان جعبه محتوا است.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
فاصله درونیpadفاصله‌های‌چهارگانهفاصله میان محدوده ظرف و جعبه محتوای آن (R3).
جایگاه‌هاitemsوکتور<جایگاه‌چیدمان>فرزندان به ترتیب جای‌گذاری، هر کدام یک جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

افزودن Add

تابع افزودن(child: dyn ویجت): صحیح

افزودن add

تابع افزودن(child: dyn ویجت): صحیح
فرزند را به‌عنوان آخرین جایگاه اضافه می‌کند و نمایه آن را برمی‌گرداند. این کار فقط ترتیب فرزند را برای چیدمان مشخص می‌کند؛ برای رسم شدن، آن را به درخت صفحه اضافه کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم حاشیه بیرونی SetMargin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)

تنظیم حاشیه بیرونی set_margin

تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصله‌های‌چهارگانه)
حاشیه بیرونی جایگاه در نمایه i را تنظیم می‌کند (R4). نمایه خارج از بازه نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم عرض SetWidth

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم عرض set_width

تابع تنظیم عرض(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور x جایگاه در نمایه i را تنظیم می‌کند. پشته آن را نادیده می‌گیرد و فقط برای تقارن API می‌پذیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم ارتفاع SetHeight

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)

تنظیم ارتفاع set_height

تابع تنظیم ارتفاع(i: صحیح، size: قاعده‌اندازه‌گذاری)
درخواست اندازه محور y جایگاه در نمایه i را تنظیم می‌کند. پشته آن را نادیده می‌گیرد و فقط برای تقارن API می‌پذیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم تراز SetAlign

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)

تنظیم تراز set_align

تابع تنظیم تراز(i: صحیح، align_x: تراز‌عرضی، align_y: تراز‌عرضی)
هر دو تراز محور عرضی جایگاه در نمایه i را تنظیم می‌کند. پشته آن را نادیده می‌گیرد و فقط برای تقارن API می‌پذیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم فاصله درونی SetPadding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)

تنظیم فاصله درونی set_padding

تابع تنظیم فاصله درونی(pad: فاصله‌های‌چهارگانه)
فاصله درونی ظرف را تنظیم می‌کند (R3).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تنظیم محدوده SetBounds

تابع تنظیم محدوده(bounds: مستطیل)

تنظیم محدوده set_bounds

تابع تنظیم محدوده(bounds: مستطیل)
مستطیل خود ظرف را (نرمال‌شده) ذخیره می‌کند، اندازه‌گیری می‌کند، سپس هر فرزند را به ترتیب جایگاه‌ها می‌چیند و جابه‌جا می‌کند (R1). پیش‌فرض ویجت‌پایه را بازنویسی می‌کند. پشته قادر به اندازه‌گیری نیست؛ اندازه‌گیری همان پیش‌فرض ویجت‌پایه می‌ماند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

Render

تابع Render(buf: بافر، bounds: مستطیل)

render

تابع render(buf: بافر، bounds: مستطیل)

HandleEvent

تابع HandleEvent(event: رویداد): منطقی

handle_event

تابع handle_event(event: رویداد): منطقی

Focusable

تابع Focusable(): منطقی

focusable

تابع focusable(): منطقی

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

نگاشت‌کلید Keymap

ساختار نگاشت‌کلید
جدولی از پیوندهای کلید و توالی کلید. آن را با نگاشت‌کلید جدید، نگاشت‌کلید پیش‌فرض یا نگاشت‌کلید ویم (یا خالی با نگاشت‌کلید {}) بسازید، با پیوند کلید و گونه‌های آن پر کنید، رویدادها را به پردازش کلید بدهید و با آزادسازی آزاد کنید. هرگز یک مقدار نگاشت‌کلید را رونوشت نکنید.
نامانگلیسیگونهتوضیح
مهلت توالی به میلی‌ثانیهpending_timeout_msصحیح = 0مدتی که یک توالی کلید در انتظار می‌تواند برای کلید بعدی صبر کند، به میلی‌ثانیه. 0 (پیش‌فرض) هرگز پیشوند را منقضی نمی‌کند، که همان رفتار بدون مهلت است. مهلت به صورت تنبل و فقط در رویداد کیبورد بعدی ارزیابی می‌شود؛ رویدادهای غیرکلیدی هرگز پیشوند را منقضی نمی‌کنند. آن را مستقیم تنظیم کنید (keymap.مهلت توالی به میلی‌ثانیه = 700)؛ سازنده‌ای ندارد.
آغاز انتظار توالی به میلی‌ثانیهpending_since_msصحیح = 0زمان ساعت، به میلی‌ثانیه، هنگامی که توالی در انتظار فعلی شروع به انتظار کرد؛ در هر گام پیشوند تازه می‌شود و وقتی چیزی در انتظار نیست 0 است. پردازش کلید آن را نگه‌داری می‌کند؛ برنامه به‌جای آن مهلت توالی به میلی‌ثانیه را تنظیم می‌کند.
tui-events.salam
// زبان: فارسی
واردسازی پایانه
واردسازی رابط‌پایانه

ناپایا شمار خروج := 0
ناپایا شمار بالا := 0

تابع ریشه:
    خروج := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("q") }
    سرچاپ "q است:"، خروج.نویسه است("q")، "Ctrl+C است:"، خروج.ترکیب کنترل است("c")، "اینتر است:"، خروج.کلید است(پایانه.کلید ورود)
    کلیک := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد ماوس، کلید = پایانه.کلید { خام = "\x1b[<0;5;3M" }، ماوس = پایانه.رمزگشایی موشواره("\x1b[<0;5;3M") }
    نقطه := کلیک.مختصات ماوس()
    سرچاپ "کلیک در"، نقطه.ایکس، نقطه.ایگرگ
    تغییر اندازه := رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد تغییر اندازه، عرض = 100، ارتفاع = 30 }
    سرچاپ "انواع:"، رابط‌پایانه.بدون رویداد، رابط‌پایانه.رویداد کیبورد، رابط‌پایانه.رویداد ماوس، تغییر اندازه.نوع، رابط‌پایانه.رویداد تیک، "اندازه"، تغییر اندازه.عرض، تغییر اندازه.ارتفاع، "بالا رفته"، تغییر اندازه.بالا رفته

    ناپایا ص := رابط‌پایانه.صفحه جدید(رابط‌پایانه.ویجت‌پایه {}، 10، 2)
    دیرکن ص.بستن()
    ناپایا نگاشت := رابط‌پایانه.نگاشت کلید جدید()
    نگاشت.پیوند کلید(پایانه.رمزگشایی("q")، (_ص: رابط‌پایانه.صفحه*، _ر: رابط‌پایانه.رویداد):
        شمار خروج++
        برگشت درست
    پایان)
    نگاشت.پیوند توالی("gg"، (_ص: رابط‌پایانه.صفحه*، _ر: رابط‌پایانه.رویداد):
        شمار بالا++
        برگشت درست
    پایان)
    نگاشت.پیوند کلید برای ویجت(رابط‌پایانه.شناسه ریشه، پایانه.رمزگشایی("x")، (_ص: رابط‌پایانه.صفحه*، _ر: رابط‌پایانه.رویداد): برگشت درست پایان)
    نگاشت.پیوند توالی برای ویجت(رابط‌پایانه.شناسه ریشه، "dd"، (_ص: رابط‌پایانه.صفحه*، _ر: رابط‌پایانه.رویداد): برگشت درست پایان)
    نگاشت.مهلت توالی به میلی‌ثانیه = 1000
    ص.تنظیم نگاشت کلید(نگاشت)
    _ := ص.هدایت رویداد(خروج)
    _ := ص.هدایت رویداد(رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("g") })
    سرچاپ "مهلت توالی:"، ص.نگاشت کلید.مهلت توالی به میلی‌ثانیه، "میلی‌ثانیه"
    _ := ص.نگاشت کلید.آغاز انتظار توالی به میلی‌ثانیه
    _ := ص.هدایت رویداد(رابط‌پایانه.رویداد { نوع = رابط‌پایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("g") })
    سرچاپ "q فشرده شد"، شمار خروج، "gg فشرده شد"، شمار بالا
    ص.نگاشت کلید.لغو پیوند کلید(پایانه.رمزگشایی("q"))
    ص.نگاشت کلید.لغو پیوند کلید برای ویجت(رابط‌پایانه.شناسه ریشه، پایانه.رمزگشایی("x"))
    ص.نگاشت کلید.لغو پیوند توالی برای ویجت(رابط‌پایانه.شناسه ریشه، "dd")
    ص.نگاشت کلید.لغو توالی در انتظار()
    سرچاپ "پس از لغو پیوند:"، ص.هدایت رویداد(خروج)

    ناپایا پیکان‌ها := رابط‌پایانه.نگاشت کلید پیش‌فرض()
    پیکان‌ها.آزادسازی()
    ناپایا ویم := رابط‌پایانه.نگاشت کلید ویم((_ص: رابط‌پایانه.صفحه*، _ر: رابط‌پایانه.رویداد): برگشت نادرست پایان)
    ویم.آزادسازی()
پایان
خروجیq است: true Ctrl+C است: false اینتر است: false کلیک در 4 2 انواع: 0 1 2 3 4 اندازه 100 30 بالا رفته false مهلت توالی: 1000 میلی‌ثانیه q فشرده شد 1 gg فشرده شد 1 پس از لغو پیوند: false

پیوند کلید Bind

تابع پیوند کلید(key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)

پیوند کلید bind

تابع پیوند کلید(key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)
یک کلید را در دامنه سراسری به یک کنش پیوند می‌دهد. پیوند بعدی همان کلید جای این یکی را می‌گیرد (آخرین نوشتن برنده است).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

پیوند کلید برای ویجت BindFor

تابع پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)

پیوند کلید برای ویجت bind_for

تابع پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)
یک کلید را برای ویجت با این شناسه به یک کنش پیوند می‌دهد: کنش وقتی اجرا می‌شود که آن ویجت (یا یکی از نوادگانش) تمرکز را داشته باشد. بدون ویجت پیوند سراسری می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

پیوند توالی BindSeq

تابع پیوند توالی(seq: رشته، action: تابع(صفحه*، رویداد): منطقی)

پیوند توالی bind_seq

تابع پیوند توالی(seq: رشته، action: تابع(صفحه*، رویداد): منطقی)
یک توالی کلید را در دامنه سراسری به یک کنش پیوند می‌دهد. seq نویسه به نویسه (rune) رمزگشایی می‌شود؛ رشته خالی نادیده گرفته می‌شود. پیوند بعدی همان توالی جای این یکی را می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

پیوند توالی برای ویجت BindForSeq

تابع پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته، action: تابع(صفحه*، رویداد): منطقی)

پیوند توالی برای ویجت bind_for_seq

تابع پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته، action: تابع(صفحه*، رویداد): منطقی)
یک توالی کلید را برای ویجت با این شناسه به یک کنش پیوند می‌دهد. بدون ویجت پیوند سراسری می‌سازد. رشته خالی نادیده گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

لغو پیوند کلید Unbind

تابع لغو پیوند کلید(key: پایانه.کلید)

لغو پیوند کلید unbind

تابع لغو پیوند کلید(key: پایانه.کلید)
پیوند سراسری یک کلید را حذف می‌کند. اگر پیوندی نباشد کاری نمی‌کند. پیوندهای محدود به ویجت دست نمی‌خورند (برای جایگزینی یکی از آن‌ها از پیوند کلید برای ویجت و برای حذف یکی از لغو پیوند کلید برای ویجت استفاده کنید). لغو پیوند کلید برای ویجت(بدون ویجت, key) همین کار را انجام می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

لغو پیوند کلید برای ویجت UnbindFor

تابع لغو پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید)

لغو پیوند کلید برای ویجت unbind_for

تابع لغو پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید)
پیوند یک ویجت روی یک کلید را حذف می‌کند: وارون پیوند کلید برای ویجت. فقط بازنویسی همان ویجت حذف می‌شود، پس پیوند سراسری و بازنویسی‌های ویجت‌های دیگر روی همان کلید همچنان برقرارند و هیچ گره‌ای از trie حذف نمی‌شود. وقتی نگاشت خالی باشد، کلید هرگز پیوند نخورده باشد یا ویجت هرگز آن را پیوند نداده باشد کاری نمی‌کند. بدون ویجت پیوند سراسری را حذف می‌کند، پس لغو پیوند کلید برای ویجت(بدون ویجت, key) همان لغو پیوند کلید(key) است. توالی در انتظار را بازنشانی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

لغو پیوند توالی برای ویجت UnbindForSeq

تابع لغو پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته)

لغو پیوند توالی برای ویجت unbind_for_seq

تابع لغو پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته)
پیوند یک ویجت برای یک توالی کلید را حذف می‌کند: وارون پیوند توالی برای ویجت. فقط بازنویسی همان ویجت حذف می‌شود، پس توالی سراسری و بازنویسی‌های ویجت‌های دیگر روی همان توالی همچنان برقرارند. trie فقط خوانده می‌شود، پس هیچ گره‌ای ساخته یا حذف نمی‌شود و پیوند توالی برای ویجت بعدی روی همان توالی همچنان کار می‌کند. وقتی نگاشت خالی باشد، توالی هرگز پیوند نخورده باشد یا ویجت هرگز آن را پیوند نداده باشد کاری نمی‌کند؛ بدون ویجت پیوند سراسری توالی را حذف می‌کند و رشته خالی نادیده گرفته می‌شود. توالی در انتظار را بازنشانی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

پردازش کلید Handle

تابع پردازش کلید(screen: صفحه*، event: رویداد): منطقی

پردازش کلید handle

تابع پردازش کلید(screen: صفحه*، event: رویداد): منطقی
یک رویداد را در برابر پیوندها پردازش می‌کند. فقط رویداد کیبوردها به trie می‌رسند؛ هر نوع دیگری false برمی‌گرداند و pending را دست‌نخورده می‌گذارد. وقتی کنشی اجرا شود true برمی‌گرداند. خواندن‌ها کلید را پیش از فراخوانی هر کنشی حل می‌کنند؛ پس از فراخوانی هیچ چیز به trie دست نمی‌زند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

آزادسازی Free

تابع آزادسازی()

آزادسازی free

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

لغو توالی در انتظار CancelPending

تابع لغو توالی در انتظار()

لغو توالی در انتظار cancel_pending

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

کادر‌متن Input

ساختار کادر‌متن
ورودی متنی تک‌خطی: مقدار، نشانگر درج، متن راهنمای اختیاری، و ظاهرهایی برای مقدار، خانه مکان‌نما و متن راهنما. تمرکزپذیر است، پس رویدادهای کیبورد از راه هدایت تمرکز صفحه به آن می‌رسند. مقدار را با فیلد یا تنظیم مقدار تنظیم کنید، با مقدار بخوانید، و متن راهنما را با فیلد یا تنظیم متن راهنما تنظیم کنید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
متن راهنماplaceholderرشته = ""متنی که تا وقتی مقدار خالی است (کم‌رنگ) نمایش داده می‌شود. "" یعنی بدون متن راهنما.
ظاهرstyleظاهرظاهر پایه مقدار و پس‌زمینه خالی. ظاهر پیش‌فرض با پیش‌فرض‌های پایانه رسم می‌کند.
ظاهر مکان‌نماcursor_styleظاهرظاهری که برای خانه مکان‌نما روی ظاهر ادغام می‌شود. پیش‌فرض آن نمایش وارونه است.
ظاهر متن راهنماplaceholder_styleظاهرظاهری که برای متن راهنما روی ظاهر ادغام می‌شود. پیش‌فرض آن پیش‌زمینه مشکی روشن است.
حداکثر طولmax_lengthصحیح = 0حداکثر طول مقدار بر حسب نویسه (codepoint)، نه خانه نمایشی. 0 یعنی نامحدود. تایپ در حد مجاز مصرف می‌شود و چیزی را تغییر نمی‌دهد؛ تنظیم مقدار مقدار بلندتر را کوتاه می‌کند؛ حذف همیشه مجاز است.
پالایهfilterتابع(رشته): منطقیپس از یک درج پیشنهادی (یک نویسه تایپ‌شده) و پس از گذشتن از بررسی حداکثر طول، با کل مقدار نامزد فراخوانی می‌شود. برگرداندن نادرست آن را رد می‌کند: کلید مصرف می‌شود و چیزی تغییر نمی‌کند. برای Backspace، Delete یا تنظیم مقدار فراخوانی نمی‌شود. پیش‌فرض همه چیز را می‌پذیرد.
پوشاندهmaskedمنطقی = نادرستوقتی درست باشد، هر نویسه مقدار به شکل نماد پوشش رسم می‌شود. فقط برای نمایش: مقدار، نشانگر درج و پنجره تغییر نمی‌کنند. متن راهنما هرگز پوشانده نمی‌شود.
نماد پوششmask_glyphرشته = "*"نویسه‌ای که هنگام پوشاندن به جای هر نویسه مقدار رسم می‌شود. فقط نخستین codepoint آن به کار می‌رود؛ "" یعنی "*". در سیاست نویسه‌ها.اسکی نویسه پوشش غیر ASCII به شکل "*" رسم می‌شود.
هنگام ثبتon_submitتابع(رشته): منطقیهنگام Enter به‌صورت همگام با مقدار واقعی، و هرگز پوشش، فراخوانی می‌شود. برگرداندن درست کلید را مصرف می‌کند؛ نادرست اجازه می‌دهد کلید به والد برود. پیش‌فرض درست برمی‌گرداند. پس از بازگشت آن، نشانگر درج و پنجره به محدوده مقدار محدود می‌شوند، برای حالتی که مقدار را تغییر داده باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
به فشردن کلید واکنش نشان می‌دهد. نویسه چاپ‌شدنی یا فاصله در محل نشانگر درج می‌شود؛ Left، Right، Home و End نشانگر را جابه‌جا می‌کنند (همه مصرف می‌شوند، حتی وقتی جابه‌جایی ممکن نباشد)؛ backspace نویسه (codepoint) پیش از نشانگر و delete نویسه روی آن را حذف می‌کند (در آغاز یا پایان چیزی حذف نمی‌شود)؛ enter هنگام ثبت را فراخوانی می‌کند و نتیجه آن را برمی‌گرداند. رویدادها و کلیدهای دیگر مصرف نمی‌شوند، پس به بالا می‌روند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

مقدار Value

تابع مقدار(): رشته

مقدار value

تابع مقدار(): رشته
متن کنونی، بدون ظاهرها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تنظیم مقدار SetValue

تابع تنظیم مقدار(v: رشته)

تنظیم مقدار set_value

تابع تنظیم مقدار(v: رشته)
مقدار را جایگزین می‌کند و اگر حداکثر طول تنظیم شده باشد آن را به همان تعداد نویسه کوتاه می‌کند، بدون فراخوانی پالایه؛ نشانگر درج به انتهای آن می‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تنظیم متن راهنما SetPlaceholder

تابع تنظیم متن راهنما(p: رشته)

تنظیم متن راهنما set_placeholder

تابع تنظیم متن راهنما(p: رشته)
متنی را که تا وقتی مقدار خالی است نمایش داده می‌شود تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

Hits

تابع Hits(): منطقی

hits

تابع hits(): منطقی

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

PreferredSize

تابع PreferredSize(max_width: صحیح): مستطیل

preferred_size

تابع preferred_size(max_width: صحیح): مستطیل

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

رویداد Event

ساختار رویداد
یک رویداد ورودی. نوع مشخص می‌کند کدام فیلدهای داده معنادارند.
نامانگلیسیگونهتوضیح
نوعkindصحیح = 0یکی از بدون رویداد، رویداد کیبورد، رویداد ماوس، رویداد تغییر اندازه، رویداد تیک.
کلیدkeyپایانه.کلیدکلید برای رویداد کیبورد؛ توالی خام (در کلید.raw) برای رویداد ماوس.
ماوسmouseپایانه.رویداد موشوارهگزارش رمزگشایی‌شده برای رویداد ماوس.
عرضwidthصحیح = 0عرض جدید پایانه بر حسب ستون، برای رویداد تغییر اندازه.
ارتفاعheightصحیح = 0ارتفاع جدید پایانه بر حسب ردیف، برای رویداد تغییر اندازه.
بالا رفتهbubbledمنطقی = نادرستوقتی رویداد از ویجتی که از آن شروع شده به یکی از نیاکانش رفته باشد درست است. نگه‌دارنده‌هایی مانند پنل و مودال از آن استفاده می‌کنند تا همان رویداد را برای بار دوم به فرزندشان ندهند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

مختصات ماوس MousePoint

تابع مختصات ماوس(): نقطه

مختصات ماوس mouse_point

تابع مختصات ماوس(): نقطه
خانه‌ای که رویداد ماوس روی آن رخ داده، به صورت یک نقطه از 0 مانند همه مختصات دیگر در tui. term.DecodeMouse ستون و ردیف از 1 پایانه را نگه می‌دارد، پس این متد از هر کدام 1 کم می‌کند. فقط برای رویداد ماوسی معنادار است که ماوس.ok آن درست باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

کلید است IsKey

تابع کلید است(code: صحیح): منطقی

کلید است is_key

تابع کلید است(code: صحیح): منطقی
برای رویداد کیبوردی درست است که کد کلیدش code باشد (یک ثابت term.Key*، برای نمونه term.KeyEnter یا term.KeyUp). کلیدهای تغییردهنده نادیده گرفته می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

نویسه است IsChar

تابع نویسه است(ch: رشته): منطقی

نویسه است is_char

تابع نویسه است(ch: رشته): منطقی
برای رویداد کیبوردی درست است که دقیقاً ch را بدون نگه داشتن Ctrl یا Alt تایپ کرده باشد، پس نویسه است("q") با Ctrl+Q یا Alt+Q منطبق نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

ترکیب کنترل است IsCtrl

تابع ترکیب کنترل است(ch: رشته): منطقی

ترکیب کنترل است is_ctrl

تابع ترکیب کنترل است(ch: رشته): منطقی
برای Ctrl به‌همراه حرف ch درست است، برای نمونه ترکیب کنترل است("c") برای Ctrl+C. در حالت خام، Ctrl+C به صورت همین کلید می‌رسد، نه به صورت سیگنال.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

رنگ Color

جداشمار رنگ:
    پیش‌فرض
    انسی(n: صحیح)
    نمایه‌ای(n: صحیح)
    آرجی‌بی(r: صحیح، g: صحیح، b: صحیح)
پایان
یک رنگ پایانه، در قالب چهار گونه‌ای که قالب خروجی از هم تمیز می‌دهد. برابری ذاتی است: دو رنگ وقتی برابرند که گونه و داده‌شان برابر باشد، پس گونه‌های متفاوت هرگز برابر نیستند.
نامانگلیسیگونهتوضیح
پیش‌فرضDefaultرنگ پیش‌فرض پیش‌زمینه یا پس‌زمینه خود پایانه (SGR 39 / 49)، نه درایه‌ای از یک پالت.
انسیAnsi(n: صحیح)یک نمایه در پالت 16 رنگی، 0-15: 0-7 رنگ‌های عادی و 8-15 گونه‌های روشن آن‌ها. اعتبارسنجی انجام نمی‌شود؛ بازه مستند 0-15 است.
نمایه‌ایIndexed(n: صحیح)یک نمایه در پالت 256 رنگی، 0-255 (SGR 38;5;n / 48;5;n). نمایه‌ای در بازه 0-15 در خروجی همچنان Indexed می‌ماند و هرگز به شکل ANSI بازنویسی نمی‌شود.
آرجی‌بیRgb(r: صحیح، g: صحیح، b: صحیح)یک سه‌تایی رنگ حقیقی 24 بیتی، هر کانال 0-255 (SGR 38;2;r;g;b).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

سطح‌رنگ ColorTier

جداشمار سطح‌رنگ
میزان رنگی که پایانه می‌تواند نشان دهد. خاموش یعنی بدون رنگ، انسی۱۶ پالت 16 رنگی، نمایه‌ای۲۵۶ پالت 256 رنگی و رنگ حقیقی رنگ 24 بیتی RGB.
نامانگلیسیگونهتوضیح
خاموشOffبدون رنگ: هر رنگ به Default کاهش می‌یابد.
انسی۱۶Ansi16فقط پالت 16 رنگی.
نمایه‌ای۲۵۶Indexed256پالت 256 رنگی.
رنگ حقیقیTrueColorرنگ حقیقی 24 بیتی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

کادر‌انتخاب Checkbox

ساختار کادر‌انتخاب
یک کلید دوحالته یک‌ردیفی که در حالت انتخاب‌شده به شکل "[x] label" و در غیر آن به شکل "[ ] label" رسم می‌شود. تمرکزپذیر است، پس رویدادهای صفحه‌کلید از طریق توزیع تمرکز صفحه به آن می‌رسند: Space آن را تغییر می‌دهد و مصرف می‌شود و هر کلید دیگری به بالا منتقل می‌شود. فشردن دکمه چپ ماوس درون محدوده‌اش، چه تمرکز داشته باشد چه نه، آن را تغییر می‌دهد. وضعیت را با انتخاب شده است بخوانید و با تنظیم انتخاب یا به دست کاربر تغییر دهید. برای جلوگیری از دریافت ورودی، غیرفعال را تنظیم کنید.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه جاسازی‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع بازنویسی نمی‌کند.
برچسبlabelرشته = ""متنی که پس از علامت رسم می‌شود. "" فقط علامت را رسم می‌کند.
ظاهر کادرbox_styleظاهرظاهر سه خانه علامت: "["، نویسه وضعیت و "]".
ظاهر برچسبlabel_styleظاهرظاهر فاصله‌گذار، برچسب و پرکننده انتهای ردیف.
غیرفعالdisabledمنطقی = نادرستوقتی true باشد، کادر‌انتخاب تمرکزپذیر نیست، همه رویدادها را نادیده می‌گیرد، برخوردی نمی‌گیرد و ردیفش را کم‌رنگ رسم می‌کند.
هنگام تغییر انتخابon_toggleتابع(منطقی)پس از هر تغییر، با مقدار جدید وضعیت انتخاب فراخوانی می‌شود. پیش‌فرض کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
وقتی فعال است و دست‌کم یک خانه پهنا دارد true است، تا کادر‌انتخاب بتواند تمرکز صفحه‌کلید را بگیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
به Space و فشردن دکمه چپ ماوس درون محدوده واکنش نشان می‌دهد. هر کدام وضعیت انتخاب را برعکس می‌کند، هنگام تغییر انتخاب را با مقدار جدید فراخوانی می‌کند و true برمی‌گرداند. هر رویداد دیگری false برمی‌گرداند و کادر‌انتخاب غیرفعال برای همه رویدادها false برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

انتخاب شده است Checked

تابع انتخاب شده است(): منطقی

انتخاب شده است checked

تابع انتخاب شده است(): منطقی
وضعیت فعلی انتخاب.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تنظیم انتخاب SetChecked

تابع تنظیم انتخاب(value: منطقی)

تنظیم انتخاب set_checked

تابع تنظیم انتخاب(value: منطقی)
وضعیت انتخاب را بدون فراخوانی هنگام تغییر انتخاب تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
یک ردیف در ردیف بالایی محدوده رسم می‌کند: فاصله‌گذار، خانه‌های برچسب و پرکننده انتهایی را با ظاهر برچسب، سپس سه خانه علامت را با ظاهر کادر. تمرکز (در حالت فعال) پررنگی را روی هر دو ظاهر می‌افزاید و غیرفعال بودن کم‌رنگی را می‌افزاید و پررنگی را برمی‌دارد. هر خانه به پهنا بریده می‌شود، پس در ردیف باریک ابتدا برچسب و سپس خانه‌های علامت از سمت راست حذف می‌شوند. جعبه تباهیده چیزی رسم نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

دکمه Button

ساختار دکمه
دکمه عملیاتی یک‌ردیفی که به شکل "[ label ]" رسم می‌شود. Enter و Space وقتی دکمه تمرکز دارد هنگام کلیک را فراخوانی می‌کنند، و کلیک چپ درون محدوده آن، چه تمرکز داشته باشد چه نه، هنگام کلیک را فراخوانی می‌کند. دکمه غیرفعال کم‌رنگ رسم می‌شود، تمرکز نمی‌گیرد و همه رویدادها را نادیده می‌گیرد.
نامانگلیسیگونهتوضیح
ویجت پایهBaseWidgetویجت‌پایهویجت‌پایه تعبیه‌شده: محدوده و پاسخ‌های پیش‌فرض برای هر متد ویجت که این نوع آن را بازتعریف نمی‌کند.
برچسبlabelرشته = ""متنی که میان کروشه‌ها رسم می‌شود. به اندازه عرض بریده می‌شود و هرگز سه‌نقطه نمی‌گیرد.
ظاهرstyleظاهرظاهر پایه همه خانه‌های دکمه.
ظاهر تمرکزfocus_styleظاهرظاهری که هنگام متمرکز و فعال بودن دکمه به جای ظاهر به کار می‌رود. ظاهر پیش‌فرض، که مقدار پیش‌فرض است، یعنی پررنگ روی همه خانه‌ها.
غیرفعالdisabledمنطقی = نادرستوقتی درست باشد دکمه کم‌رنگ رسم می‌شود، تمرکز و کلیک نمی‌گیرد و همه رویدادها را نادیده می‌گیرد.
هنگام کلیکon_clickتابع()هنگام فعال شدن دکمه فراخوانی می‌شود. پیش‌فرض کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تمرکز‌پذیر است Focusable

تابع تمرکز‌پذیر است(): منطقی

تمرکز‌پذیر است focusable

تابع تمرکز‌پذیر است(): منطقی
وقتی درست است که دکمه فعال باشد و عرض داشته باشد، تا تمرکز صفحه‌کلید به آن برسد. دکمه‌ای که پیش از داشتن محدوده افزوده شود تمرکزپذیر نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

اصابت‌پذیر است Hits

تابع اصابت‌پذیر است(): منطقی

اصابت‌پذیر است hits

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

اندازه ترجیحی PreferredSize

تابع اندازه ترجیحی(max_width: صحیح): مستطیل

اندازه ترجیحی preferred_size

تابع اندازه ترجیحی(max_width: صحیح): مستطیل
عرض برچسب به‌علاوه دو کروشه، در یک ردیف، که وقتی max_width > 0 است به max_width محدود می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

پردازش رویداد HandleEvent

تابع پردازش رویداد(event: رویداد): منطقی

پردازش رویداد handle_event

تابع پردازش رویداد(event: رویداد): منطقی
به Enter یا Space و به فشردن کلید چپ ماوس درون محدوده واکنش نشان می‌دهد. دکمه غیرفعال چیزی را مصرف نمی‌کند. هر فعال‌سازی هنگام کلیک را فراخوانی می‌کند و درست برمی‌گرداند؛ هر رویداد دیگری نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

ترسیم Render

تابع ترسیم(buf: بافر، bounds: مستطیل)

ترسیم render

تابع ترسیم(buf: بافر، bounds: مستطیل)
دکمه را در نخستین ردیف محدوده رسم می‌کند: ردیف با ظاهر مؤثر پر می‌شود، "[" در نخستین ستون و "]" در آخرین ستون (اگر عرض اجازه دهد) قرار می‌گیرد و برچسب میان آن‌ها وسط‌چین و برای جا شدن بریده می‌شود. ظاهر مؤثر ظاهر است؛ هنگام غیرفعال بودن کم‌رنگ و غیرپررنگ؛ دکمه متمرکز و فعال از ظاهر تمرکز استفاده می‌کند، یا وقتی ظاهر تمرکز برابر ظاهر پیش‌فرض است پررنگ می‌شود. عرض صفر یا کمتر چیزی رسم نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

Visible

تابع Visible(): منطقی

visible

تابع visible(): منطقی

Bounds

تابع Bounds(): مستطیل

bounds

تابع bounds(): مستطیل

SetBounds

تابع SetBounds(bounds: مستطیل)

set_bounds

تابع set_bounds(bounds: مستطیل)

Measure

تابع Measure(axis: محور، max_width: صحیح): اندازه

measure

تابع measure(axis: محور، max_width: صحیح): اندازه

سیاست‌نویسه‌ها GlyphPolicy

جداشمار سیاست‌نویسه‌ها
مجموعه نویسه‌هایی که نویسه‌های ساختاری (کادرها) می‌توانند به کار ببرند. یونیکد مقدار صفر است و نویسه‌های رسم جعبه (box-drawing) را رسم می‌کند؛ اسکی آن‌ها را برای پایانه‌هایی که نویسه رسم جعبه ندارند به کدپوینت‌های تا 0x7F محدود می‌کند.
نامانگلیسیگونهتوضیح
یونیکدUnicodeنویسه‌های رسم جعبه.
اسکیASCIIفقط نویسه‌های ساده ASCII.
tui-buffer.salam
// زبان: فارسی
واردسازی رابط‌پایانه

تابع ریشه:
    ناپایا بافر := رابط‌پایانه.بافر جدید(16، 5)
    بافر.نویسه‌ها = رابط‌پایانه.سیاست‌نویسه‌ها.یونیکد
    ناحیه := بافر.محدوده()
    سرچاپ "ناحیه"، ناحیه.عرض، "x"، ناحیه.ارتفاع
    رابط‌پایانه.ترسیم کادر(بافر، ناحیه، رابط‌پایانه.سبک‌کادر.دو خط، رابط‌پایانه.ظاهر پیش‌فرض، "قاب")
    بافر.نوشتن متن(2، 1، "hi 中文"، رابط‌پایانه.ظاهر { پررنگ = درست })
    بافر.پرکردن(رابط‌پایانه.مستطیل { ایکس = 2، ایگرگ = 2، عرض = 5، ارتفاع = 1 }، "."، رابط‌پایانه.ظاهر پیش‌فرض)
    بافر.تنظیم(9، 2، رابط‌پایانه.سلول { نویسه = "*"، ظاهر = رابط‌پایانه.ظاهر پیش‌فرض })
    رابط‌پایانه.ترسیم کادر با نویسه‌ها(بافر، رابط‌پایانه.مستطیل { ایکس = 10، ایگرگ = 2، عرض = 5، ارتفاع = 3 }، رابط‌پایانه.نویسه‌های گرد()، رابط‌پایانه.ظاهر پیش‌فرض، "")
    تکرار بافر.ارتفاع در سطر:
        سرچاپ بافر.متن ردیف(سطر)
    پایان
    سرچاپ "خانه 2,1:"، بافر.دریافت(2، 1).نویسه، "سر نویسه پهن:"، بافر.دریافت(5، 1).نویسه
    سرچاپ "بایت‌های قاب:"، بافر.خروجی کامل انسی().طول() بزرگتر 0، "تغییرها:"، بافر.اختلاف().طول() بزرگتر 0
    بافر.ثبت قاب()
    سرچاپ "پس از ثبت:"، بافر.اختلاف().طول()
    بافر.پاک‌سازی()
    بافر.تغییر اندازه(4، 1)
    سرچاپ "اندازه تازه"، بافر.عرض، بافر.ارتفاع، "بازترسیم کامل:"، بافر.اجبار بازترسیم کامل
    سرچاپ "مجموعه نویسه‌ها:"، رابط‌پایانه.نویسه‌های تک خط().افقی، رابط‌پایانه.نویسه‌های دو خط().افقی، رابط‌پایانه.نویسه‌های سنگین().افقی، رابط‌پایانه.نویسه‌های اسکی().افقی، رابط‌پایانه.نویسه‌های ترکیبی().گوشه بالا چپ
    سرچاپ "جایگزین اسکی:"، رابط‌پایانه.نویسه‌ها برای(رابط‌پایانه.سبک‌کادر.گوشه‌گرد، رابط‌پایانه.سیاست‌نویسه‌ها.اسکی).گوشه بالا چپ
    سرچاپ "سیاست از محیط:"، رابط‌پایانه.تشخیص سیاست نویسه‌ها() برابر رابط‌پایانه.تشخیص سیاست نویسه‌ها()
    _ := بافر.در تمرکز
    _ := بافر.محدوده برش
    بافر.آزادسازی()
پایان
خروجیناحیه 16 x 5 ╔═ قاب ════════╗ ║ hi 中文 ║ ║ ..... *╭───╮║ ║ │ │║ ╚═════════╰───╯╝ خانه 2,1: h سر نویسه پهن: 中 بایت‌های قاب: true تغییرها: true پس از ثبت: 0 اندازه تازه 4 1 بازترسیم کامل: true مجموعه نویسه‌ها: ─ ═ ━ - ┍ جایگزین اسکی: + سیاست از محیط: true

سلول Cell

ساختار سلول
یک خانه نمایش و ظاهری که با آن رسم می‌شود.
نامانگلیسیگونهتوضیح
نویسهchرشته = " "نویسه‌ای به پهنای یک خانه، یا "" برای ادامه نویسه پهنی که در خانه سمت چپ آن است. خانه خالی " " را نگه می‌دارد. نوشتن متن نویسه‌های پهن را می‌نویسد؛ تنظیم هر نویسه را که پهنای آن یک خانه نباشد خالی می‌کند.
ظاهرstyleظاهرظاهر نهایی‌شده‌ای که این خانه با آن رسم می‌شود. ظاهر پیش‌فرض ظاهر پیش‌فرض پایانه را می‌خواهد. بافر، نه ویجت، آن را به بایت تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

بافر Buffer

ساختار بافر
شبکه‌ای از خانه‌ها که ویجت‌ها در آن رسم می‌کنند. نوشتن بیرون از محدوده برش (یا بیرون از شبکه) بی‌صدا نادیده گرفته می‌شود، پس رسم هرگز شکست نمی‌خورد.
نامانگلیسیگونهتوضیح
عرضwidthصحیح = 0تعداد ستون‌ها.
ارتفاعheightصحیح = 0تعداد ردیف‌ها.
سلول‌هاcellsوکتور<سلول>ذخیره خانه‌ها به ترتیب ردیفی: خانه (x, y) برابر سلول‌ها[y * عرض + x] است. دریافت و تنظیم را ترجیح دهید که محدوده را بررسی می‌کنند و برش می‌دهند. از طریق تنظیم / پرکردن / نوشتن متن / پاک‌سازی بنویسید. نوشتن مستقیم در بردار زیرین خارج از قرارداد است و ردیابی نمی‌شود.
بافر پیشینfrontوکتور<سلول>شبکه جلویی: آنچه پایانه اکنون نشان می‌دهد. طول و چیدمانش همانند سلول‌ها است. ویجت‌ها هرگز در آن نمی‌نویسند؛ فقط ثبت قاب() آن را جلو می‌برد.
محدوده برشclipمستطیلنوشتن بیرون از این مستطیل دور ریخته می‌شود. بافر جدید آن را برابر کل شبکه قرار می‌دهد؛ صفحه هنگام رسم هر ویجت، آن را به محدوده همان ویجت تنگ می‌کند.
در تمرکزfocusedمنطقی = نادرستزمینه رسم: در مدتی که صفحه ویجت دارای تمرکز را رسم می‌کند true است تا ویجت بتواند نشانگر تمرکز رسم کند. بیرون از رسمی که صفحه انجام می‌دهد همیشه false است.
سطح رنگtierسطح‌رنگزمینه رسم: توانایی رنگی پایانه‌ای که این بافر برای آن رسم می‌شود. بافر هنگام تولید فریم، ظاهر هر خانه را به این سطح کاهش می‌دهد؛ ویجت‌ها و ترسیم کادر فقط ظاهرها را ذخیره می‌کنند. صفحه.آغاز() آن را یک بار برابر تشخیص سطح‌رنگ() قرار می‌دهد؛ بافری که دستی ساخته شود رنگ حقیقی را نگه می‌دارد، پس رسم بدون پایانه (headless) هر چه محیط بگوید رنگ حقیقی می‌ماند. تغییر اندازه() آن را حفظ می‌کند.
نویسه‌هاglyphsسیاست‌نویسه‌هازمینه رسم: سیاست نویسه‌ای که نویسه‌های ساختاری از آن پیروی می‌کنند. ترسیم کادر آن را می‌خواند. صفحه آن را در هر رونوشت فریم مقداردهی می‌کند؛ بافری که دستی ساخته شود یونیکد را نگه می‌دارد. تغییر اندازه() آن را حفظ می‌کند.
اجبار بازترسیم کاملforce_fullمنطقی = درستوقتی true است که اختلاف() بعدی باید به‌جای فقط خانه‌های تغییرکرده، کل فریم را سریال‌سازی کند. بافر جدید و تغییر اندازه آن را تنظیم می‌کنند؛ ثبت قاب() پس از آنکه شبکه جلویی با شبکه پشتی هماهنگ شد آن را پاک می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

محدوده Area

تابع محدوده(): مستطیل

محدوده area

تابع محدوده(): مستطیل
مستطیلی که کل شبکه را می‌پوشاند: (0, 0, عرض, ارتفاع).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

تنظیم Set

تابع تنظیم(x: صحیح، y: صحیح، cell: سلول)

تنظیم set

تابع تنظیم(x: صحیح، y: صحیح، cell: سلول)
یک خانه را می‌نویسد. وقتی (x, y) بیرون از شبکه یا بیرون از محدوده برش باشد کاری نمی‌کند. ch غیرخالی که پهنای آن یک خانه نباشد خالی می‌شود؛ "" فقط پس از یک نویسه پهن پذیرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

دریافت Get

تابع دریافت(x: صحیح، y: صحیح): سلول

دریافت get

تابع دریافت(x: صحیح، y: صحیح): سلول
یک خانه را می‌خواند. وقتی (x, y) بیرون از شبکه باشد یک سلول پیش‌فرض خالی برمی‌گرداند. خواندن محدوده برش را نادیده می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نوشتن متن PutStr

تابع نوشتن متن(x: صحیح، y: صحیح، text: رشته، style: ظاهر)

نوشتن متن put_str

تابع نوشتن متن(x: صحیح، y: صحیح، text: رشته، style: ظاهر)
متن را از چپ به راست می‌نویسد و به ازای هر کدپوینت باریک یک ستون و به ازای هر کدپوینت پهن دو ستون جلو می‌رود. نویسه پهنی که هر دو ستونش درون شبکه و محدوده برش جا نشود، یک خانه خالی می‌نویسد. کدپوینت‌های بی‌پهنا دور ریخته می‌شوند. متن در محدوده برش بریده می‌شود و هرگز به خط بعد نمی‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

پرکردن Fill

تابع پرکردن(r: مستطیل، ch: رشته، style: ظاهر)

پرکردن fill

تابع پرکردن(r: مستطیل، ch: رشته، style: ظاهر)
همه خانه‌های r (پس از برش) را با یک نویسه و ظاهر یکسان پر می‌کند. ch چندخانه‌ای یا بی‌پهنا از طریق تنظیم خالی می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

پاک‌سازی Clear

تابع پاک‌سازی()

پاک‌سازی clear

تابع پاک‌سازی()
همه خانه‌های شبکه را به سلول پیش‌فرض خالی بازنشانی می‌کند و محدوده برش را نادیده می‌گیرد. اختلاف() و ثبت قاب() بعدی همه خانه‌ها را تغییرکرده در نظر می‌گیرند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

متن ردیف RowText

تابع متن ردیف(y: صحیح): رشته

متن ردیف row_text

تابع متن ردیف(y: صحیح): رشته
نویسه‌های ردیف y که بدون ظاهر در یک رشته به هم پیوسته‌اند. خانه‌های ادامه چیزی اضافه نمی‌کنند، پس پهنای نمایشی برابر پهنای بافر است. برای ردیف بیرون از شبکه "" برمی‌گرداند. برای آزمون و اشکال‌زدایی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

تغییر اندازه Resize

تابع تغییر اندازه(width: صحیح، height: صحیح)

تغییر اندازه resize

تابع تغییر اندازه(width: صحیح، height: صحیح)
هر دو شبکه را با شبکه‌های خالی width x height جایگزین می‌کند، محدوده برش را دوباره روی کل آن‌ها قرار می‌دهد و در اختلاف() بعدی بازترسیم کامل را اجبار می‌کند. فقط مالک بافر اصلی می‌تواند این را فراخوانی کند: حافظه قبلی را که رونوشت‌ها در آن شریک بودند آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

خروجی کامل انسی Ansi

تابع خروجی کامل انسی(): رشته

خروجی کامل انسی ansi

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

اختلاف Diff

تابع اختلاف(): رشته

اختلاف diff

تابع اختلاف(): رشته
بایت‌هایی که ارسال به ترمینال() می‌نویسد: تا وقتی اجبار بازترسیم کامل برقرار است کل فریم (نگاه کنید به خروجی کامل انسی)، وگرنه فقط خانه‌هایی که با شبکه جلویی فرق دارند، ردیف به ردیف. پیش از هر رشته بیشینه از خانه‌های تغییرکرده یک جابه‌جایی مکان‌نما می‌آید؛ ظاهرها فقط در جای تغییر عوض می‌شوند و از یک رشته به رشته بعد منتقل می‌شوند؛ خروجی غیرخالی با خاموش کردن آخرین ظاهر پایان می‌یابد. وقتی دو شبکه یکسان باشند "" برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

ثبت قاب Commit

تابع ثبت قاب()

ثبت قاب commit

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

ارسال به ترمینال Flush

تابع ارسال به ترمینال()

ارسال به ترمینال flush

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

آزادسازی Free

تابع آزادسازی()

آزادسازی free

تابع آزادسازی()
هر دو شبکه را آزاد می‌کند. وقتی کارتان با بافر اصلی تمام شد، آن را یک بار روی همان فراخوانی کنید؛ رونوشت‌ها در حافظه شریک‌اند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

ضخامت Weight

جداشمار ضخامت
ضخامت خط یک بخش از کادر. سبک مقدار صفر است؛ سنگین و دوگانه ضخامت‌های دیگر جدول نویسه‌ها را توصیف می‌کنند. نویسه‌های کادر ضخامت بخش‌های افقی و عمودی خود را برای مرحله اتصال‌یابی پس از رسمِ صفحه ثبت می‌کند.
نامانگلیسیگونهتوضیح
سبکLightخط تکی نازک.
سنگینHeavyخط تکی ضخیم.
دوگانهDoubleخط دوتایی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های‌کادر BorderGlyphs

ساختار نویسه‌های‌کادر
نویسه‌های یک حلقه کادر: لبه‌ها، گوشه‌ها، چهار سه‌راهی و چهارراه، به‌علاوه ضخامت بخش‌های افقی و عمودی. هر نویسه یک کدپوینت است. ترسیم کادر با نویسه‌ها لبه‌ها و گوشه‌ها را رسم می‌کند؛ مرحله پس از رسمِ صفحه نویسه‌های اتصال را بر اساس بازوهای رسم‌شده انتخاب می‌کند.
نامانگلیسیگونهتوضیح
افقیhرشته = ""بخش افقی، که روی لبه‌های بالا و پایین رسم می‌شود.
عمودیvرشته = ""بخش عمودی، که روی لبه‌های چپ و راست رسم می‌شود.
گوشه بالا چپtlرشته = ""گوشه بالا چپ.
گوشه بالا راستtrرشته = ""گوشه بالا راست.
گوشه پایین چپblرشته = ""گوشه پایین چپ.
گوشه پایین راستbrرشته = ""گوشه پایین راست.
سه‌راهی پایینt_downرشته = ""سه‌راهی با ساقه رو به پایین.
سه‌راهی بالاt_upرشته = ""سه‌راهی با ساقه رو به بالا.
سه‌راهی راستt_rightرشته = ""سه‌راهی با ساقه رو به راست.
سه‌راهی چپt_leftرشته = ""سه‌راهی با ساقه رو به چپ.
چهارراهcrossرشته = ""اتصال چهارطرفه.
ضخامت افقیhwضخامتضخامت بخش افقی.
ضخامت عمودیvwضخامتضخامت بخش عمودی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

پایاها و متغیرها

بدون ویجت NoWidget

پایا بدون ویجت: صحیح۳۲ = -1
شناسه‌ای به معنای «هیچ ویجتی»: والد ریشه، و حاصل توزیعی که هیچ ویجتی آن را مصرف نکرده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

شناسه ریشه RootId

پایا شناسه ریشه: صحیح۳۲ = 0
شناسه ویجت ریشه در هر درخت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

ظاهر پیش‌فرض StyleDefault

پایا ظاهر پیش‌فرض: tui_Style
ظاهر خانه‌ای که چیزی نمی‌خواهد: هر دو رنگ پیش‌فرض پایانه و هر پنج ویژگی خاموش. مقدار صفر ظاهر و عنصر خنثی ادغام ظاهر است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

بازه پایش به میلی‌ثانیه PollMs

پایا بازه پایش به میلی‌ثانیه: صحیح۳۲ = 20
حداکثر فاصله بیدار شدن رشته ورودی وقتی کلیدی نمی‌رسد، به میلی‌ثانیه. تأخیر توقف() و در Windows تأخیر تشخیص تغییر اندازه را محدود می‌کند (در POSIX تغییر اندازه به صورت SIGWINCH می‌رسد).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

ظرفیت رویداد EventCapacity

پایا ظرفیت رویداد: صحیح۳۲ = 256
تعداد رویدادهایی که کانال پیش از منتظر ماندن رشته ورودی در بافر نگه می‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

جهت‌ها Dir…

چهار جهتی که نزدیک‌ترین و جابه‌جایی‌های فضایی تمرکز (تمرکز بالا، تمرکز پایین، تمرکز چپ، تمرکز راست) می‌گیرند.
نامانگلیسیمقدار
جهت بالاDirUp0
جهت پایینDirDown1
جهت چپDirLeft2
جهت راستDirRight3

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

بدون رویداد NoEvent

پایا بدون رویداد: صحیح۳۲ = 0
نوع یک رویداد با مقدار صفر که چیزی حمل نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

رویداد کیبورد KeyEvent

پایا رویداد کیبورد: صحیح۳۲ = 1
نوع فشردن یک کلید. فیلد کلید کلید رمزگشایی‌شده را نگه می‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

رویداد ماوس MouseEvent

پایا رویداد ماوس: صحیح۳۲ = 2
نوع یک گزارش ماوس. فیلد ماوس گزارش رمزگشایی‌شده را نگه می‌دارد و کلید توالی escape خامی را که گزارش از آن آمده نگه می‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

رویداد تغییر اندازه ResizeEvent

پایا رویداد تغییر اندازه: صحیح۳۲ = 3
نوع تغییر اندازه پایانه. عرض و ارتفاع اندازه جدید را بر حسب خانه نگه می‌دارند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

رویداد تیک TickEvent

پایا رویداد تیک: صحیح۳۲ = 4
نوع تیک زمان‌سنج دوره‌ای، برای پویانمایی و کارهای پس‌زمینه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

مشکی Black

پایا مشکی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 0 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

قرمز Red

پایا قرمز: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 1 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

سبز Green

پایا سبز: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 2 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

زرد Yellow

پایا زرد: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 3 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

آبی Blue

پایا آبی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 4 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

ارغوانی Magenta

پایا ارغوانی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 5 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

فیروزه‌ای Cyan

پایا فیروزه‌ای: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 6 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

سفید White

پایا سفید: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 7 در پالت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

مشکی روشن BrightBlack

پایا مشکی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 8 در پالت، گونه روشن مشکی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

قرمز روشن BrightRed

پایا قرمز روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 9 در پالت، گونه روشن قرمز.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

سبز روشن BrightGreen

پایا سبز روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 10 در پالت، گونه روشن سبز.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

زرد روشن BrightYellow

پایا زرد روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 11 در پالت، گونه روشن زرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

آبی روشن BrightBlue

پایا آبی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 12 در پالت، گونه روشن آبی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

ارغوانی روشن BrightMagenta

پایا ارغوانی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 13 در پالت، گونه روشن ارغوانی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

فیروزه‌ای روشن BrightCyan

پایا فیروزه‌ای روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 14 در پالت، گونه روشن فیروزه‌ای.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

سفید روشن BrightWhite

پایا سفید روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>
نمایه 15 در پالت، گونه روشن سفید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

تابع‌ها

درخت جدید NewTree

تابع درخت جدید(root: dyn ویجت): درخت
درختی می‌سازد که ریشه آن (شناسه 0) برابر root است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam

شکستن خطوط متن WrapText

تابع شکستن خطوط متن(text: رشته، width: صحیح): وکتور<رشته>
متن را به خط‌های نمایشی با حداکثر width خانه، از بالا به پایین، تقسیم می‌کند. یک "\n" صریح بند تازه‌ای آغاز می‌کند و هر بند جداگانه شکسته می‌شود؛ فاصله در محل شکست حذف می‌شود. واژه‌ای که از width بلندتر باشد روی شبکه نویسه‌ها بریده می‌شود. یک نویسه دوخانه‌ای می‌تواند از عرض 1 بیشتر شود. width <= 0 یعنی بی‌کران، پس هر بند بدون شکست بازگردانده می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

اندازه‌گیری متن MeasureText

تابع اندازه‌گیری متن(text: رشته، max_width: صحیح): مستطیل
اندازه ترجیحی متن شکسته‌شده در max_width، به شکل یک مستطیل در (0, 0): عرض، بلندترین خط شکسته‌شده بر حسب خانه است و ارتفاع، تعداد خط‌های شکسته‌شده. max_width <= 0 یعنی بی‌کران، پس عرض، بلندترین خط صریح و ارتفاع، تعداد خط‌های صریح است. عرض‌ها بر حسب خانه‌های نمایشی شمرده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

متن جدید NewText

تابع متن جدید(content: رشته): متن
یک ویجت متن با محتوای داده‌شده می‌سازد: با تراز چپ، بدون ظاهر و با شکست خط بر پایه واژه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

جدول جدید NewTable

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

نمای جدول جدید NewTableView

تابع نمای جدول جدید(): نمای‌جدول
یک نمای‌جدول خالی می‌سازد: پیش‌فرض‌های جدول، جابه‌جایی 0، انتخاب‌شده 0 و یک فعال‌سازی که نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-table.salam

ضخامت کادر BorderInset

تابع ضخامت کادر(b: سبک‌کادر): صحیح
تعداد خانه‌هایی که کادری از این نوع در هر طرف به کار می‌برد: 0 برای بدون کادر و 1 برای هر نوع دیگر. ظرف ناحیه محتوای خود را به همین اندازه کوچک می‌کند تا ناحیه‌ای را که فرزندانش در آن رسم می‌کنند به دست آورد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

ادغام ظاهر StyleMerge

تابع ادغام ظاهر(parent: ظاهر، child: ظاهر): ظاهر
ظاهری که فرزند زیر یک والد به آن می‌رسد، با وصله نگهبانی: رنگ فرزند به کار می‌رود مگر آنکه Color.Default باشد (آنگاه رنگ والد به ارث می‌رسد) و هر ویژگی OR دو مقدار است. پس ادغام ظاهر(ظاهر پیش‌فرض, s) و ادغام ظاهر(s, ظاهر پیش‌فرض) هر دو برابر s هستند و حاصل ادغام در ظاهر پیش‌فرض یک ظاهر کاملا نهایی‌شده است. خالص: مقدار تازه‌ای برمی‌گرداند و هرگز ورودی‌هایش را تغییر نمی‌دهد. فرزند می‌تواند ویژگی بیفزاید یا رنگی را بازنویسی کند، اما نمی‌تواند ویژگی به ارث رسیده را حذف کند (false در فرزند از تنظیم‌نشده قابل تشخیص نیست) یا زیر والد رنگی، رنگ پیش‌فرض پایانه را تحمیل کند (Default در فرزند یعنی ارث‌بری). سقف: تفریق وجود ندارد. مسیر ارتقا اگر روزی حذف لازم شد: یک StylePatch جداگانه با فیلدهای Option که به یک ظاهر تبدیل شود و ظاهر، خانه‌ها و برابری را دست‌نخورده بگذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

برابری ظاهر StyleEq

تابع برابری ظاهر(a: ظاهر، b: ظاهر): منطقی
وقتی دو ظاهر فیلد به فیلد، روی هفت فیلد ذخیره‌شده، برابر باشند true است: رنگ‌ها بر اساس نوع و محتوا و ویژگی‌ها مستقیم. به سطح‌رنگ نیازی ندارد. قرارداد با تولید خروجی: ظاهرهای برابر در هر سطحی بایت‌های یکسان تولید می‌کنند (صحیح)، اما ظاهرهای نابرابر ممکن است در سطح خاموش، که همه رنگ‌ها حذف می‌شوند، بایت‌های یکسان تولید کنند (کامل نیست). بنابراین به سمت «متفاوت» خطا می‌کند تا خانه‌ای هرگز به اشتباه رد نشود؛ تغییر سطح همه خانه‌ها را نامعتبر می‌کند، چون برابری سطح را نادیده می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

دنباله فعال‌سازی ظاهر StyleSgr

تابع دنباله فعال‌سازی ظاهر(style: ظاهر، tier: سطح‌رنگ): رشته
دنباله SGR که پایانه را از حالت پیش‌فرض به style در سطح tier می‌برد: اول ویژگی‌ها به ترتیب ثابت پررنگ، کم‌رنگ، کج، زیرخط، معکوس، سپس پیش‌زمینه و بعد پس‌زمینه. ویژگی‌ها سطح را نادیده می‌گیرند (NO_COLOR یعنی بدون رنگ، نه بدون پررنگی)؛ هر رنگ ابتدا به سطح کاهش می‌یابد و رنگی که پس از کاهش Default باشد رد می‌شود. وقتی چیزی تنظیم نشده "" برمی‌گرداند و هرگز reset تولید نمی‌کند: هر دنباله با سازنده‌های پایانه و رمزگذارهای color.salam ساخته می‌شود و هیچ‌کدام دستی نوشته نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

دنباله غیرفعال‌سازی ظاهر StyleSgrOff

تابع دنباله غیرفعال‌سازی ظاهر(style: ظاهر، tier: سطح‌رنگ): رشته
قرینه دنباله فعال‌سازی ظاهر: دنباله SGR که پایانه را از style به حالت پیش‌فرض در سطح tier برمی‌گرداند، به ترتیب ثابت: یک 22 اگر پررنگ یا کم‌رنگ تنظیم باشد (22 هر دو را با هم پاک می‌کند)، سپس 23 اگر کج، سپس 24 اگر زیرخط، سپس 27 اگر معکوس، سپس 39 اگر پیش‌زمینه پس از کاهش غیرپیش‌فرض باشد، سپس 49 اگر پس‌زمینه چنین باشد. وقتی چیزی تنظیم نشده "" برمی‌گرداند و هرگز reset تولید نمی‌کند؛ کدها با term.Sgr ساخته می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

شمار ساخت اس‌جی‌آر SgrBuilds

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

جداکننده جدید NewSeparator

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

صفحه جدید NewScreen

تابع صفحه جدید(root: dyn ویجت، width: صحیح، height: صحیح): صفحه
صفحه‌ای به اندازه width x height خانه می‌سازد که root ویجت ریشه آن است (شناسه 0، به اندازه کل صفحه). تا آغاز() هیچ چیز به پایانه دست نمی‌زند، و آغاز() اندازه صفحه را به اندازه واقعی پایانه تغییر می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam

صفحه ترمینال جدید NewTerminalScreen

تابع صفحه ترمینال جدید(root: dyn ویجت): صفحه
صفحه‌ای به اندازه پایانه فعلی می‌سازد (پایانه.اندازه()).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam

نوار پیشرفت جدید NewProgress

تابع نوار پیشرفت جدید(): نوار‌پیشرفت
یک نوار‌پیشرفت در 0% با بیشینه 100 و ظاهرهای پیش‌فرض می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-text.salam

مودال جدید NewModal

تابع مودال جدید(): مودال
یک مودال پنهان می‌سازد: Percent(50, 40)، بدون عنوان و بدون فرزند. نگه‌دارنده وضعیتش همین‌جا ساخته می‌شود، پس همه رونوشت‌هایی که بعدا ساخته شوند در آن شریک‌اند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam

فهرست جدید NewList

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

فاصله‌های چهارگانه جدید NewInsets

تابع فاصله‌های چهارگانه جدید(top: صحیح، right: صحیح، bottom: صحیح، left: صحیح): فاصله‌های‌چهارگانه
یک فاصله‌های چهارگانه از چهار ضلع به ترتیب بالا، راست، پایین، چپ می‌سازد و هر مقدار منفی را به 0 محدود می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

فاصله‌های چهارگانه یکسان UniformInsets

تابع فاصله‌های چهارگانه یکسان(v: صحیح): فاصله‌های‌چهارگانه
یک فاصله‌های چهارگانه با مقدار یکسان روی هر چهار ضلع می‌سازد، محدودشده به 0.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

جاسازی مستطیل FitRect

تابع جاسازی مستطیل(r: مستطیل، box: مستطیل): مستطیل
خانه‌های مشترک r و box (R2). وقتی تقاطع نداشته باشند، یک مستطیل 0x0 در نزدیک‌ترین نقطه box به r: نتیجه هرگز به شکل منفی تهی نیست، پس مستطیلی که از این تابع خارج می‌شود یا غیرتهی است یا دقیقا 0x0.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

کاستن از لبه‌های مستطیل InsetRect

تابع کاستن از لبه‌های مستطیل(r: مستطیل، i: فاصله‌های‌چهارگانه): مستطیل
r را به اندازه i از لبه‌ها کوچک می‌کند، سپس نتیجه را درون r برش می‌دهد (R3, R4). هر ضلع ابتدا به 0 محدود می‌شود، پس فاصله درونی یا حاشیه بیرونی منفی چیزی اضافه نمی‌کند. فاصله درونی بزرگ‌تر از r جعبه محتوای تهی لنگرشده درون r می‌دهد؛ مستطیل بازگشتی هرگز منفی نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

تقسیم محور اصلی SplitMain

تابع تقسیم محور اصلی(length: صحیح، sizes: وکتور<قاعده‌اندازه‌گذاری>، gap: صحیح): وکتور<صحیح>
طول length خانه را در امتداد محور اصلی، به ترتیب، میان اندازه‌ها تقسیم می‌کند (R5). ثابت به اندازه max(0, تعداد سلول) خانه می‌گیرد و وزن را نادیده می‌گیرد. gap تعداد خانه‌های میان دو جایگاه مجاور است. فاصله منفی به 0 محدود می‌شود. سهم فاصله‌ها gap * max(0, k - 1) است که در آن k تعداد جایگاه‌ها، با احتساب جایگاه‌های با اندازه صفر، است؛ اگر k <= 1 باشد چیزی کسر نمی‌شود. پرکردن فضا و ترجیحی باقی‌مانده R = max(0, length - مجموع آن اندازه‌های ثابت - سهم فاصله‌ها) را میان خود تقسیم می‌کنند. Arrange پیش از این فراخوانی، ترجیحی اندازه‌گیری‌شده را به ثابت و ترجیحی اندازه‌گیری‌نشدنی را به پرکردن فضا با وزن 1 تبدیل می‌کند. این تابع اندازه‌گیری نمی‌کند؛ اگر ترجیحی هنوز در بردار مانده باشد، در مخزن وزنی می‌ماند. وزن هر عضو مخزن max(0, وزن) است. سهم هر عضو floor(R * وزن / مجموع وزن‌ها) است، سپس هر خانه باقی‌مانده، یکی یکی، به اعضایی از مخزن داده می‌شود که بزرگ‌ترین مقدار (R * وزن) mod مجموع وزن‌ها را دارند. در حالت تساوی، جایگاه زودتر مخزن برنده است. اگر مجموع وزن‌ها 0 باشد، سهم همه اعضای مخزن 0 می‌شود، R بدون استفاده می‌ماند و تقسیمی انجام نمی‌شود. سرریز ثابت یا سهم فاصله‌ای که کل طول را مصرف کند R را 0 می‌کند، پس همه اعضای مخزن 0 می‌شوند و ثابت کوچک نمی‌شود. فاصله جزو اندازه‌های بازگشتی نیست و بازگردانده نمی‌شود. بردار به ازای هر ورودی یک عضو دارد. وزن 1 برای همه اعضای مخزن یعنی تقسیم مساوی، با باقی‌مانده برای اعضای زودتر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

اندازه‌های بخش‌های شبکه TrackSizes

تابع اندازه‌های بخش‌های شبکه(total: صحیح، n: صحیح): وکتور<صحیح>
طول کل را میان n بخش (track) شبکه تقسیم می‌کند (R9). فرض می‌کند total >= 0 (طول محتوا هرگز منفی نیست؛ با total منفی، تقسیم به سمت صفر گرد می‌شود و ادعای جمع دقیق که در ادامه آمده برقرار نیست). بخش k برابر floor(total/n) است، به‌علاوه یک برای هر یک از total mod n بخش نخست، پس مجموع بخش‌ها دقیقا برابر total است. n غیرمثبت یک بردار خالی می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

اندازه در محور PlaceAxisSize

تابع اندازه در محور(avail: صحیح، align: تراز‌عرضی، natural: صحیح): صحیح
طولی که یک فرزند در یک محور می‌گیرد (R7). کشیده یا avail غیرمثبت، max(0, avail) را می‌دهد؛ در غیر این صورت اندازه طبیعی که به بازه [0, avail] محدود شده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

جابه‌جایی در محور PlaceAxisOffset

تابع جابه‌جایی در محور(avail: صحیح، align: تراز‌عرضی، natural: صحیح): صحیح
فاصله یک فرزند از ابتدای جعبه در یک محور (R7). کشیده یا avail غیرمثبت، 0 را می‌دهد؛ در غیر این صورت اندازه طبیعی به بازه [0, avail] محدود می‌شود و فضای آزاد بر اساس تراز تقسیم می‌شود: آغاز برابر 0، مرکز برابر floor(free/2) با خانه فرد در انتها، پایان برابر free.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

ردیف جدید NewRow

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

ستون جدید NewColumn

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

شبکه جدید NewGrid

تابع شبکه جدید(rows: صحیح، cols: صحیح): شبکه
یک شبکه خالی با rows x cols خانه و بدون فاصله درونی می‌سازد. اگر تعداد غیرمثبت باشد، هیچ فرزندی خانه‌ای نمی‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

پشته جدید NewStack

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam

نگاشت کلید جدید NewKeymap

تابع نگاشت کلید جدید(): نگاشت‌کلید
یک نگاشت‌کلید خالی می‌سازد. کلیدها را با نگاشت‌کلید.پیوند کلید و گونه‌های bind_* به آن بدهید و با نگاشت‌کلید.آزادسازی آزادش کنید. گره ریشه در نخستین نگاشت‌کلید.پیوند کلید ساخته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

نگاشت کلید پیش‌فرض NewDefaultKeymap

تابع نگاشت کلید پیش‌فرض(): نگاشت‌کلید
یک نگاشت‌کلید اختیاری با پیوندهای تمرکز پیش‌فرض کتابخانه می‌سازد، دقیقا پنج سطر: Tab تمرکز را به ویجت بعدی می‌برد و Up، Down، Left و Right آن را در همان جهت‌ها جابه‌جا می‌کنند. هیچ چیز این نگاشت را خودبه‌خود نصب نمی‌کند؛ برای استفاده، آن را به تنظیم نگاشت‌کلید بدهید (یا از طریق فیلد نگاشت‌کلید صفحه پیوند دهید). Shift+Tab عمدا پیوند داده نشده است: سلام دنباله backtab را به KeyUnknown رمزگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

نگاشت کلید ویم NewVimKeymap

تابع نگاشت کلید ویم(on_search: تابع(صفحه*، رویداد): منطقی): نگاشت‌کلید
یک پیش‌تنظیم اختیاری به سبک vim می‌سازد. ابرمجموعه نگاشت‌کلید پیش‌فرض است، پس Tab و چهار کلید جهت‌نما همچنان کار می‌کنند، و h، j، k و l را برای همان چهار جهت می‌افزاید؛ "gg" و "G" با حرکت‌های جهتی پیاپی به بالا و پایین ستون ویجت دارای تمرکز می‌روند، پس ستون حفظ می‌شود؛ Esc یک مورد از پشته تمرکز برمی‌دارد، اما فقط تا وقتی تمرکزی که push شده باقی باشد، و در ریشه مصرف‌نشده گزارش می‌شود تا برنامه همچنان آن را ببیند؛ و "/" کنش on_search را اجرا می‌کند که کنش خود برنامه است و مقدار بولی آن نتیجه توزیع است. Enter و Space عمدا پیوند داده نشده‌اند: توزیع هر کلید را اول به ویجت دارای تمرکز عرضه می‌کند، جایی که دکمه، کادر‌انتخاب، فهرست و مودال از پیش به آن‌ها واکنش نشان می‌دهند، و ویجت فعال‌سازی عمومی برای پیوند دادن ندارد. کادر‌متن دارای تمرکز "/" را پیش از آنکه نگاشت‌کلید آن را ببیند مصرف می‌کند. نگاشت را با تنظیم نگاشت‌کلید نصب کنید که مالکیت آن را می‌گیرد: پس از آن هرگز رونوشتش نکنید یا آزادش نکنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-events.salam

کادر متن جدید NewInput

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

نزدیک‌ترین Nearest

تابع نزدیک‌ترین(from: مستطیل، candidates: وکتور<مستطیل>، dir: صحیح): صحیح
نزدیک‌ترین نامزد به from را در جهت dir (جهت بالا، جهت پایین، جهت چپ، جهت راست) پیدا می‌کند و نمایه آن را در candidates برمی‌گرداند، یا اگر هیچ نامزدی واجد شرایط نباشد -1 برمی‌گرداند. قواعد در توضیحات بدنه تابع شرح داده شده‌اند. O(n): هر نامزد یک بار بررسی می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam

دنباله رنگ پیش‌زمینه FgSeq

تابع دنباله رنگ پیش‌زمینه(c: رنگ): رشته
دنباله SGR پیش‌زمینه برای یک رنگ، با دقت کامل: دقیقا همان دنباله گریزی که گونه رنگ به آن رمزگذاری می‌شود، بدون کاهش سطح. Default برابر SGR 39 است؛ Ansi 0-7 برابر 30+n و Ansi 8-15 برابر 90+(n-8) است؛ Indexed برابر 38;5;n و Rgb برابر 38;2;r;g;b است. با سازنده‌های دنباله پایانه ساخته می‌شود: هیچ دنباله گریزی دستی نوشته نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

دنباله رنگ پس‌زمینه BgSeq

تابع دنباله رنگ پس‌زمینه(c: رنگ): رشته
دنباله SGR پس‌زمینه برای یک رنگ، با دقت کامل: دقیقا همان دنباله گریزی که گونه رنگ به آن رمزگذاری می‌شود، بدون کاهش سطح. Default برابر SGR 49 است؛ Ansi 0-7 برابر 40+n و Ansi 8-15 برابر 100+(n-8) است؛ Indexed برابر 48;5;n و Rgb برابر 48;2;r;g;b است. با سازنده‌های دنباله پایانه ساخته می‌شود: هیچ دنباله گریزی دستی نوشته نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

تشخیص سطح رنگ DetectTier

تابع تشخیص سطح رنگ(): سطح‌رنگ
سطح‌رنگی که محیط اعلام می‌کند، فقط از روی NO_COLOR، TERM، COLORTERM و CLICOLOR_FORCE: بدون کاوش tty و بدون ذخیره‌سازی، پس خالص است و بدون پایانه آزمون‌پذیر است. اولین تطابق برنده است: NO_COLOR تنظیم‌شده و غیرخالی -> خاموش؛ TERM == "dumb" مگر اینکه CLICOLOR_FORCE مقداری غیرخالی و غیر از "0" داشته باشد -> خاموش؛ COLORTERM == "truecolor" یا "24bit" -> رنگ حقیقی؛ TERM شامل "256color" یا هر COLORTERM غیرخالی دیگر -> نمایه‌ای۲۵۶؛ در غیر این صورت انسی۱۶. NO_COLOR بر CLICOLOR_FORCE مقدم است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

کاهش سطح رنگ Lower

تابع کاهش سطح رنگ(c: رنگ، tier: سطح‌رنگ): رنگ
همان رنگ در سطحی پایین‌تر: کاهش سطح در زمان انتشار. خاموش هر رنگ را Default می‌کند؛ رنگ حقیقی بدون تغییر است؛ نمایه‌ای۲۵۶ فقط Rgb را به نزدیک‌ترین نمایه 256 کاهش می‌دهد؛ انسی۱۶ Rgb و Indexed 16-255 را به نزدیک‌ترین رنگ از 16 رنگ ANSI کاهش می‌دهد (Rgb را مستقیم، هرگز از راه Indexed) و Default و Ansi را دست‌نخورده می‌گذارد. خالص: مقدار تازه‌ای برمی‌گرداند و هرگز ورودی خود را تغییر نمی‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

دنباله پیش‌زمینه در سطح FgSeqAt

تابع دنباله پیش‌زمینه در سطح(c: رنگ، tier: سطح‌رنگ): رشته
دنباله SGR پیش‌زمینه برای یک رنگ پس از کاهش آن به tier: دنباله رنگ پیش‌زمینه از کاهش سطح‌رنگ(c, tier)، پس دنباله گریز منتشرشده با سطح هم‌خوان است و هیچ دنباله‌ای دستی نوشته نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

دنباله پس‌زمینه در سطح BgSeqAt

تابع دنباله پس‌زمینه در سطح(c: رنگ، tier: سطح‌رنگ): رشته
دنباله SGR پس‌زمینه برای یک رنگ پس از کاهش آن به tier: دنباله رنگ پس‌زمینه از کاهش سطح‌رنگ(c, tier)، پس دنباله گریز منتشرشده با سطح هم‌خوان است و هیچ دنباله‌ای دستی نوشته نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-style.salam

کادر انتخاب جدید NewCheckbox

تابع کادر انتخاب جدید(label: رشته، checked: منطقی): کادر‌انتخاب
یک کادر‌انتخاب با برچسب و وضعیت انتخاب اولیه داده‌شده می‌سازد، فعال، با ظاهرهای پیش‌فرض و کادر‌انتخاب.هنگام تغییر انتخاب بی‌اثر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

دکمه جدید NewButton

تابع دکمه جدید(label: رشته): دکمه
یک دکمه فعال با برچسب داده‌شده، ظاهرهای پیش‌فرض و یک هنگام کلیک بی‌اثر می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam

تشخیص سیاست نویسه‌ها DetectGlyphPolicy

تابع تشخیص سیاست نویسه‌ها(): سیاست‌نویسه‌ها
سیاست نویسه‌ای که محیط اعلام می‌کند. خالص و بدون کش؛ تنها خواننده محیط برای نویسه‌ها که صفحه.آغاز یک بار آن را فراخوانی می‌کند. نخستین تطابق برنده است: SALAM_TUI_GLYPHS "ascii" -> اسکی، "unicode" -> یونیکد؛ TERM == "dumb" -> اسکی؛ نخستین مقدار غیرخالی از LC_ALL، LC_CTYPE و LANG تصمیم می‌گیرد: غیر UTF-8 -> اسکی، UTF-8 -> یونیکد؛ در غیر این صورت یونیکد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

بافر جدید NewBuffer

تابع بافر جدید(width: صحیح، height: صحیح): بافر
بافری خالی به اندازه width x height می‌سازد که محدوده برش آن کل شبکه را می‌پوشاند و بافر.اختلاف() بعدی آن یک فریم کامل است. اندازه منفی صفر در نظر گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های تک خط GlyphsSingle

تابع نویسه‌های تک خط(): نویسه‌های‌کادر
خطوط نازک با گوشه‌های چهارگوش؛ همان چیزی که سبک‌کادر.تک خط رسم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های دو خط GlyphsDouble

تابع نویسه‌های دو خط(): نویسه‌های‌کادر
خطوط دوتایی؛ همان چیزی که سبک‌کادر.دو خط رسم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های گرد GlyphsRounded

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های اسکی GlyphsASCII

تابع نویسه‌های اسکی(): نویسه‌های‌کادر
ASCII ساده: - و | برای بخش‌ها و + برای همه گوشه‌ها و اتصال‌ها. زیر سیاست نویسه‌ها.اسکی برای همه کادرها به کار می‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های سنگین GlyphsHeavy

تابع نویسه‌های سنگین(): نویسه‌های‌کادر
خطوط ضخیم با گوشه‌های ضخیم.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌های ترکیبی GlyphsMixed

تابع نویسه‌های ترکیبی(): نویسه‌های‌کادر
بخش‌های افقی ضخیم و بخش‌های عمودی نازک، با گوشه‌های ترکیبی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

نویسه‌ها برای GlyphsFor

تابع نویسه‌ها برای(border: سبک‌کادر، policy: سیاست‌نویسه‌ها): نویسه‌های‌کادر
مجموعه نویسه برای border زیر policy. سبک‌کادر.بدون کادر مقدار صفر (بدون نویسه) را می‌دهد. زیر سیاست نویسه‌ها.اسکی هر سبک دیگری نویسه‌های اسکی را می‌دهد؛ در غیر این صورت تک خط، دو خط و گوشه‌گرد به ترتیب نویسه‌های تک خط، نویسه‌های دو خط و نویسه‌های گرد را می‌دهند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

ترسیم کادر DrawBorder

تابع ترسیم کادر(buf: بافر، rect: مستطیل، border: سبک‌کادر، style: ظاهر، title: رشته)
حلقه‌ای یک‌خانه‌ای از border را دور rect در buf رسم می‌کند، همه خانه‌ها با یک رنگ پیش‌زمینه که از style.fg گرفته می‌شود. قواعد: - سبک‌کادر.بدون کادر یا مستطیل بدون مساحت چیزی نمی‌نویسد. - مستطیل یک‌ردیفی یک خط افقی و مستطیل یک‌ستونی یک خط عمودی است؛ هیچ‌کدام گوشه یا عنوان ندارند. - در غیر این صورت ابتدا چهار گوشه، سپس لبه‌های افقی و بعد لبه‌های عمودی رسم می‌شوند. لبه‌ها دقیقا میان گوشه‌ها قرار می‌گیرند. - title روی لبه بالا از rect.x + 2 آغاز می‌شود، با یک فاصله پیش و پس از آن. فاصله‌های دو سرش حذف می‌شود؛ عنوان خالی چیزی رسم نمی‌کند؛ از سمت راست به rect.width - 5 خانه نمایشی بریده می‌شود و دست‌کم به پهنای 6 نیاز دارد. - فقط رنگ پیش‌زمینه به کار می‌رود. ویژگی‌های style نادیده گرفته می‌شوند و رنگ پیش‌زمینه Color.Default یک ظاهر خالی (پیش‌فرض پایانه) می‌نویسد. نوشتن‌ها از طریق بافر.تنظیم انجام می‌شود که به شبکه و ناحیه برش محدود است، پس مستطیلی که بخشی از آن بیرون از بافر باشد فقط بخش درونی‌اش را رسم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam

ترسیم کادر با نویسه‌ها DrawBorderGlyphs

تابع ترسیم کادر با نویسه‌ها(buf: بافر، rect: مستطیل، glyphs: نویسه‌های‌کادر، style: ظاهر، title: رشته)
حلقه‌ای یک‌خانه‌ای از glyphs را دور rect در buf رسم می‌کند، با همه قواعد ترسیم کادر (مستطیل‌های تباهیده، عنوان، یک رنگ پیش‌زمینه). برای مجموعه نویسه سفارشی یا غیرپیش‌فرض از آن استفاده کنید. وقتی buf.glyphs برابر سیاست نویسه‌ها.اسکی باشد، مجموعه با نویسه‌های اسکی جایگزین می‌شود، پس مجموعه سفارشی زیر این سیاست هرگز نویسه غیر ASCII تولید نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam