前言¶
在 DSH Desktop 里管理多个工作区时,侧栏能列出路径和会话,但要从列表跳到本机目录,往往还要记路径、自己开资源管理器或 Finder。侧栏也支持重命名,却没有和「打开文件夹」放在同一套快捷操作里。下面介绍社区客户端插件 dsh-open-workspace-folder(维护者 Homeless-Attila),它在工作区行上提供右键菜单,把打开本地目录、在文件管理器中定位、复制绝对路径和就地重命名收在一处,并复用 DSH 自带的 Session Remote 与工作区改名逻辑,行为与桌面端「Open In」及侧栏重命名一致。
这是什么¶
dsh-open-workspace-folder 是面向 DSH Desktop 的客户端插件(platform: web),体量很小:无网络请求、无子进程。Host 侧 index.js 为空实现;功能集中在 client.js,通过 dsh.bundle.patch 挂进 desktop profile 的客户端 bundle。当前版本在 package.json 中为 1.1.0,许可证 MIT。插件尚未发布到 npm;安装需已安装 DSH Desktop,且 dsh 在 PATH 中。
核心功能¶
README 中列出的能力如下,均可从已公开文档核对:
- 打开工作区文件夹:在系统文件管理器中打开工作区根目录;菜单项可用,回车键同样触发。Windows 用资源管理器,macOS 用 Finder,Linux 用
xdg-open,与 DSH「Open In」一致(内部调用session.openWorkspacePath())。 - 在资源管理器中定位:使用
action: 'reveal',在文件管理器中选中该目录。 - 重命名工作区:菜单内输入新名称,走
workspace.rename(或优先ctx.get('workspaces').rename),与侧栏重命名同一套逻辑;重启后仍生效,其他窗口会同步。名称为空或与已有工作区重名时,在菜单底部提示,不会静默失败。 - 复制路径:将工作区绝对路径写入剪贴板。
交互方面:菜单跟随 DSH 明/暗主题;支持 Esc 关闭、方向键导航、点击外部关闭;图标为内联 SVG,无外部字体、图片或 CDN。
若 DSH 运行在普通浏览器中、宿主不允许打开本地路径,打开相关项会显示「当前窗口不支持打开本地文件夹」;复制路径与重命名仍可用。
安装与启用¶
安装后需完全退出并重新启动 DSH Desktop(仅刷新窗口不够),新的客户端 bundle 才会加载。桌面端没有客户端 HMR,改代码后同样需要完全重启。
从 GitHub 直接安装¶
dsh plugin --profile desktop add github:Homeless-Attila/dsh-open-workspace-folder
该命令会把插件目录写入 desktop profile(link: 或 git 依赖),并根据包内 dsh.bundle.patch 把 dsh-open-workspace-folder 追加到 dsh.profile.bundles,并校验 bundle patch 可组合。
从本地目录安装¶
若已在本地取得插件目录(路径按你机器上的实际位置替换):
dsh plugin --profile desktop add .\dsh-open-workspace-folder
以 link: 方式安装时,移动插件目录后需要对新路径再执行一次 add。
README 说明:发布到 npm 后可直接 dsh plugin --profile desktop add dsh-open-workspace-folder;截至文档撰写时尚未发布。
典型用法¶
- 在左侧工作区树中找到目标工作区。
- 右键该工作区行(插件只处理带
data-row-key="workspace:<id>"且带aria-expanded的工作区treeitem;会话行与「未分组」伪工作区会被忽略)。 - 选择「打开工作区文件夹」,或「在资源管理器中定位」,或「重命名工作区」后输入名称,
Enter保存、Esc取消。
重命名约束与侧栏相同:名称不能为空,且不能与已有工作区重名;错误信息出现在菜单底部,菜单保持打开便于重试。
卸载:
dsh plugin --profile desktop remove dsh-open-workspace-folder
然后重启 DSH Desktop。
实现要点(供排查与二次开发)¶
插件通过 ctx.get('slots') 向 shell.overlay 注册菜单组件,并从 useWorkspaces 订阅工作区快照。打开与定位示例(摘自 README):
const remote = ctx.get('remote')
await remote.session.openWorkspacePath({ path })
await remote.session.openWorkspacePath({ path, action: 'reveal' })
重命名示例:
const remote = ctx.get('remote')
const result = await remote.workspace.rename({ workspaceId, title })
客户端模块需导出 Cordis 注入 exports.inject = ['remote', 'remote.session'],否则运行时会报无法取得 remote.session。
本地校验:
npm run check # node --check index.js 与 client.js
npm test # 冒烟:bundle 注册、导出、无网络调用
适用场景与注意¶
适合长期在 DSH Desktop 里切换多个本地工作区、希望少记路径、少点几步就能进资源管理器的开发者。插件以当前 dsh 进程权限在客户端运行;安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,自行判断是否纳入自己的 desktop profile。
已知限制:菜单依赖工作区行的 DOM 结构(data-row-key、aria-expanded 等);DSH 前端若调整这些标记,需同步改 client.js。
DSH 生态强调「一切皆插件」;社区目录站点与 DeepSeek、幻方无官方从属关系,本插件来自社区维护者,非官方应用商店内置项。
结尾¶
dsh-open-workspace-folder 把「打开文件夹、定位、复制路径、重命名」接到工作区右键菜单上,并委托 DSH 已有 API,避免自拼系统命令。目录页:SkillHub - dsh-open-workspace-folder;源码与完整说明:GitHub - Homeless-Attila/dsh-open-workspace-folder。