From 9c06648e5992416f4450e1f4ff1ec24edeae0e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Soares?= <37777652+Dnreikronos@users.noreply.github.com> Date: Thu, 19 Mar 2026 08:17:10 -0300 Subject: [PATCH] rules_library: Register ActionSequence handler (#51890) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Context User keybindings using `action::Sequence` (e.g., mapping Escape in insert mode to a sequence of `vim::NormalBefore` + another action) don't work in the RulesLibrary window. The `ActionSequence` handler is only registered on the `Workspace` view, but the RulesLibrary opens as a separate window without a Workspace in its element tree, so the action has no handler and fails to dispatch. This adds the `ActionSequence` handler to the RulesLibrary root element, matching the same pattern used in Workspace. Closes #51721 ## How to Review Small PR — single file change in `crates/rules_library/src/rules_library.rs`. Focus on the new `.on_action()` for `ActionSequence` in the `Render` impl. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed `action::Sequence` keybindings not working in the Rules Library window ## Video: https://github.com/user-attachments/assets/c6189a77-cdec-461a-8dc5-be066f14b385 --- crates/rules_library/src/rules_library.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/rules_library/src/rules_library.rs b/crates/rules_library/src/rules_library.rs index 387417d8bfb8a4cb058ad367df7e0742c4fef7de..b4ff8033446410d063cddccfa6b76eaa77ecfac9 100644 --- a/crates/rules_library/src/rules_library.rs +++ b/crates/rules_library/src/rules_library.rs @@ -15,7 +15,7 @@ use picker::{Picker, PickerDelegate}; use platform_title_bar::PlatformTitleBar; use release_channel::ReleaseChannel; use rope::Rope; -use settings::Settings; +use settings::{ActionSequence, Settings}; use std::rc::Rc; use std::sync::Arc; use std::sync::atomic::AtomicBool; @@ -1399,6 +1399,13 @@ impl Render for RulesLibrary { v_flex() .id("rules-library") .key_context("RulesLibrary") + .on_action( + |action_sequence: &ActionSequence, window: &mut Window, cx: &mut App| { + for action in &action_sequence.0 { + window.dispatch_action(action.boxed_clone(), cx); + } + }, + ) .on_action(cx.listener(|this, &NewRule, window, cx| this.new_rule(window, cx))) .on_action( cx.listener(|this, &DeleteRule, window, cx| {