From b5d4b17f60b496b5d6429177c4f3ccd2416714ce Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Tue, 4 Feb 2025 12:15:14 -0700 Subject: [PATCH] Fix showing "enter Accept" for prediction with LSP menu open (#24218) Release Notes: - N/A --- crates/editor/src/element.rs | 58 +++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index da7a1a292e..78bcc86042 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3276,10 +3276,7 @@ impl EditorElement { accept_keystroke = Some(Keystroke { modifiers: gpui::Modifiers { alt: true, - control: false, - shift: false, - platform: false, - function: false, + ..Default::default() }, key: "tab".to_string(), key_char: None, @@ -3291,10 +3288,7 @@ impl EditorElement { accept_keystroke = Some(Keystroke { modifiers: gpui::Modifiers { alt: true, - control: false, - shift: false, - platform: false, - function: false, + ..Default::default() }, key: "enter".to_string(), key_char: None, @@ -3687,12 +3681,13 @@ impl EditorElement { match &active_inline_completion.completion { InlineCompletion::Move { target, .. } => { + let previewing = false; let target_display_point = target.to_display_point(editor_snapshot); if target_display_point.row().as_f32() < scroll_top { let mut element = inline_completion_accept_indicator( "Jump to Edit", Some(IconName::ArrowUp), - true, + previewing, self.editor.focus_handle(cx), window, cx, @@ -3705,7 +3700,7 @@ impl EditorElement { let mut element = inline_completion_accept_indicator( "Jump to Edit", Some(IconName::ArrowDown), - true, + previewing, self.editor.focus_handle(cx), window, cx, @@ -3721,7 +3716,7 @@ impl EditorElement { let mut element = inline_completion_accept_indicator( "Jump to Edit", None, - true, + previewing, self.editor.focus_handle(cx), window, cx, @@ -3789,7 +3784,7 @@ impl EditorElement { let mut element = inline_completion_accept_indicator( "Accept", None, - !previewing, + previewing, self.editor.focus_handle(cx), window, cx, @@ -5827,17 +5822,40 @@ fn header_jump_data( fn inline_completion_accept_indicator( label: impl Into, icon: Option, - show_modifiers: bool, + previewing: bool, focus_handle: FocusHandle, window: &Window, cx: &App, ) -> AnyElement { - let bindings = window.bindings_for_action_in(&crate::AcceptInlineCompletion, &focus_handle); - let Some(accept_keystroke) = bindings - .last() - .and_then(|binding| binding.keystrokes().first()) - else { - return div().into_any(); + let use_hardcoded_linux_preview_binding; + + #[cfg(target_os = "macos")] + { + use_hardcoded_linux_preview_binding = false; + } + + #[cfg(not(target_os = "macos"))] + { + use_hardcoded_linux_preview_binding = previewing; + } + + let accept_keystroke = if use_hardcoded_linux_preview_binding { + Keystroke { + modifiers: Default::default(), + key: "enter".to_string(), + key_char: None, + } + } else { + let bindings = window.bindings_for_action_in(&crate::AcceptInlineCompletion, &focus_handle); + if let Some(keystroke) = bindings + .last() + .and_then(|binding| binding.keystrokes().first()) + { + // TODO: clone unnecessary once `use_hardcoded_linux_preview_binding` is removed. + keystroke.clone() + } else { + return div().into_any(); + } }; let accept_key = h_flex() @@ -5846,7 +5864,7 @@ fn inline_completion_accept_indicator( .text_size(TextSize::XSmall.rems(cx)) .text_color(cx.theme().colors().text) .gap_1() - .when(show_modifiers, |parent| { + .when(!previewing, |parent| { parent.children(ui::render_modifiers( &accept_keystroke.modifiers, PlatformStyle::platform(),