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

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

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

小夜