用途:面向 Warp GUI 桌面客户端的设置页开发,说明如何正确构建设置页,使控件与设置搜索行为正常。仅适用于 app/src/settings_view/,不适用于无界面 TUI(crates/warp_tui)。
主要概念:设置页是 PageType,包含可搜索控件列表与可选页面标题,分三种形态——Uncategorized(扁平控件列表,最常见)、Categorized(按 Category 分组,带子标题与可选副标题)、Monolith(整页单一控件,因内容不可拆分供搜索,如 Keybindings、Teams、About、Environments)。每个控件实现 SettingsWidget,提供 search_terms、render、should_render、widget_id/static_widget_id。搜索按控件过滤:查询按空白分词,每词需以不区分大小写的子串出现在控件搜索词中;过滤的最小单位是控件。
标题放置:命名整页的标题应放入 PageType 标题槽;在 Uncategorized/Categorized 上标题在过滤循环外无条件绘制,因此搜索时标题仍保留。Monolith 的标题随唯一控件是否匹配而整体显示或整页为空。命名某个分节的标题应放在拥有该节的控件或 Category 内,随自身行一起消失。分类需逐标题判断。
条件显示两种机制:构建期 if(特性开关、cfg!、平台支持等进程内固定值)——首选,控件根本不存在;should_render(用户开关、认证状态等运行期可变值)——每次过滤与渲染重新求值。切勿在 render 内隐藏行却仍在 search_terms 中声明它们。
已知问题:标题消失(标题渲染在控件内,过滤后连同标题一起消失);不可过滤的巨型控件(多个设置共用一个 search_terms 大块,导致全有或全无)。拆分时一控件约一行设置,搜索词限定该行并保留共享上下文,按需选择门控机制,状态随行迁移,注意 widget_id 变化会影响 deeplink,需重新指向。AI 子页切换时重建 PageType 会丢失实时搜索,需调用 SettingsView::reapply_search_filter_to_active_subpage。
验证:可用 app/src/settings_view/mod_tests.rs 的 StubWidget、stub_widgets_page、visible_widget_count 做单元测试,运行 cargo nextest run -p warp settings_view;并在真实设置界面检查唯一匹配行、过滤时标题是否仍可见等。原文未完整提供后续验证条目,收费、价格、平台与效果等信息暂未提供。