@ddv12138/pi-enter-no-send
pi extension: while a slash-command autocomplete menu is open, Enter accepts the completion without submitting (like Tab), so you can keep typing after selecting a skill/command
Package details
Install @ddv12138/pi-enter-no-send from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@ddv12138/pi-enter-no-send- Package
@ddv12138/pi-enter-no-send- Version
0.1.4- Published
- Aug 14, 2026
- Downloads
- 129/mo · 59/wk
- Author
- ddv12138
- License
- MIT
- Types
- extension
- Size
- 8.1 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-enter-no-send
一个 pi 扩展:当斜杠命令(/)补全菜单打开时,回车 = 只接受补全、不发送(与 Tab 相同),这样选中技能/命令后可以继续补充说明,再按一次回车才发送。
解决的问题
pi 原版行为(pi-tui Editor.handleInput 中写死):/ 前缀的补全(斜杠命令、技能)按回车会接受补全并立即提交;而路径、@、# 补全按回车只接受不提交。
例如输入 /grill-me 后按回车,技能直接被发出去了,没机会补一句说明。本扩展把 / 菜单打开时的回车改为走 Tab 路径:接受补全、留在输入框,继续打字。
安装
pi install npm:@ddv12138/pi-enter-no-send
然后在 pi 里执行 /reload(或重启 pi)即可生效。
验证是否加载:输入 / 打开补全菜单后按回车,技能名被填入输入框且消息不发送,即说明已生效。
使用
- 输入
/+ 技能名 → 补全菜单打开 → 按回车 → 技能名填入输入框(不发送)→ 继续输入补充说明 → 再按回车发送。 - 不想要补全时,按
Esc关掉菜单再回车,或直接用 Tab。 - 路径 /
@/#补全行为不变(原版已是接受不发送)。
工作原理
扩展在 resources_discover 事件中注册编辑器组件(该事件在所有扩展的 session_start 之后触发,保证最后注册、必定生效),然后包装当前编辑器而不是替换:
// 关键逻辑:在内层编辑器的 handleInput 外再包一层
const originalHandleInput = editor.handleInput.bind(editor);
editor.handleInput = (data) => {
if (matchesKey(data, "enter") && editor.isShowingAutocomplete()) {
// 光标前是 "/"(斜杠命令/技能菜单)时,把回车转成 Tab 语义
if (beforeCursor.trimStart().startsWith("/")) {
originalHandleInput("\t"); // 接受补全,不提交
return;
}
}
originalHandleInput(data);
};
- 若无其他扩展占用编辑器,则直接用
CustomEditor子类(行为相同)。 - 若已有扩展占用(如
pi-powerline-footer),则包装它返回的编辑器实例——footer、bash 模式、幽灵补全等全部保留,只改变回车行为。 matchesKey(data, "enter")只匹配纯回车,不影响shift+enter(换行)、alt+enter(follow-up)。- 转发
"\t"走 pi-tui 的 Tab 分支:应用补全、关闭菜单、留在编辑器。 - 菜单关闭时回车原样走提交路径,行为不变。
本地开发
git clone <本仓库地址>
cd pi-enter-no-send
node scripts/smoke.mjs # 行为级冒烟测试
冒烟测试用与 pi 相同的 jiti + alias 加载真实模块,覆盖:
/菜单打开 + 回车 → 接受补全、不提交 ✓- Tab 行为一致(基线) ✓
- 无菜单 + 回车 → 正常提交 ✓
#菜单 + 回车 → 保持原版接受不发送 ✓- Esc 仍可取消菜单 ✓
- 已有其他编辑器扩展时,包装(patch)该编辑器实例而非替换 ✓
限制
- 若另一个扩展在
resources_discover中注册编辑器组件且加载顺序在本扩展之后,它可能覆盖本扩展的包装。已与 pi-powerline-footer 验证可正常叠加。 - 菜单打开时回车不再"接受+立即发送",需要按两次回车(一次接受、一次发送)——这是本扩展的预期行为。
- 若你把
tui.input.tab的默认键位(\t)改掉了,回车转 Tab 的兼容逻辑会失效。