diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 6ea4ca5f73..61862925c1 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -5,7 +5,8 @@ use alacritty_terminal::{ grid::Scroll, sync::FairMutex, term::{color::Rgb as AlacRgb, SizeInfo}, - tty, Term, + tty::{self, setup_env}, + Term, }; use futures::{ @@ -19,7 +20,7 @@ use gpui::{ use project::{Project, ProjectPath}; use settings::Settings; use smallvec::SmallVec; -use std::{path::PathBuf, sync::Arc}; +use std::{collections::HashMap, path::PathBuf, sync::Arc}; use workspace::{Item, Workspace}; use crate::terminal_element::{get_color_at_index, TerminalEl}; @@ -28,7 +29,7 @@ use crate::terminal_element::{get_color_at_index, TerminalEl}; const ETX_CHAR: char = 3_u8 as char; //'End of text', the control code for 'ctrl-c' const TAB_CHAR: char = 9_u8 as char; const CARRIAGE_RETURN_CHAR: char = 13_u8 as char; -const ESC_CHAR: char = 27_u8 as char; +const ESC_CHAR: char = 27_u8 as char; // == \x1b const DEL_CHAR: char = 127_u8 as char; const LEFT_SEQ: &str = "\x1b[D"; const RIGHT_SEQ: &str = "\x1b[C"; @@ -127,11 +128,19 @@ impl Terminal { hold: false, }; + //Does this mangle the zed Env? I'm guessing it does... do child processes have a seperate ENV? + let mut env: HashMap = HashMap::new(); + //TODO: Properly set the current locale, + env.insert("LC_ALL".to_string(), "en_US.UTF-8".to_string()); + let config = Config { pty_config: pty_config.clone(), + env, ..Default::default() }; + setup_env(&config); + //The details here don't matter, the terminal will be resized on the first layout //Set to something small for easier debugging let size_info = SizeInfo::new(200., 100.0, 5., 5., 0., 0., false); @@ -286,11 +295,16 @@ impl Terminal { ///Write the Input payload to the tty. This locks the terminal so we can scroll it. fn write_to_pty(&mut self, input: &Input, cx: &mut ViewContext) { + self.write_bytes_to_pty(input.0.clone().into_bytes(), cx); + } + + ///Write the Input payload to the tty. This locks the terminal so we can scroll it. + fn write_bytes_to_pty(&mut self, input: Vec, cx: &mut ViewContext) { //iTerm bell behavior, bell stays until terminal is interacted with self.has_bell = false; - self.term.lock().scroll_display(Scroll::Bottom); cx.emit(Event::TitleChanged); - self.pty_tx.notify(input.0.clone().into_bytes()); + self.term.lock().scroll_display(Scroll::Bottom); + self.pty_tx.notify(input); } ///Send the `up` key @@ -320,6 +334,7 @@ impl Terminal { ///Send the `delete` key. TODO: Difference between this and backspace? fn del(&mut self, _: &Del, cx: &mut ViewContext) { + // self.write_to_pty(&Input("\x1b[3~".to_string()), cx) self.write_to_pty(&Input(DEL_CHAR.to_string()), cx); }