dsh-ctrl-enter-send:让 Enter 换行,Ctrl+Enter 发送

前言

在 DSH 里写长提示词时,很多从 IM 或编辑器带过来的习惯会冲突:DSH 默认 Enter 是发送,想在 composer 里分一段、列几条需求,就得改成 Shift+Enter。更麻烦的是中文输入法——切到英文模式后按下 Enter 想换行,半截提示词直接发出去了。

dsh-ctrl-enter-send 就是把这套快捷键反过来的插件:Enter 插入换行,Ctrl+Enter(macOS 上是 Cmd+Enter)发送。它面向的是日常在 DSH composer 里写长输入的开发者,不动其他界面,也不重新定义发送行为。

这个插件是什么

一句话定位:修改 DSH 主 composer 的回车发送键,把发送键从 Enter 挪到 Ctrl/Cmd+Enter。它由社区开发者 Geopanret 维护(package.json 的 author 字段是 Maloseri),属于客户端插件,不是 DeepSeek 官方包。

解决的问题很具体:中文 IME 处于英文模式时,按 Enter 想分段会把没写完的提示词直接发给 AI,需要重发或者补解释。

核心行为

插件只改主对话 composer 的按键映射,其余界面不动。改动前后的对照如下。

操作(焦点在主 composer 输入框) 改动前 改动后
Enter 发送(执行中为排队或 steering) 换行,等同于 Shift+Enter
Shift+Enter 换行 换行,不变
Ctrl+Enter / Cmd+Enter 补充投递模式 发送,与「发送」按钮行为一致
/ 或 @ 菜单打开时按 Enter 选中高亮项 不变
输入法正在组词时按 Enter 确认组词 不变
空草稿 + Ctrl+Enter(消息正在执行且有排队消息) 全部 steering 不变
Alt+Enter、Ctrl+Shift+Enter、AltGraph+Enter 内置映射忽略 不变
重命名、内联编辑、设置、弹窗、问题卡片 不受影响 不变

有一点需要留意:快捷键速查页和设置页仍显示内置的固定条目「Enter = 发送」「Cmd/Ctrl+Enter = 补充投递」。这些条目由内置包所有,第三方插件无法改写。也就是说文档和实际行为不一致,要看真实按键行为,不看速查表。

另一个取舍是:原来 Ctrl+Enter 的「补充投递」语义被替换成了发送手势,这正是插件的目的;空草稿时「steering 全部排队消息」的手势被有意保留。

安装

该插件以 DSH bundle 形式从 GitHub 分发,用 DSH CLI 的 git 安装路径安装,并建议固定 release tag:

dsh plugin --profile <your-profile> add github:Geopanret/dsh-ctrl-enter-send#v0.1.0

几个细节:

1、这是 bundle 类型插件,安装后会被追加到 profile 的 dsh.profile.bundles,下次页面加载即生效,刷新页面即可,不需要重启 DSH。
2、固定 tag 或 commit(如 github:Geopanret/dsh-ctrl-enter-send#<sha>)可以避免后续 push 悄悄改变你实际运行的内容;不写 #<ref> 则跟踪默认分支。
3、不需要构建步骤,也不需要审批安装脚本。这是纯 JavaScript,直接发布浏览器产物(client.js 就是完整的浏览器 bundle),pnpm 不需要配置 allowBuilds。

卸载同样用 CLI:

dsh plugin --profile <your-profile> remove dsh-ctrl-enter-send

也可以在 Plugins 页面操作。

兼容性

要求 DSH >=0.2.0 <0.3.0,声明在 engines.dsh 中,作者在 0.2.1-rc.5 上测试过。版本越界时插件可能不加载,装之前先确认自己的 DSH 版本。

实现方式与失效条件

插件是纯浏览器端的:页面启动时在 window 上装一个 capture-phase 的 keydown 监听器,改写 event 对象的修饰键标记,让 composer 的既有 keymap 走它自己的换行分支(Shift+Enter)或发送分支(普通 Enter)。原文给出的映射是:

  • 普通 Enter → 把 shiftKey 置为 true,走内置换行;
  • 非空草稿上的 Ctrl/Cmd+Enter → 把 ctrlKey/metaKey 置为 false,走内置发送;
  • 空草稿保留内置的 Cmd/Ctrl+Enter「steer all」手势;
  • 菜单、输入法组词、Alt/AltGraph 以及其他输入一律不动。

它依赖 DSH 0.2.1-rc.x 的这些 DOM 标记:[data-composer-input]、[data-composer-card]、[data-trigger-menu]、[data-composer-overlay]、[data-composer-placeholder]。任一标记找不到时,插件会退回内置行为,不做猜测——最坏情况是「没变化」,不会误发。如果某些环境里改写事件标记不可行,插件会停掉原事件并补发一个带预期标记的合成 Enter。

适用于谁,注意事项

适合下面这类人:平时会在 composer 里写多段、多条需求,希望 Enter 保留换行习惯,且能接受改按 Ctrl+Enter 发送。希望保留默认 Enter 发送、只偶尔用 Shift+Enter 的用法不是它的目标场景。

使用前有三点值得检查:

1、插件按照当前 DSH 进程的权限运行,安装的是社区包。安装前应打开 client.js 和 index.js 看一遍实现,确认没有超出你预期的行为;许可为 MIT。
2、快捷键速查页和实际行为不一致,是该插件已知限制,不是 bug;不要照着速查表改操作习惯。
3、DSH 升级可能重命名 data-composer-* 标记,此时插件会静默退回内置按键。升级后需要自行检查并更新 client.js 里的选择器。

开发

本地调试用同一套 CLI,把本地路径加到开发 profile:

dsh plugin --profile <dev-profile> add /path/to/dsh-ctrl-enter-send

client.js 就是完整的客户端 bundle,没有构建步骤;改动会被 DSH 的客户端 HMR 监听器直接拾取,不需要重启 DSH。服务端 index.js 的改动才需要重启。

小结

这个插件的价值在于把一个容易踩坑的按键习惯改掉,且改动面克制:只动主 composer 的 Enter 语义,菜单、组词、其他输入全部保持原样。它是社区插件(package.json 注明 “community plugin, not an official DeepSeek package”),通过 DSH CLI 从 GitHub 安装,固定 tag v0.1.0。

目录页:https://www.skillhub.cn/plugins/Geopanret/dsh-ctrl-enter-send

源码:https://github.com/Geopanret/dsh-ctrl-enter-send

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜