Display case-sensitive keybindings for vim commands (#24322)
This Pull Request tackles the issue outline in #14287 by changing the way `KeyBinding`s for vim mode are displayed in the command palette. It's worth pointing out that this whole thing was pretty much implemented by Conrad Irwin during a pairing session, I just tried to clean up some other changes introduced for a different issue, while improving some comments. Here's a quick list of the changes introduced: - Update `KeyBinding` with a new `vim_mode` field to determine whether the keybinding should be displayed in vim mode. - Update the way `KeyBinding` is rendered, so as to detect if the keybinding is for vim mode, if it is, only display keys in uppercase if they require the shift key. - Introduce a new global state – `VimStyle(bool)` - use to determine whether `vim_mode` should be enabled or disabled when creating a new `KeyBinding` struct. This global state is automatically set by the `vim` crate whenever vim mode is enabled or disabled. - Since the app's context is now required when building a `KeyBinding` , update a lot of callers to correctly pass this context. And before and after screenshots, for comparison: | before | after | |--------|-------| | <img width="1050" alt="SCR-20250205-tyeq" src="https://github.com/user-attachments/assets/e577206d-2a3d-4e06-a96f-a98899cc15c0" /> | <img width="1050" alt="SCR-20250205-tylh" src="https://github.com/user-attachments/assets/ebbf70a9-e838-4d32-aee5-0ffde94d65fb" /> | Closes #14287 Release Notes: - Fix rendering of vim commands to preserve case sensitivity --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
parent
14289b5a6e
commit
e0fc767c11
30 changed files with 236 additions and 165 deletions
|
@ -1704,7 +1704,7 @@ impl PromptEditor {
|
|||
// always show the cursor (even when it isn't focused) because
|
||||
// typing in one will make what you typed appear in all of them.
|
||||
editor.set_show_cursor_when_unfocused(true, cx);
|
||||
editor.set_placeholder_text(Self::placeholder_text(codegen.read(cx), window), cx);
|
||||
editor.set_placeholder_text(Self::placeholder_text(codegen.read(cx), window, cx), cx);
|
||||
editor
|
||||
});
|
||||
|
||||
|
@ -1783,7 +1783,10 @@ impl PromptEditor {
|
|||
self.editor = cx.new(|cx| {
|
||||
let mut editor = Editor::auto_height(Self::MAX_LINES as usize, window, cx);
|
||||
editor.set_soft_wrap_mode(language::language_settings::SoftWrap::EditorWidth, cx);
|
||||
editor.set_placeholder_text(Self::placeholder_text(self.codegen.read(cx), window), cx);
|
||||
editor.set_placeholder_text(
|
||||
Self::placeholder_text(self.codegen.read(cx), window, cx),
|
||||
cx,
|
||||
);
|
||||
editor.set_placeholder_text("Add a prompt…", cx);
|
||||
editor.set_text(prompt, window, cx);
|
||||
if focus {
|
||||
|
@ -1794,8 +1797,8 @@ impl PromptEditor {
|
|||
self.subscribe_to_editor(window, cx);
|
||||
}
|
||||
|
||||
fn placeholder_text(codegen: &Codegen, window: &Window) -> String {
|
||||
let context_keybinding = text_for_action(&zed_actions::assistant::ToggleFocus, window)
|
||||
fn placeholder_text(codegen: &Codegen, window: &Window, cx: &App) -> String {
|
||||
let context_keybinding = text_for_action(&zed_actions::assistant::ToggleFocus, window, cx)
|
||||
.map(|keybinding| format!(" • {keybinding} for context"))
|
||||
.unwrap_or_default();
|
||||
|
||||
|
@ -2084,12 +2087,13 @@ impl PromptEditor {
|
|||
.tooltip({
|
||||
let focus_handle = self.editor.focus_handle(cx);
|
||||
move |window, cx| {
|
||||
cx.new(|_| {
|
||||
cx.new(|cx| {
|
||||
let mut tooltip = Tooltip::new("Previous Alternative").key_binding(
|
||||
KeyBinding::for_action_in(
|
||||
&CyclePreviousInlineAssist,
|
||||
&focus_handle,
|
||||
window,
|
||||
cx,
|
||||
),
|
||||
);
|
||||
if !disabled && current_index != 0 {
|
||||
|
@ -2126,12 +2130,13 @@ impl PromptEditor {
|
|||
.tooltip({
|
||||
let focus_handle = self.editor.focus_handle(cx);
|
||||
move |window, cx| {
|
||||
cx.new(|_| {
|
||||
cx.new(|cx| {
|
||||
let mut tooltip = Tooltip::new("Next Alternative").key_binding(
|
||||
KeyBinding::for_action_in(
|
||||
&CycleNextInlineAssist,
|
||||
&focus_handle,
|
||||
window,
|
||||
cx,
|
||||
),
|
||||
);
|
||||
if !disabled && current_index != total_models - 1 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue