Web Analytics

AppCUI-rs

⭐ 358 stars Indonesian by gdt050579

🌐 Bahasa

AppCUI-rs

`` ⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳


Status Build Windows
Status Build Linux
Status Build MacOS
Cakupan Kode
Lisensi
Crates.io
Docs.rs
Galeri

AppCUI-rs adalah pustaka Rust yang cepat, lintas platform untuk membangun antarmuka pengguna berbasis teks (TUI) modern dengan widget kaya, tema, dan dukungan Unicode penuh—alternatif untuk ncurses dan kerangka UI terminal lainnya.

✨ Fitur

  • [x] banyak kontrol siap pakai (tombol, label, kotak teks, kotak centang, tombol radio, tampilan daftar, tampilan pohon, kotak kombo, pemilih tanggal/waktu, pemilih warna, tab, akordeon, dll). Daftar lengkap kontrol dapat ditemukan di sini
  • [x] sistem tata letak yang kuat yang memungkinkan Anda memposisikan kontrol menggunakan koordinat absolut, koordinat relatif, docking, perataan, anchor atau posisi pivot (lihat lebih lanjut di sini)
  • [x] menu dan toolbar
  • [x] dukungan multi-platform (Windows melalui API dan terminal virtual, Linux melalui ncurses, MacOS melalui termios)
  • [x] dukungan multi-threading untuk memungkinkan tugas latar belakang
  • [x] timer
  • [x] dukungan mouse
  • [x] dukungan clipboard
  • [x] tema warna
  • [x] dukungan untuk karakter Unicode
  • [x] dialog yang sudah tersedia (kotak pesan, kotak input, pemilih warna, dialog simpan & buka, navigator folder, dll)
  • [x] dukungan warna asli (24 bit per piksel) untuk terminal yang mendukungnya.

📸 Tangkapan Layar

👉 Lihat Galeri untuk demo penuh semua kontrol!

🖥️ Backend

AppCUI mendukung berbagai backend berdasarkan sistem operasi yang digunakan:

  • Windows Console - berbasis API tingkat rendah Win32, dirancang untuk konsol Windows klasik
  • Windows VT - berbasis urutan ANSI, dirancang untuk terminal virtual Windows modern
  • NCurses - berbasis API NCurses untuk lingkungan Linux
  • Termios - berbasis urutan ANSI dan API tingkat rendah untuk MAC OSX
  • Web Terminal - dirancang untuk implementasi Web (berbasis webgl)
  • CrossTerm - berbasis crate crossterm, tetapi diaktifkan melalui fitur flag
Informasi lebih lanjut tentang backend yang didukung dapat ditemukan di sini

🚀 Mulai Cepat

Tambahkan hal berikut ke Cargo.toml Anda:

toml [dependencies] appcui = "*"

Kemudian buat proyek Rust baru dan tambahkan kode berikut:
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(()) }

atau versi yang lebih ringkas menggunakan 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(()) }


Kemudian jalankan proyek dengan cargo run. Anda akan melihat sebuah jendela dengan judul Test dan teks Hello World ! di tengah.

🧪 Contoh

AppCUI-rs hadir dengan sejumlah contoh untuk membantu Anda memulai. Anda dapat menemukannya di folder examples, termasuk:

🛠️ Contoh yang lebih kompleks

Contoh yang membuat jendela dengan sebuah tombol yang saat ditekan akan menambah sebuah penghitung.

rust use appcui::prelude::*;

// 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