From 4a860d4da42c6ff75044772318870bd68af0661c Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 7 Jul 2022 18:05:37 -0700 Subject: [PATCH] Properly fixed merge issues --- crates/terminal/src/color_translation.rs | 130 ++++++++++++----------- crates/terminal/src/modal.rs | 4 +- crates/terminal/src/terminal.rs | 11 +- crates/terminal/src/terminal_element.rs | 54 +--------- 4 files changed, 77 insertions(+), 122 deletions(-) diff --git a/crates/terminal/src/color_translation.rs b/crates/terminal/src/color_translation.rs index 78c2a569dbbeac5806e6535a2c87b7c0b6b57c03..946a22d3043e3eb1238b833974a17b29143e7ddf 100644 --- a/crates/terminal/src/color_translation.rs +++ b/crates/terminal/src/color_translation.rs @@ -1,71 +1,77 @@ use alacritty_terminal::{ansi::Color as AnsiColor, term::color::Rgb as AlacRgb}; use gpui::color::Color; -use theme::TerminalStyle; +use theme::TerminalColors; ///Converts a 2, 8, or 24 bit color ANSI color to the GPUI equivalent -pub fn convert_color(alac_color: &AnsiColor, style: &TerminalStyle) -> Color { +pub fn convert_color(alac_color: &AnsiColor, colors: &TerminalColors, modal: bool) -> Color { + let background = if modal { + colors.modal_background + } else { + colors.background + }; + match alac_color { //Named and theme defined colors alacritty_terminal::ansi::Color::Named(n) => match n { - alacritty_terminal::ansi::NamedColor::Black => style.black, - alacritty_terminal::ansi::NamedColor::Red => style.red, - alacritty_terminal::ansi::NamedColor::Green => style.green, - alacritty_terminal::ansi::NamedColor::Yellow => style.yellow, - alacritty_terminal::ansi::NamedColor::Blue => style.blue, - alacritty_terminal::ansi::NamedColor::Magenta => style.magenta, - alacritty_terminal::ansi::NamedColor::Cyan => style.cyan, - alacritty_terminal::ansi::NamedColor::White => style.white, - alacritty_terminal::ansi::NamedColor::BrightBlack => style.bright_black, - alacritty_terminal::ansi::NamedColor::BrightRed => style.bright_red, - alacritty_terminal::ansi::NamedColor::BrightGreen => style.bright_green, - alacritty_terminal::ansi::NamedColor::BrightYellow => style.bright_yellow, - alacritty_terminal::ansi::NamedColor::BrightBlue => style.bright_blue, - alacritty_terminal::ansi::NamedColor::BrightMagenta => style.bright_magenta, - alacritty_terminal::ansi::NamedColor::BrightCyan => style.bright_cyan, - alacritty_terminal::ansi::NamedColor::BrightWhite => style.bright_white, - alacritty_terminal::ansi::NamedColor::Foreground => style.foreground, - alacritty_terminal::ansi::NamedColor::Background => style.background, - alacritty_terminal::ansi::NamedColor::Cursor => style.cursor, - alacritty_terminal::ansi::NamedColor::DimBlack => style.dim_black, - alacritty_terminal::ansi::NamedColor::DimRed => style.dim_red, - alacritty_terminal::ansi::NamedColor::DimGreen => style.dim_green, - alacritty_terminal::ansi::NamedColor::DimYellow => style.dim_yellow, - alacritty_terminal::ansi::NamedColor::DimBlue => style.dim_blue, - alacritty_terminal::ansi::NamedColor::DimMagenta => style.dim_magenta, - alacritty_terminal::ansi::NamedColor::DimCyan => style.dim_cyan, - alacritty_terminal::ansi::NamedColor::DimWhite => style.dim_white, - alacritty_terminal::ansi::NamedColor::BrightForeground => style.bright_foreground, - alacritty_terminal::ansi::NamedColor::DimForeground => style.dim_foreground, + alacritty_terminal::ansi::NamedColor::Black => colors.black, + alacritty_terminal::ansi::NamedColor::Red => colors.red, + alacritty_terminal::ansi::NamedColor::Green => colors.green, + alacritty_terminal::ansi::NamedColor::Yellow => colors.yellow, + alacritty_terminal::ansi::NamedColor::Blue => colors.blue, + alacritty_terminal::ansi::NamedColor::Magenta => colors.magenta, + alacritty_terminal::ansi::NamedColor::Cyan => colors.cyan, + alacritty_terminal::ansi::NamedColor::White => colors.white, + alacritty_terminal::ansi::NamedColor::BrightBlack => colors.bright_black, + alacritty_terminal::ansi::NamedColor::BrightRed => colors.bright_red, + alacritty_terminal::ansi::NamedColor::BrightGreen => colors.bright_green, + alacritty_terminal::ansi::NamedColor::BrightYellow => colors.bright_yellow, + alacritty_terminal::ansi::NamedColor::BrightBlue => colors.bright_blue, + alacritty_terminal::ansi::NamedColor::BrightMagenta => colors.bright_magenta, + alacritty_terminal::ansi::NamedColor::BrightCyan => colors.bright_cyan, + alacritty_terminal::ansi::NamedColor::BrightWhite => colors.bright_white, + alacritty_terminal::ansi::NamedColor::Foreground => colors.foreground, + alacritty_terminal::ansi::NamedColor::Background => background, + alacritty_terminal::ansi::NamedColor::Cursor => colors.cursor, + alacritty_terminal::ansi::NamedColor::DimBlack => colors.dim_black, + alacritty_terminal::ansi::NamedColor::DimRed => colors.dim_red, + alacritty_terminal::ansi::NamedColor::DimGreen => colors.dim_green, + alacritty_terminal::ansi::NamedColor::DimYellow => colors.dim_yellow, + alacritty_terminal::ansi::NamedColor::DimBlue => colors.dim_blue, + alacritty_terminal::ansi::NamedColor::DimMagenta => colors.dim_magenta, + alacritty_terminal::ansi::NamedColor::DimCyan => colors.dim_cyan, + alacritty_terminal::ansi::NamedColor::DimWhite => colors.dim_white, + alacritty_terminal::ansi::NamedColor::BrightForeground => colors.bright_foreground, + alacritty_terminal::ansi::NamedColor::DimForeground => colors.dim_foreground, }, //'True' colors alacritty_terminal::ansi::Color::Spec(rgb) => Color::new(rgb.r, rgb.g, rgb.b, u8::MAX), //8 bit, indexed colors - alacritty_terminal::ansi::Color::Indexed(i) => get_color_at_index(&(*i as usize), style), + alacritty_terminal::ansi::Color::Indexed(i) => get_color_at_index(&(*i as usize), colors), } } ///Converts an 8 bit ANSI color to it's GPUI equivalent. ///Accepts usize for compatability with the alacritty::Colors interface, ///Other than that use case, should only be called with values in the [0,255] range -pub fn get_color_at_index(index: &usize, style: &TerminalStyle) -> Color { +pub fn get_color_at_index(index: &usize, colors: &TerminalColors) -> Color { match index { //0-15 are the same as the named colors above - 0 => style.black, - 1 => style.red, - 2 => style.green, - 3 => style.yellow, - 4 => style.blue, - 5 => style.magenta, - 6 => style.cyan, - 7 => style.white, - 8 => style.bright_black, - 9 => style.bright_red, - 10 => style.bright_green, - 11 => style.bright_yellow, - 12 => style.bright_blue, - 13 => style.bright_magenta, - 14 => style.bright_cyan, - 15 => style.bright_white, + 0 => colors.black, + 1 => colors.red, + 2 => colors.green, + 3 => colors.yellow, + 4 => colors.blue, + 5 => colors.magenta, + 6 => colors.cyan, + 7 => colors.white, + 8 => colors.bright_black, + 9 => colors.bright_red, + 10 => colors.bright_green, + 11 => colors.bright_yellow, + 12 => colors.bright_blue, + 13 => colors.bright_magenta, + 14 => colors.bright_cyan, + 15 => colors.bright_white, //16-231 are mapped to their RGB colors on a 0-5 range per channel 16..=231 => { let (r, g, b) = rgb_for_index(&(*index as u8)); //Split the index into it's ANSI-RGB components @@ -79,19 +85,19 @@ pub fn get_color_at_index(index: &usize, style: &TerminalStyle) -> Color { Color::new(i * step, i * step, i * step, u8::MAX) //Map the ANSI-grayscale components to the RGB-grayscale } //For compatability with the alacritty::Colors interface - 256 => style.foreground, - 257 => style.background, - 258 => style.cursor, - 259 => style.dim_black, - 260 => style.dim_red, - 261 => style.dim_green, - 262 => style.dim_yellow, - 263 => style.dim_blue, - 264 => style.dim_magenta, - 265 => style.dim_cyan, - 266 => style.dim_white, - 267 => style.bright_foreground, - 268 => style.black, //'Dim Background', non-standard color + 256 => colors.foreground, + 257 => colors.background, + 258 => colors.cursor, + 259 => colors.dim_black, + 260 => colors.dim_red, + 261 => colors.dim_green, + 262 => colors.dim_yellow, + 263 => colors.dim_blue, + 264 => colors.dim_magenta, + 265 => colors.dim_cyan, + 266 => colors.dim_white, + 267 => colors.bright_foreground, + 268 => colors.black, //'Dim Background', non-standard color _ => Color::new(0, 0, 0, 255), } } diff --git a/crates/terminal/src/modal.rs b/crates/terminal/src/modal.rs index 60e14fa8a923d23e1c5da31e1844db3f417bc9bf..2a1c16ae4bf3df89fae485720a7a2744608cd430 100644 --- a/crates/terminal/src/modal.rs +++ b/crates/terminal/src/modal.rs @@ -1,7 +1,7 @@ use gpui::{ViewContext, ViewHandle}; use workspace::Workspace; -use crate::{DeployModal, Event, Terminal}; +use crate::{get_working_directory, DeployModal, Event, Terminal}; pub fn deploy_modal(workspace: &mut Workspace, _: &DeployModal, cx: &mut ViewContext) { if let Some(stored_terminal) = cx.default_global::>>().clone() { @@ -12,7 +12,7 @@ pub fn deploy_modal(workspace: &mut Workspace, _: &DeployModal, cx: &mut ViewCon .active_entry() .and_then(|entry_id| project.worktree_for_entry(entry_id, cx)) .and_then(|worktree_handle| worktree_handle.read(cx).as_local()) - .map(|wt| wt.abs_path().to_path_buf()); + .and_then(get_working_directory); let displaced_modal = workspace.toggle_modal(cx, |_, cx| { let this = cx.add_view(|cx| Terminal::new(cx, abs_path, true)); diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 437c5995df6f7155417f054c584c0e8a3a60c0fd..017bb5f00a192e6f08037dae0d7fd15bd8364a9f 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -1,3 +1,4 @@ +pub mod color_translation; pub mod gpui_func_tools; mod modal; pub mod terminal_element; @@ -47,10 +48,6 @@ const DEBUG_TERMINAL_HEIGHT: f32 = 200.; const DEBUG_CELL_WIDTH: f32 = 5.; const DEBUG_LINE_HEIGHT: f32 = 5.; -pub mod color_translation; -pub mod gpui_func_tools; -pub mod terminal_element; - ///Action for carrying the input to the PTY #[derive(Clone, Default, Debug, PartialEq, Eq)] pub struct Input(pub String); @@ -258,7 +255,7 @@ impl Terminal { AlacTermEvent::ColorRequest(index, format) => { let color = self.term.lock().colors()[index].unwrap_or_else(|| { let term_style = &cx.global::().theme.terminal; - to_alac_rgb(get_color_at_index(&index, term_style)) + to_alac_rgb(get_color_at_index(&index, &term_style.colors)) }); self.write_to_pty(&Input(format(color)), cx) } @@ -461,7 +458,7 @@ impl Item for Terminal { //From what I can tell, there's no way to tell the current working //Directory of the terminal from outside the terminal. There might be //solutions to this, but they are non-trivial and require more IPC - Some(Terminal::new(cx, self.associated_directory.clone())) + Some(Terminal::new(cx, self.associated_directory.clone(), false)) } fn project_path(&self, _cx: &gpui::AppContext) -> Option { @@ -650,7 +647,7 @@ mod tests { ///If this test is failing for you, check that DEBUG_TERMINAL_WIDTH is wide enough to fit your entire command prompt! #[gpui::test] async fn test_copy(cx: &mut TestAppContext) { - let terminal = cx.add_view(Default::default(), |cx| Terminal::new(cx, None)); + let terminal = cx.add_view(Default::default(), |cx| Terminal::new(cx, None, false)); cx.set_condition_duration(Duration::from_secs(2)); terminal.update(cx, |terminal, cx| { diff --git a/crates/terminal/src/terminal_element.rs b/crates/terminal/src/terminal_element.rs index 329fbaabe094c539f0a02a6a5ccfe5057314a24e..ec48996e7801e6a8a92e8c54ea165ca711af7a9b 100644 --- a/crates/terminal/src/terminal_element.rs +++ b/crates/terminal/src/terminal_element.rs @@ -26,7 +26,7 @@ use gpui::{ use itertools::Itertools; use ordered_float::OrderedFloat; use settings::Settings; -use theme::{TerminalColors, TerminalStyle}; +use theme::TerminalStyle; use std::{cmp::min, ops::Range, rc::Rc, sync::Arc}; use std::{fmt::Debug, ops::Sub}; @@ -130,7 +130,7 @@ impl Element for TerminalEl { //Now that we're done with the mutable portion, grab the immutable settings and view again let view = view_handle.read(cx); - let term = view.term.lock(); + let (selection_color, terminal_theme) = { let theme = &(cx.global::()).theme; (theme.editor.selection.selection, &theme.terminal) @@ -388,7 +388,7 @@ impl Element for TerminalEl { } } -fn mouse_to_cell_data( +pub fn mouse_to_cell_data( pos: Vector2F, origin: Vector2F, cur_size: SizeInfo, @@ -543,54 +543,6 @@ fn cell_style( } } -///Converts a 2, 8, or 24 bit color ANSI color to the GPUI equivalent -fn convert_color(alac_color: &AnsiColor, colors: &TerminalColors, modal: bool) -> Color { - let background = if modal { - colors.modal_background - } else { - colors.background - }; - - match alac_color { - //Named and theme defined colors - alacritty_terminal::ansi::Color::Named(n) => match n { - alacritty_terminal::ansi::NamedColor::Black => colors.black, - alacritty_terminal::ansi::NamedColor::Red => colors.red, - alacritty_terminal::ansi::NamedColor::Green => colors.green, - alacritty_terminal::ansi::NamedColor::Yellow => colors.yellow, - alacritty_terminal::ansi::NamedColor::Blue => colors.blue, - alacritty_terminal::ansi::NamedColor::Magenta => colors.magenta, - alacritty_terminal::ansi::NamedColor::Cyan => colors.cyan, - alacritty_terminal::ansi::NamedColor::White => colors.white, - alacritty_terminal::ansi::NamedColor::BrightBlack => colors.bright_black, - alacritty_terminal::ansi::NamedColor::BrightRed => colors.bright_red, - alacritty_terminal::ansi::NamedColor::BrightGreen => colors.bright_green, - alacritty_terminal::ansi::NamedColor::BrightYellow => colors.bright_yellow, - alacritty_terminal::ansi::NamedColor::BrightBlue => colors.bright_blue, - alacritty_terminal::ansi::NamedColor::BrightMagenta => colors.bright_magenta, - alacritty_terminal::ansi::NamedColor::BrightCyan => colors.bright_cyan, - alacritty_terminal::ansi::NamedColor::BrightWhite => colors.bright_white, - alacritty_terminal::ansi::NamedColor::Foreground => colors.foreground, - alacritty_terminal::ansi::NamedColor::Background => background, - alacritty_terminal::ansi::NamedColor::Cursor => colors.cursor, - alacritty_terminal::ansi::NamedColor::DimBlack => colors.dim_black, - alacritty_terminal::ansi::NamedColor::DimRed => colors.dim_red, - alacritty_terminal::ansi::NamedColor::DimGreen => colors.dim_green, - alacritty_terminal::ansi::NamedColor::DimYellow => colors.dim_yellow, - alacritty_terminal::ansi::NamedColor::DimBlue => colors.dim_blue, - alacritty_terminal::ansi::NamedColor::DimMagenta => colors.dim_magenta, - alacritty_terminal::ansi::NamedColor::DimCyan => colors.dim_cyan, - alacritty_terminal::ansi::NamedColor::DimWhite => colors.dim_white, - alacritty_terminal::ansi::NamedColor::BrightForeground => colors.bright_foreground, - alacritty_terminal::ansi::NamedColor::DimForeground => colors.dim_foreground, - }, - //'True' colors - alacritty_terminal::ansi::Color::Spec(rgb) => Color::new(rgb.r, rgb.g, rgb.b, u8::MAX), - //8 bit, indexed colors - alacritty_terminal::ansi::Color::Indexed(i) => get_color_at_index(i, colors), - } -} - fn attach_mouse_handlers( origin: Vector2F, cur_size: SizeInfo,