Rust отлично подходит для псевдографики (TUI) — даже лучше, чем многие языки.
Можно делать интерфейсы уровня Midnight Commander: окна, рамки, списки, меню, клавиши и т.д.
🧩 1. Что такое «псевдографика» в Rust
Это называется TUI (Text User Interface):
- рамки (
┌─┐) - панели
- меню
- обработка клавиш
- обновление экрана без мерцания
всё это Rust умеет
2. Основные библиотеки
1. База (обязательно)
- crossterm
управление терминалом: - курсор
- цвета
- клавиши
- очистка экрана
2. UI-уровень (как mc)
- ratatui (бывший tui-rs)
даёт:
- окна
- layout (разделение экрана)
- списки
- таблицы
- рамки
3. Мини-пример (очень простой)
Создайте проект:
cargo new tui_test
cd tui_test
Добавьте в Cargo.toml:
[dependencies]
crossterm = "0.27"
ratatui = "0.26"
Код (main.rs)
use std::io;
use crossterm::{
event::{self, Event, KeyCode},
terminal::{enable_raw_mode, disable_raw_mode},
};
use ratatui::{
backend::CrosstermBackend,
Terminal,
widgets::{Block, Borders, Paragraph},
};
fn main() -> Result<(), io::Error> {
enable_raw_mode()?;
let mut stdout = io::stdout();
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
loop {
terminal.draw(|f| {
let size = f.size();
let block = Block::default()
.title("Мой TUI (как mc 😄)")
.borders(Borders::ALL);
let paragraph = Paragraph::new("Нажми q для выхода")
.block(block);
f.render_widget(paragraph, size);
})?;
if let Event::Key(key) = event::read()? {
if key.code == KeyCode::Char('q') {
break;
}
}
}
disable_raw_mode()?;
Ok(())
}
️ Запуск
cargo run
Что вы получаете
- рамку как в mc
- текст внутри
- обработку клавиш
2. Добавьте зависимости
4. Код
Управление
Что уже достаточно
️ Единственный возможный нюанс (для Termux на Android)
можно сразу:
Итог
Где он находится
Как его открыть
Пример полного пути
Итог
6. Важный момент (как у нормальных программ)
️ 1. Разница по сути
TUI (terminal UI)
ручного контроля: