Passer au contenu principal
K

Remu-desktop-shortcuts

khaliljar/remu-desktop-shortcuts

Adds configurable shortcuts to DSH Desktop, including Developer Tools in supported editions; ideas and contributions are welcome.

Installer

dsh plugin --profile web add github:khaliljar/remu-desktop-shortcuts

README

Remu Desktop Shortcuts

给 官方 DeepSeek Harness Desktop 和 社区版 dsh-desktop 用的快捷键小插件:把「我又想伸手拿鼠标了」的时刻,变成一个自己喜欢的组合键。

最新加入的是「会话轮切板」——按住一个键,像 Alt+Tab 一样把这次打开过的会话横排摊开,边看边选,松开手才真正切过去。它不是系统热键,也不会抢你的 Alt+Tab,只在 DSH Desktop 窗口里工作。

**适用范围:Desktop 内容页。**普通浏览器中的 DSH Web 暂不支持;它也不是系统全局热键。下面的功能和安装说明针对本仓库的 0.4.6 代码;安装前请看下载到的 package.json 版本。官方和社区版的行为不完全相同,详情见兼容与实测。

0.4.6 这次更新了什么

  • **新增「会话轮切板」:**按住 Alt 连按一个你录制的普通键(例如 Alt+Q),把本次启动后打开的会话横排成卡片;松手才切换,中途可按 Esc 反悔。Shift+Alt+Q 反向,Ctrl+Alt+Q 固定板可用键盘或鼠标完整操作。仅 DSH NEXT + Windows 启用。
  • **一次录制、三个派生键:**只要录一次 Alt + 普通键,插件据此生成正向、反向、固定三个组合。如果任何一个已被占用,一个都不保存,原键位保持不变。
  • **移除候选不等于删除会话:**卡片上的 × 或 Delete 只把这张卡从本次候选里拿掉,绝不归档真实会话;重新访问该会话会自动回列。
  • **实际验证:**轮切板已在 Windows DSH NEXT 环境实际按 Alt+Q 完成轮切确认;本地 31 项自动化测试全部通过。其他系统与其余动作尚未逐项实测。

为什么要做这个

我每天同时开着好几个会话:一个在写代码,一个在查资料,一个在等长任务跑完。DSH 的侧栏能点,会话速切也能连按轮换,但轮换是盲的——你按下去只知道「切了」,不知道切到的是哪个,切错了还得再按几次绕回来。那种「明明是我自己的东西,却要靠记忆去摸」的感觉,很别扭。

我想要的其实只有一件事:把选择权还给眼睛。摊开、看、再决定。就像 Windows 的 Alt+Tab——它之所以好用,不是因为它能切换,而是因为它在切换之前先让你看见。

灵感也正来自这里:Alt+Tab 的交互模型几乎是被验证过的最舒服的切换方式之一,按住键不放反复扫,松手确认,中途反悔按 Esc。但有一个关键差别——系统的 Alt+Tab 我不能、也不该去接管。所以我做的是一个「长得像、但只活在自己应用里」的版本:它不去碰系统热键,也不在你的桌面到处铺东西,只在 DSH 的窗口里,为你自己的会话服务。

顺带一提,做这个东西时最花时间的不是画卡片,而是那句「松开 Alt 才提交」。DSH NEXT 的原生快捷键桥只转发按下、不转发松开。要么老老实实确认松开这件事能不能被可靠观测,要么就只能偷偷改成「按回车确认」——后者看起来一样能用,但它已经不是你想要的那个东西了。我把证据查清楚、把不可靠的情形(焦点在内嵌网页里)改成拒绝打开,才算敢把它交出来。

会话轮切板

只在 DSH NEXT 的 Windows Desktop 上注册。其他环境(官方 Desktop、社区版、macOS/Linux、普通 Web)连动作都不会出现,不会给你留下按了没反应的键位。

只录一次:Alt + 一个普通键

在 设置 → 自定义快捷键 的最下方,点 + 录制轮切键,按住 Alt 再按一个普通键(例如 Alt+Q)。插件会据此派生三个组合:

组合作用
Alt+Q打开临时板;按住 Alt 反复按,高亮向右移动
Shift+Alt+Q高亮向左移动(反向)
Ctrl+Alt+Q固定板(松开 Alt 也不消失),Enter 或点卡片打开

保存是一次性的、原子的:插件先检查派生出的三个组合有没有被别的动作占用,只要有一个冲突或本身不合法,就一个都不写,并在设置页说明冲突,原来的键位保持不变。这比「先保存一半、剩下的让你自己收拾」诚实。

临时板:松开 Alt 才真的切过去

  • 第一次按下时,高亮的是上一个访问过的会话,此时不会发生任何跳转。
  • 按住 Alt 继续按基础键,高亮在候选之间移动;Shift+Alt+基础键 反向。
  • 松开 Alt 才提交:高亮的会话被打开,板随即关闭。
  • Esc 取消;窗口失焦同样取消(不会「猜」你想去哪);长按不会触发自动重复。

这里有一个硬性前提:只有真的能观察到 Alt 松开,才允许做「松手即切换」。DSH NEXT 的原生快捷键桥只转发按下、不转发松开,所以插件监听的是页面自己的 keyup。如果焦点落在内嵌网页(iframe / webview)里,这条通道不可靠——此时插件拒绝打开并给出提示,而不是改用计时器去猜。这就是为什么它宁可不响应,也不假装成功。

固定板:用键盘或鼠标都能干净退出

Ctrl+Alt+基础键 打开固定板后,松不松 Alt 都不影响它显示。可以继续用基础键/反向键或 ←/→ 移动、Enter 打开、点击卡片打开、Esc 取消、点击板外区域取消。再次按下 Ctrl+Alt+基础键 是「取消」,不会悄悄提交当前高亮。

板上有什么,以及「当前会话」的位置

每张卡片显示会话标题、工作区名称和「当前」标记。当前正在看的会话固定是第一张,但它不在移动环里:高亮永远不会落在它上面,因为「切到自己」是没有意义的动作。

候选来自本次 DSH 启动后真正打开过的会话(跨工作区),沿用插件原有的过滤:不含子 Agent、不含已归档、不含从未开始的空白草稿。候选不足两个时不弹板,只留一句轻提示,不替你猜。

移除候选 ≠ 删除会话

卡片右上角的 ×(或按住 Alt 时按 Delete)只是把这张卡片从本次启动的候选里拿掉,绝不会归档或删除真实会话。被拿掉的会话在你之后重新访问它时会自动回到候选里;仅仅重渲染页面不会让它立刻弹回来。重启 DSH 后这份临时移除记录清零。

已知边界

  • 只在 NEXT + Windows 上启用,其他组合未实测,也未做兼容处理。
  • 打开板时焦点若在输入框里,取消会把焦点还回去;提交则不会(你已经换了会话)。
  • 板上不显示消息摘要:插件没有低成本可信来源去取「最近一句」,而全库扫消息代价太大,所以退化为标题 + 工作区。
  • 真机按键在 Windows DSH NEXT 上已确认可用;多屏、输入法干扰、以及按键与 DSH 自身方向键处理同时生效时的观感尚未逐一验证。

我平时用社区版 dsh-desktop,最喜欢增强模式:窗口上方那条有点突兀的灰色终于不见了。但随着灰条一起消失的,还有顺手打开 DevTools 的入口;连 Ctrl+Shift+I 也调不出来。于是我请 GPT 帮忙写了第一版插件——那时它只做一件事:让我能用自己设的快捷键打开开发者工具。

后来我又发现,每天真正在意的都是些很小的动作。浏览器可以 Ctrl+数字 切标签页,我也想这样切 DSH 的功能页;从功能页回到聊天时,总要再拿鼠标点一下输入框,我也想一步到位。于是有了会话速切、正文聚焦、返回上一个会话……它们不是凭空设计的功能清单,而是我用着用着,确实想要的东西。

当然,不用鼠标、只用键盘完成一串操作,真的很有一点 hack 感。这也是我想把这个小插件分享出来的原因。如果你也有「这里明明很适合加个快捷键」的瞬间,欢迎来聊。

能做什么

除下方特别注明的固定编号键外,可录制动作默认都不绑定键位:你自己选择,冲突时由 DSH 的快捷键服务校验,不改 Enter 发送行为,也不抢系统级快捷键。

动作实际效果说明
返回会话从功能页回到当前会话,不创建新会话。官方、社区 Desktop 均提供。
返回会话并聚焦输入框回到当前会话,让光标进入消息输入框,省一次鼠标点击。需要已有会话及可用的输入框。
聚焦会话内容(方向键滚动)将焦点从输入框移到当前会话正文的滚动区,随后可用方向键正常滚动。不切换会话,也不改正文。
速切最近会话(连按轮换)按一次切到下一会话;约 1.8 秒内连按,在当前可见的普通会话中继续轮换。列表也可能包括可见但尚未访问的会话;不跳到归档会话或子 Agent 会话。
返回上一个会话(往返切换)类似 cd -:在最近访问过的两个会话间往返。本次页面加载后先访问至少两个会话;重新加载会重置这份临时访问记录。
会话轮切板(Alt+K / 反向 / 固定)按住 Alt 连按基础键,把本次打开过的会话横排摊开;松开 Alt 才切到高亮那个。只需录一次 Alt + 普通键。仅 DSH NEXT + Windows,详见上文会话轮切板。
切换到功能页 1~9为每个编号分别录制快捷键;1~8 对应左侧当前功能页顺序,9 对应最后一个功能页。目标页尚未出现时不会乱跳;官方 Desktop 也可用录制方式配置。
开发者工具用自己录制的键切换 DevTools。社区 Stable 2.0.18 使用旧桥,DSH NEXT 2.0.22-next 使用其受控桌面指令;NEXT 的自定义录制和按键打开 DevTools 已在 Windows 实机确认。无桥的官方 Desktop 不显示此动作,请用应用菜单。

另外:社区 Stable 2.0.18 / Windows 保留固定 Ctrl+1~8(按左侧功能页顺序)、Ctrl+9(最后一个功能页),无需录制;与已有绑定冲突时不接管。DSH NEXT 与官方原生 Desktop 不提供这组固定键,可以给上表中的九个功能页动作分别录制键位。系统 Alt+Tab 不受影响。

安装与第一次使用

推荐:在 Desktop 中安装

  1. 打开你实际使用的 DSH Desktop,在侧栏进入 插件 → 添加插件;也可以点「添加插件」旁的箭头,选 安装第三方插件。如果这里显示不可用,先确认当前 Desktop 使用了可管理插件的 Profile。
  2. 在安装框里填入本仓库地址:https://github.com/KhalilJar/Remu-desktop-shortcuts.git,点击 安装。它接受 Git 地址,不需要把单独的 client.js 复制到 DSH 的安装目录。
  3. 安装成功后点击 立即启用;在已安装插件中确认 kana-desktop-shortcuts 已启用。如果界面提示需要重启,就按提示重启 Desktop。
  4. 打开 设置 → 自定义快捷键,选择动作,点击 + 录制快捷键;按下希望使用的组合键,确认没有冲突提示。关闭设置后,回到 Desktop 内容页实际按一次试试。除了社区 Stable Windows 的固定 Ctrl+数字,本插件不会替你预设键位。

**版本提醒:**请以实际下载到的 package.json 和安装器显示的版本为准。0.4.6 起包含「会话轮切板」;0.4.5 起包含 DSH NEXT DevTools 适配及录制控件修复;若仍是 0.4.3,则有其他 Desktop 快捷键动作,但 NEXT 不显示 DevTools 动作。仅更新 README 文字不会更新你已安装的插件。

Desktop 安装器拉取 Git 仓库失败?使用本地目录

在仓库页面用 Code → Download ZIP 下载并解压,或者在装有 Git 的终端执行:

git clone https://github.com/KhalilJar/Remu-desktop-shortcuts.git

这条命令把仓库下载到当前目录下的 Remu-desktop-shortcuts 文件夹。然后回到上面的 添加插件,填入解压/克隆后的完整目录绝对路径——即同时包含 package.json 和 cordis.patch.yml 的文件夹,不是其中某一个文件。安装源或 GitHub 连接失败时,本地目录方式不需要由 DSH 再去下载该仓库;若安装器报告依赖脚本需要授权,请先看清具体包名和风险,不要盲点批准。安装本地旧版也不会凭空获得 0.4.5 的 NEXT DevTools 与录制控件修复。

如果你习惯命令行,Desktop 自带的「打开 DSH 终端」也提供 dsh plugin add <Git 地址或本地绝对路径>;先用图形界面更容易看见安装失败原因和启用状态。不要把普通终端里的另一套 DSH CLI 当作当前 Desktop Profile 的安装器。

升级或排查

  • **设置页没出现:**确认装在正在使用的 Desktop Profile、插件已启用,并按安装器提示重载/重启;不要只看“安装成功”。普通 DSH Web 不会出现此页。
  • **提示“快捷键配置不可读取”:**先检查插件版本。0.4.0/0.4.1 的新增功能页动作 ID 曾与官方原生 Desktop 的校验规则不兼容;0.4.2 起已修复。不要为排查直接清空键位或点“恢复默认”。
  • **键位保存了但按下没反应:**先关闭设置或菜单,让 DSH 主窗口获得焦点;检查冲突提示,以及组合键是否被操作系统抢先处理。独立 DevTools 窗口、其他应用或内嵌网页不是本插件的热键作用范围。
  • **从社区 Stable 2.0.18 升到 DSH NEXT 2.0.22-next 后键位不见了:**有用户实测插件键位与 DSH 内置键位一起恢复默认,重新绑定后可用。旧版快捷键实际使用 Electron 页面 localStorage;NEXT 改用原生 Desktop 的 keybindings.json,且该产品未提供 Stable/Beta 数据迁移。**这不证明旧数据已被删除。**保留原六个动作 ID 不等于跨产品自动搬运键位;请在 NEXT 中检查并重新录制,别直接复制旧存储或清空新配置。
  • **从社区版切到官方版后键位不见了:**不同 Desktop/Profiles 的快捷键存储也不一定相同,需要在各自环境检查并录制。插件不主动迁移或清除旧绑定;若曾在 0.4.0/0.4.1 给新增九个功能页动作录过键,因 ID 已修正,这九项需要重新录制。
  • **更新插件:**在插件页核对当前版本和来源;第三方 Git/本地安装不保证自动获得新代码。按插件管理器的升级提示操作,必要时先记下自己的键位,再卸载旧包、安装新版并启用;不同 Profile 要分别处理。

兼容与实测

这不是「所有 DSH、所有系统、所有组合键都保证生效」的承诺。以下是已经观察到的范围,不是仅凭单元测试推测:

环境已有证据尚未保证
社区版 Windows Desktop 增强模式早期版本的原六项与固定 Ctrl+1 获用户实际按键确认。新版所有组合键并未逐一复测。
社区版 Windows Desktop 兼容模式0.4.1 起用户确认设置页出现、原有“返回并聚焦输入框”键位生效。DevTools 与所有固定编号键尚未逐一实测。
社区版 Windows Desktop 扩展模式用户截图确认设置页及旧绑定可见,并反馈已测试键位生效。每个动作和固定编号键未逐一实测。
DSH NEXT 2.0.22-next / Windows0.4.3 的普通动作用户重新录制后可用;0.4.5 的“开发者工具”已在插件设置页持续录制、保存/修改,关闭设置后按键实际打开 DevTools;同一动作也出现在 DSH 自带快捷键弹窗。0.4.6 的会话轮切板已实际按下并完成轮切。其他键位未逐一复测;旧 Stable 的固定 Ctrl+数字 不会在 NEXT 接管。
官方 Windows DSH Desktop 0.2.1-rc.50.4.2 起用户确认配置可读、录制可用,录制的“返回并聚焦输入框”从功能页触发成功。官方原生环境不显示社区 DevTools 动作;九个功能页动作尚未逐一实测。
macOS / Linux Desktop按相应环境的桥接与快捷键校验能力尝试降级。暂无真机验证;允许的组合和实际送达可能不同。
普通 DSH Web本版刻意不启用。不要在浏览器里寻找这个设置页。

本地 0.4.6 通过 31 项单元测试,其中「会话轮切板」在 NEXT 2.0.22-next / Windows 已获用户实机按键确认;这不等于其他模式、系统或全部键位都已验收。插件依赖 DSH 的 shortcuts、settings.section、shell.overlay、会话、布局、工作区等客户端服务和部分页面结构;未来版本若改动这些接口,仍可能需要适配。

万一以后官方也做了同样的功能?

我当然也担心「好不容易做出来,官方更新就有了」。但仓库里的代码不会被 DSH 更新自动改写;真正要留意的是接口变动可能让插件失效,或内置快捷键与自己的设置发生冲突。遇到重叠功能,可以优先用更稳定的内置实现,移除冲突绑定,或关闭本插件;不必为了“证明插件有用”硬撑。

如果官方后来真的做了,那说明这些小麻烦也被更多人看见了。至少我已经把每天真实想用的操作做成了一个可以分享、改进、选择是否启用的东西;这件事本身就不算白做。

反馈与一起完善

欢迎在 Issues 提你日常想要、但还没有快捷键的动作,也欢迎提交 Pull Request。遇到问题时请附上:官方/社区版、DSH 与插件版本、操作系统、所用模式、录制的组合键、预期与实际现象;能给复现步骤更好。请勿上传账号凭据、会话正文或私有配置。

想参与本地验证:在仓库根目录安装 Node.js 后运行 node --test test/client.test.mjs(--test 使用 Node 自带测试运行器;若你的终端不允许子进程,可直接运行 node test/client.test.mjs);node --check client.js 只检查语法,不改你的键位。测试通过不等于你那台机器上的按键一定能触发,最有价值的反馈仍然来自真实使用。

Plugins associés