提交前确认 / Pre-submit checklist
运行环境 / Environment
DSH Web(浏览器访问)/ DSH Web (browser access)
DSH Web 版本 + 浏览器 / DSH Web version + Browser
DSH Web GUI(浏览器标签页,非 Electron 壳;dsh-desktop-launcher 也只是打开浏览器) dsh-web-ui-all 聚合包 → 右侧面板 dsh-better-sidebar 终端为 @xterm/xterm(v5.5 内嵌在 lib/client-terminal.js chunk 中) 系统:Windows(PowerShell)
Desktop 实现仓库 / Desktop repo(源头 / upstream)
No response
插件版本 / Plugin version
No response
类别 / Category
🐛 Bug(功能异常 / Something is broken)
描述 / Description
Web GUI 右侧面板的终端(dsh-better-sidebar 里的 xterm.js)无法用常规快捷键复制文本:
Ctrl+C:在没有选区时被当作 SIGINT 发给 shell(中断命令)——这是终端正常行为;
Ctrl+Shift+C:在浏览器(Chrome/Edge/Firefox)里是“审查元素 / Inspect”快捷键,浏览器在把按键交给页面之前就拦截掉了,xterm.js 永远收不到这个按键,所以无法用它复制。
结果是在浏览器环境里,终端缺少一个可用的“复制”快捷键(Ctrl+Insert 和右键 → 复制虽然可用,但对很多用户不直观,且 Shift+Insert 在浏览器里不能粘贴)。
补充信息 / Additional context
在 TerminalView.tsx 创建 Terminal 后加一个自定义按键处理:
term.attachCustomKeyEventHandler((event) => {
if (
event.type === 'keydown'
&& event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey
&& (event.key === 'c' || event.key === 'C')
&& term.hasSelection()
) {
// 有选区:复制并吞掉按键(不发 SIGINT);复制失败则放行
return !document.execCommand('copy')
}
return true
})
说明:
execCommand('copy') 会触发 xterm 内置的 copy 事件处理器,把终端选区写入剪贴板;
浏览器层面 Ctrl+Shift+C 无法被页面捕获,所以复制必须另寻按键,上述 Ctrl+C + 选区 是兼容性最好的方案;
若希望更灵活,也可考虑把该行为做成可配置项(例如 copyOnSelect / 自定义复制快捷键),或提供 copyOnSelect 支持(当前内嵌的 xterm 版本未启用该选项)。
预期结果
对齐 Windows Terminal / VS Code 的标准终端习惯:
有选区时按 Ctrl+C → 复制选区(不再发 SIGINT)
无选区时按 Ctrl+C → 照常发 SIGINT 中断
详情 / 复现步骤
打开侧边栏的powershell
使用ctrl+c复制,会打断
使用ctrl+shift+c, 会打开浏览器的样式表
提交前确认 / Pre-submit checklist
运行环境 / Environment
DSH Web(浏览器访问)/ DSH Web (browser access)
DSH Web 版本 + 浏览器 / DSH Web version + Browser
DSH Web GUI(浏览器标签页,非 Electron 壳;dsh-desktop-launcher 也只是打开浏览器) dsh-web-ui-all 聚合包 → 右侧面板 dsh-better-sidebar 终端为 @xterm/xterm(v5.5 内嵌在 lib/client-terminal.js chunk 中) 系统:Windows(PowerShell)
Desktop 实现仓库 / Desktop repo(源头 / upstream)
No response
插件版本 / Plugin version
No response
类别 / Category
🐛 Bug(功能异常 / Something is broken)
描述 / Description
Web GUI 右侧面板的终端(dsh-better-sidebar 里的 xterm.js)无法用常规快捷键复制文本:
Ctrl+C:在没有选区时被当作 SIGINT 发给 shell(中断命令)——这是终端正常行为;
Ctrl+Shift+C:在浏览器(Chrome/Edge/Firefox)里是“审查元素 / Inspect”快捷键,浏览器在把按键交给页面之前就拦截掉了,xterm.js 永远收不到这个按键,所以无法用它复制。
结果是在浏览器环境里,终端缺少一个可用的“复制”快捷键(Ctrl+Insert 和右键 → 复制虽然可用,但对很多用户不直观,且 Shift+Insert 在浏览器里不能粘贴)。
补充信息 / Additional context
在 TerminalView.tsx 创建 Terminal 后加一个自定义按键处理:
term.attachCustomKeyEventHandler((event) => {
if (
event.type === 'keydown'
&& event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey
&& (event.key === 'c' || event.key === 'C')
&& term.hasSelection()
) {
// 有选区:复制并吞掉按键(不发 SIGINT);复制失败则放行
return !document.execCommand('copy')
}
return true
})
说明:
execCommand('copy') 会触发 xterm 内置的 copy 事件处理器,把终端选区写入剪贴板;
浏览器层面 Ctrl+Shift+C 无法被页面捕获,所以复制必须另寻按键,上述 Ctrl+C + 选区 是兼容性最好的方案;
若希望更灵活,也可考虑把该行为做成可配置项(例如 copyOnSelect / 自定义复制快捷键),或提供 copyOnSelect 支持(当前内嵌的 xterm 版本未启用该选项)。
预期结果
对齐 Windows Terminal / VS Code 的标准终端习惯:
有选区时按 Ctrl+C → 复制选区(不再发 SIGINT)
无选区时按 Ctrl+C → 照常发 SIGINT 中断
详情 / 复现步骤
打开侧边栏的powershell
使用ctrl+c复制,会打断
使用ctrl+shift+c, 会打开浏览器的样式表