| Files | Last commit | Last update |
|---|---|---|
修 exe 缺少程序图标:构建时嵌入图标与版本资源 仓库里既没有 .ico 也没有资源编译步骤,两个 exe 都没有 RT_ICON/RT_GROUP_ICON, 装完后资源管理器、任务栏与开始菜单/桌面快捷方式只能显示系统通用空白图标。 图标不是运行时配置,必须写进 exe 资源段,因此在构建期解决: - 新增 assets/folderdock.ico(16–256 共 9 档)与同源 PNG,可用 scripts/gen-icon.py 重新生成; - build.rs 用 winresource 把图标与产品/文件版本编进两个 bin(非 Windows 目标跳过); - 主程序与安装器窗口用 src/icon.rs 的同一份设计设置 winit 窗口图标; - scripts/dist.ps1 增加资源段守卫:从成品 exe 用 PrivateExtractIcons 读 16/32/48/256 图标并核对版本号,缺失直接失败,避免再把无图标产物发出去; - 升到 0.2.6,README 补图标工具链说明与版本历史。 | 16 days ago | |
修卸载器误删别的安装的快捷方式与卸载登记 临时目录/默认目录里的卸载器按固定路径删 .lnk,并无条件删除唯一的 Uninstall\FolderDock 登记项。换目录重装后跑一次别处的卸载,新安装的启动器入口 (SunStarter 靠开始菜单/桌面 .lnk 识别应用)和「应用和功能」登记会一起消失: 程序文件还在,但启动器不认识、也无法从系统入口启动。 - remove_shortcuts 先读 .lnk 目标,只删指向本次 install_dir 主程序的快捷方式; - unregister_uninstall(install_dir) 先读 InstallLocation,不匹配就保留登记; - uninstall 只在目录里确有 folderdock.exe 或 uninstall.exe 时删文件, 防止 --install-dir 指错时清空无关目录; - 新增「快捷方式目标作用域」与「登记不匹配不删」的单测;版本 0.3.1。 本机安装已用 0.3.1 修复并实测:错误的 install-dir 卸载不再影响真实安装的 桌面/开始菜单快捷方式与登记项,正确的 install-dir 卸载仍能清干净临时安装。 | 15 days ago | |
FolderDock:自由拼装文件夹组合的 Windows 文件管理器(Rust + egui) 需求是「像 Zen 管理书签那样自由组装文件夹组合、快速搜索、并保留系统原生右键」。 仓库此前是空的,这里从零实现,并落下一套可复用的 GUI 取证工具。 三条主线: 1) 组 = 一组文件夹的组合(不是单个目录)。组可以为空,再用「+ 文件夹」把任意多个文件夹 拼进去;每格是一个文件夹面板,可并排、调宽、换序、独立导航。组级动作只针对「这一组 文件夹」(复制组合 / 复制文件夹列表 / 清空 / 删除),不提供任何单文件夹语义的入口。 2) 右键不用自绘替代品,直接弹 Windows shell 的 IContextMenu:文件/多选一套、文件夹背景 一套;子类化主窗口转发 IContextMenu2/3,让「发送到」「打开方式」这类动态子菜单真的能 展开(实测拿到 40 项文件菜单)。菜单期间拦 WM_PAINT,避免重入 eframe 的帧循环。 3) 搜索是先建索引再打字:后台按根增量遍历(尊重 .gitignore、跳过隐藏项、每根上限、根集合 LRU),查询时 nucleo 模糊 + 通配/扩展名/路径/排除语法。45k 条索引下单次查询 6–7ms。 图标优先用 shell 提取(SHGetFileInfoW → IImageList → DIB → 预乘 RGBA,按扩展名缓存), 取不到时回落到内置 SVG 路径数据的矢量图标。 顺带修掉几处只有实机跑才会暴露的问题:面板目录列举每帧重发请求导致列表永远停在「读取中」、 拖拽排序的落点写成了自己那一格(排序实际是死的)、行距与 ScrollArea 推算不一致、 中央区域不上色导致浅色主题下露黑缝、搜索 * 命中全部时 46ms→7ms(部分选择替代全排序)。 验证方式全部是实机取证(截图 + 像素测量 + 真实键鼠注入 + 日志时间线), 工具与结论在 .verify/(win.ps1 自带 selftest 12/12 PASS)。 | 24 days ago | |
| 17 days ago | ||
文件夹双击改为资源管理器打开,Ctrl+双击在面板内进入 原来双击文件夹直接 NavigateFolder,用户没法从面板一步打开系统资源管理器。 现在默认双击文件夹交给 Explorer(新增 Action::OpenInExplorer,复用 shell::reveal_in_explorer);按住 Ctrl 双击才在当前面板内导航,后退栈照常记录。 文件双击仍交给系统默认程序。 状态栏常驻中英双语说明(Key::FolderDoubleClickHint),让这条交互不用猜。 .verify/win.ps1 click 增加 -Ctrl:用 SendInput 在点击期间按住 Ctrl, 用于真实 Ctrl+双击的 GUI 取证(已实测普通双击与 Ctrl+双击两条路径)。 版本 0.3.0:用户可见的新交互。cargo test 82+1、clippy 零警告、0.3.0 分发包安装→启动→卸载均通过。 | 15 days ago | |
修 exe 缺少程序图标:构建时嵌入图标与版本资源 仓库里既没有 .ico 也没有资源编译步骤,两个 exe 都没有 RT_ICON/RT_GROUP_ICON, 装完后资源管理器、任务栏与开始菜单/桌面快捷方式只能显示系统通用空白图标。 图标不是运行时配置,必须写进 exe 资源段,因此在构建期解决: - 新增 assets/folderdock.ico(16–256 共 9 档)与同源 PNG,可用 scripts/gen-icon.py 重新生成; - build.rs 用 winresource 把图标与产品/文件版本编进两个 bin(非 Windows 目标跳过); - 主程序与安装器窗口用 src/icon.rs 的同一份设计设置 winit 窗口图标; - scripts/dist.ps1 增加资源段守卫:从成品 exe 用 PrivateExtractIcons 读 16/32/48/256 图标并核对版本号,缺失直接失败,避免再把无图标产物发出去; - 升到 0.2.6,README 补图标工具链说明与版本历史。 | 16 days ago | |
拖拽(拖出/拖入)+ 面板布局可选(X 行 × Y 列)+ 最小宽度与横向滚动 1) 拖拽: - **拖出**:面板里选中的项交给系统 OLE——自建 IDataObject(只提供 CF_HDROP)+ IDropSource + DoDragDrop,能拖到资源管理器或别的程序; - **拖入**:**不自建 IDropTarget**。实测 winit 0.30 已经把主窗口注册成 OLE 放置目标, 我们再去 RegisterDragDrop 只会拿到 DRAGDROP_E_ALREADYREGISTERED(0x80040101); 于是改走 winit→egui 既有的 raw.dropped_files / hovered_files,内外部拖拽走同一条通道; - 落点语义:落到**组合树** = 把拖进来的文件夹加进该组合(只改结构、**不动文件系统**); 落到**面板** = 复制进该文件夹(Shift 强制移动);落点不在有效目标上则忽略并记一行日志; 拖拽悬停时高亮可落点目标; - 文件操作 fsops::copy_into/move_into:同名自动改成 name (2)、拒绝拖进自身子树、 跨卷 rename 报 17 时退化成复制 + 删除,部分失败如实列进 FsOpReport。 2) 布局:设置里新增 Layout { columns, rows }(0 = 自动),顶栏「布局:…」菜单可切 一排 / N 列 / N 行 / 自定义 X 行 Y 列;网格每格等宽,一排布局可按格拖宽。 3) 最小宽度 + 横向滚动:面板最窄 320(再窄"名称 + 大小 + 修改时间"三列摆不下,文件名会看不清), 装不下时**不再压缩面板**,改为内容超出视口、由横向滚动条去够。 顺手修:布局菜单前缀的 ▦ 换成纯文字(换展示字体会变豆腐块,同 disclosure 箭头那个坑); 文件行循环里不再把 &data.entries[row] 绑成长借(起拖/选中需要可变借用 data); 拖放侧 set_modal_active 与原生菜单共用一份标记,UI 侧重复的那一对删掉。 验证:72 单测 + clippy 零警告。已实测:4 个 420 宽面板超出视口时保持原宽不压扁、视口底部出现滚动条 (截图);拖放载荷用系统 DragQueryFileW 回读、GetData(CF_HDROP) 返回的介质能解回同样路径(单测); 布局的列/行推算(含"面板多于格子时行数增长")有单测。 **未验证**:真鼠标的端到端拖拽(拖出去到资源管理器 / 从资源管理器拖进来 / 面板之间互拖)与 网格布局的实机截图——做这两项时前台正在跑别的应用(截图抓到的是那个应用),按"不打扰用户会话" 的规矩停手,留待机器空闲时补。 | 24 days ago | |
文件夹双击改为资源管理器打开,Ctrl+双击在面板内进入 原来双击文件夹直接 NavigateFolder,用户没法从面板一步打开系统资源管理器。 现在默认双击文件夹交给 Explorer(新增 Action::OpenInExplorer,复用 shell::reveal_in_explorer);按住 Ctrl 双击才在当前面板内导航,后退栈照常记录。 文件双击仍交给系统默认程序。 状态栏常驻中英双语说明(Key::FolderDoubleClickHint),让这条交互不用猜。 .verify/win.ps1 click 增加 -Ctrl:用 SendInput 在点击期间按住 Ctrl, 用于真实 Ctrl+双击的 GUI 取证(已实测普通双击与 Ctrl+双击两条路径)。 版本 0.3.0:用户可见的新交互。cargo test 82+1、clippy 零警告、0.3.0 分发包安装→启动→卸载均通过。 | 15 days ago | |
修 exe 缺少程序图标:构建时嵌入图标与版本资源 仓库里既没有 .ico 也没有资源编译步骤,两个 exe 都没有 RT_ICON/RT_GROUP_ICON, 装完后资源管理器、任务栏与开始菜单/桌面快捷方式只能显示系统通用空白图标。 图标不是运行时配置,必须写进 exe 资源段,因此在构建期解决: - 新增 assets/folderdock.ico(16–256 共 9 档)与同源 PNG,可用 scripts/gen-icon.py 重新生成; - build.rs 用 winresource 把图标与产品/文件版本编进两个 bin(非 Windows 目标跳过); - 主程序与安装器窗口用 src/icon.rs 的同一份设计设置 winit 窗口图标; - scripts/dist.ps1 增加资源段守卫:从成品 exe 用 PrivateExtractIcons 读 16/32/48/256 图标并核对版本号,缺失直接失败,避免再把无图标产物发出去; - 升到 0.2.6,README 补图标工具链说明与版本历史。 | 16 days ago | |
修 exe 缺少程序图标:构建时嵌入图标与版本资源 仓库里既没有 .ico 也没有资源编译步骤,两个 exe 都没有 RT_ICON/RT_GROUP_ICON, 装完后资源管理器、任务栏与开始菜单/桌面快捷方式只能显示系统通用空白图标。 图标不是运行时配置,必须写进 exe 资源段,因此在构建期解决: - 新增 assets/folderdock.ico(16–256 共 9 档)与同源 PNG,可用 scripts/gen-icon.py 重新生成; - build.rs 用 winresource 把图标与产品/文件版本编进两个 bin(非 Windows 目标跳过); - 主程序与安装器窗口用 src/icon.rs 的同一份设计设置 winit 窗口图标; - scripts/dist.ps1 增加资源段守卫:从成品 exe 用 PrivateExtractIcons 读 16/32/48/256 图标并核对版本号,缺失直接失败,避免再把无图标产物发出去; - 升到 0.2.6,README 补图标工具链说明与版本历史。 | 16 days ago | |
数据位置可配置 + 安装器(安装路径/数据路径可选,多平台结构);修「点文件夹不展示内容」 四条要求: 1) 配置数据可设位置 → 数据目录改为按**指针文件**解析: FOLDERDOCK_CONFIG_DIR → 指针文件(FOLDERDOCK_POINTER_FILE 可整体替换)→ 平台默认目录; 工作区与日志都跟着它走。设置页新增「数据保存位置」一节:显示当前目录 + 更改…(当场把工作区 搬过去、写好指针、后续保存直接落新位置)。 2) 安装包可设安装路径与数据路径 → 新增 src/install/:平台无关流程只有一份(复制载荷、写数据指针、 迁移数据、卸载默认保留用户数据);平台差异落在 install/platform/*.rs(Windows 用 IShellLinkW 建 .lnk + 注册表登记卸载项;Linux 写 XDG .desktop)。新增安装器 folderdock-setup (GUI 可选两个路径 + 两个开关;--silent/--uninstall/--finish 供脚本使用); scripts/dist.ps1 组装 dist/FolderDock/ 与 zip。 3) 安装模块按多平台设计 → 主流程与"程序在哪、数据在哪"的规则集中一处,平台差异只在 platform 文件里; 为此把 crate 拆成 lib + 两个 bin(主程序与安装器共用数据目录/日志/卸载逻辑,安装器不再复制代码)。 4) 点组合里的文件夹要展示它的内容 → 其实是两个 bug: - folder_leaves() 只认组合,文件夹节点返回空 → 点文件夹被当成"空组合",什么都不显示; - 树行/项目行用 Sense::click_and_drag 时,**单击(位移 0)也会走 drag_started/drag_stopped**, 于是单击被当成"位移为 0 的拖拽":不选中,反而改了结构。 两处都修了,并加了回归测试(选文件夹 = 它自己 / 不存在的节点 = 空)。 实机验证(都是真跑): - 点树里的文件夹 → 单面板显示该文件夹内容(截图 + 日志 选中节点 3 + 只列举它 12 项)。 - 指针链:只设 FOLDERDOCK_POINTER_FILE(不设 CONFIG_DIR)→ 应用从指针指向的目录读工作区与写日志。 - 安装器:静默安装(文件/指针/退出码)、快捷方式(开始菜单 + 桌面,用独立 COM 读回 target)、 注册表卸载项、从 dist/ 目录装一遍、以及**干净环境启动"已安装的那个 exe"** → 日志证明它用的是 安装时选的数据目录。 - 卸载:默认保留数据;主程序在跑时报告说清楚,并交给临时副本在它退出后把安装目录删干净 (重试 + 临时副本工作目录挪出安装目录,两处都是实测踩出来的坑)。 66 个单测 + clippy 零警告。 | 24 days ago | |
0.2.4:双击启动不再弹空控制台 主程序改成 Windows GUI 子系统。console 子系统下双击 exe 会被系统分配一个控制台窗口,关掉它进程也随之结束;日志本来就走文件,不需要控制台。 安装器无参数打开图形安装界面时主动 FreeConsole,摘掉 console 子系统带来的空窗口;--silent / --uninstall / --help 保留控制台,脚本仍能同步读 stdout 与退出码。 | 16 days ago | |
| 17 days ago |