DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

smellingtiger /

smellingtiger/dsh-files-menu

Verified

Right-click menu for the DSH workspace file tree: copy path, relative path, name and reveal in the file manager.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@4464b464

dsh-files-menu

右侧栏「工作区文件」文件树的右键菜单。DSH 自带的文件树只有列目录(没有右键菜单), 这个插件给每一行补上菜单,把「复制文件地址」这类常用操作变成两次点击。

只作用于 Web 客户端,不改 app.asar,升级 DSH 后仍然有效。

截图

亮色主题:文件右键菜单

暗色主题:文件夹右键菜单

菜单项

文件行 文件夹行
打开 展开文件夹 / 折叠文件夹
复制文件地址 复制文件夹地址
复制相对路径 复制相对路径
复制文件名 复制文件夹名
在资源管理器中显示(仅桌面版可用时) 在资源管理器中打开(仅桌面版可用时)
  • 复制文件地址 / 复制文件夹地址:data-files-path 里的绝对路径,原样复制。
  • 复制相对路径:相对工作区根目录,分隔符统一成 /(例如 refs/README.md)。
  • 在资源管理器中显示:文件在资源管理器里选中;文件夹则直接打开(openWorkspacePath)。 只有宿主报告支持时(remote.session.canOpenWorkspacePath())才出现这两项。
  • 复制成功后底部弹出「已复制」提示,1.4 秒后消失。

交互细节:

  • 右键任意一行打开;ESC、点空白处、滚动、窗口失焦都会关闭。
  • Shift+F10 或菜单键也能打开,打开后可用 ↑ / ↓ / Home / End 在菜单项间移动,ESC 回到原行。
  • 菜单靠近窗口右下角时会自动往回收,不会超出窗口。
  • 文件夹行右侧的展开状态决定显示「展开文件夹」还是「折叠文件夹」。
  • other 类型行(例如挂载点)和文件树以外的区域保留浏览器原生右键菜单。

安装

收录到插件市场后,可以直接在 DSH 的 插件 → 发现 里搜索 dsh-files-menu 一键安装。 在那之前(或不想用市场):

在 DSH 的 profile 目录里建一个联结,并把这个包登记为 bundle。以桌面版 profile (%USERPROFILE%\.dsh\profiles\desktop)为例:

# 1. 建联结
New-Item -ItemType Junction `
  -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-files-menu" `
  -Target "<本仓库路径>"

# 2. 在 profile 的 package.json 里加依赖与 bundle(也可以直接跑本目录的 install.ps1)
#    "dependencies": { "dsh-files-menu": "link:<本仓库路径>" }
#    "dsh.profile.bundles": [ ..., "dsh-files-menu" ]

也可以从 GitHub 安装(无需先克隆):

dsh plugin --profile desktop add github:smellingtiger/dsh-files-menu

或者直接使用本目录里的一键脚本(会自动判断 $env:DSH_HOME、备份 package.json、写配置):

powershell -ExecutionPolicy Bypass -File .\install.ps1
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1   # 卸载

安装或改动后必须完全退出 DSH 再启动。 插件的 bundle 列表在启动时读取, 运行期间新增的 bundle 不会被当前进程加载(资源路由会返回 404)。

结尾自检

启动后:

  1. 右侧栏「工作区文件」里右键任意文件,应出现五项菜单。
  2. 点「复制文件地址」,在任意输入框粘贴,应是完整绝对路径。
  3. 桌面版应能看到「在资源管理器中显示」并正常打开资源管理器。

没出现菜单时,先确认 DSH 是完全重启(托盘退出,而不是只关窗口),并检查 %USERPROFILE%\.dsh\profiles\desktop\package.json 里同时存在依赖与 bundle 条目。

实现说明

文件树由 @deepseek-ai/dsh-client-ui-sidebar-files 渲染,没有提供逐行的 slot, 所以本插件在 apply 里用事件委托监听 contextmenu,命中 li[data-files-entry][data-files-path] 后自己画菜单:

  • 菜单样式只用 --dsw-* 设计令牌,跟随明暗主题;不 require @deepseek-ai/dsh-client-ui-primitives,避免版本耦合。
  • 所有 DOM、监听器、样式都由 ctx.effect 管理,插件卸载时一并清理。
  • 需要 locale、remote、remote.session 三个服务;桌面能力探测失败时 静默隐藏「在资源管理器中…」项,其余功能照常可用。

开发调试

test/ 里有一个纯前端测试台:它伪造了文件树的 DOM 和客户端 ctx,加载 client.js,然后在无头 Edge 里跑断言并截图(CDP 驱动,不需要安装任何 npm 依赖)。

node test/verify.mjs     # 断言 + 截图到 test/out

test/tree.html?selftest=1 可以直接在浏览器里跑同一套断言,页面标题变成 SELFTEST-PASS 即全部通过。Edge 不在默认路径时,用 EDGE_PATH 环境变量指定。

—/ 5

No ratings yet

Verified DSH bundle

Commit 4464b464356a

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout