Skip to content

FolderDock ​

把文件夹拼成可嵌套的「组合」、一次铺成多面板的 Windows 文件管理器:系统原生右键 + 毫秒级模糊搜索

当前版本v0.2.5(2026-10-21)
Git 标签v0.2.5(另有 v0.2.4、v0.2.3、v0.2.2、v0.2.1、v0.2.0、v0.1.0)
状态可用(0.2.5,本站不分发安装包,构建与打包见仓库 README)
平台Windows 10/11(原生 shell 集成);Linux 有 XDG .desktop 安装实现,macOS 打包未实现
技术栈Rust 2021 + egui/eframe 0.36(无 WebView、无 Node)+ 直接调用 Win32 shell(IContextMenu / IShellLinkW / 图标提取)+ nucleo-matcher 模糊匹配
许可Apache-2.0

项目是做什么的 ​

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 加一个安装器

界面截图 ​

点击任意截图可放大查看;截图都是本机真实运行程序后截的。

主界面与多面板
主界面与多面板
三块面板并排(src / ui / docs 三个文件夹同时铺开),每块面板标题第二行是所属组合的面包屑「甲项目 / 前端」;左列是项目(甲项目 / 乙项目),右列是当前项目的组合树(前端 3 个文件夹、工具 2 个);底栏写着「3 个文件夹」,右下角是索引状态「索引 18 项 / 7 个根」
布局:一排 / 网格 / 自定义行列
布局:一排 / 网格 / 自定义行列
顶栏「布局:一排(可拖宽)」菜单展开:一排(可拖宽)/ 2 列 / 3 列 / 4 列 / 2 行 / 3 行,以及「列数 0 行数 0」的手动档位(0 = 自动)——底部一行说明「网格每格等宽;一排可拖分栏」
选中「2 列」后的网格
选中「2 列」后的网格
同一个实例选「甲项目」(5 个文件夹)再选「2 列」:面板按 2 列 × 3 行铺开(src / ui / docs / scripts / tests),顶栏按钮变成「布局:2 × 3」,底栏「5 个文件夹」——面板多于格子时行数自动增长,不会藏面板
模糊搜索
模糊搜索
搜索框里输入 ts 后的结果浮层:「7 条匹配」,每条给出命中的文件与所在目录(路径中段省略),底部提示「↑↓ 选择 · Enter 打开 · Esc 关闭」
文件右键(系统原生菜单)
文件右键(系统原生菜单)
在文件上右键弹出的就是 Windows 自己的 shell 菜单(弹出菜单是独立窗口,只能整屏截):打开、NanaZip、火绒安全软件、在记事本中编辑、通过 Code / Zed 打开、Git Extensions、WPS、百度网盘、发送到、属性…… 这些第三方扩展项全在,因为它调的是系统的 IContextMenu,不是自绘替代品。画面里的扩展是本机装的
文件夹背景右键
文件夹背景右键
面板空白处的文件夹背景菜单:新建、授予访问权限、Git 扩展、属性等。菜单内容由系统与已装扩展决定——这台机器上「粘贴」因剪贴板为空被系统隐藏,也没装「在此打开终端」的扩展。这张用仓库自带的 FOLDERDOCK_DEBUG_MENU 钩子触发(原生菜单是模态的,弹出时没法再注入鼠标)
设置页(上半)
设置页(上半)
设置模态:语言(简体中文 / English)、主题(深色 / 浅色 / 跟随系统)、强调色、展示字体(可直接输入过滤系统字体)
设置页(下半)
设置页(下半)
同一设置页往下滚:字号、界面密度、隐藏文件与 .gitignore 开关、数据保存位置——改完当场生效,数据位置还会把工作区搬过去
浅色主题
浅色主题
切到浅色主题后的同一个工作区:面板、组合树与状态栏一起换色,不是只改某一处
英文界面
英文界面
切到 English:顶栏(This combo / + Folder / + Combo)、列头(Name / Size / Modified)、状态栏(3 folders、Index: 18 entries / 7 roots)全跟着变;窗口标题是应用名,中英同名所以仍显示 FolderDock
拖拽改结构(拖拽中)
拖拽改结构(拖拽中)
正在拖组合树里的 ui 行:该行高亮,下方画出落点提示线(插到该行之后)。松手后顺序由 src / ui / docs 变成 src / docs / ui——0.2.2 起每一行各自认领落点,跨行与「拖进组合」都生效

关于截图

截图都是 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;也可以直接邮件问我。

发版记录 ​