19个版本
新版本 0.3.7 | 2024年8月18日 |
---|---|
0.3.6 | 2024年8月6日 |
0.2.7 | 2024年7月30日 |
0.1.2 | 2024年7月26日 |
#108 in 嵌入式开发
1,657 每月下载
用于 good-os-framework
47KB
1K SLoC
OS Terminal
适用于嵌入式系统和操作系统内核的 no_std
终端库。
由于使用了动态内存分配的 alloc
包,因此环境应已初始化 global_allocator
。
屏幕截图
此屏幕截图显示了在示例终端中运行 fastfetch
的结果。您可以通过运行 cargo run --example terminal
(仅限Linux)来尝试它。它将默认执行 bash
。
功能
- 嵌入式平滑Noto Sans Mono字体渲染
- TrueType字体支持
- VT100和部分xterm转义序列支持
- 美丽的配色方案
- 光标显示和形状控制
使用方法
创建一个用于包装您的帧缓冲区的显示包装器,并为它实现 DrawTarget
特性。
use alloc::boxed::Box;
use os_terminal::{DrawTarget, Rgb888, Terminal};
use os_terminal::font::BitmapFont;
struct Display {
width: usize,
height: usize,
buffer: &'static [u32],
}
impl DrawTarget for Display {
fn size(&self) -> (usize, usize) {
(self.width, self.height)
}
#[inline(always)]
fn draw_pixel(&mut self, x: usize, y: usize, color: Rgb888) {
let value = (color.0 as u32) << 16 | (color.1 as u32) << 8 | color.2 as u32;
self.buffer[y * self.width + x] = value;
}
}
然后您可以使用包装框的字体管理器创建一个终端,并向其写入。
let mut terminal = Terminal::new(display);
terminal.set_font_manager(Box::new(BitmapFont));
terminal.write_bstr(b"\x1b[31mHello, world!\x1b[0m");
terminal.write_fmt(format_args!("{} + {} = {}", 1, 2, 3));
要使用TrueType字体,请启用 truetype
功能,并从具有大小的字体文件创建一个 TrueTypeFont
实例。
let font_buffer = include_bytes!("SourceCodeVF.otf");
terminal.set_font_manager(Box::new(TrueTypeFont::new(14.0, font_buffer)));
请注意,您应该使用支持变量字体的ttf文件,否则字体粗细将不会改变。
斜体字体支持是可选的。如果没有提供,它将以默认罗马字体渲染。
let font_buffer = include_bytes!("SourceCodeVF.otf");
let italic_buffer = include_bytes!("SourceCodeVF-Italic.otf");
let font_manager = TrueTypeFont::new(10.0, font_buffer).with_italic_font(italic_buffer);
terminal.set_font_manager(Box::new(font_manager));
如果您想从终端获取日志,您可以设置一个接收 fmt::Arguments
的记录器。
os_terminal::set_logger(|args| println!("Terminal: {:?}", args));
默认刷新策略是同步的。如果您需要更高的性能,您可以禁用自动刷新,并在需要时手动刷新。
terminal.set_auto_flush(false);
terminal.flush();
功能
bitmap
:启用嵌入式Noto Sans Mono位图字体支持。此功能默认启用。truetype
:启用TrueType字体支持。此功能默认禁用。
致谢
- embedded-term:此项目是其分支,进行了一些简化和改进。
- alacritty:终端实现的通用参考。
- noto-sans-mono-bitmap-rs:预光栅化的平滑字符。
感谢原作者和贡献者的出色工作。
依赖项
~0.4–0.9MB
~17K SLoC