2 个版本
新 0.1.1 | 2024 年 8 月 12 日 |
---|---|
0.1.0 | 2024 年 8 月 7 日 |
#361 在 命令行界面
200 每月下载量
145KB
3K SLoC
Dreg
一个简单的终端用户界面库。
快速开始
use dreg::prelude::*;
fn main() {
let mut term = Terminal::new(std::io::stdout(), TerminalSettings::default()).unwrap();
let mut prog = MyProgram {
should_quit: false,
};
while !prog.should_quit {
term.render_on_input(std::time::Duration::from_millis(31), |frame| {
frame.render_with_context(&mut prog, frame.size())
}).unwrap();
}
term.release().unwrap();
}
struct MyProgram {
should_quit: bool,
}
impl Program for MyProgram {
fn render(&mut self, ctx: &mut Context, area: Rect, buf: &mut Buffer) {
if let Some(input) = ctx.take_last_input() {
match input {
Input::KeyDown(KeyCode::Char('q'), _) => {
self.should_quit = true;
}
_ => {}
}
}
let (top_area, bottom_area) = area
.inner_centered(31, 4)
.vsplit_len(3);
if ctx.left_clicked(&top_area) {
self.should_quit = true;
return;
}
let block_style = if ctx.hovered(&top_area) {
Style::default().fg(Color::Green)
} else {
Style::default()
};
Block::bordered().style(block_style)
.render(top_area, buf);
Label::styled("Hover Me!", block_style)
.render(top_area.inner(Margin::new(1, 1)), buf);
Label::styled(
"press [q] or click here to quit",
Style::default().fg(Color::DarkGray),
).render(bottom_area, buf);
}
}
概述
设计哲学
Dreg 最初是从 ratatui
Crate(tui-rs 的继任者)分叉出来的,因为我意识到它已经变得多么臃肿。
Dreg 的设计从一开始就非常简单。
致谢
许可
依赖项
~2.2–9MB
~53K SLoC