主题
FolderDock
把文件夹拼成可嵌套的「组合」、一次铺成多面板的 Windows 文件管理器:系统原生右键 + 毫秒级模糊搜索
项目是做什么的
FolderDock 是给 Windows 用的文件管理器,但它要解决的不是「打开一个目录」,而是「同时在好几个目录之间干活」:把常用的文件夹按项目拼成组合,一次铺开成多面板,换项目就是换整套工作目录。
组合不是「一层装几个文件夹」的扁平列表,而是一棵可嵌套的树——项目(顶层组合)→ 任意子组合 → 任意文件夹,深度不限。选中哪个节点,主区域就把它子树里的全部文件夹并排开出来;面板顺序由树决定,结构在侧栏改,不用逐个去拖面板。
右键菜单不是自绘替代品:文件与多选走系统的 IContextMenu,所以「打开方式」「发送到」「属性」以及 7-Zip、Git Bash 这类第三方扩展项都在;搜索是后台增量索引加模糊匹配,45k 条索引下单次查询约 6–7 ms。
技术上是 Rust 2021 + egui 自绘界面,没有 WebView、也没有 Node 与前端构建,窗口与 shell 集成直接调 Win32(原生菜单、快捷方式、图标提取);分发是一个 zip 加一个安装器,安装器可分别指定安装路径与数据路径,卸载默认保留用户数据。
0.2 起把「拖」和「摆」补上了:面板里选中的文件能拖出到资源管理器或别的程序、也能从资源管理器拖进来,拖到组合树上是加进这个组合(只改结构、不动文件系统),拖到面板上是复制 / 移动进那个目录;右侧面板布局可以选「一排(可拖宽)」或任意 X 行 × Y 列网格。0.2.1 修的是「拖了完全没反应」——窗口根本没被注册成 OLE 放置目标;0.2.2 再修组合树内部的行拖拽:落点改由指针所在的那一行自己认领,跨行与「拖进组合」都能生效;0.2.3–0.2.5 依次修好改名竞争、双击启动的空控制台与 uninstall.exe 的卸载入口。
核心能力
- 组合是一棵可嵌套的树:项目(顶层组合)→ 任意子组合 → 任意文件夹,深度不限;选中任意节点,主区域就把它子树里的全部文件夹按深度优先并排成面板(选项目根 = 看整个项目,选一个文件夹 = 只看那一个)
- 多面板 Dock:每个文件夹一个面板,可并排、拖分隔条调宽度、各自返回 / 上级 / 刷新 / 关闭;面板标题第二行显示所属组合的面包屑;右侧布局可在顶栏「▦ 布局」里选「一排(可拖宽)」或任意 X 行 × Y 列网格(网格每格等宽,面板多于格子时行数自动增长,绝不隐藏面板)
- 拖拽走系统级 OLE:面板里选中的文件 / 文件夹能拖到资源管理器或别的程序;把文件夹拖到组合树上 = 加进这个组合(只改结构、不动文件系统);拖到面板上 = 复制 / 移动进该目录(同卷移动、跨卷复制,
Ctrl强制复制、Shift强制移动,同名自动改成name (2))。0.2.1 修掉「拖了完全没反应」——窗口漏注册 OLE 放置目标、拖出缺协议,修完四条路径(面板↔面板、面板→组合树、从资源管理器拖进来、拖出到资源管理器)实测都通了 - 右键是系统原生菜单:文件 / 多选直接走 Windows 的 IContextMenu(「发送到」「打开方式」「属性」以及 7-Zip、Git Bash 这类第三方扩展项都在),面板空白处是文件夹背景菜单(新建、粘贴、在此打开终端、属性)
- 组合可改名、换标识色、复制整棵子树;组合树内部的行拖拽在 0.2.2 修通:每一行各自判断指针是否落在自己身上,组合行中带 = 放进该组合,行的上半 = 插到它前面、下半 = 插到它后面,拖出树外松手不再按旧落点改结构
- 0.2.3 修改名:项目根同时画在两栏导致 egui ID clash、一次按键被两个输入框处理;现在只画来源栏的编辑器,非当前项目也能改名,空名被拒绝;文件夹节点不再提供改名(它只是真实路径,改显示名不会动文件系统)
- 0.2.4 双击启动不再多一个空控制台:主程序改为 Windows GUI 子系统,安装器无参数打开图形界面时主动 FreeConsole;
--silent/--uninstall/--help仍保留控制台 - 0.2.5
uninstall.exe双击即卸载:按文件名识别后直接弹卸载确认(默认保留用户数据);带参数时仍走命令行,并修真 GUI 卸载时临时副本提前放弃、留下uninstall.exe的问题 - 模糊搜索:对当前组合或整个项目建后台增量索引,输入即出——45k 条索引下单次查询约 6–7 ms,另有过滤语法
- 几万条目的列表用虚拟滚动不卡:多选与键盘导航、真实系统图标(取不到时回落内置矢量图标)、面板宽度各自记忆
- 设置页(Ctrl+,):语言、主题(深 / 浅 / 跟随系统)、强调色、展示字体(枚举系统字体,217 个可选)、字号、界面密度、隐藏文件与 .gitignore 开关、数据保存位置——全部即时生效并落盘
- 数据目录可迁移:真实位置记在指针文件里(
FOLDERDOCK_CONFIG_DIR→ 指针文件 → 平台默认),在设置页改路径会当场把工作区搬过去 - 安装器可分别指定安装路径与数据路径,支持
--silent/--uninstall;卸载默认保留用户数据,只有--purge-data才连数据一起删;0.2.0 起卸载不再留空壳——删完文件后目录要等句柄真正关闭才删得掉,现在会重试并交给临时副本收尾(实跑装 / 卸 exit=0、安装目录已清空) - i18n:所有展示文本走文案表(简体中文 / English),切语言连窗口标题一起变(英文槽里混 CJK 有测试钉住)
- Rust + egui 自绘界面,没有 WebView 也没有 Node:
cargo build一把梭,分发就是一个 zip 加一个安装器
界面截图
点击任意截图可放大查看;截图都是本机真实运行程序后截的。











关于截图
截图都是 0.2.1 发布版在本机真实运行时截的(0.2.2–0.2.5 修的是拖拽落点、改名、控制台与卸载入口,界面布局不变,故沿用):窗口 1416×899(设置页是模态窗口,上下两半各一张;布局菜单是 egui 内绘的浮层,原生右键菜单那两张因为是独立窗口只能整屏截),画面里的数据是自建的样本目录树(甲项目/前端/{src,ui,docs}、甲项目/工具/{scripts,tests}、乙项目/…,文件内容都是一行占位文本),跑的时候用 FOLDERDOCK_CONFIG_DIR 起隔离实例,没有读写本机真实的工作区。原生菜单里的第三方扩展项是本机装的(NanaZip、火绒、Git Extensions、VS Code、Zed、WPS、百度网盘…)。
获取方式
暂未提供公开二进制,构建步骤见仓库 README;也可以直接邮件问我。
发版记录
- v0.2.5(2026-10-21)—— 详见发版信息。