diff options
-rw-r--r-- | default-plugins/status-bar/src/main.rs | 28 | ||||
-rw-r--r-- | default-plugins/status-bar/src/second_line.rs | 12 | ||||
-rw-r--r-- | zellij-server/src/route.rs | 4 | ||||
-rw-r--r-- | zellij-server/src/tab.rs | 6 | ||||
-rw-r--r-- | zellij-tile/src/data.rs | 2 |
5 files changed, 47 insertions, 5 deletions
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs index dba373f6b..d2c6d82b5 100644 --- a/default-plugins/status-bar/src/main.rs +++ b/default-plugins/status-bar/src/main.rs @@ -8,7 +8,7 @@ use zellij_tile::prelude::*; use zellij_tile_utils::style; use first_line::{ctrl_keys, superkey}; -use second_line::keybinds; +use second_line::{keybinds, text_copied_hint}; // for more of these, copy paste from: https://en.wikipedia.org/wiki/Box-drawing_character static ARROW_SEPARATOR: &str = ""; @@ -17,6 +17,7 @@ static MORE_MSG: &str = " ... "; #[derive(Default)] struct State { mode_info: ModeInfo, + diplay_text_copied_hint: bool, } register_plugin!(State); @@ -136,12 +137,25 @@ impl ZellijPlugin for State { set_selectable(false); set_invisible_borders(true); set_fixed_height(2); - subscribe(&[EventType::ModeUpdate]); + subscribe(&[ + EventType::ModeUpdate, + EventType::CopyToClipboard, + EventType::InputReceived, + ]); } fn update(&mut self, event: Event) { - if let Event::ModeUpdate(mode_info) = event { - self.mode_info = mode_info; + match event { + Event::ModeUpdate(mode_info) => { + self.mode_info = mode_info; + } + Event::CopyToClipboard => { + self.diplay_text_copied_hint = true; + } + Event::InputReceived => { + self.diplay_text_copied_hint = false; + } + _ => {} } } @@ -161,7 +175,11 @@ impl ZellijPlugin for State { ); let first_line = format!("{}{}", superkey, ctrl_keys); - let second_line = keybinds(&self.mode_info, cols); + let second_line = if self.diplay_text_copied_hint { + text_copied_hint(&self.mode_info.palette) + } else { + keybinds(&self.mode_info, cols) + }; // [48;5;238m is gray background, [0K is so that it fills the rest of the line // [m is background reset, [0K is so that it clears the rest of the line diff --git a/default-plugins/status-bar/src/second_line.rs b/default-plugins/status-bar/src/second_line.rs index 750df77b6..d73cb2874 100644 --- a/default-plugins/status-bar/src/second_line.rs +++ b/default-plugins/status-bar/src/second_line.rs @@ -375,3 +375,15 @@ pub fn keybinds(help: &ModeInfo, max_width: usize) -> LinePart { } best_effort_shortcut_list(help, max_width) } + +pub fn text_copied_hint(palette: &Palette) -> LinePart { + let hint = " Text copied to clipboard"; + let green_color = match palette.green { + PaletteColor::Rgb((r, g, b)) => RGB(r, g, b), + PaletteColor::EightBit(color) => Fixed(color), + }; + LinePart { + part: format!("{}", Style::new().fg(green_color).bold().paint(hint)), + len: hint.len(), + } +} diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs index 3959a19aa..20f14c3bd 100644 --- a/zellij-server/src/route.rs +++ b/zellij-server/src/route.rs @@ -23,6 +23,10 @@ fn route_action( to_server: &SenderWithContext<ServerInstruction>, ) -> bool { let mut should_break = false; + session + .senders + .send_to_plugin(PluginInstruction::Update(None, Event::InputReceived)) + .unwrap(); match action { Action::Write(val) => { session diff --git a/zellij-server/src/tab.rs b/zellij-server/src/tab.rs index 8f12f8836..6ecf33b71 100644 --- a/zellij-server/src/tab.rs +++ b/zellij-server/src/tab.rs @@ -2871,6 +2871,9 @@ impl Tab { let selected_text = self.get_active_pane().and_then(|p| p.get_selected_text()); if let Some(selected_text) = selected_text { self.write_selection_to_clipboard(&selected_text); + self.senders + .send_to_plugin(PluginInstruction::Update(None, Event::CopyToClipboard)) + .unwrap(); } } @@ -2879,6 +2882,9 @@ impl Tab { self.senders .send_to_server(ServerInstruction::Render(Some(output))) .unwrap(); + self.senders + .send_to_plugin(PluginInstruction::Update(None, Event::CopyToClipboard)) + .unwrap(); } fn is_inside_viewport(&self, pane_id: &PaneId) -> bool { let pane_position_and_size = self.panes.get(pane_id).unwrap().position_and_size(); diff --git a/zellij-tile/src/data.rs b/zellij-tile/src/data.rs index cdf57e69f..b22be626d 100644 --- a/zellij-tile/src/data.rs +++ b/zellij-tile/src/data.rs @@ -33,6 +33,8 @@ pub enum Event { TabUpdate(Vec<TabInfo>), KeyPress(Key), Timer(f64), + CopyToClipboard, + InputReceived, } /// Describes the different input modes, which change the way that keystrokes will be interpreted. |