Skip to content

LainElaina/Files-Rusted

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Files Rusted

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/EndSpaceCtrl+A/C/X/VDeleteF2Enter
  • 已补上资源管理器常用快捷键:Alt+Left/Right/Up/HomeF5Ctrl+RCtrl+OCtrl+NCtrl+Shift+N
  • 已为列表项补上基础右键菜单
  • 已为主工作区补上空白区域上下文菜单
  • 已加强焦点项和选中项的视觉区分
  • 已支持左键点击空白区域清空当前选择
  • 已实现桌面式矩形框选
  • 已实现拖框自动滚动,并在滚动后持续重算命中结果
  • 已把选择与拖框核心逻辑拆到 src/browser/selection.rssrc/browser/drag_selection.rs
  • 已接入最小写操作:New Folder / Rename / Delete
  • 已接入最小传输操作:Copy / Cut / Paste
  • 已接入基础 OpenNew File
  • 已把目录状态与展示逻辑拆到 src/browser.rs
  • 已在当前容器内完成 cargo test
  • 已在当前容器内完成 cargo build
  • 已通过 xvfb-run 做过一次启动级验证

约束说明

当前容器已经补装 Rust 工具链和 Linux 运行依赖,可以执行编译和基础启动验证。

补充说明:

  • 我已参考 Slint 官方文档,将骨架依赖对齐到当前文档可见的 1.15.x 基线。
  • 后续如果我们需要更高开发效率,可以再评估是否启用 slint/live-preview
  • 当前验证方式是 cargo buildxvfb-run 启动验证,不是完整桌面交互测试。

当前实现范围

  1. 主窗口已经具备顶部操作区、左侧入口区、主文件列表区和状态区。
  2. Rust 侧已负责目录读取、目录切换、导航历史、面包屑、条目排序、筛选和基础状态同步。
  3. 当前排序能力已具备可见入口:
    • 支持按名称正序 / 倒序排序
    • 支持按大小从小到大 / 从大到小排序
    • 支持按修改时间从新到旧 / 从旧到新排序
    • 支持点击 Name / Size / Modified 列头切换对应排序方向
    • 文件列表会显示每个条目的修改时间列
  4. 当前已具备基础视图偏好:
    • 支持显示 / 隐藏隐藏文件
    • 支持 Ctrl+H 快速切换隐藏文件显示状态
    • 当前排序模式与隐藏文件开关会持久化到本地设置文件
    • 当目录里只有隐藏项时,会给出针对性的空状态提示
  5. 当前已具备基础导航记忆:
    • 启动时会优先恢复上次成功打开的目录
    • 最近成功打开过的目录会以侧边栏动态项显示
    • 最近目录会做去重、置顶和数量裁剪
    • 支持从侧边栏移除单条最近目录
    • 支持通过工具栏 Clear Recents 一键清空最近目录
  6. 当前已具备基础工具栏动作:
    • 支持从工具栏直接触发 Open / Duplicate / New File / New Folder / Paste / Clear Clipboard / Clear Recents
    • OpenPaste 会根据当前选择或剪贴状态自动启用 / 禁用
    • 这条路径可作为右键菜单之外的显式操作入口
    • 支持通过工具栏设置 Keep Both / Overwrite / Skip 冲突策略
  7. 当前已具备搜索栏增强:
    • 支持 Ctrl+F 快速聚焦并全选搜索框
    • 支持通过工具栏 Clear 按钮一键清空当前筛选
  8. 当前已具备路径输入栏:
    • 支持输入目录路径后直接进入
    • 支持输入文件路径后进入父目录并选中目标文件
    • 支持输入相对路径(相对当前目录解析)
    • 支持 Ctrl+L 聚焦并全选路径输入栏
  9. 当前已具备基础收藏能力:
    • 支持通过工具栏按钮切换当前目录收藏状态
    • 支持通过 Ctrl+D 切换当前目录收藏状态
    • 收藏目录会出现在侧边栏默认位置之后
    • 收藏目录会持久化到本地配置文件,并在重启后恢复
    • 支持从侧边栏上下文菜单直接移除指定收藏目录
  10. 当前文件点击行为为只读模式:
  • 单击目录:选中
  • 双击目录:进入目录
  • 单击文件:选中并更新状态提示
  • 双击文件、选择栏 Open 或菜单 Open:调用系统默认打开动作
  1. 当前已具备基础选择模型:
  • Ctrl 点击:切换单项选中
  • Shift 点击:按可见列表做范围选择
  • 焦点项可以独立于选中集合存在
  • Ctrl+A:选择当前可见列表全部项
  • 方向键:移动焦点并切换到单选
  • Ctrl + 方向键:只移动焦点,不改选中集合
  • Shift + 方向键:按列表扩展选择
  • Home / End:跳到首项或尾项
  • Space:按焦点项更新选择;Ctrl+Space 切换焦点项选中状态
  1. 当前已具备桌面式拖框选择:
  • 支持从非条目区域开始矩形框选
  • 支持无修饰键拖框和 Ctrl 拖框
  • 拖框进入列表视口顶部/底部热区时支持自动滚动
  • 滚动过程中会基于最新可见布局持续重算命中结果
  • 到内容边界或结束拖框后会停止自动滚动
  1. 当前已接入最小写操作:
  • New Folder:在当前目录创建唯一名称的新文件夹,并立即进入重命名态
  • New File:在当前目录创建唯一名称的空文本文件,并立即进入重命名态
  • Rename:支持对当前选中项重命名
  • 新建项会等目录重新加载并确认可见后,再稳定进入重命名态
  • 进入重命名后输入框会自动聚焦并全选当前名称
  • 加载中或正在重命名时,会阻止再次发起新建或重命名
  • Delete:当前支持删除文件和目录,目录删除走递归删除
  1. 当前已接入最小传输操作:
  • Copy / Cut:把当前选中项放入应用内剪贴状态
  • Paste:粘贴到当前目录;复制支持同目录生成 Copy 后缀,剪切会在需要时自动生成不冲突名称
  • Duplicate:直接在当前目录复制当前选中项,并沿用同目录 Copy 后缀命名策略
  • Clear Clipboard:清空当前应用内复制/剪切状态
  • Paste / Duplicate 完成后,会等目录刷新完成再恢复新结果的选择状态
  • Paste / Duplicate 现在支持 Keep Both / Overwrite / Skip 三种冲突策略,并会持久化当前策略
  1. 当前上下文菜单分三层:
  • 项目菜单: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
  1. 当前删除语义已拆成双路径:
  • Delete:默认移动到系统回收站 / Trash
  • Shift+Delete:永久删除,不经过回收站
  • 项目菜单与工作区菜单都提供 Move to Trash / Delete Permanently
  1. 当前空白区域交互:
  • 左键点击空白区域:清空焦点和选中集合
  • 右键点击空白区域:弹出工作区菜单

已验证项

  1. 已在当前容器中安装 rustup stable 工具链,当前版本为 rustc 1.94.0 / cargo 1.94.0
  2. cargo test 已成功通过。
  3. cargo build 已成功通过。
  4. 程序已在 xvfb-run 提供的虚拟显示环境中成功启动,并持续运行到外部 timeout 结束;当前环境会打印一条 xdg color schemes 监听警告,但不影响启动。
  5. 已在 Windows 人工诊断确认一个 Slint 平台细节:文件列表中的中文文件名如果使用单行 Text 且开启 overflow: elide,可能会整段不显示;状态栏中文、固定中文文本、固定宽度绑定文本都可正常显示。这不是 Rust 数据链路问题,而是 Windows 下 overflow: elide 的中文渲染路径问题。

Windows / Slint 已知坑

  1. 文件列表名称列如果要显示中文文件名,不要默认依赖 overflow: elide
  2. 当前项目已确认:在 Windows 下,wrap: no-wrap + overflow: elide 会导致中文文件名整段空白,连后缀也不显示。
  3. 更稳的策略是:
    • 由外层容器负责 clip
    • 文件名 Text 保持单行,但不使用 overflow: elide
  4. 如果以后再次出现“状态栏中文正常,但列表中文文件名整段空白”,优先排查这里,而不是先怀疑 SharedString、编码或后台加载。

建议下一步

  1. 在真实桌面环境里手工验证拖框自动滚动的连续体验、边界停止和视觉反馈。
  2. 继续拆分 browser.rs 中与导航、文件操作相关的剩余职责,不要让它重新演变成新的“大文件”。
  3. 继续把当前选择模型打磨到更接近桌面文件管理器,例如更细的 Ctrl+Shift 组合行为和更多边界交互一致性。
  4. 逐步补上真正的跨目录复制/移动体验、系统剪贴板对接,以及更完整的冲突处理和打开错误反馈。

About

High-performance files manager for windows based mainly on Rust & Slint

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors