From 4b45ac41cda5b5bf5f8c01930fce3889e91782d7 Mon Sep 17 00:00:00 2001 From: Onesimus Wiafe Date: Tue, 10 Sep 2024 14:22:13 +0000 Subject: [PATCH] key press inserts '\t' character in code editor as indentation Signed-off-by: Onesimus Wiafe --- .../src/rust/components/form/code_editor.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/rust/perspective-viewer/src/rust/components/form/code_editor.rs b/rust/perspective-viewer/src/rust/components/form/code_editor.rs index a6629e128c..b1aae97dd5 100644 --- a/rust/perspective-viewer/src/rust/components/form/code_editor.rs +++ b/rust/perspective-viewer/src/rust/components/form/code_editor.rs @@ -74,6 +74,25 @@ fn on_keydown(event: KeyboardEvent, deps: &(UseStateSetter, Callback<()>)) if event.shift_key() && event.key_code() == 13 { event.prevent_default(); deps.1.emit(()) + } + + // handle the tab key press + if event.key() == "Tab" { + event.prevent_default(); + + let caret_pos = elem.selection_start().unwrap().unwrap_or_default() as usize; + + let mut initial_text = elem.value(); + + // insert "\t" at the caret_pos + initial_text.insert_str(caret_pos, "\t"); + + elem.set_value(&initial_text); + + // place caret after inserted tab + let new_caret_pos = Some((caret_pos + 1) as u32).unwrap_or_default(); + let _ = elem.set_selection_range(new_caret_pos, new_caret_pos); + } }