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، طراحیشده برای کنسول کلاسیک ویندوز
- ویندوز VT - مبتنی بر توالیهای ANSI، طراحیشده برای ترمینال مجازی مدرن ویندوز
- NCurses - مبتنی بر API کتابخانه NCurses برای محیطهای لینوکس
- ترمیوس - مبتنی بر توالیهای ANSI و APIهای سطح پایین برای macOS
- ترمینال وب - طراحیشده برای پیادهسازیهای وب (مبتنی بر WebGL)
- CrossTerm - مبتنی بر کتابخانه 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، پکمن، شطرنج، اتصال چهار، ۲۰۴۸ یا تتریس
- ابزارها مانند ماشین حساب، نمایشگر 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 will start the window loop and message passing) a.run(); Ok(()) } ``
🛣️ نقشه راه
- [x] مجموعه اولیه ویجتها و پشتیبانی از ویندوز، لینوکس و مکاواس
- [x] پشتیبانی از WebGL
- [ ] پشتیبانی از OpenGL / SDL / Vulkan
- [ ] پشتیبانی از TextArea برای برجستهسازی کد
🤝 مشارکت
مشارکتها، مشکلات و درخواستهای ویژگی خوشآمدید! برای شروع، CONTRIBUTING.md را بررسی کنید.
در بحثها به جمع ما بپیوندید در GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-13 ---