Properly fixed merge issues

Mikayla Maki created

Change summary

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(-)

Detailed changes

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),
     }
 }

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<Workspace>) {
     if let Some(stored_terminal) = cx.default_global::<Option<ViewHandle<Terminal>>>().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));

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::<Settings>().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<ProjectPath> {
@@ -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| {

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::<Settings>()).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,