回车确认与Y/N提示 | AI生成和翻译
以下是完整的分析。
设计原则
ww note 的模式是:
回车 = 确认(一次按键,执行默认操作) Ctrl+C = 取消(通用肌肉记忆,优雅处理) 无需解析文本 — 不再有
if response in ("y", "yes", ...)分支判断
这种模式比 y/n 优越,原因有三:
- 零认知负荷 — 不再纠结“是输入 y 还是 yes?大小写?”
- 一次按键 vs 三次(y + 回车)
- 肌肉记忆 — 在终端中 Ctrl+C 已经意味着“中止”
需要转换的命令,按优先级排序
第一优先级:零确认的危险操作 — 投入产出比最高
| 命令 | 文件 | 问题 | 修复方案 |
|---|---|---|---|
ww git force-push |
git/git_force_push.py:31-42 | 直接执行 git push --force-with-lease |
在推送前添加“按回车强制推送,按 Ctrl+C 取消”提示 |
ww git amend-push |
git/git_amend_push.py:46-48 | 静默执行 git add -A + git commit --amend --no-edit + git push --force-with-lease |
在第46行前添加确认提示 |
ww update(默认10个仓库) |
git/git_update.py:64-73 | 拉取最多10个仓库而不列出即将拉取的内容 | 添加“将更新 N 个仓库。按回车继续,按 Ctrl+C 退出”并显示仓库列表 |
第二优先级:已有部分基础 — 清理提示信息
以下三个命令已接受回车作为确认,但提示信息显示“或输入 ‘no’ 退出”。用户仍需输入文本才能取消。改为 Ctrl+C:
| 命令 | 当前提示 | 建议 |
|---|---|---|
ww proc kill-pattern |
“是否要杀死所有 N 个进程?(按回车杀死,或输入 ‘no’ 退出)” | “按回车杀死所有 N 个进程,按 Ctrl+C 取消” |
ww proc kill-port |
“是否要杀死此进程?(按回车杀死,或输入 ‘no’ 退出)” | “按回车杀死端口 N 上的进程,按 Ctrl+C 取消” |
ww proc kill-proxy |
“是否要杀死所有 N 个 Clash 进程?(按回车杀死,或输入 ‘no’ 退出)” | “按回车杀死所有 N 个 Clash 进程,按 Ctrl+C 取消” |
这些命令已正确处理 KeyboardInterrupt(见 kill_by_pattern.py:21、kill_by_port.py:46、kill_macos_proxy.py:83)。只需去掉 response in ("no", "n") 分支判断 — 将 try 块替换为 input() + KeyboardInterrupt 模式即可。
不适合转换的场景(真正的数据输入,而非确认)
| 命令 | 模式 | 保留原因 |
|---|---|---|
ww env update |
“输入数字(1-10)或按回车取消” | 选择提示,用户需要输入具体值。回车已作为“取消” ✅ |
ww linux proxy-setup |
“是否使用身份验证?(y/n)” | 二选一的数据问题,并非“继续执行破坏性操作”的确认。回车会产生歧义——是表示“是”还是“跳过”? ❌ |
实现模式
需要遵循的模板(来自 main.py:244-248):
try:
input("按回车继续,按 Ctrl+C 退出... ")
except KeyboardInterrupt:
print()
return
对于 kill 命令,甚至可以省略提示信息 — 直接显示进程列表后等待回车,类似 fuser -k 风格:
print(f"发现 {len(processes)} 个进程:")
for ... # 显示详情
try:
input("\n按回车杀死,按 Ctrl+C 取消... ")
except KeyboardInterrupt:
print("\n已取消。")
return
需要我实现这些更改吗?我会从第一优先级的危险操作(force-push、amend-push、update)开始,因为在这些操作中,一次误输入就可能造成历史记录丢失。