Skip to content

dsh-better-sidebar powershell中,ctrl+c快捷键会打断,ctrl+shift+c会打开浏览器的样式表 #465

Description

@Chen5173

提交前确认 / Pre-submit checklist

  • 我已搜索现有 issue,确认没有完全相同的条目(只有完全一致才算重复)| I searched existing issues and confirmed there is no exact duplicate (only exactly identical issues count as duplicates)
  • 我已确认使用最新版本 dsh-better-sidebar / I confirmed I am on the latest dsh-better-sidebar version

运行环境 / 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, 会打开浏览器的样式表

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions