最近在折腾 Rust,顺手 Vibe-Coding 了一个 Komari 终端 TUI 工具 ktui。Komari 大家应该不陌生,那个小巧快速的图片压缩工具,用起来很方便,但命令行参数记起来有点费劲。所以我就想,要是有个界面的终端工具会不会更直观?于是 ktui 就诞生了。

为什么做 ktui?

Komari 本身很强,但每次都要翻文档查参数,或者写个 Shell 脚本来批量处理,有点麻烦。我平时习惯在终端里干活,切到图形界面总觉得打断节奏。不如直接在终端里做一个 TUI(文本用户界面),用键盘操作,既能保持终端的高效,又能有界面的直观。

ktui 界面演示图

ktui 的终端操作主界面,展示了文件列表和参数配置区域。

功能特性

ktui 目前支持的功能包括:

  • 文件/目录选择:可以在终端里浏览文件系统,选择要压缩的图片或文件夹。
  • 参数配置:通过界面调整 Komari 的压缩级别、输出质量等参数,实时反馈。
  • 批量处理:支持多文件选中,一键批量压缩,节省时间。
  • 实时预览:压缩前后的大小对比,以及估计的压缩率,方便决策。

技术实现

项目用纯 Rust 写的,TUI 部分用了 Ratatui(之前叫 tui-rs),这个库生态挺成熟,跨平台支持也好。事件处理用了 Crossterm,兼容性更强。整体架构上,我拆成了几个模块:UI 渲染、文件操作、Komari 命令调用、事件循环。这样维护起来清晰,后续加功能也方便。

如何使用

安装很简单,Cargo 直接装就行:

cargo install ktui

然后运行 ktui,就能看到主界面了。操作逻辑跟常见的 TUI 工具差不多,上下箭头选择,回车确认,Tab 切换功能区,底部有快捷键提示。

遇到的问题和解决

开发过程中踩了几个坑,分享出来给想自己写的同学避避雷:

  • 终端大小适配:一开始没处理终端窗口大小变化,结果调整窗口布局就乱了。Ratatui 提供了事件监听,注册一个 resize 事件重新计算布局就行。
  • 并发处理:压缩大图时界面卡住,体验很差。后来用了 Rust 的 async/await 和 Tokio,压缩任务放到后台线程,主线程更新 UI,顺滑多了。
  • 跨平台路径:Windows 和 Linux 的路径分隔符不一样,写死绝对路径容易出幺蛾子。用 std::path::Path 处理,自动适配系统。

后续计划

当前版本算是 MVP(最小可用产品),核心功能都跑通了。接下来打算加点东西:

  • 支持更多 Komari 参数,比如元数据处理。
  • 配置文件持久化,下次打开保留上次设置。
  • 主题切换,现在只有默认的暗色风格,加点亮色或彩色主题。

代码已经开源了,欢迎围观吐槽。Rust 确实好用,写起来顺手,性能也没得说。如果你也在折腾终端工具,或者对 ktui 有什么想法,欢迎交流。

Happy Coding!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭