Web Analytics

AppCUI-rs

⭐ 358 stars Spanish by gdt050579

🌐 Idioma

AppCUI-rs

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

Estado de la compilación en Windows
Estado de la compilación en Linux
Estado de la compilación en MacOS
Cobertura de código
Licencia
Crates.io
Docs.rs
Galería

AppCUI-rs es una biblioteca rápida y multiplataforma en Rust para construir interfaces de usuario modernas basadas en texto (TUIs) con widgets ricos, temas y soporte completo para Unicode—una alternativa a ncurses y otros frameworks de UI para terminal.

✨ Características

  • [x] múltiples controles listos para usar (botones, etiquetas, cuadros de texto, casillas de verificación, botones de opción, vistas de lista, vistas de árbol, cuadros combinados, selectores de fecha/hora, selectores de color, pestañas, acordeones, etc.). Una lista completa de controles se puede encontrar aquí
  • [x] sistema potente de diseño que permite posicionar controles usando coordenadas absolutas, coordenadas relativas, acoplamiento, alineación, anclajes o posicionamiento por pivote (ver más aquí)
  • [x] menús y barras de herramientas
  • [x] soporte multiplataforma (Windows vía API y terminal virtual, Linux vía ncurses, MacOS vía termios)
  • [x] soporte para multihilo para permitir tareas en segundo plano
  • [x] temporizadores
  • [x] soporte para ratón
  • [x] soporte para portapapeles
  • [x] temas de color
  • [x] soporte para caracteres Unicode
  • [x] diálogos predefinidos (cuadro de mensaje, cuadro de entrada, selector de color, diálogos de guardar y abrir, navegador de carpetas, etc)
  • [x] soporte para colores verdaderos (24 bits por píxel) para terminales que lo soportan.

📸 Capturas de pantalla

👉 ¡Consulta la Galería para demos completas de todos los controles!

🖥️ Backends

AppCUI soporta varios backends según el sistema operativo para el que se esté usando:

  • Consola de Windows - basada en la API de bajo nivel Win32, diseñada para la consola clásica de Windows
  • Windows VT - basada en secuencias ANSI, diseñada para terminales virtuales modernas de Windows
  • NCurses - basada en la API NCurses para entornos Linux
  • Termios - basada en secuencias ANSI y APIs de bajo nivel para MAC OSX
  • Terminal Web - diseñada para implementación web (basada en webgl)
  • CrossTerm - basada en la crate crossterm, pero activada mediante una bandera de característica
Más información sobre los backends soportados se puede encontrar aquí

🚀 Inicio rápido

Agrega lo siguiente a tu Cargo.toml:

toml [dependencies] appcui = "*"

Luego crea un nuevo proyecto Rust y añade el siguiente código:
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(()) }


o una versión más compacta usando 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(()) }


Luego ejecuta el proyecto con cargo run. Deberías ver una ventana con el título Test y el texto Hello World ! en el centro.

🧪 Ejemplos

AppCUI-rs viene con un conjunto de ejemplos para ayudarte a comenzar. Puedes encontrarlos en la carpeta examples, incluyendo:

🛠️ Un ejemplo más complejo

Un ejemplo que crea una ventana con un botón que al ser presionado aumenta un contador.

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