Back to home@wuwaka

dsh-clipboard-menu

Adds a right-click cut/copy/paste/select-all menu to DeepSeek Harness composer inputs.

Stars
0
Language
JavaScript
Created
Sep 11, 2026
Updated
Sep 11, 2026
GitHub repo

Introduction

dsh-clipboard-menu — DeepSeek Harness 右键剪贴板菜单插件

给 DeepSeek Harness 的输入框补上缺失的右键菜单

简体中文 | English

license stars topic tested

这是什么

在 DeepSeek Harness 的输入框上右键,弹出一个顺手的菜单:

在输入框上右键弹出的菜单:剪切 / 复制 / 粘贴 / 全选
菜单项说明
✂️ 剪切剪切选中的文字
📋 复制复制选中的文字
📥 粘贴把系统剪贴板的内容粘到光标处
🗂️ 全选选中输入框全部内容

没选中文字时,剪切与复制自动置灰。菜单文字跟随界面语言(中文 / English),配色跟随系统明暗主题。

为什么需要它

Electron 本身不提供右键菜单,而 DSH Desktop 的外壳也没有补上,所以桌面窗口里右键输入框什么都不弹——只能用 Ctrl+C / Ctrl+V

桌面主进程是打包好的 bundle(lib/main.js + electron-runtime),插件无法注入去挂 webContents 事件,所以这个插件把菜单做在渲染进程里。

🚀 安装

dsh plugin --profile <profile> add github:wuwaka/dsh-clipboard-menu

本地开发:

dsh plugin --profile <profile> add /path/to/dsh-clipboard-menu

装完重启宿主(或承载它的桌面端)即可生效。

🔒 生效范围

只在没有自带右键菜单的外壳里生效。

普通浏览器标签页本来就有原生菜单,而且比这个更好用(粘贴并匹配样式、搜索、检查元素……),所以插件在浏览器里完全不安装监听器,右键行为保持原样,不做降级。

判定依据:

信号来源
dsh-desktop-mode 等 URL 参数DSH Desktop 往渲染进程 URL 上打的标记
window.__DSH_DESKTOP_FILE_PATH__DSH Desktop 的 preload 桥
User-Agent 含 Electron/其他 Electron 外壳
__TAURI__ / __TAURI_INTERNALS__Tauri 外壳

以上都不满足(即普通浏览器)→ 不生效。想刻意在浏览器里用,可在插件加载前设置:

window.__DSH_CLIPBOARD_MENU_FORCE__ = true

⚙️ 实现方式

DSH 的输入框是 Lexical 富文本编辑器contenteditable),不能简单地给 value 赋值,因此粘贴按目标类型分三条路径:

目标粘贴实现
contenteditable(Lexical 编辑器)合成一个真实的 ClipboardEvent('paste') 带上 DataTransfer,交给 Lexical 自己的 paste 监听处理;失败再退回 execCommand('insertText')
<input> / <textarea>(React 受控)走原生 value setter 写值 + 派发 input 事件(React 才认)
xterm 终端同样派发合成 paste 事件

剪切 / 复制使用 document.execCommand('cut' | 'copy'),执行前先恢复右键那一刻保存的选区(contenteditable 用 Range,输入框用 selectionStart/End);复制失败时退回 navigator.clipboard.writeText

插件只拦截可编辑字段上的右键;应用与其他插件自己的右键菜单(JSON 复制按钮、侧边栏预览等)一律不受影响。

🧪 测试

npm install --no-save jsdom
node test/smoke.cjs

覆盖 18 项断言:菜单渲染、无选区时剪贴置灰、textarea 粘贴落点与 input 事件、合成 paste 事件抵达 contenteditable 监听、非可编辑目标不被拦截、浏览器里不安装监听器、强制开关可反向启用。

⚠️ 已知限制

  • navigator.clipboard.readText() 被拒绝,菜单会提示剪贴板不可用并建议用 Ctrl+V
  • 没有做「粘贴并匹配样式」

📄 许可证

MIT