Files Rusted 是一个新的实验性目录,用于探索使用 Rust + Slint 重构或重做 Files 风格文件管理器的可能性。
- 后端:Rust
- 前端:Slint
- 当前依赖基线:
Slint 1.15.1
- 相比纯 GPU 渲染方案,
Slint更稳一些,工程风险更低。 Rust适合做文件系统、状态管理、并发任务和性能敏感逻辑。Slint的 UI 性能和工程可控性都比较适合桌面应用起步阶段。- 这条技术路线比“直接上更新、更激进的图形栈”更容易进入可交付开发。
Files Rusted/
├── Cargo.toml
├── build.rs
├── src/
│ ├── browser.rs
│ ├── browser/
│ │ ├── drag_selection.rs
│ │ └── selection.rs
│ └── main.rs
└── ui/
└── app-window.slint
- 已建立
Rust + Slint应用壳层 - 已接入目录浏览
- 已实现
Home / Up / Refresh导航按钮 - 已实现左侧快速入口和主文件列表视图
- 已实现排序、筛选和文件选中反馈
- 已补上可见的排序下拉框
- 已支持点击列头快速切换常用排序
- 已显示修改时间列,并支持按修改时间排序
- 已支持隐藏文件显示开关
- 已支持记住排序与隐藏文件偏好
- 已支持最近目录侧边栏
- 已支持启动时恢复上次打开目录
- 已支持从侧边栏移除收藏和最近目录
- 已补上工具栏常用动作按钮
- 已支持搜索框快速聚焦与一键清空
- 已支持直接 Duplicate 当前选择
- 已补稳新建后自动进入重命名
- 已支持重命名输入框自动聚焦与全选
- 已支持清空应用内剪贴板
- 已补稳 Paste / Duplicate 后的选择恢复
- 已支持回收站 / 永久删除双路径
- 已支持 Paste / Duplicate 冲突策略
- 已实现
Back / Forward导航历史 - 已实现面包屑导航
- 已实现路径直接输入并跳转
- 已实现收藏当前目录并在侧边栏持久化显示
- 已实现“单击选中、双击进入”
- 已实现基础多选和范围选择
- 已把“焦点项”和“选中集合”分开
- 已实现基础快捷键:方向键、
Ctrl+方向键、Shift扩选、Home/End、Space、Ctrl+A/C/X/V、Delete、F2、Enter - 已补上资源管理器常用快捷键:
Alt+Left/Right/Up/Home、F5、Ctrl+R、Ctrl+O、Ctrl+N、Ctrl+Shift+N - 已为列表项补上基础右键菜单
- 已为主工作区补上空白区域上下文菜单
- 已加强焦点项和选中项的视觉区分
- 已支持左键点击空白区域清空当前选择
- 已实现桌面式矩形框选
- 已实现拖框自动滚动,并在滚动后持续重算命中结果
- 已把选择与拖框核心逻辑拆到
src/browser/selection.rs和src/browser/drag_selection.rs - 已接入最小写操作:
New Folder / Rename / Delete - 已接入最小传输操作:
Copy / Cut / Paste - 已接入基础
Open和New File - 已把目录状态与展示逻辑拆到
src/browser.rs - 已在当前容器内完成
cargo test - 已在当前容器内完成
cargo build - 已通过
xvfb-run做过一次启动级验证
当前容器已经补装 Rust 工具链和 Linux 运行依赖,可以执行编译和基础启动验证。
补充说明:
- 我已参考 Slint 官方文档,将骨架依赖对齐到当前文档可见的
1.15.x基线。 - 后续如果我们需要更高开发效率,可以再评估是否启用
slint/live-preview。 - 当前验证方式是
cargo build加xvfb-run启动验证,不是完整桌面交互测试。
- 主窗口已经具备顶部操作区、左侧入口区、主文件列表区和状态区。
- Rust 侧已负责目录读取、目录切换、导航历史、面包屑、条目排序、筛选和基础状态同步。
- 当前排序能力已具备可见入口:
- 支持按名称正序 / 倒序排序
- 支持按大小从小到大 / 从大到小排序
- 支持按修改时间从新到旧 / 从旧到新排序
- 支持点击
Name / Size / Modified列头切换对应排序方向 - 文件列表会显示每个条目的修改时间列
- 当前已具备基础视图偏好:
- 支持显示 / 隐藏隐藏文件
- 支持
Ctrl+H快速切换隐藏文件显示状态 - 当前排序模式与隐藏文件开关会持久化到本地设置文件
- 当目录里只有隐藏项时,会给出针对性的空状态提示
- 当前已具备基础导航记忆:
- 启动时会优先恢复上次成功打开的目录
- 最近成功打开过的目录会以侧边栏动态项显示
- 最近目录会做去重、置顶和数量裁剪
- 支持从侧边栏移除单条最近目录
- 支持通过工具栏
Clear Recents一键清空最近目录
- 当前已具备基础工具栏动作:
- 支持从工具栏直接触发
Open / Duplicate / New File / New Folder / Paste / Clear Clipboard / Clear Recents Open和Paste会根据当前选择或剪贴状态自动启用 / 禁用- 这条路径可作为右键菜单之外的显式操作入口
- 支持通过工具栏设置
Keep Both / Overwrite / Skip冲突策略
- 支持从工具栏直接触发
- 当前已具备搜索栏增强:
- 支持
Ctrl+F快速聚焦并全选搜索框 - 支持通过工具栏
Clear按钮一键清空当前筛选
- 支持
- 当前已具备路径输入栏:
- 支持输入目录路径后直接进入
- 支持输入文件路径后进入父目录并选中目标文件
- 支持输入相对路径(相对当前目录解析)
- 支持
Ctrl+L聚焦并全选路径输入栏
- 当前已具备基础收藏能力:
- 支持通过工具栏按钮切换当前目录收藏状态
- 支持通过
Ctrl+D切换当前目录收藏状态 - 收藏目录会出现在侧边栏默认位置之后
- 收藏目录会持久化到本地配置文件,并在重启后恢复
- 支持从侧边栏上下文菜单直接移除指定收藏目录
- 当前文件点击行为为只读模式:
- 单击目录:选中
- 双击目录:进入目录
- 单击文件:选中并更新状态提示
- 双击文件、选择栏 Open 或菜单 Open:调用系统默认打开动作
- 当前已具备基础选择模型:
Ctrl点击:切换单项选中Shift点击:按可见列表做范围选择- 焦点项可以独立于选中集合存在
Ctrl+A:选择当前可见列表全部项- 方向键:移动焦点并切换到单选
Ctrl + 方向键:只移动焦点,不改选中集合Shift + 方向键:按列表扩展选择Home / End:跳到首项或尾项Space:按焦点项更新选择;Ctrl+Space切换焦点项选中状态
- 当前已具备桌面式拖框选择:
- 支持从非条目区域开始矩形框选
- 支持无修饰键拖框和
Ctrl拖框 - 拖框进入列表视口顶部/底部热区时支持自动滚动
- 滚动过程中会基于最新可见布局持续重算命中结果
- 到内容边界或结束拖框后会停止自动滚动
- 当前已接入最小写操作:
New Folder:在当前目录创建唯一名称的新文件夹,并立即进入重命名态New File:在当前目录创建唯一名称的空文本文件,并立即进入重命名态Rename:支持对当前选中项重命名- 新建项会等目录重新加载并确认可见后,再稳定进入重命名态
- 进入重命名后输入框会自动聚焦并全选当前名称
- 加载中或正在重命名时,会阻止再次发起新建或重命名
Delete:当前支持删除文件和目录,目录删除走递归删除
- 当前已接入最小传输操作:
Copy / Cut:把当前选中项放入应用内剪贴状态Paste:粘贴到当前目录;复制支持同目录生成Copy后缀,剪切会在需要时自动生成不冲突名称Duplicate:直接在当前目录复制当前选中项,并沿用同目录Copy后缀命名策略Clear Clipboard:清空当前应用内复制/剪切状态Paste / Duplicate完成后,会等目录刷新完成再恢复新结果的选择状态Paste / Duplicate现在支持Keep Both / Overwrite / Skip三种冲突策略,并会持久化当前策略
- 当前上下文菜单分三层:
- 项目菜单:
Open / Select / Copy / Duplicate / Cut / Rename / Delete- 工作区空白区域菜单:Open / Copy / Duplicate / Cut / Paste / Clear Clipboard / Rename / Delete / New File / New Folder / Select All / Clear Selection- 侧边栏菜单:Open / Remove Favorite / Remove from Recents
- 当前删除语义已拆成双路径:
Delete:默认移动到系统回收站 / TrashShift+Delete:永久删除,不经过回收站- 项目菜单与工作区菜单都提供
Move to Trash / Delete Permanently
- 当前空白区域交互:
- 左键点击空白区域:清空焦点和选中集合
- 右键点击空白区域:弹出工作区菜单
- 已在当前容器中安装
rustupstable 工具链,当前版本为rustc 1.94.0/cargo 1.94.0。 cargo test已成功通过。cargo build已成功通过。- 程序已在
xvfb-run提供的虚拟显示环境中成功启动,并持续运行到外部timeout结束;当前环境会打印一条xdg color schemes监听警告,但不影响启动。 - 已在 Windows 人工诊断确认一个 Slint 平台细节:文件列表中的中文文件名如果使用单行
Text且开启overflow: elide,可能会整段不显示;状态栏中文、固定中文文本、固定宽度绑定文本都可正常显示。这不是 Rust 数据链路问题,而是 Windows 下overflow: elide的中文渲染路径问题。
- 文件列表名称列如果要显示中文文件名,不要默认依赖
overflow: elide。 - 当前项目已确认:在 Windows 下,
wrap: no-wrap+overflow: elide会导致中文文件名整段空白,连后缀也不显示。 - 更稳的策略是:
- 由外层容器负责
clip - 文件名
Text保持单行,但不使用overflow: elide
- 由外层容器负责
- 如果以后再次出现“状态栏中文正常,但列表中文文件名整段空白”,优先排查这里,而不是先怀疑
SharedString、编码或后台加载。
- 在真实桌面环境里手工验证拖框自动滚动的连续体验、边界停止和视觉反馈。
- 继续拆分
browser.rs中与导航、文件操作相关的剩余职责,不要让它重新演变成新的“大文件”。 - 继续把当前选择模型打磨到更接近桌面文件管理器,例如更细的
Ctrl+Shift组合行为和更多边界交互一致性。 - 逐步补上真正的跨目录复制/移动体验、系统剪贴板对接,以及更完整的冲突处理和打开错误反馈。