dsh-enter-remap
DSH plugin: remap Enter, Ctrl+Enter and Shift+Enter to line break, send, or busy-time send.
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 21, 2026
- Updated
- Oct 21, 2026
Introduction
dsh-enter-remap
Remap Enter / Ctrl+Enter / Shift+Enter in the DSH composer into any of three actions — line break, send, and busy-time send. There is no settings page: the mapping comes from three values in cordis.patch.yml. The plugin never sends messages, never edits your draft, and never writes to DSH's own files.
DSH 插件:把输入框的 Enter、Ctrl+Enter、Shift+Enter 重映射为换行、发送或繁忙时发送。
安装
从 npm:
dsh plugin add dsh-enter-remap
从本地目录 / 源码:
dsh plugin add ./dsh-enter-remap
装完重启 DSH,在「设置 → 插件」里能看到它;回到输入框按一下 Enter,变成换行就说明生效了。
兼容性
- 需要支持插件包(
dsh.bundle)的 DSH 版本。只使用公开扩展点:宿主侧监听webserver/index-inject事件,客户端侧通过window.__ModuleLoader__.load注册一个 web 客户端插件。 - 不依赖任何
@deepseek-ai/*运行时包,也不 import DSH 内部模块,因此不受 DSH 小版本升级影响。 - 客户端只在 DSH 输入框(Lexical 编辑器,选择器
[data-lexical-editor="true"])上监听按键。如果将来 DSH 更换输入框实现,插件的按键改写会失效、行为回到原生,但不会报错,也不会损坏会话。 - 在 DSH desktop(Windows)上验证过;macOS / Linux 未逐平台测试,原理上等价。
工作原理
DSH 原生已经有这三种动作:Enter 发送(忙时按「设置 → 通用 → Composer Enter」决定 queue/steer),Ctrl+Enter 发送(互补投递),Shift+Enter 换行。本插件只在页面捕获阶段改写按键,把它换成目标动作对应的原生组合键,再交给 DSH 自己的 keymap 执行。插件不发送消息、不改草稿、不改任何 DSH 设置。
配置
配置在 cordis.patch.yml 的 config 里:
config:
enter: newline # Enter
ctrlEnter: send # Ctrl+Enter
shiftEnter: busySend # Shift+Enter
可选值:
| 值 | 行为 |
|---|---|
newline | 换行(沿用原生 Shift+Enter) |
send | 发送行为(沿用原生 Enter;忙时执行「通用 → 繁忙时的发送行为」选中的排队/插话) |
busySend | 繁忙时的发送行为(沿用原生 Ctrl+Enter;忙时执行另一条投递方式) |
默认配置是一次三键轮换:Enter 换行,Ctrl+Enter 发送(忙时按通用设置),Shift+Enter 发送(忙时用另一种投递)。空闲时两个发送键都会把消息发到会话,差别只体现在繁忙时的排队/插话方式。
两个"发送"语义不同,配置时注意:send 走非加速 Enter(模型忙时按「繁忙时的发送行为」设置决定 queue/steer);busySend 走加速 Ctrl+Enter(模型忙时总是执行与设置相反的那一种)。想让某个键"忙时固定排队"或"忙时固定插话",用 Ctrl+Enter 侧的那个值配合设置一起调。
改完配置后重启 DSH 生效。页面上没有设置入口,重装或升级插件不会覆盖你的配置。
边界情况
/、@之类的补全菜单打开时,Enter 原样交给菜单仲裁(选中高亮项;没高亮项时仍会发送),不会被改写成换行。Alt/AltGr(含 Windows 上的Ctrl+Alt)、Ctrl+Meta+Enter、Shift+Ctrl/Meta+Enter保持 DSH 原生行为(原生会吞掉或直接放行),不参与重映射。- 输入法合成中(
isComposing/ keyCode 229)以及合成结束后的 10ms 窗口内(与 DSH 原生recentlyComposing一致)不做改写,交给浏览器与 DSH 原生处理,避免中文确认回车多出换行。 - 长按产生的自动重复会原样透传给 DSH,发送类按键因此只触发一次(与原生键一致)。
- 配置在每次按键时读取,所以运行期直接改
window.__DSH_ENTER_REMAP__立即生效;但改cordis.patch.yml仍需重启 DSH。
卸载
dsh plugin remove dsh-enter-remap
重启 DSH 后输入框恢复原生键位。插件不写用户数据、不改 DSH 设置,配置只存在于插件自己的 cordis.patch.yml 里,卸载后不留残留。
开发说明
本插件在 AI 辅助下编写,功能设计、边界情况的判断与测试由作者负责并持续维护。
This plugin was written with AI assistance. Its design, edge-case decisions and testing are the author's responsibility, and it is maintained by the author.