4 个版本 (破坏性)
0.4.0 | 2024年2月22日 |
---|---|
0.3.0 | 2024年2月15日 |
0.2.1 | 2024年1月14日 |
0.2.0 |
|
0.1.0 | 2024年1月9日 |
#201 在 GUI
115 每月下载次数
675KB
2.5K SLoC
功能
该小部件目前处于开发中,不提供完整的终端功能,请确保小部件覆盖了您想要的所有内容。
- PTY 内容渲染
- 多实例支持
- 基本键盘输入
- 添加自定义键盘或鼠标绑定
- 调整大小
- 滚动
- 聚焦
- 选择
- 更改字体/颜色方案
- 超链接处理(悬停/打开)
该小部件已在 MacOS 和 Linux 上测试,未在 Windows 上测试。
安装
iced_term = "0.4.0"
概述
与该小部件的交互是通过
命令 - 您可以向小部件发送命令以更改小部件状态。
#[derive(Debug, Clone)]
pub enum Command {
InitBackend(Sender<alacritty_terminal::event::Event>),
ChangeTheme(Box<ColorPalette>),
ChangeFont(FontSettings),
AddBindings(Vec<(Binding<InputKind>, BindingAction)>),
ProcessBackendCommand(BackendCommand),
}
事件 - 小部件产生了一些事件,可以在应用程序中处理。每个事件都有一个第一个 u64
参数,是 终端实例 ID。
#[derive(Debug, Clone)]
pub enum Event {
CommandReceived(u64, Command),
}
目前只有一个内部 CommandReceived 事件,用于后端 <-> 视图通信。您还可以处理此事件,解包命令,并根据需要处理命令。
操作 - 小部件的 update(&mut self, cmd: Command)
方法返回 Action,您可以在小部件更新后处理。
#[derive(Debug, Clone, PartialEq)]
pub enum Action {
Redraw,
Shutdown,
ChangeTitle,
Ignore,
}
为了创建可工作的小部件实例,您需要进行几个步骤
将小部件添加到您的应用程序结构体中
struct App {
term: iced_term::Term,
}
在应用程序构造函数中创建纯实例
impl Application for App {
type Executor = executor::Default;
type Message = Message;
type Theme = Theme;
type Flags = ();
fn new(_flags: ()) -> (Self, Command<Message>) {
let system_shell = std::env::var("SHELL")
.expect("SHELL variable is not defined")
.to_string();
let term_id = 0;
let term_settings = iced_term::TermSettings {
font: iced_term::FontSettings {
size: 14.0,
..iced_term::FontSettings::default()
},
theme: iced_term::ColorPalette::default(),
backend: iced_term::BackendSettings {
shell: system_shell.to_string(),
},
};
(
Self {
term: iced_term::Term::new(term_id, term_settings.clone()),
},
Command::none(),
)
}
}
将包含小部件事件的信使添加到应用程序消息枚举中
#[derive(Debug, Clone)]
pub enum Message {
// ... other messages
IcedTermEvent(iced_term::Event),
}
将 IcedTermEvent 处理添加到应用程序的 update
方法中
impl Application for App {
// ... other methods
fn update(&mut self, message: Self::Message) -> Command<Message> {
match message {
Message::IcedTermEvent(iced_term::Event::CommandReceived(
_,
cmd,
)) => match self.term.update(cmd) {
iced_term::actions::Action::Shutdown => window::close(),
_ => Command::none(),
},
}
}
}
将视图添加到您的应用程序中
impl Application for App {
// ... other methods
fn view(&self) -> Element<Message, iced::Renderer> {
container(iced_term::term_view(&self.term).map(Message::IcedTermEvent))
.width(Length::Fill)
.height(Length::Fill)
.into()
}
}
在您的应用程序中激活后端事件订阅
impl Application for App {
// ... other methods
fn subscription(&self) -> Subscription<Message> {
self.term.subscription().map(Message::IcedTermEvent)
}
}
编写 main 函数
fn main() -> iced::Result {
App::run(Settings {
window: window::Settings {
size: (1280, 720),
..window::Settings::default()
},
..Settings::default()
})
}
运行您的应用程序
cargo run --release
示例
您还可以查看 示例 目录以获取有关小部件使用的更多信息。
- 全屏 - 终端模拟器的基本示例。
- 分割视图 - 基于分割视图iced小部件的示例,展示了如何实现多个实例功能。
- 自定义绑定 - 示例展示了如何向您的终端模拟器应用添加自定义键盘或鼠标绑定。
- 主题 - 示例展示了如何更改终端配色方案。
- 字体 - 示例展示了如何在您的终端模拟器应用中更改字体类型或字体大小。
依赖项
依赖项
~36–75MB
~1.5M SLoC