From a28d0171f8dbb2b437d626f47f9c2fa465a9c097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20Buga?= Date: Thu, 14 Apr 2022 19:36:04 +0200 Subject: [PATCH] Don't allocate in terminal key handling --- lapce-ui/src/terminal.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lapce-ui/src/terminal.rs b/lapce-ui/src/terminal.rs index fd4ac585..9d8cedfb 100644 --- a/lapce-ui/src/terminal.rs +++ b/lapce-ui/src/terminal.rs @@ -194,7 +194,8 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { let rect = ctx.size().to_rect(); ctx.fill( rect, - data.config.get_color_unchecked(LapceTheme::TERMINAL_BACKGROUND), + data.config + .get_color_unchecked(LapceTheme::TERMINAL_BACKGROUND), ); self.split.paint(ctx, data, env); } @@ -579,9 +580,11 @@ fn event( &mut term_data, env, ) { + // 4 byte buffer used to store encoded characters. + let mut char_buffer = [0; 4]; let s = match &key_event.key { KbKey::Character(c) => { - let mut s = "".to_string(); + let mut s = ""; let mut mods = key_event.mods; if mods.ctrl() { mods.set(Modifiers::CONTROL, false); @@ -592,21 +595,21 @@ fn event( { s = char::from_u32(i as u32) .unwrap() - .to_string() + .encode_utf8(&mut char_buffer); } } } s } - KbKey::Backspace => "\x08".to_string(), - KbKey::Tab => "\x09".to_string(), - KbKey::Enter => "\r".to_string(), - KbKey::Escape => "\x1b".to_string(), - _ => "".to_string(), + KbKey::Backspace => "\x08", + KbKey::Tab => "\x09", + KbKey::Enter => "\r", + KbKey::Escape => "\x1b", + _ => "", }; if term_data.terminal.mode == Mode::Terminal && !s.is_empty() { - term_data.receive_char(ctx, &s); + term_data.receive_char(ctx, s); } } data.keypress = keypress.clone();