3步打造专属终端文件管理器界面:yazi UI插件开发指南
3步打造专属终端文件管理器界面:yazi UI插件开发指南
【免费下载链接】yazi 💥 用 Rust 编写的极速终端文件管理器,基于异步 I/O。 项目地址: https://gitcode.com/GitHub_Trending/ya/yazi
yazi 是一款用 Rust 编写的极速终端文件管理器,基于异步 I/O 设计,不仅性能卓越,还支持通过插件系统高度自定义界面。本文将带你通过三个简单步骤,从零开始开发属于自己的 yazi UI 插件,让你的终端文件管理体验焕然一新。
一、了解 yazi 插件结构与 UI 组件
yazi 的插件系统采用 Lua 脚本语言,所有预设插件存放在 yazi-plugin/preset/plugins/ 目录下。UI 开发主要依赖内置的 ui 模块,该模块提供了丰富的界面组件,包括:
- 基础元素:
ui.Row(行容器)、ui.Text(文本显示)、ui.Span(内联文本) - 布局组件:
ui.Table(表格)、ui.List(列表)、ui.Constraint(布局约束) - 样式控制:
ui.Style(样式定义)、ui.Align(对齐方式)
例如,在 yazi-plugin/preset/plugins/folder.lua 中,通过以下代码创建文件夹信息表格:
ui.Table(rows)
:area(ui.Pos { "center", w = 60, h = 20 }) -- 居中显示,宽60高20
:widths { ui.Constraint.Length(14), ui.Constraint.Fill(1) } -- 列宽配置
二、开发你的第一个 UI 插件(实战案例)
1. 创建插件文件
在插件目录新建自定义插件文件 my-ui-plugin.lua,基础结构如下:
local M = {}
-- 预览窗口渲染函数
function M:peek(job)
-- UI渲染逻辑
end
return M
2. 设计界面元素
以创建文件信息卡片为例,使用 ui.Row 和 ui.Style 构建结构化布局:
function M:peek(job)
local rows = {
ui.Row({ "File Info" }):style(ui.Style():fg("blue")), -- 标题行(蓝色)
ui.Row { " Name:", job.file.name }, -- 文件名称
ui.Row { " Size:", ya.readable_size(job.file.size) }, -- 可读大小
}
ya.preview_widget(job,
ui.Table(rows)
:area(ui.Pos { "center", w = 50, h = 10 }) -- 设定显示区域
)
end
3. 注册插件功能
在 yazi-config/preset/yazi-default.toml 中添加插件配置,使 yazi 识别你的自定义插件:
[plugins]
my-ui = { path = "~/.config/yazi/plugins/my-ui-plugin.lua" }
三、高级定制与调试技巧
样式美化
通过 ui.Style 自定义颜色和字体样式,例如在 yazi-plugin/preset/plugins/image.lua 中的实现:
ui.Row({ "Image" }):style(ui.Style():fg("green")) -- 绿色标题
交互逻辑
添加鼠标或键盘事件响应,参考 yazi-plugin/preset/plugins/video.lua 中的交互处理:
function M:seek(job)
-- 处理进度条拖动逻辑
end
调试方法
- 使用
ya.log()输出调试信息 - 通过
ui.hide()临时隐藏界面元素(如 yazi-plugin/preset/plugins/zoxide.lua) - 利用 yazi 内置的
:plugin-reload命令热重载插件
总结
通过本文介绍的三个步骤,你已经掌握了 yazi UI 插件开发的核心流程。从基础组件使用到高级交互设计,yazi 的插件系统为终端文件管理器提供了无限可能。立即开始尝试,打造专属于你的高效终端工作流吧!
提示:更多预设插件示例可参考 yazi-plugin/preset/plugins/ 目录,其中 file.lua 和 folder.lua 是学习 UI 开发的绝佳范例。
【免费下载链接】yazi 💥 用 Rust 编写的极速终端文件管理器,基于异步 I/O。 项目地址: https://gitcode.com/GitHub_Trending/ya/yazi
更多推荐



所有评论(0)