AppCUI-rs

AppCUI-rs یک کتابخانه سریع و چندسکویی Rust برای ساخت رابطهای کاربری متنی مدرن (TUI) با ابزارکهای غنی، پوستهها و پشتیبانی کامل از یونیکد است—جایگزینی برای ncurses و سایر چارچوبهای رابط کاربری ترمینال.
✨ ویژگیها
- [x] کنترلهای متعدد آماده (دکمهها، برچسبها، جعبههای متن، جعبههای انتخاب، دکمههای رادیویی، نمای لیست، نمای درختی، جعبههای ترکیبی، انتخابگر تاریخ/زمان، انتخابگر رنگ، تبها، آکوردئونها و غیره). لیست کامل کنترلها را میتوانید اینجا ببینید.
- [x] سیستم چیدمان قدرتمند که امکان موقعیتدهی کنترلها با مختصات مطلق، نسبی، اتصال، تراز، لنگر یا موقعیتیابی محور را فراهم میکند (اطلاعات بیشتر اینجا)
- [x] منوها و نوار ابزارها
- [x] پشتیبانی چندسکویی (ویندوز از طریق API و ترمینال مجازی، لینوکس از طریق ncurses، مکاواس از طریق termios)
- [x] پشتیبانی از چندرشتهای برای انجام کارهای پسزمینه
- [x] تایمرها
- [x] پشتیبانی از ماوس
- [x] پشتیبانی از کلیپبورد
- [x] پوستههای رنگی
- [x] پشتیبانی از کاراکترهای یونیکد
- [x] دیالوگهای از پیش تعریف شده (جعبه پیام، جعبه ورودی، انتخابگر رنگ، دیالوگهای ذخیره و باز کردن، مرورگر پوشه و غیره)
- [x] پشتیبانی از رنگهای واقعی (۲۴ بیت در هر پیکسل) برای ترمینالهایی که از آن پشتیبانی میکنند.
📸 اسکرینشاتها

👉 برای مشاهده دموهای کامل همه کنترلها، به گالری مراجعه کنید!
🖥️ بکاندها
AppCUI از بکاندهای مختلف بر اساس سیستمعاملی که روی آن اجرا میشود پشتیبانی میکند:
- کنسول ویندوز - مبتنی بر API سطح پایین Win32، طراحی شده برای کنسول کلاسیک ویندوز
- ویتی ویندوز - مبتنی بر توالیهای ANSI، طراحی شده برای ترمینالهای مجازی مدرن ویندوز
- انکِرسِز - مبتنی بر API انکِرسِز برای محیطهای لینوکس
- ترمیوس - مبتنی بر توالیهای ANSI و APIهای سطح پایین برای مکاواسایکس
- وب ترمینال - طراحی شده برای پیادهسازی وب (مبتنی بر webgl)
- کراسترم - مبتنی بر crate به نام crossterm
، اما از طریق فلگ ویژگی فعال میشود
🚀 شروع سریع
موارد زیر را به فایل Cargo.toml خود اضافه کنید:
toml
[dependencies]
appcui = "*"
سپس یک پروژه جدید Rust ایجاد کنید و کد زیر را اضافه نمایید:rust
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = Window::new( "Test", LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(), window::Flags::Sizeable, ); win.add(Label::new( "Hello World !", LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(), )); app.add_window(win); app.run(); Ok(()) }
یا یک نسخه فشردهتر با استفاده از proc-macros:rs
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = window!("Test,a:c,w:30,h:9"); win.add(label!("'Hello World !',a:c,w:13,h:1")); app.add_window(win); app.run(); Ok(()) }
rust use appcui::prelude::*;سپس پروژه را با دستورcargo runاجرا کنید. باید یک پنجره با عنوانTestو متنHello World !در مرکز آن مشاهده کنید.🧪 مثالها
AppCUI-rs مجموعهای از مثالها را برای شروع کار در اختیار شما قرار میدهد. این مثالها را میتوانید در پوشه examples پیدا کنید، از جمله:
- بازیها مانند دوز، مار، پرندهی فلپی، مینیاب، Ram it، پکمن، شطرنج، چهار اتصال، 2048 یا تتریس
- ابزارها مانند ماشین حساب، نمایشگر CSV، مبدل دما یا تایمر
- انیمیشنها مانند ماتریکس، فراکتالها یا مارپیچ
- کنترلها/ویجتها مانند دکمه، چکباکس، کامبوباکس، انتخابگر تاریخ، لیستویو، تریویو و بسیاری دیگر.
- دیالوگها مانند اعلان یا ورودی
🛠️ یک مثال پیچیدهتر
یک مثال که پنجرهای با یک دکمه ایجاد میکند که با هر بار فشردن، شمارنده را افزایش میدهد.
// Create a window that handles button events and has a counter #[Window(events = ButtonEvents)] struct CounterWindow { counter: i32 }
impl CounterWindow { fn new() -> Self { let mut w = Self { // set up the window title and position base: window!("'Counter window',a:c,w:30,h:5"), // initial counter is 1 counter: 1 }; // add a single button with the caption "1" (like the counter) w.add(button!("'1',d:b,w:20")); w } } impl ButtonEvents for CounterWindow { // When the button is pressed, this function will be called // with the handle of the button that was pressed // Since we only have one button, we don't need to store its handle // in the struct, as we will receive the handle via the on_pressed method fn on_pressed(&mut self, handle: Handle
fn main() -> Result<(), appcui::system::Error> { // create a new application let mut a = App::new().build()?; // add a new window (of type CounterWindow) to the application a.add_window(CounterWindow::new()); // Run AppCUI framework (this wil start the window loop and messaage passing) a.run(); Ok(()) } ``
🛣️ نقشه راه
- [x] مجموعه اولیه ویجتها و پشتیبانی از ویندوز، لینوکس و مکاواس
- [x] پشتیبانی از WebGL
- [ ] پشتیبانی از OpenGL / SDL / Vulkan
- [ ] پشتیبانی از TextArea برای برجستهسازی کد
🤝 مشارکت
مشارکتها، مشکلات و درخواستهای ویژگی خوشآمدید! برای شروع، CONTRIBUTING.md را بررسی کنید.
در بحثها در GitHub Discussions شرکت کنید.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---