[Feature] 命令列表:支持多选删除、全部删除、清空「内置命令」文件夹,并为删除提供恢复途径
Summary (EN) — The saved-command manager only supports deleting commands one by one. This
request adds multi-select deletion, a "delete all" action, the ability to delete/clear the
built-in commands folder, and an undo / "restore built-in commands" path — currently a deleted
built-in command is a permanent tombstone with no restore entry.
通过命令行提交,无法填写网页表单。以下按 feature_request 模板字段组织。
Problem / pain point — 现在的痛点
命令列表目前只能逐条删除命令(每条都要走一遍确认对话框),没有批量操作能力:
- 无多选删除:列表只有单一游标选中(上下键移动高亮),不支持 Ctrl/Shift
点选或复选框,想清理一批不用的命令只能一条条删、一条条确认。
- 无全部删除:没有「清空」入口,想重置整个列表同样只能逐条删。
- 「内置命令」文件夹无法删除或清空:单个内置命令自 v1.8.2
起可以删除(持久墓碑),但「内置命令」这个文件夹行永远显示,也没有入口能一次删掉其中全部内置命令;想完全只用自定义命令的用户无法隐藏内置分组。
- 删除不可逆且无恢复入口:删除命令的确认框明示「删除后无法撤销」;内置命令删除写入
deleted_builtins 墓碑后,没有任何「恢复默认内置命令」的入口,只能手工编辑 saved_commands.json
或从备份恢复。
- 附带的不一致:删除自定义文件夹是即时生效、没有二次确认的,与删除命令(有确认对话框)的交互不一致,误点会直接丢掉整个分组。
Proposed solution — 希望的做法
- 列表支持多选(Ctrl/Shift 点选或复选框),选中后可一键删除所选命令;
- 提供「全部删除」入口,走单次事务落盘,并明确其作用范围(仅自定义命令 / 是否连带内置墓碑);
- 允许删除或清空「内置命令」文件夹:等价实现可以是「批量墓碑该文件夹下全部内置命令」并在空时隐藏该分组,或在设置中提供「隐藏内置命令」开关;
- 给删除加后悔药:参照 SSH 主机删除已有的 8 秒撤销 toast,或至少提供「恢复内置命令」(清空
deleted_builtins 墓碑)的入口;
- 删除自定义文件夹补上与命令删除一致的二次确认。
Alternatives considered — 现在的替代办法
目前只能逐条删除并逐条确认;内置命令误删后,手工编辑 %APPDATA%\Pebrel\saved_commands.json、从
deleted_builtins 数组里删掉对应条目即可恢复(无 UI 途径)。
Platform / 平台
Windows(分析基于 Windows;三平台通用)
Related area / 相关范围
Settings / theme / layout / blur — 设置页、主题、布局(命令列表管理器)
How important is this to you? / 对你有多重要
Would improve my daily workflow / 每天都会用到
源码分析(供维护者参考,基于 main@b99383c)
现状能力矩阵(file:line 相对仓库根):
| 能力 |
现状 |
证据 |
| 单选删除(自定义命令) |
支持,有确认对话框 |
nebula_app/src/gpui_shell/workspace/command_manager/rows.rs:192-207;command_manager.rs:454-550 |
| 单选删除(内置命令) |
支持(v1.8.2 起墓碑持久删除) |
nebula_app/src/saved_commands.rs:188-206(remove 对 builtin: id 写 deleted_builtins);CHANGELOG.md:778 |
| 多选删除 |
不支持,仅单游标 |
nebula_app/src/gpui_shell/workspace.rs:687(command_manager_selected: usize) |
| 全部删除 |
不支持,store 无批量/清空 API |
saved_commands.rs 仅 remove/remove_group |
| 删除「内置命令」文件夹 |
不支持,按钮不渲染 |
command_manager/groups.rs:222, 285-298(BUILTIN_GROUP_ID 排除);虚拟分组每次渲染无条件追加 command_manager/groups.rs:57-60 |
| 恢复默认内置命令 |
不存在,墓碑无任何移除路径 |
deleted_builtins 仅出现在 saved_commands.rs:43,51,60,95,97,115,192,229 与 groups.rs:100 |
| 撤销模式(可借鉴) |
SSH 主机删除有 8 秒撤销 toast |
nebula_app/src/gpui_shell/ssh_settings.rs:36, 238-301 |
实现提示:
- 批量删除应放进单次
mutate_store
事务(saved_commands.rs:209-234)保证多窗口一致与单次落盘;当前 remove 对不存在 id 返回
NotFound,批量需容忍陈旧 id;
- 命令行单击即执行命令(
command_manager/rows.rs:78-81),多选交互需避免与单击冲突;
- 自定义文件夹删除无确认(
command_manager/groups.rs:285-298),与命令删除交互不一致。
Before submitting / 提交前确认
[Feature] 命令列表:支持多选删除、全部删除、清空「内置命令」文件夹,并为删除提供恢复途径
Problem / pain point — 现在的痛点
命令列表目前只能逐条删除命令(每条都要走一遍确认对话框),没有批量操作能力:
点选或复选框,想清理一批不用的命令只能一条条删、一条条确认。
起可以删除(持久墓碑),但「内置命令」这个文件夹行永远显示,也没有入口能一次删掉其中全部内置命令;想完全只用自定义命令的用户无法隐藏内置分组。
deleted_builtins墓碑后,没有任何「恢复默认内置命令」的入口,只能手工编辑saved_commands.json或从备份恢复。
Proposed solution — 希望的做法
deleted_builtins墓碑)的入口;Alternatives considered — 现在的替代办法
目前只能逐条删除并逐条确认;内置命令误删后,手工编辑
%APPDATA%\Pebrel\saved_commands.json、从deleted_builtins数组里删掉对应条目即可恢复(无 UI 途径)。Platform / 平台
Windows(分析基于 Windows;三平台通用)
Related area / 相关范围
Settings / theme / layout / blur — 设置页、主题、布局(命令列表管理器)
How important is this to you? / 对你有多重要
Would improve my daily workflow / 每天都会用到
源码分析(供维护者参考,基于 main@b99383c)
现状能力矩阵(file:line 相对仓库根):
nebula_app/src/gpui_shell/workspace/command_manager/rows.rs:192-207;command_manager.rs:454-550nebula_app/src/saved_commands.rs:188-206(remove对builtin:id 写deleted_builtins);CHANGELOG.md:778nebula_app/src/gpui_shell/workspace.rs:687(command_manager_selected: usize)saved_commands.rs仅remove/remove_groupcommand_manager/groups.rs:222, 285-298(BUILTIN_GROUP_ID排除);虚拟分组每次渲染无条件追加command_manager/groups.rs:57-60deleted_builtins仅出现在saved_commands.rs:43,51,60,95,97,115,192,229与groups.rs:100nebula_app/src/gpui_shell/ssh_settings.rs:36, 238-301实现提示:
mutate_store事务(
saved_commands.rs:209-234)保证多窗口一致与单次落盘;当前remove对不存在 id 返回NotFound,批量需容忍陈旧 id;
command_manager/rows.rs:78-81),多选交互需避免与单击冲突;command_manager/groups.rs:285-298),与命令删除交互不一致。Before submitting / 提交前确认