Rust终端UI插件库tui-term的使用,tui-term提供强大的终端界面构建与交互功能
Rust终端UI插件库tui-term的使用,tui-term提供强大的终端界面构建与交互功能
tui-term是ratatui库的伪终端组件。
状态
注意:该项目目前处于积极开发阶段,应视为进行中的工作。tui-term的目标是为ratatui库的用户提供一个健壮且经过良好测试的伪终端组件。
安装
要使用tui-term,只需在Cargo.toml文件中添加依赖:
[dependencies]
tui-term = "0.2.0"
或使用cargo add:
cargo add tui-term
示例
查看示例目录获取更多信息,或运行示例:
cargo run --example simple_ls_rw
控制器
控制器是一个实验性功能,帮助管理在伪终端内生成的命令的生命周期。目前支持仅限于一次性命令。
要激活该功能:
cargo add tui-term -F unstable
聊天室
加入我们的Matrix聊天室,进行可能的同步交流。
架构
有关tui-term架构和设计原则的概述,请参阅架构文档。
贡献
我们欢迎社区的贡献!查看贡献指南了解如何开始。
发布说明
通过查看变更日志了解最新变化。
许可证
tui-term在MIT许可证下可用。查看许可证获取更多信息。
完整示例代码
use ratatui::{
backend::CrosstermBackend,
layout::{Constraint, Direction, Layout},
style::{Color, Style},
widgets::{Block, Borders, Paragraph},
Terminal,
};
use std::io;
use tui_term::widget::PseudoTerminal;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化终端后端
let stdout = io::stdout();
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
// 创建伪终端实例
let mut pseudo_term = PseudoTerminal::new();
// 主应用循环
loop {
terminal.draw(|f| {
let chunks = Layout::default()
.direction(Direction::Vertical)
.margin(1)
.constraints([Constraint::Percentage(80), Constraint::Percentage(20)].as_ref())
.split(f.size());
// 渲染伪终端区域
let term_block = Block::default()
.title("Terminal")
.borders(Borders::ALL)
.style(Style::default().bg(Color::Black).fg(Color::White));
f.render_widget(&pseudo_term, chunks[0]);
f.render_widget(term_block, chunks[0]);
// 渲染状态信息区域
let status_block = Block::default()
.title("Status")
.borders(Borders::ALL)
.style(Style::default().bg(Color::DarkGray).fg(Color::White));
let status_text = Paragraph::new("Press 'q' to quit, 'c' to clear terminal")
.block(status_block);
f.render_widget(status_text, chunks[1]);
})?;
// 处理键盘输入
if crossterm::event::poll(std::time::Duration::from_millis(100))? {
if let crossterm::event::Event::Key(key) = crossterm::event::read()? {
match key.code {
crossterm::event::KeyCode::Char('q') => break,
crossterm::event::KeyCode::Char('c') => {
// 清空终端内容
pseudo_term.clear();
}
_ => {
// 将按键输入发送到伪终端
if let Some(c) = key_to_char(key.code) {
pseudo_term.input(c);
}
}
}
}
}
}
Ok(())
}
// 辅助函数:将KeyCode转换为字符
fn key_to_char(key_code: crossterm::event::KeyCode) -> Option<char> {
match key_code {
crossterm::event::KeyCode::Char(c) => Some(c),
crossterm::event::KeyCode::Enter => Some('\n'),
crossterm::event::KeyCode::Tab => Some('\t'),
crossterm::event::KeyCode::Backspace => Some('\x08'),
_ => None,
}
}
这个示例展示了如何使用tui-term创建一个基本的终端界面应用,包含:
- 伪终端显示区域
- 状态信息区域
- 键盘输入处理
- 清空终端功能
- 退出机制
要运行此示例,需要在Cargo.toml中添加相关依赖:
[dependencies]
ratatui = "0.23"
crossterm = "0.27"
tui-term = "0.2"
1 回复