@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

Packages

Package details

extension

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 加载真实模块,覆盖:

  1. / 菜单打开 + 回车 → 接受补全、不提交 ✓
  2. Tab 行为一致(基线) ✓
  3. 无菜单 + 回车 → 正常提交 ✓
  4. # 菜单 + 回车 → 保持原版接受不发送 ✓
  5. Esc 仍可取消菜单 ✓
  6. 已有其他编辑器扩展时,包装(patch)该编辑器实例而非替换 ✓

限制

  • 若另一个扩展在 resources_discover 中注册编辑器组件且加载顺序在本扩展之后,它可能覆盖本扩展的包装。已与 pi-powerline-footer 验证可正常叠加。
  • 菜单打开时回车不再"接受+立即发送",需要按两次回车(一次接受、一次发送)——这是本扩展的预期行为。
  • 若你把 tui.input.tab 的默认键位(\t)改掉了,回车转 Tab 的兼容逻辑会失效。