dsh-open-workspace-folder:DSH Desktop 工作区右键打开、定位与重命名

前言

在 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;截至文档撰写时尚未发布。

典型用法

  1. 在左侧工作区树中找到目标工作区。
  2. 右键该工作区行(插件只处理带 data-row-key="workspace:<id>" 且带 aria-expanded 的工作区 treeitem;会话行与「未分组」伪工作区会被忽略)。
  3. 选择「打开工作区文件夹」,或「在资源管理器中定位」,或「重命名工作区」后输入名称,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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜