diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index d7ea183a97..ed8c1033a7 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -132,6 +132,9 @@ pub struct ShowCompletions { pub(super) trigger: Option, } +#[derive(PartialEq, Clone, Deserialize, Default)] +pub struct HandleInput(pub String); + impl_actions!( editor, [ @@ -141,6 +144,7 @@ impl_actions!( ExpandExcerptsUp, ExpandExcerptsDown, FoldAt, + HandleInput, MoveDownByLines, MovePageDown, MovePageUp, diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index bdff24131b..77b22674f3 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -13105,6 +13105,50 @@ fn test_crease_insertion_and_rendering(cx: &mut TestAppContext) { assert!(!snapshot.is_line_folded(MultiBufferRow(1))); } +#[gpui::test] +async fn test_input_text(cx: &mut gpui::TestAppContext) { + init_test(cx, |_| {}); + let mut cx = EditorTestContext::new(cx).await; + + cx.set_state( + &r#"ˇone + two + + three + fourˇ + five + + siˇx"# + .unindent(), + ); + + cx.dispatch_action(HandleInput(String::new())); + cx.assert_editor_state( + &r#"ˇone + two + + three + fourˇ + five + + siˇx"# + .unindent(), + ); + + cx.dispatch_action(HandleInput("AAAA".to_string())); + cx.assert_editor_state( + &r#"AAAAˇone + two + + three + fourAAAAˇ + five + + siAAAAˇx"# + .unindent(), + ); +} + fn empty_range(row: usize, column: usize) -> Range { let point = DisplayPoint::new(DisplayRow(row as u32), column as u32); point..point diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 29033646b7..46a7d9d17b 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -22,9 +22,9 @@ use crate::{ BlockId, CodeActionsMenu, CursorShape, CustomBlockId, DisplayPoint, DisplayRow, DocumentHighlightRead, DocumentHighlightWrite, Editor, EditorMode, EditorSettings, EditorSnapshot, EditorStyle, ExpandExcerpts, FocusedBlock, GutterDimensions, HalfPageDown, - HalfPageUp, HoveredCursor, HoveredHunk, LineDown, LineUp, OpenExcerpts, PageDown, PageUp, - Point, RangeToAnchorExt, RowExt, RowRangeExt, SelectPhase, Selection, SoftWrap, ToPoint, - CURSORS_VISIBLE_FOR, MAX_LINE_LEN, + HalfPageUp, HandleInput, HoveredCursor, HoveredHunk, LineDown, LineUp, OpenExcerpts, PageDown, + PageUp, Point, RangeToAnchorExt, RowExt, RowRangeExt, SelectPhase, Selection, SoftWrap, + ToPoint, CURSORS_VISIBLE_FOR, MAX_LINE_LEN, }; use client::ParticipantIndex; use collections::{BTreeMap, HashMap}; @@ -231,6 +231,12 @@ impl EditorElement { register_action(view, cx, |editor, _: &HalfPageDown, cx| { editor.scroll_screen(&ScrollAmount::Page(0.5), cx) }); + register_action(view, cx, |editor, HandleInput(text): &HandleInput, cx| { + if text.is_empty() { + return; + } + editor.handle_input(&text, cx); + }); register_action(view, cx, |editor, _: &HalfPageUp, cx| { editor.scroll_screen(&ScrollAmount::Page(-0.5), cx) });