Skip to content

feat(tui): add Ctrl+S stash/restore for input draft#479

Open
Kailigithub wants to merge 1 commit into
lsdefine:mainfrom
Kailigithub:feat/tui-stash-draft-426
Open

feat(tui): add Ctrl+S stash/restore for input draft#479
Kailigithub wants to merge 1 commit into
lsdefine:mainfrom
Kailigithub:feat/tui-stash-draft-426

Conversation

@Kailigithub
Copy link
Copy Markdown
Contributor

Summary

在 TUI 输入框中新增 Ctrl+S 快捷键,实现"暂存草稿 / 恢复草稿"功能,对齐 Claude Code 的 chat:stash 交互模式。

Motivation

在 TUI 中与 agent 对话时,用户经常遇到这种情况:正在输入框里写一段比较长的提示词,还没写完,突然想到需要先问另一个问题(比如查一个文件、确认一个前置信息),但又不希望丢失当前已经打好的草稿。

目前只能手动复制粘贴到别处,或者硬着头皮先发出去再追加补充,体验不好。

Changes

  • InputArea.BINDINGS:新增 Binding("ctrl+s", "stash", "Stash", show=False)
  • InputArea.__init__:新增 self._draft_stash: str = "" 实例变量
  • InputArea.action_stash:新增方法,实现:
    • 输入框有内容时:将当前内容保存到 _draft_stash,清空输入框,重置历史状态
    • 输入框为空时(且有暂存内容):将 _draft_stash 内容恢复到输入框
    • 输入框为空且无暂存内容时:无操作

Behavior

操作 效果
Ctrl+S(有内容) 保存草稿 → 清空输入框
Ctrl+S(空输入) 恢复上次暂存的草稿
Ctrl+S(空输入 + 无草稿) 无操作

Note: Ctrl+S 在 v2 中未被占用,老版 tuiapp.py 中曾用作 Stop,但 v2 已改为 Ctrl+C

Press Ctrl+S once to stash current input and clear the field; press
Ctrl+S again (when input is empty) to restore the stashed draft. Aligns
with Claude Code's chat:stash muscle-memory.
@shenhao-stu
Copy link
Copy Markdown
Contributor

感谢提交 🙏 不过这个能力 main 已经实现过了:

  • 引入键位:508d569 Feat/v2 keybindings (#365)
  • 后续修 picker 渲染 + stash 延迟:90b909b Fix TUI v2 picker rendering and stash latency

当前实现在 frontends/tuiapp_v2.py:1786-1834(toggle 行为:首次按存 + 清空,再按按回放)。

⚠️ 这里有一个踩过的坑值得提醒:清空大草稿不能用 self.text = "",长 paste / >100 轮历史会卡死 TextArea,必须走 TextArea.reset()。若你后续还想优化 stash 体验欢迎再开 PR。先关掉这条~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants