From 8720ef58a4205166b488e3c17889497de2393a97 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Tue, 14 Dec 2021 17:23:44 +0100 Subject: [PATCH 1/3] work --- zellij-server/src/screen.rs | 74 +++++++++++++++----- zellij-server/src/tab.rs | 51 ++++++++++---- zellij-server/src/ui/pane_contents_and_ui.rs | 5 +- 3 files changed, 96 insertions(+), 34 deletions(-) diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index f5beade595..af491c1b1f 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -189,6 +189,7 @@ pub(crate) struct Screen { default_mode_info: ModeInfo, // TODO: restructure ModeInfo to prevent this duplication colors: Palette, draw_pane_frames: bool, + session_is_mirrored: bool, } impl Screen { @@ -212,6 +213,7 @@ impl Screen { mode_info: BTreeMap::new(), default_mode_info: mode_info, draw_pane_frames, + session_is_mirrored: false, } } @@ -241,7 +243,7 @@ impl Screen { self.tabs .get_mut(&client_previous_tab) .unwrap() - .add_client(client_id); + .add_client(client_id, None); } } fn move_clients(&mut self, source_index: usize, destination_index: usize) { @@ -364,6 +366,7 @@ impl Screen { /// Renders this [`Screen`], which amounts to rendering its active [`Tab`]. pub fn render(&mut self) { + log::info!("***render***"); let mut output = Output::default(); let mut tabs_to_close = vec![]; let size = self.size; @@ -409,6 +412,7 @@ impl Screen { /// Returns a mutable reference to this [`Screen`]'s active [`Tab`]. pub fn get_active_tab_mut(&mut self, client_id: ClientId) -> Option<&mut Tab> { + log::info!("active_tab_indices: {:?}", self.active_tab_indices); match self.active_tab_indices.get(&client_id) { Some(tab) => self.tabs.get_mut(tab), None => None, @@ -449,27 +453,59 @@ impl Screen { client_id, ); tab.apply_layout(layout, new_pids, tab_index, client_id); - if let Some(active_tab) = self.get_active_tab_mut(client_id) { - active_tab.visible(false); - let (connected_clients_in_source_tab, client_mode_infos_in_source_tab) = - active_tab.drain_connected_clients(); - tab.add_multiple_clients( - connected_clients_in_source_tab, - client_mode_infos_in_source_tab, - ); - } - for (client_id, tab_history) in &mut self.tab_history { - let old_active_index = self.active_tab_indices.remove(client_id).unwrap(); - self.active_tab_indices.insert(*client_id, tab_index); - tab_history.retain(|&e| e != tab_index); - tab_history.push(old_active_index); + if self.session_is_mirrored { + if let Some(active_tab) = self.get_active_tab_mut(client_id) { + active_tab.visible(false); + let (connected_clients_in_source_tab, client_mode_infos_in_source_tab) = + active_tab.drain_connected_clients(); + tab.add_multiple_clients( + connected_clients_in_source_tab, + client_mode_infos_in_source_tab, + ); + } + for (client_id, tab_history) in &mut self.tab_history { + let old_active_index = self.active_tab_indices.remove(client_id).unwrap(); + self.active_tab_indices.insert(*client_id, tab_index); + tab_history.retain(|&e| e != tab_index); + tab_history.push(old_active_index); + } + } else { + if let Some(active_tab) = self.get_active_tab_mut(client_id) { + let (client_id, client_mode_info) = + active_tab.drain_single_client(client_id); + tab.add_client( + client_id, + Some(client_mode_info), + ); + if active_tab.has_no_connected_clients() { + active_tab.visible(false); + } + } + match self.active_tab_indices.remove(&client_id) { + Some(old_active_index) => { + self.active_tab_indices.insert(client_id, tab_index); + let client_tab_history = self.tab_history.get_mut(&client_id).unwrap(); + client_tab_history.retain(|&e| e != tab_index); + client_tab_history.push(old_active_index); + }, + None => { + self.active_tab_indices.insert(client_id, tab_index); + } + } +// self.active_tab_indices.insert(client_id, tab_index); +// if let Some(old_active_index) = self.active_tab_indices.remove(&client_id) { +// // self.active_tab_indices.insert(client_id, tab_index); +// let client_tab_history = self.tab_history.get_mut(&client_id).unwrap(); +// client_tab_history.retain(|&e| e != tab_index); +// client_tab_history.push(old_active_index); +// } } tab.update_input_modes(); tab.visible(true); self.tabs.insert(tab_index, tab); - if !self.active_tab_indices.contains_key(&client_id) { - self.add_client(client_id); - } +// if !self.active_tab_indices.contains_key(&client_id) { +// self.add_client(client_id); +// } self.update_tabs(); self.render(); @@ -487,7 +523,7 @@ impl Screen { } self.active_tab_indices.insert(client_id, tab_index); self.tab_history.insert(client_id, tab_history); - self.tabs.get_mut(&tab_index).unwrap().add_client(client_id); + self.tabs.get_mut(&tab_index).unwrap().add_client(client_id, None); } pub fn remove_client(&mut self, client_id: ClientId) { if let Some(client_tab) = self.get_active_tab_mut(client_id) { diff --git a/zellij-server/src/tab.rs b/zellij-server/src/tab.rs index a0386a4564..b846596f65 100644 --- a/zellij-server/src/tab.rs +++ b/zellij-server/src/tab.rs @@ -111,10 +111,13 @@ impl Output { .insert(*client_id, String::new()); } } - pub fn push_str_to_all_clients(&mut self, to_push: &str) { - for render_instruction in self.client_render_instructions.values_mut() { - render_instruction.push_str(to_push) + pub fn push_str_to_multiple_clients(&mut self, to_push: &str, client_ids: impl Iterator) { + for client_id in client_ids { + self.client_render_instructions.get_mut(&client_id).unwrap().push_str(to_push) } +// for render_instruction in self.client_render_instructions.values_mut() { +// render_instruction.push_str(to_push) +// } } pub fn push_to_client(&mut self, client_id: ClientId, to_push: &str) { if let Some(render_instructions) = self.client_render_instructions.get_mut(&client_id) { @@ -356,7 +359,7 @@ impl Tab { draw_pane_frames, // at the moment this is hard-coded while the feature is being developed // the only effect this has is to make sure the UI is drawn without additional information about other connected clients - session_is_mirrored: true, + session_is_mirrored: false, pending_vte_events: HashMap::new(), connected_clients, } @@ -491,7 +494,7 @@ impl Tab { .unwrap(); } } - pub fn add_client(&mut self, client_id: ClientId) { + pub fn add_client(&mut self, client_id: ClientId, mode_info: Option) { match self.connected_clients.iter().next() { Some(first_client_id) => { let first_active_pane_id = *self.active_panes.get(first_client_id).unwrap(); @@ -511,7 +514,7 @@ impl Tab { self.connected_clients.insert(client_id); self.active_panes.insert(client_id, *first_pane_id); self.mode_info - .insert(client_id, self.default_mode_info.clone()); + .insert(client_id, mode_info.unwrap_or(self.default_mode_info.clone())); } } // TODO: we might be able to avoid this, we do this so that newly connected clients will @@ -527,7 +530,7 @@ impl Tab { client_mode_infos: Vec<(ClientId, ModeInfo)>, ) { for client_id in client_ids { - self.add_client(client_id); + self.add_client(client_id, None); } for (client_id, client_mode_info) in client_mode_infos { log::info!( @@ -550,6 +553,16 @@ impl Tab { client_mode_info.collect(), ) } + pub fn drain_single_client(&mut self, client_id: ClientId) -> (ClientId, ModeInfo) { + // TODO: active_panes, etc? what about the drain_connected_clients method above? + let client_mode_info = self.mode_info.remove(&client_id).unwrap(); + self.connected_clients.remove(&client_id); + self.active_panes.remove(&client_id); + (client_id, client_mode_info) + } + pub fn has_no_connected_clients(&self) -> bool { + self.connected_clients.is_empty() + } pub fn new_pane(&mut self, pid: PaneId, client_id: Option) { self.close_down_to_max_terminals(); if self.fullscreen_is_active { @@ -790,7 +803,10 @@ impl Tab { }); } pub fn write_to_active_terminal(&mut self, input_bytes: Vec, client_id: ClientId) { - self.write_to_pane_id(input_bytes, self.get_active_pane_id(client_id).unwrap()); + // self.write_to_pane_id(input_bytes, self.get_active_pane_id(client_id).unwrap()); + let pane_id = self.get_active_pane_id(client_id).unwrap(); + log::info!("writing to pane id: {:?}", pane_id); + self.write_to_pane_id(input_bytes, pane_id); } pub fn write_to_pane_id(&mut self, input_bytes: Vec, pane_id: PaneId) { match pane_id { @@ -978,6 +994,8 @@ impl Tab { if self.connected_clients.is_empty() || self.active_panes.is_empty() { return; } + log::info!("tab render, connected clients: {:?}", self.connected_clients); + log::info!("tab render, active_panes: {:?}", self.active_panes); self.update_active_panes_in_pty_thread(); output.add_clients(&self.connected_clients); let mut client_id_to_boundaries: HashMap = HashMap::new(); @@ -1028,16 +1046,19 @@ impl Tab { } // FIXME: Once clients can be distinguished if let Some(overlay_vte) = &overlay { - output.push_str_to_all_clients(overlay_vte); + // output.push_str_to_all_clients(overlay_vte); + output.push_str_to_multiple_clients(overlay_vte, self.connected_clients.iter().copied()); } self.render_cursor(output); } fn hide_cursor_and_clear_display_as_needed(&mut self, output: &mut Output) { let hide_cursor = "\u{1b}[?25l"; - output.push_str_to_all_clients(hide_cursor); + // output.push_str_to_all_clients(hide_cursor); + output.push_str_to_multiple_clients(hide_cursor, self.connected_clients.iter().copied()); if self.should_clear_display_before_rendering { let clear_display = "\u{1b}[2J"; - output.push_str_to_all_clients(clear_display); + // output.push_str_to_all_clients(clear_display); + output.push_str_to_multiple_clients(clear_display, self.connected_clients.iter().copied()); self.should_clear_display_before_rendering = false; } } @@ -3404,10 +3425,14 @@ impl Tab { fn write_selection_to_clipboard(&self, selection: &str) { let mut output = Output::default(); output.add_clients(&self.connected_clients); - output.push_str_to_all_clients(&format!( +// output.push_str_to_all_clients(&format!( +// "\u{1b}]52;c;{}\u{1b}\\", +// base64::encode(selection) +// )); + output.push_str_to_multiple_clients(&format!( "\u{1b}]52;c;{}\u{1b}\\", base64::encode(selection) - )); + ), self.connected_clients.iter().copied()); // TODO: ideally we should be sending the Render instruction from the screen self.senders diff --git a/zellij-server/src/ui/pane_contents_and_ui.rs b/zellij-server/src/ui/pane_contents_and_ui.rs index 25550fe9f9..c83e2bc3b2 100644 --- a/zellij-server/src/ui/pane_contents_and_ui.rs +++ b/zellij-server/src/ui/pane_contents_and_ui.rs @@ -39,12 +39,13 @@ impl<'a> PaneContentsAndUi<'a> { pub fn render_pane_contents_for_all_clients(&mut self) { if let Some(vte_output) = self.pane.render(None) { // FIXME: Use Termion for cursor and style clearing? - self.output.push_str_to_all_clients(&format!( + // self.output.push_str_to_all_clients(&format!( + self.output.push_str_to_multiple_clients(&format!( "\u{1b}[{};{}H\u{1b}[m{}", self.pane.y() + 1, self.pane.x() + 1, vte_output - )); + ), self.focused_clients.iter().copied()); } } pub fn render_pane_contents_for_client(&mut self, client_id: ClientId) { From d9a59294793680bac80a09dc3ef7ebb8cd3de922 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Mon, 20 Dec 2021 16:43:52 +0100 Subject: [PATCH 2/3] feat(collaboration): implement multiple users --- assets/plugins/status-bar.wasm | Bin 536007 -> 540477 bytes assets/plugins/strider.wasm | Bin 574888 -> 581410 bytes assets/plugins/tab-bar.wasm | Bin 436564 -> 445668 bytes default-plugins/tab-bar/src/main.rs | 1 + default-plugins/tab-bar/src/tab.rs | 76 +++-- src/tests/e2e/cases.rs | 312 +++++++++++++++++- src/tests/e2e/remote_runner.rs | 59 +++- ...ers_in_different_panes_and_same_tab-2.snap | 29 ++ ...users_in_different_panes_and_same_tab.snap | 29 ++ ...s__multiple_users_in_different_tabs-2.snap | 29 ++ ...ses__multiple_users_in_different_tabs.snap | 29 ++ ...multiple_users_in_same_pane_and_tab-2.snap | 29 ++ ...__multiple_users_in_same_pane_and_tab.snap | 29 ++ zellij-server/src/screen.rs | 203 +++++++----- zellij-server/src/tab.rs | 120 ++++--- zellij-server/src/ui/pane_boundaries_frame.rs | 18 +- zellij-server/src/ui/pane_contents_and_ui.rs | 33 +- zellij-server/src/unit/screen_tests.rs | 2 + zellij-server/src/unit/tab_tests.rs | 9 + zellij-tile/src/data.rs | 32 ++ zellij-utils/src/input/options.rs | 9 + zellij-utils/src/shared.rs | 10 + 22 files changed, 846 insertions(+), 212 deletions(-) mode change 100644 => 100755 assets/plugins/status-bar.wasm mode change 100644 => 100755 assets/plugins/strider.wasm mode change 100644 => 100755 assets/plugins/tab-bar.wasm create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab-2.snap create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab.snap create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs-2.snap create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs.snap create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab-2.snap create mode 100644 src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab.snap diff --git a/assets/plugins/status-bar.wasm b/assets/plugins/status-bar.wasm old mode 100644 new mode 100755 index b45a3247b2f4084f4cc45078f4d2cbc8999027fa..fdff24cf69a2db8a93e7bd20a6cfefed4b606d3e GIT binary patch delta 71287 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 delta 66974 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 Gs{a8i^-RV9 diff --git a/assets/plugins/strider.wasm b/assets/plugins/strider.wasm old mode 100644 new mode 100755 index 3b62b85ae237561477483aaeb1d3454b9bd30be0..379a32473d85ff53109e34e3576dec6a39ecf3cf GIT binary patch delta 80182 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 Mep9t7Sg`4T0|o1_jsO4v delta 72872 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 diff --git a/assets/plugins/tab-bar.wasm b/assets/plugins/tab-bar.wasm old mode 100644 new mode 100755 index 4f8107df1ddf213adeea912d7fd79a5d2594d503..ebcfe2ca754a95257977a67275a38253afdc1863 GIT binary patch delta 65162 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

? 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 kKOaiL|0?jKnFDr-7@yS03%c09{>OV delta 56586 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 diff --git a/default-plugins/tab-bar/src/main.rs b/default-plugins/tab-bar/src/main.rs index 31b2f2d376..3db531384f 100644 --- a/default-plugins/tab-bar/src/main.rs +++ b/default-plugins/tab-bar/src/main.rs @@ -85,6 +85,7 @@ impl ZellijPlugin for State { t.is_sync_panes_active, self.mode_info.palette, self.mode_info.capabilities, + t.other_focused_clients.as_slice(), ); all_tabs.push(tab); } diff --git a/default-plugins/tab-bar/src/tab.rs b/default-plugins/tab-bar/src/tab.rs index db960fd52b..4ed3b20760 100644 --- a/default-plugins/tab-bar/src/tab.rs +++ b/default-plugins/tab-bar/src/tab.rs @@ -1,33 +1,62 @@ use crate::{line::tab_separator, LinePart}; -use ansi_term::ANSIStrings; +use ansi_term::{ANSIString, ANSIStrings}; use unicode_width::UnicodeWidthStr; use zellij_tile::prelude::*; use zellij_tile_utils::style; -pub fn active_tab(text: String, palette: Palette, separator: &str) -> LinePart { - let left_separator = style!(palette.gray, palette.green).paint(separator); - let tab_text_len = text.width() + 2 + separator.width() * 2; // 2 for left and right separators, 2 for the text padding - let tab_styled_text = style!(palette.black, palette.green) - .bold() - .paint(format!(" {} ", text)); - let right_separator = style!(palette.green, palette.gray).paint(separator); - let tab_styled_text = - ANSIStrings(&[left_separator, tab_styled_text, right_separator]).to_string(); - LinePart { - part: tab_styled_text, - len: tab_text_len, +fn cursors(focused_clients: &[ClientId], palette: Palette) -> (Vec, usize) { + // cursor section, text length + let mut len = 0; + let mut cursors = vec![]; + for client_id in focused_clients.iter() { + if let Some(color) = client_id_to_colors(*client_id, palette) { + cursors.push(style!(color.1, color.0).paint(" ")); + len += 1; + } } + (cursors, len) } -pub fn non_active_tab(text: String, palette: Palette, separator: &str) -> LinePart { - let left_separator = style!(palette.gray, palette.fg).paint(separator); - let tab_text_len = text.width() + 2 + separator.width() * 2; // 2 for left and right separators, 2 for the text padding - let tab_styled_text = style!(palette.black, palette.fg) +pub fn render_tab( + text: String, + palette: Palette, + separator: &str, + focused_clients: &[ClientId], + active: bool, +) -> LinePart { + let background_color = if active { palette.green } else { palette.fg }; + let left_separator = style!(palette.gray, background_color).paint(separator); + let mut tab_text_len = text.width() + 2 + separator.width() * 2; // 2 for left and right separators, 2 for the text padding + + let tab_styled_text = style!(palette.black, background_color) .bold() .paint(format!(" {} ", text)); - let right_separator = style!(palette.fg, palette.gray).paint(separator); - let tab_styled_text = - ANSIStrings(&[left_separator, tab_styled_text, right_separator]).to_string(); + + let right_separator = style!(background_color, palette.gray).paint(separator); + let tab_styled_text = if !focused_clients.is_empty() { + let (cursor_section, extra_length) = cursors(focused_clients, palette); + tab_text_len += extra_length; + let mut s = String::new(); + let cursor_beginning = style!(palette.black, background_color) + .bold() + .paint("[") + .to_string(); + let cursor_section = ANSIStrings(&cursor_section).to_string(); + let cursor_end = style!(palette.black, background_color) + .bold() + .paint("]") + .to_string(); + s.push_str(&left_separator.to_string()); + s.push_str(&tab_styled_text.to_string()); + s.push_str(&cursor_beginning); + s.push_str(&cursor_section); + s.push_str(&cursor_end); + s.push_str(&right_separator.to_string()); + s + } else { + ANSIStrings(&[left_separator, tab_styled_text, right_separator]).to_string() + }; + LinePart { part: tab_styled_text, len: tab_text_len, @@ -40,15 +69,12 @@ pub fn tab_style( is_sync_panes_active: bool, palette: Palette, capabilities: PluginCapabilities, + focused_clients: &[ClientId], ) -> LinePart { let separator = tab_separator(capabilities); let mut tab_text = text; if is_sync_panes_active { tab_text.push_str(" (Sync)"); } - if is_active_tab { - active_tab(tab_text, palette, separator) - } else { - non_active_tab(tab_text, palette, separator) - } + render_tab(tab_text, palette, separator, focused_clients, is_active_tab) } diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs index 0585c373b4..1457c0a91f 100644 --- a/src/tests/e2e/cases.rs +++ b/src/tests/e2e/cases.rs @@ -178,7 +178,6 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() { name: "Make sure only one pane appears", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - // if remote_terminal.cursor_position_is(3, 2) && remote_terminal.snapshot_contains("...") if remote_terminal.cursor_position_is(3, 2) { // ... is the truncated tip line step_is_complete = true; @@ -928,7 +927,7 @@ pub fn detach_and_attach_session() { let last_snapshot = loop { RemoteRunner::kill_running_sessions(fake_win_size); drop(()); - let mut runner = RemoteRunner::new(fake_win_size) + let mut runner = RemoteRunner::new_mirrored_session(fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { @@ -1261,20 +1260,21 @@ pub fn mirrored_sessions() { // then make sure they were also reflected (mirrored) in the first runner afterwards RemoteRunner::kill_running_sessions(fake_win_size); drop(()); - let mut first_runner = RemoteRunner::new_with_session_name(fake_win_size, session_name) - .dont_panic() - .add_step(Step { - name: "Wait for app to load", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.status_bar_appears() - && remote_terminal.cursor_position_is(3, 2) - { - step_is_complete = true; - } - step_is_complete - }, - }); + let mut first_runner = + RemoteRunner::new_with_session_name(fake_win_size, session_name, true) + .dont_panic() + .add_step(Step { + name: "Wait for app to load", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + step_is_complete = true; + } + step_is_complete + }, + }); first_runner.run_all_steps(); let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name) @@ -1396,6 +1396,286 @@ pub fn mirrored_sessions() { assert_snapshot!(second_runner_snapshot); } +#[test] +#[ignore] +pub fn multiple_users_in_same_pane_and_tab() { + let fake_win_size = Size { + cols: 120, + rows: 24, + }; + let mut test_attempts = 10; + let session_name = "multiple_users_in_same_pane_and_tab"; + let (first_runner_snapshot, second_runner_snapshot) = loop { + // here we connect with one runner, then connect with another, perform some actions and + // then make sure they were also reflected (mirrored) in the first runner afterwards + RemoteRunner::kill_running_sessions(fake_win_size); + drop(()); + let mut first_runner = + RemoteRunner::new_with_session_name(fake_win_size, session_name, false) + .dont_panic() + .add_step(Step { + name: "Wait for app to load", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + step_is_complete = true; + } + step_is_complete + }, + }); + first_runner.run_all_steps(); + + let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name) + .dont_panic() + .add_step(Step { + name: "Wait for app to load", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + step_is_complete = true; + } + step_is_complete + }, + }); + second_runner.run_all_steps(); + + if first_runner.test_timed_out || second_runner.test_timed_out { + test_attempts -= 1; + continue; + } + let second_runner_snapshot = second_runner.take_snapshot_after(Step { + name: "take snapshot after", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) + && remote_terminal.snapshot_contains("MY FOCUS") + { + // cursor is back in the first tab + step_is_complete = true; + } + step_is_complete + }, + }); + let first_runner_snapshot = first_runner.take_snapshot_after(Step { + name: "take snapshot after", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) + && remote_terminal.snapshot_contains("MY FOCUS") + { + // cursor is back in the first tab + step_is_complete = true; + } + step_is_complete + }, + }); + + if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 { + test_attempts -= 1; + continue; + } else { + break (first_runner_snapshot, second_runner_snapshot); + } + }; + assert_snapshot!(first_runner_snapshot); + assert_snapshot!(second_runner_snapshot); +} + +#[test] +#[ignore] +pub fn multiple_users_in_different_panes_and_same_tab() { + let fake_win_size = Size { + cols: 120, + rows: 24, + }; + let mut test_attempts = 10; + let session_name = "multiple_users_in_same_pane_and_tab"; + let (first_runner_snapshot, second_runner_snapshot) = loop { + // here we connect with one runner, then connect with another, perform some actions and + // then make sure they were also reflected (mirrored) in the first runner afterwards + RemoteRunner::kill_running_sessions(fake_win_size); + drop(()); + let mut first_runner = + RemoteRunner::new_with_session_name(fake_win_size, session_name, false) + .dont_panic() + .add_step(Step { + name: "Wait for app to load", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + step_is_complete = true; + } + step_is_complete + }, + }); + first_runner.run_all_steps(); + + let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name) + .dont_panic() + .add_step(Step { + name: "Split pane to the right", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + remote_terminal.send_key(&PANE_MODE); + remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); + // back to normal mode after split + remote_terminal.send_key(&ENTER); + step_is_complete = true; + } + step_is_complete + }, + }); + second_runner.run_all_steps(); + + if first_runner.test_timed_out || second_runner.test_timed_out { + test_attempts -= 1; + continue; + } + + let second_runner_snapshot = second_runner.take_snapshot_after(Step { + name: "take snapshot after", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { + // cursor is in the newly opened second pane + step_is_complete = true; + } + step_is_complete + }, + }); + + let first_runner_snapshot = first_runner.take_snapshot_after(Step { + name: "take snapshot after", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) + && remote_terminal.snapshot_contains("││$") + { + // cursor is back in the first tab + step_is_complete = true; + } + step_is_complete + }, + }); + + if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 { + test_attempts -= 1; + continue; + } else { + break (first_runner_snapshot, second_runner_snapshot); + } + }; + assert_snapshot!(first_runner_snapshot); + assert_snapshot!(second_runner_snapshot); +} + +#[test] +#[ignore] +pub fn multiple_users_in_different_tabs() { + let fake_win_size = Size { + cols: 120, + rows: 24, + }; + let mut test_attempts = 10; + let session_name = "multiple_users_in_different_tabs"; + let (first_runner_snapshot, second_runner_snapshot) = loop { + // here we connect with one runner, then connect with another, perform some actions and + // then make sure they were also reflected (mirrored) in the first runner afterwards + RemoteRunner::kill_running_sessions(fake_win_size); + drop(()); + let mut first_runner = + RemoteRunner::new_with_session_name(fake_win_size, session_name, false) + .dont_panic() + .add_step(Step { + name: "Wait for app to load", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + step_is_complete = true; + } + step_is_complete + }, + }); + first_runner.run_all_steps(); + + let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name) + .dont_panic() + .add_step(Step { + name: "Open new tab", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) && remote_terminal.tip_appears() { + // cursor is in the newly opened second pane + remote_terminal.send_key(&TAB_MODE); + remote_terminal.send_key(&NEW_TAB_IN_TAB_MODE); + // back to normal mode after split + remote_terminal.send_key(&ENTER); + step_is_complete = true; + } + step_is_complete + }, + }); + second_runner.run_all_steps(); + + if first_runner.test_timed_out || second_runner.test_timed_out { + test_attempts -= 1; + continue; + } + + let second_runner_snapshot = second_runner.take_snapshot_after(Step { + name: "Wait for new tab to open", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) + && remote_terminal.tip_appears() + && remote_terminal.snapshot_contains("Tab #2") + && remote_terminal.status_bar_appears() + { + // cursor is in the newly opened second tab + step_is_complete = true; + } + step_is_complete + }, + }); + + let first_runner_snapshot = first_runner.take_snapshot_after(Step { + name: "Wait for new tab to open", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) + && remote_terminal.tip_appears() + && remote_terminal.snapshot_contains("Tab #2") + && remote_terminal.status_bar_appears() + { + // cursor is in the newly opened second tab + step_is_complete = true; + } + step_is_complete + }, + }); + + if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 { + test_attempts -= 1; + continue; + } else { + break (first_runner_snapshot, second_runner_snapshot); + } + }; + assert_snapshot!(first_runner_snapshot); + assert_snapshot!(second_runner_snapshot); +} + #[test] #[ignore] pub fn bracketed_paste() { diff --git a/src/tests/e2e/remote_runner.rs b/src/tests/e2e/remote_runner.rs index 205710f1dd..feaeecdacf 100644 --- a/src/tests/e2e/remote_runner.rs +++ b/src/tests/e2e/remote_runner.rs @@ -67,13 +67,27 @@ fn start_zellij(channel: &mut ssh2::Channel) { channel.flush().unwrap(); } -fn start_zellij_in_session(channel: &mut ssh2::Channel, session_name: &str) { +fn start_zellij_mirrored_session(channel: &mut ssh2::Channel) { stop_zellij(channel); channel .write_all( format!( - "{} --session {}\n", - ZELLIJ_EXECUTABLE_LOCATION, session_name + "{} --session {} options --mirror-session true\n", + ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME + ) + .as_bytes(), + ) + .unwrap(); + channel.flush().unwrap(); +} + +fn start_zellij_in_session(channel: &mut ssh2::Channel, session_name: &str, mirrored: bool) { + stop_zellij(channel); + channel + .write_all( + format!( + "{} --session {} options --mirror-session {}\n", + ZELLIJ_EXECUTABLE_LOCATION, session_name, mirrored ) .as_bytes(), ) @@ -333,13 +347,48 @@ impl RemoteRunner { reader_thread, } } + pub fn new_mirrored_session(win_size: Size) -> Self { + let sess = ssh_connect(); + let mut channel = sess.channel_session().unwrap(); + let mut rows = Dimension::fixed(win_size.rows); + let mut cols = Dimension::fixed(win_size.cols); + rows.set_inner(win_size.rows); + cols.set_inner(win_size.cols); + let pane_geom = PaneGeom { + x: 0, + y: 0, + rows, + cols, + }; + setup_remote_environment(&mut channel, win_size); + start_zellij_mirrored_session(&mut channel); + let channel = Arc::new(Mutex::new(channel)); + let last_snapshot = Arc::new(Mutex::new(String::new())); + let cursor_coordinates = Arc::new(Mutex::new((0, 0))); + sess.set_blocking(false); + let reader_thread = + read_from_channel(&channel, &last_snapshot, &cursor_coordinates, &pane_geom); + RemoteRunner { + steps: vec![], + channel, + currently_running_step: None, + current_step_index: 0, + retries_left: RETRIES, + retry_pause_ms: 100, + test_timed_out: false, + panic_on_no_retries_left: true, + last_snapshot, + cursor_coordinates, + reader_thread, + } + } pub fn kill_running_sessions(win_size: Size) { let sess = ssh_connect(); let mut channel = sess.channel_session().unwrap(); setup_remote_environment(&mut channel, win_size); start_zellij(&mut channel); } - pub fn new_with_session_name(win_size: Size, session_name: &str) -> Self { + pub fn new_with_session_name(win_size: Size, session_name: &str, mirrored: bool) -> Self { // notice that this method does not have a timeout, so use with caution! let sess = ssh_connect_without_timeout(); let mut channel = sess.channel_session().unwrap(); @@ -354,7 +403,7 @@ impl RemoteRunner { cols, }; setup_remote_environment(&mut channel, win_size); - start_zellij_in_session(&mut channel, session_name); + start_zellij_in_session(&mut channel, session_name, mirrored); let channel = Arc::new(Mutex::new(channel)); let last_snapshot = Arc::new(Mutex::new(String::new())); let cursor_coordinates = Arc::new(Mutex::new((0, 0))); diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab-2.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab-2.snap new file mode 100644 index 0000000000..5868eb441d --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab-2.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: second_runner_snapshot + +--- + Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ] +┌ Pane #1 ───────────┤ FOCUSED USER: ├───────────────────┐┌ Pane #2 ──────────────┤ MY FOCUS ├───────────────────────┐ +│$ ││$ █ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab.snap new file mode 100644 index 0000000000..e9355a4496 --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: first_runner_snapshot + +--- + Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ] +┌ Pane #1 ──────────────┤ MY FOCUS ├───────────────────────┐┌ Pane #2 ───────────┤ FOCUSED USER: ├───────────────────┐ +│$ █ ││$ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +└──────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs-2.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs-2.snap new file mode 100644 index 0000000000..7b983dfdd3 --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs-2.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: second_runner_snapshot + +--- + Zellij (multiple_users_in_different_tabs)  Tab #1 [ ] Tab #2  +┌ Pane #1 ────────────────────────────────────────────┤ MY FOCUS ├─────────────────────────────────────────────────────┐ +│$ █ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs.snap new file mode 100644 index 0000000000..4a1926d636 --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: first_runner_snapshot + +--- + Zellij (multiple_users_in_different_tabs)  Tab #1  Tab #2 [ ] +┌ Pane #1 ────────────────────────────────────────────┤ MY FOCUS ├─────────────────────────────────────────────────────┐ +│$ █ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab-2.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab-2.snap new file mode 100644 index 0000000000..92d189c42b --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab-2.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: second_runner_snapshot + +--- + Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ] +┌ Pane #1 ─────────────────────────────────────────┤ MY FOCUS AND: ├─────────────────────────────────────────────────┐ +│$ █ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab.snap new file mode 100644 index 0000000000..9944ee812e --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +expression: first_runner_snapshot + +--- + Zellij (multiple_users_in_same_pane_and_tab)  Tab #1 [ ] +┌ Pane #1 ─────────────────────────────────────────┤ MY FOCUS AND: ├─────────────────────────────────────────────────┐ +│$ █ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Ctrl + LOCK 

PANE  TAB  RESIZE  MOVE  SCROLL  SESSION  QUIT  + Tip: Alt + => new pane. Alt + <[] or hjkl> => navigate. Alt + <+-> => resize pane. diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index af491c1b1f..7fa6327523 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -1,7 +1,9 @@ //! Things related to [`Screen`]s. +use std::cell::RefCell; use std::collections::{BTreeMap, HashSet}; use std::os::unix::io::RawFd; +use std::rc::Rc; use std::str; use zellij_utils::pane_size::Size; @@ -182,6 +184,7 @@ pub(crate) struct Screen { size: Size, /// The overlay that is drawn on top of [`Pane`]'s', [`Tab`]'s and the [`Screen`] overlay: OverlayWindow, + connected_clients: Rc>>, /// The indices of this [`Screen`]'s active [`Tab`]s. active_tab_indices: BTreeMap, tab_history: BTreeMap>, @@ -200,12 +203,14 @@ impl Screen { max_panes: Option, mode_info: ModeInfo, draw_pane_frames: bool, + session_is_mirrored: bool, ) -> Self { Screen { bus, max_panes, size: client_attributes.size, colors: client_attributes.palette, + connected_clients: Rc::new(RefCell::new(HashSet::new())), active_tab_indices: BTreeMap::new(), tabs: BTreeMap::new(), overlay: OverlayWindow::default(), @@ -213,7 +218,7 @@ impl Screen { mode_info: BTreeMap::new(), default_mode_info: mode_info, draw_pane_frames, - session_is_mirrored: false, + session_is_mirrored, } } @@ -228,34 +233,50 @@ impl Screen { } } - fn move_clients_from_closed_tab(&mut self, previous_tab_index: usize) { - let client_ids_in_closed_tab: Vec = self - .active_tab_indices - .iter() - .filter(|(_c_id, t_index)| **t_index == previous_tab_index) - .map(|(c_id, _t_index)| c_id) - .copied() - .collect(); - for client_id in client_ids_in_closed_tab { + fn move_clients_from_closed_tab( + &mut self, + client_ids_and_mode_infos: Vec<(ClientId, ModeInfo)>, + ) { + for (client_id, client_mode_info) in client_ids_and_mode_infos { let client_previous_tab = self.tab_history.get_mut(&client_id).unwrap().pop().unwrap(); self.active_tab_indices .insert(client_id, client_previous_tab); self.tabs .get_mut(&client_previous_tab) .unwrap() - .add_client(client_id, None); + .add_client(client_id, Some(client_mode_info)); } } - fn move_clients(&mut self, source_index: usize, destination_index: usize) { - let (connected_clients_in_source_tab, client_mode_infos_in_source_tab) = { - let source_tab = self.tabs.get_mut(&source_index).unwrap(); - source_tab.drain_connected_clients() - }; - let destination_tab = self.tabs.get_mut(&destination_index).unwrap(); - destination_tab.add_multiple_clients( - connected_clients_in_source_tab, - client_mode_infos_in_source_tab, - ); + fn move_clients_between_tabs( + &mut self, + source_tab_index: usize, + destination_tab_index: usize, + clients_to_move: Option>, + ) { + // None ==> move all clients + let drained_clients = self + .get_indexed_tab_mut(source_tab_index) + .map(|t| t.drain_connected_clients(clients_to_move)); + if let Some(client_mode_info_in_source_tab) = drained_clients { + let destination_tab = self.get_indexed_tab_mut(destination_tab_index).unwrap(); + destination_tab.add_multiple_clients(client_mode_info_in_source_tab); + destination_tab.update_input_modes(); + destination_tab.set_force_render(); + destination_tab.visible(true); + } + } + fn update_client_tab_focus(&mut self, client_id: ClientId, new_tab_index: usize) { + match self.active_tab_indices.remove(&client_id) { + Some(old_active_index) => { + self.active_tab_indices.insert(client_id, new_tab_index); + let client_tab_history = self.tab_history.entry(client_id).or_insert_with(Vec::new); + client_tab_history.retain(|&e| e != new_tab_index); + client_tab_history.push(old_active_index); + } + None => { + self.active_tab_indices.insert(client_id, new_tab_index); + } + } } /// A helper function to switch to a new tab at specified position. fn switch_active_tab(&mut self, new_tab_pos: usize, client_id: ClientId) { @@ -267,24 +288,29 @@ impl Screen { return; } - current_tab.visible(false); let current_tab_index = current_tab.index; let new_tab_index = new_tab.index; - let new_tab = self.get_indexed_tab_mut(new_tab_index).unwrap(); - new_tab.set_force_render(); - new_tab.visible(true); - - // currently all clients are just mirrors, so we perform the action for every entry in - // tab_history - // TODO: receive a client_id and only do it for the client - for (client_id, tab_history) in &mut self.tab_history { - let old_active_index = self.active_tab_indices.remove(client_id).unwrap(); - self.active_tab_indices.insert(*client_id, new_tab_index); - tab_history.retain(|&e| e != new_tab_pos); - tab_history.push(old_active_index); + if self.session_is_mirrored { + self.move_clients_between_tabs(current_tab_index, new_tab_index, None); + let all_connected_clients: Vec = + self.connected_clients.borrow().iter().copied().collect(); + for client_id in all_connected_clients { + self.update_client_tab_focus(client_id, new_tab_index); + } + } else { + self.move_clients_between_tabs( + current_tab_index, + new_tab_index, + Some(vec![client_id]), + ); + self.update_client_tab_focus(client_id, new_tab_index); } - self.move_clients(current_tab_index, new_tab_index); + if let Some(current_tab) = self.get_indexed_tab_mut(current_tab_index) { + if current_tab.has_no_connected_clients() { + current_tab.visible(false); + } + } self.update_tabs(); self.render(); @@ -316,7 +342,7 @@ impl Screen { } fn close_tab_at_index(&mut self, tab_index: usize) { - let tab_to_close = self.tabs.remove(&tab_index).unwrap(); + let mut tab_to_close = self.tabs.remove(&tab_index).unwrap(); let pane_ids = tab_to_close.get_pane_ids(); // below we don't check the result of sending the CloseTab instruction to the pty thread // because this might be happening when the app is closing, at which point the pty thread @@ -332,7 +358,8 @@ impl Screen { .send_to_server(ServerInstruction::Render(None)) .unwrap(); } else { - self.move_clients_from_closed_tab(tab_index); + let client_mode_infos_in_closed_tab = tab_to_close.drain_connected_clients(None); + self.move_clients_from_closed_tab(client_mode_infos_in_closed_tab); let visible_tab_indices: HashSet = self.active_tab_indices.values().copied().collect(); for t in self.tabs.values_mut() { @@ -366,7 +393,6 @@ impl Screen { /// Renders this [`Screen`], which amounts to rendering its active [`Tab`]. pub fn render(&mut self) { - log::info!("***render***"); let mut output = Output::default(); let mut tabs_to_close = vec![]; let size = self.size; @@ -412,7 +438,6 @@ impl Screen { /// Returns a mutable reference to this [`Screen`]'s active [`Tab`]. pub fn get_active_tab_mut(&mut self, client_id: ClientId) -> Option<&mut Tab> { - log::info!("active_tab_indices: {:?}", self.active_tab_indices); match self.active_tab_indices.get(&client_id) { Some(tab) => self.tabs.get_mut(tab), None => None, @@ -450,62 +475,40 @@ impl Screen { client_mode_info, self.colors, self.draw_pane_frames, + self.connected_clients.clone(), + self.session_is_mirrored, client_id, ); tab.apply_layout(layout, new_pids, tab_index, client_id); if self.session_is_mirrored { if let Some(active_tab) = self.get_active_tab_mut(client_id) { - active_tab.visible(false); - let (connected_clients_in_source_tab, client_mode_infos_in_source_tab) = - active_tab.drain_connected_clients(); - tab.add_multiple_clients( - connected_clients_in_source_tab, - client_mode_infos_in_source_tab, - ); - } - for (client_id, tab_history) in &mut self.tab_history { - let old_active_index = self.active_tab_indices.remove(client_id).unwrap(); - self.active_tab_indices.insert(*client_id, tab_index); - tab_history.retain(|&e| e != tab_index); - tab_history.push(old_active_index); - } - } else { - if let Some(active_tab) = self.get_active_tab_mut(client_id) { - let (client_id, client_mode_info) = - active_tab.drain_single_client(client_id); - tab.add_client( - client_id, - Some(client_mode_info), - ); + let client_mode_infos_in_source_tab = active_tab.drain_connected_clients(None); + tab.add_multiple_clients(client_mode_infos_in_source_tab); if active_tab.has_no_connected_clients() { active_tab.visible(false); } } - match self.active_tab_indices.remove(&client_id) { - Some(old_active_index) => { - self.active_tab_indices.insert(client_id, tab_index); - let client_tab_history = self.tab_history.get_mut(&client_id).unwrap(); - client_tab_history.retain(|&e| e != tab_index); - client_tab_history.push(old_active_index); - }, - None => { - self.active_tab_indices.insert(client_id, tab_index); - } + let all_connected_clients: Vec = + self.connected_clients.borrow().iter().copied().collect(); + for client_id in all_connected_clients { + self.update_client_tab_focus(client_id, tab_index); + } + } else if let Some(active_tab) = self.get_active_tab_mut(client_id) { + let client_mode_info_in_source_tab = + active_tab.drain_connected_clients(Some(vec![client_id])); + tab.add_multiple_clients(client_mode_info_in_source_tab); + if active_tab.has_no_connected_clients() { + active_tab.visible(false); } -// self.active_tab_indices.insert(client_id, tab_index); -// if let Some(old_active_index) = self.active_tab_indices.remove(&client_id) { -// // self.active_tab_indices.insert(client_id, tab_index); -// let client_tab_history = self.tab_history.get_mut(&client_id).unwrap(); -// client_tab_history.retain(|&e| e != tab_index); -// client_tab_history.push(old_active_index); -// } + self.update_client_tab_focus(client_id, tab_index); } tab.update_input_modes(); tab.visible(true); self.tabs.insert(tab_index, tab); -// if !self.active_tab_indices.contains_key(&client_id) { -// self.add_client(client_id); -// } + if !self.active_tab_indices.contains_key(&client_id) { + // this means this is a new client and we need to add it to our state properly + self.add_client(client_id); + } self.update_tabs(); self.render(); @@ -522,12 +525,19 @@ impl Screen { tab_history = first_tab_history.clone(); } self.active_tab_indices.insert(client_id, tab_index); + self.connected_clients.borrow_mut().insert(client_id); self.tab_history.insert(client_id, tab_history); - self.tabs.get_mut(&tab_index).unwrap().add_client(client_id, None); + self.tabs + .get_mut(&tab_index) + .unwrap() + .add_client(client_id, None); } pub fn remove_client(&mut self, client_id: ClientId) { if let Some(client_tab) = self.get_active_tab_mut(client_id) { client_tab.remove_client(client_id); + if client_tab.has_no_connected_clients() { + client_tab.visible(false); + } } if self.active_tab_indices.contains_key(&client_id) { self.active_tab_indices.remove(&client_id); @@ -535,30 +545,41 @@ impl Screen { if self.tab_history.contains_key(&client_id) { self.tab_history.remove(&client_id); } + self.connected_clients.borrow_mut().remove(&client_id); + self.update_tabs(); } pub fn update_tabs(&self) { - let mut tab_data = vec![]; - // TODO: right now all clients are synced, so we just take the first active_tab which is - // the same for everyone - when this is no longer the case, we need to update the TabInfo - // to account for this (or send multiple TabInfos) - if let Some((_first_client, first_active_tab_index)) = self.active_tab_indices.iter().next() - { + for (client_id, active_tab_index) in self.active_tab_indices.iter() { + let mut tab_data = vec![]; for tab in self.tabs.values() { + let other_focused_clients: Vec = if self.session_is_mirrored { + vec![] + } else { + self.active_tab_indices + .iter() + .filter(|(c_id, tab_position)| { + **tab_position == tab.index && *c_id != client_id + }) + .map(|(c_id, _)| c_id) + .copied() + .collect() + }; tab_data.push(TabInfo { position: tab.position, name: tab.name.clone(), - active: *first_active_tab_index == tab.index, + active: *active_tab_index == tab.index, panes_to_hide: tab.panes_to_hide.len(), is_fullscreen_active: tab.is_fullscreen_active(), is_sync_panes_active: tab.is_sync_panes_active(), + other_focused_clients, }); } self.bus .senders .send_to_plugin(PluginInstruction::Update( None, - None, + Some(*client_id), Event::TabUpdate(tab_data), )) .unwrap(); @@ -643,6 +664,7 @@ pub(crate) fn screen_thread_main( ) { let capabilities = config_options.simplified_ui; let draw_pane_frames = config_options.pane_frames.unwrap_or(true); + let session_is_mirrored = config_options.mirror_session.unwrap_or(false); let mut screen = Screen::new( bus, @@ -656,6 +678,7 @@ pub(crate) fn screen_thread_main( }, ), draw_pane_frames, + session_is_mirrored, ); loop { let (event, mut err_ctx) = screen diff --git a/zellij-server/src/tab.rs b/zellij-server/src/tab.rs index 7067a09d40..f2fc4dfd17 100644 --- a/zellij-server/src/tab.rs +++ b/zellij-server/src/tab.rs @@ -17,7 +17,9 @@ use crate::{ ClientId, ServerInstruction, }; use serde::{Deserialize, Serialize}; +use std::cell::RefCell; use std::os::unix::io::RawFd; +use std::rc::Rc; use std::sync::mpsc::channel; use std::time::Instant; use std::{ @@ -111,13 +113,20 @@ impl Output { .insert(*client_id, String::new()); } } - pub fn push_str_to_multiple_clients(&mut self, to_push: &str, client_ids: impl Iterator) { + pub fn push_str_to_multiple_clients( + &mut self, + to_push: &str, + client_ids: impl Iterator, + ) { for client_id in client_ids { - self.client_render_instructions.get_mut(&client_id).unwrap().push_str(to_push) + self.client_render_instructions + .get_mut(&client_id) + .unwrap() + .push_str(to_push) } -// for render_instruction in self.client_render_instructions.values_mut() { -// render_instruction.push_str(to_push) -// } + // for render_instruction in self.client_render_instructions.values_mut() { + // render_instruction.push_str(to_push) + // } } pub fn push_to_client(&mut self, client_id: ClientId, to_push: &str) { if let Some(render_instructions) = self.client_render_instructions.get_mut(&client_id) { @@ -144,6 +153,7 @@ pub(crate) struct Tab { mode_info: HashMap, default_mode_info: ModeInfo, pub colors: Palette, + connected_clients_in_app: Rc>>, // TODO: can we combine this and connected_clients somehow? connected_clients: HashSet, draw_pane_frames: bool, session_is_mirrored: bool, @@ -325,6 +335,8 @@ impl Tab { mode_info: ModeInfo, colors: Palette, draw_pane_frames: bool, + connected_clients_in_app: Rc>>, + session_is_mirrored: bool, client_id: ClientId, ) -> Self { let panes = BTreeMap::new(); @@ -357,10 +369,9 @@ impl Tab { default_mode_info: mode_info, colors, draw_pane_frames, - // at the moment this is hard-coded while the feature is being developed - // the only effect this has is to make sure the UI is drawn without additional information about other connected clients - session_is_mirrored: false, + session_is_mirrored, pending_vte_events: HashMap::new(), + connected_clients_in_app, connected_clients, } } @@ -500,8 +511,10 @@ impl Tab { let first_active_pane_id = *self.active_panes.get(first_client_id).unwrap(); self.connected_clients.insert(client_id); self.active_panes.insert(client_id, first_active_pane_id); - self.mode_info - .insert(client_id, self.default_mode_info.clone()); + self.mode_info.insert( + client_id, + mode_info.unwrap_or_else(|| self.default_mode_info.clone()), + ); } None => { let mut pane_ids: Vec = self.panes.keys().copied().collect(); @@ -514,46 +527,49 @@ impl Tab { let first_pane_id = pane_ids.get(0).unwrap(); self.connected_clients.insert(client_id); self.active_panes.insert(client_id, *first_pane_id); - self.mode_info - .insert(client_id, mode_info.unwrap_or(self.default_mode_info.clone())); + self.mode_info.insert( + client_id, + mode_info.unwrap_or_else(|| self.default_mode_info.clone()), + ); } } // TODO: we might be able to avoid this, we do this so that newly connected clients will // necessarily get a full render self.set_force_render(); + self.update_input_modes(); } pub fn change_mode_info(&mut self, mode_info: ModeInfo, client_id: ClientId) { self.mode_info.insert(client_id, mode_info); } - pub fn add_multiple_clients( - &mut self, - client_ids: Vec, - client_mode_infos: Vec<(ClientId, ModeInfo)>, - ) { - for client_id in client_ids { + pub fn add_multiple_clients(&mut self, client_ids_to_mode_infos: Vec<(ClientId, ModeInfo)>) { + for (client_id, client_mode_info) in client_ids_to_mode_infos { self.add_client(client_id, None); - } - for (client_id, client_mode_info) in client_mode_infos { self.mode_info.insert(client_id, client_mode_info); } } pub fn remove_client(&mut self, client_id: ClientId) { self.connected_clients.remove(&client_id); - self.active_panes.remove(&client_id); self.set_force_render(); } - pub fn drain_connected_clients(&mut self) -> (Vec, Vec<(ClientId, ModeInfo)>) { - let client_mode_info = self.mode_info.drain(); - ( - self.connected_clients.drain().collect(), - client_mode_info.collect(), - ) + pub fn drain_connected_clients( + &mut self, + clients_to_drain: Option>, + ) -> Vec<(ClientId, ModeInfo)> { + // None => all clients + let mut client_ids_to_mode_infos = vec![]; + let clients_to_drain = + clients_to_drain.unwrap_or_else(|| self.connected_clients.drain().collect()); + for client_id in clients_to_drain { + client_ids_to_mode_infos.push(self.drain_single_client(client_id)); + } + client_ids_to_mode_infos } pub fn drain_single_client(&mut self, client_id: ClientId) -> (ClientId, ModeInfo) { - // TODO: active_panes, etc? what about the drain_connected_clients method above? - let client_mode_info = self.mode_info.remove(&client_id).unwrap(); + let client_mode_info = self + .mode_info + .remove(&client_id) + .unwrap_or_else(|| self.default_mode_info.clone()); self.connected_clients.remove(&client_id); - self.active_panes.remove(&client_id); (client_id, client_mode_info) } pub fn has_no_connected_clients(&self) -> bool { @@ -801,7 +817,6 @@ impl Tab { pub fn write_to_active_terminal(&mut self, input_bytes: Vec, client_id: ClientId) { // self.write_to_pane_id(input_bytes, self.get_active_pane_id(client_id).unwrap()); let pane_id = self.get_active_pane_id(client_id).unwrap(); - log::info!("writing to pane id: {:?}", pane_id); self.write_to_pane_id(input_bytes, pane_id); } pub fn write_to_pane_id(&mut self, input_bytes: Vec, pane_id: PaneId) { @@ -990,8 +1005,6 @@ impl Tab { if self.connected_clients.is_empty() || self.active_panes.is_empty() { return; } - log::info!("tab render, connected clients: {:?}", self.connected_clients); - log::info!("tab render, active_panes: {:?}", self.active_panes); self.update_active_panes_in_pty_thread(); output.add_clients(&self.connected_clients); let mut client_id_to_boundaries: HashMap = HashMap::new(); @@ -999,10 +1012,21 @@ impl Tab { // render panes and their frames for (kind, pane) in self.panes.iter_mut() { if !self.panes_to_hide.contains(&pane.pid()) { - let mut pane_contents_and_ui = - PaneContentsAndUi::new(pane, output, self.colors, &self.active_panes); + let mut active_panes = self.active_panes.clone(); + let multiple_users_exist_in_session = + { self.connected_clients_in_app.borrow().len() > 1 }; + active_panes.retain(|c_id, _| self.connected_clients.contains(c_id)); + let mut pane_contents_and_ui = PaneContentsAndUi::new( + pane, + output, + self.colors, + &active_panes, + multiple_users_exist_in_session, + ); if let PaneId::Terminal(..) = kind { - pane_contents_and_ui.render_pane_contents_for_all_clients(); + pane_contents_and_ui.render_pane_contents_to_multiple_clients( + self.connected_clients.iter().copied(), + ); } for &client_id in &self.connected_clients { let client_mode = self @@ -1043,7 +1067,8 @@ impl Tab { // FIXME: Once clients can be distinguished if let Some(overlay_vte) = &overlay { // output.push_str_to_all_clients(overlay_vte); - output.push_str_to_multiple_clients(overlay_vte, self.connected_clients.iter().copied()); + output + .push_str_to_multiple_clients(overlay_vte, self.connected_clients.iter().copied()); } self.render_cursor(output); } @@ -1054,7 +1079,10 @@ impl Tab { if self.should_clear_display_before_rendering { let clear_display = "\u{1b}[2J"; // output.push_str_to_all_clients(clear_display); - output.push_str_to_multiple_clients(clear_display, self.connected_clients.iter().copied()); + output.push_str_to_multiple_clients( + clear_display, + self.connected_clients.iter().copied(), + ); self.should_clear_display_before_rendering = false; } } @@ -3421,14 +3449,14 @@ impl Tab { fn write_selection_to_clipboard(&self, selection: &str) { let mut output = Output::default(); output.add_clients(&self.connected_clients); -// output.push_str_to_all_clients(&format!( -// "\u{1b}]52;c;{}\u{1b}\\", -// base64::encode(selection) -// )); - output.push_str_to_multiple_clients(&format!( - "\u{1b}]52;c;{}\u{1b}\\", - base64::encode(selection) - ), self.connected_clients.iter().copied()); + // output.push_str_to_all_clients(&format!( + // "\u{1b}]52;c;{}\u{1b}\\", + // base64::encode(selection) + // )); + output.push_str_to_multiple_clients( + &format!("\u{1b}]52;c;{}\u{1b}\\", base64::encode(selection)), + self.connected_clients.iter().copied(), + ); // TODO: ideally we should be sending the Render instruction from the screen self.senders diff --git a/zellij-server/src/ui/pane_boundaries_frame.rs b/zellij-server/src/ui/pane_boundaries_frame.rs index 1ed29d838b..419dea79c3 100644 --- a/zellij-server/src/ui/pane_boundaries_frame.rs +++ b/zellij-server/src/ui/pane_boundaries_frame.rs @@ -3,7 +3,7 @@ use crate::ClientId; use ansi_term::Colour::{Fixed, RGB}; use ansi_term::Style; use zellij_utils::pane_size::Viewport; -use zellij_utils::zellij_tile::prelude::{Palette, PaletteColor}; +use zellij_utils::zellij_tile::prelude::{client_id_to_colors, Palette, PaletteColor}; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; @@ -29,22 +29,6 @@ fn background_color(character: &str, color: Option) -> String { } } -// TODO: move elsewhere -pub(crate) fn client_id_to_colors( - client_id: ClientId, - colors: Palette, -) -> Option<(PaletteColor, PaletteColor)> { - // (primary color, secondary color) - match client_id { - 1 => Some((colors.green, colors.black)), - 2 => Some((colors.blue, colors.black)), - 3 => Some((colors.cyan, colors.black)), - 4 => Some((colors.magenta, colors.black)), - 5 => Some((colors.yellow, colors.black)), - _ => None, - } -} - pub struct FrameParams { pub focused_client: Option, pub is_main_client: bool, diff --git a/zellij-server/src/ui/pane_contents_and_ui.rs b/zellij-server/src/ui/pane_contents_and_ui.rs index c83e2bc3b2..4395192000 100644 --- a/zellij-server/src/ui/pane_contents_and_ui.rs +++ b/zellij-server/src/ui/pane_contents_and_ui.rs @@ -1,11 +1,12 @@ use crate::panes::PaneId; use crate::tab::{Output, Pane}; use crate::ui::boundaries::Boundaries; -use crate::ui::pane_boundaries_frame::client_id_to_colors; use crate::ui::pane_boundaries_frame::FrameParams; use crate::ClientId; use std::collections::HashMap; -use zellij_tile::data::{InputMode, Palette, PaletteColor}; +use zellij_tile::data::{ + client_id_to_colors, single_client_color, InputMode, Palette, PaletteColor, +}; pub struct PaneContentsAndUi<'a> { pane: &'a mut Box, @@ -21,13 +22,13 @@ impl<'a> PaneContentsAndUi<'a> { output: &'a mut Output, colors: Palette, active_panes: &HashMap, + multiple_users_exist_in_session: bool, ) -> Self { let focused_clients: Vec = active_panes .iter() .filter(|(_c_id, p_id)| **p_id == pane.pid()) .map(|(c_id, _p_id)| *c_id) .collect(); - let multiple_users_exist_in_session = active_panes.len() > 1; PaneContentsAndUi { pane, output, @@ -36,16 +37,22 @@ impl<'a> PaneContentsAndUi<'a> { multiple_users_exist_in_session, } } - pub fn render_pane_contents_for_all_clients(&mut self) { + pub fn render_pane_contents_to_multiple_clients( + &mut self, + clients: impl Iterator, + ) { if let Some(vte_output) = self.pane.render(None) { // FIXME: Use Termion for cursor and style clearing? // self.output.push_str_to_all_clients(&format!( - self.output.push_str_to_multiple_clients(&format!( - "\u{1b}[{};{}H\u{1b}[m{}", - self.pane.y() + 1, - self.pane.x() + 1, - vte_output - ), self.focused_clients.iter().copied()); + self.output.push_str_to_multiple_clients( + &format!( + "\u{1b}[{};{}H\u{1b}[m{}", + self.pane.y() + 1, + self.pane.x() + 1, + vte_output + ), + clients, + ); } } pub fn render_pane_contents_for_client(&mut self, client_id: ClientId) { @@ -166,9 +173,9 @@ impl<'a> PaneContentsAndUi<'a> { if pane_focused_for_client_id { match mode { InputMode::Normal | InputMode::Locked => { - if session_is_mirrored { - let colors = client_id_to_colors(1, self.colors); // mirrored sessions only have one focused color - colors.map(|colors| colors.0) + if session_is_mirrored || !self.multiple_users_exist_in_session { + let colors = single_client_color(self.colors); // mirrored sessions only have one focused color + Some(colors.0) } else { let colors = client_id_to_colors(client_id, self.colors); colors.map(|colors| colors.0) diff --git a/zellij-server/src/unit/screen_tests.rs b/zellij-server/src/unit/screen_tests.rs index cb27995801..ca34645df1 100644 --- a/zellij-server/src/unit/screen_tests.rs +++ b/zellij-server/src/unit/screen_tests.rs @@ -90,12 +90,14 @@ fn create_new_screen(size: Size) -> Screen { let max_panes = None; let mode_info = ModeInfo::default(); let draw_pane_frames = false; + let session_is_mirrored = true; Screen::new( bus, &client_attributes, max_panes, mode_info, draw_pane_frames, + session_is_mirrored, ) } diff --git a/zellij-server/src/unit/tab_tests.rs b/zellij-server/src/unit/tab_tests.rs index 426ae98b8b..d356cad72a 100644 --- a/zellij-server/src/unit/tab_tests.rs +++ b/zellij-server/src/unit/tab_tests.rs @@ -12,7 +12,10 @@ use zellij_utils::input::layout::LayoutTemplate; use zellij_utils::ipc::IpcReceiverWithContext; use zellij_utils::pane_size::Size; +use std::cell::{RefCell, RefMut}; +use std::collections::HashSet; use std::os::unix::io::RawFd; +use std::rc::Rc; use zellij_utils::nix; @@ -89,6 +92,10 @@ fn create_new_tab(size: Size) -> Tab { let colors = Palette::default(); let draw_pane_frames = true; let client_id = 1; + let session_is_mirrored = true; + let mut connected_clients = HashSet::new(); + connected_clients.insert(client_id); + let connected_clients = Rc::new(RefCell::new(connected_clients)); let mut tab = Tab::new( index, position, @@ -100,6 +107,8 @@ fn create_new_tab(size: Size) -> Tab { mode_info, colors, draw_pane_frames, + connected_clients, + session_is_mirrored, client_id, ); tab.apply_layout( diff --git a/zellij-tile/src/data.rs b/zellij-tile/src/data.rs index 3e269af3b6..36b44e25e0 100644 --- a/zellij-tile/src/data.rs +++ b/zellij-tile/src/data.rs @@ -3,6 +3,32 @@ use std::fmt; use std::str::FromStr; use strum_macros::{EnumDiscriminants, EnumIter, EnumString, ToString}; +pub type ClientId = u16; // TODO: merge with crate type? + +pub fn client_id_to_colors( + client_id: ClientId, + colors: Palette, +) -> Option<(PaletteColor, PaletteColor)> { + // (primary color, secondary color) + match client_id { + 1 => Some((colors.magenta, colors.black)), + 2 => Some((colors.blue, colors.black)), + 3 => Some((colors.purple, colors.black)), + 4 => Some((colors.yellow, colors.black)), + 5 => Some((colors.cyan, colors.black)), + 6 => Some((colors.gold, colors.black)), + 7 => Some((colors.red, colors.black)), + 8 => Some((colors.silver, colors.black)), + 9 => Some((colors.pink, colors.black)), + 10 => Some((colors.brown, colors.black)), + _ => None, + } +} + +pub fn single_client_color(colors: Palette) -> (PaletteColor, PaletteColor) { + (colors.green, colors.black) +} + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Key { Backspace, @@ -169,6 +195,11 @@ pub struct Palette { pub white: PaletteColor, pub orange: PaletteColor, pub gray: PaletteColor, + pub purple: PaletteColor, + pub gold: PaletteColor, + pub silver: PaletteColor, + pub pink: PaletteColor, + pub brown: PaletteColor, } /// Represents the contents of the help message that is printed in the status bar, @@ -193,6 +224,7 @@ pub struct TabInfo { pub panes_to_hide: usize, pub is_fullscreen_active: bool, pub is_sync_panes_active: bool, + pub other_focused_clients: Vec, } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)] diff --git a/zellij-utils/src/input/options.rs b/zellij-utils/src/input/options.rs index 55036069d1..e0a38946b7 100644 --- a/zellij-utils/src/input/options.rs +++ b/zellij-utils/src/input/options.rs @@ -65,6 +65,10 @@ pub struct Options { #[serde(default)] /// Set display of the pane frames (true or false) pub pane_frames: Option, + #[structopt(long)] + #[serde(default)] + /// Mirror session when multiple users are connected (true or false) + pub mirror_session: Option, /// Set behaviour on force close (quit or detach) #[structopt(long)] pub on_force_close: Option, @@ -85,6 +89,7 @@ impl Options { pub fn merge(&self, other: Options) -> Options { let mouse_mode = other.mouse_mode.or(self.mouse_mode); let pane_frames = other.pane_frames.or(self.pane_frames); + let mirror_session = other.mirror_session.or(self.mirror_session); let simplified_ui = other.simplified_ui.or(self.simplified_ui); let default_mode = other.default_mode.or(self.default_mode); let default_shell = other.default_shell.or_else(|| self.default_shell.clone()); @@ -100,6 +105,7 @@ impl Options { layout_dir, mouse_mode, pane_frames, + mirror_session, on_force_close, } } @@ -122,6 +128,7 @@ impl Options { let simplified_ui = merge_bool(other.simplified_ui, self.simplified_ui); let mouse_mode = merge_bool(other.mouse_mode, self.mouse_mode); let pane_frames = merge_bool(other.pane_frames, self.pane_frames); + let mirror_session = merge_bool(other.mirror_session, self.mirror_session); let default_mode = other.default_mode.or(self.default_mode); let default_shell = other.default_shell.or_else(|| self.default_shell.clone()); @@ -137,6 +144,7 @@ impl Options { layout_dir, mouse_mode, pane_frames, + mirror_session, on_force_close, } } @@ -183,6 +191,7 @@ impl From for Options { layout_dir: opts.layout_dir, mouse_mode: opts.mouse_mode, pane_frames: opts.pane_frames, + mirror_session: opts.mirror_session, on_force_close: opts.on_force_close, } } diff --git a/zellij-utils/src/shared.rs b/zellij-utils/src/shared.rs index 0211fb2cdb..79695435f6 100644 --- a/zellij-utils/src/shared.rs +++ b/zellij-utils/src/shared.rs @@ -53,6 +53,11 @@ pub mod colors { pub const CYAN: u8 = 51; pub const YELLOW: u8 = 226; pub const BLUE: u8 = 45; + pub const PURPLE: u8 = 99; + pub const GOLD: u8 = 136; + pub const SILVER: u8 = 245; + pub const PINK: u8 = 207; + pub const BROWN: u8 = 215; } pub fn _hex_to_rgb(hex: &str) -> (u8, u8, u8) { @@ -77,6 +82,11 @@ pub fn default_palette() -> Palette { white: PaletteColor::EightBit(colors::WHITE), orange: PaletteColor::EightBit(colors::ORANGE), gray: PaletteColor::EightBit(colors::GRAY), + purple: PaletteColor::EightBit(colors::PURPLE), + gold: PaletteColor::EightBit(colors::GOLD), + silver: PaletteColor::EightBit(colors::SILVER), + pink: PaletteColor::EightBit(colors::PINK), + brown: PaletteColor::EightBit(colors::BROWN), } } From 8a1a719e700f1bfad71362462bc52065786bea4f Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Mon, 20 Dec 2021 16:54:47 +0100 Subject: [PATCH 3/3] style(cleanup): some leftovers --- zellij-server/src/tab.rs | 12 +----------- zellij-server/src/ui/pane_contents_and_ui.rs | 1 - 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/zellij-server/src/tab.rs b/zellij-server/src/tab.rs index f2fc4dfd17..fc5b0718fb 100644 --- a/zellij-server/src/tab.rs +++ b/zellij-server/src/tab.rs @@ -124,9 +124,6 @@ impl Output { .unwrap() .push_str(to_push) } - // for render_instruction in self.client_render_instructions.values_mut() { - // render_instruction.push_str(to_push) - // } } pub fn push_to_client(&mut self, client_id: ClientId, to_push: &str) { if let Some(render_instructions) = self.client_render_instructions.get_mut(&client_id) { @@ -153,7 +150,7 @@ pub(crate) struct Tab { mode_info: HashMap, default_mode_info: ModeInfo, pub colors: Palette, - connected_clients_in_app: Rc>>, // TODO: can we combine this and connected_clients somehow? + connected_clients_in_app: Rc>>, // TODO: combine this and connected_clients connected_clients: HashSet, draw_pane_frames: bool, session_is_mirrored: bool, @@ -815,7 +812,6 @@ impl Tab { }); } pub fn write_to_active_terminal(&mut self, input_bytes: Vec, client_id: ClientId) { - // self.write_to_pane_id(input_bytes, self.get_active_pane_id(client_id).unwrap()); let pane_id = self.get_active_pane_id(client_id).unwrap(); self.write_to_pane_id(input_bytes, pane_id); } @@ -1074,11 +1070,9 @@ impl Tab { } fn hide_cursor_and_clear_display_as_needed(&mut self, output: &mut Output) { let hide_cursor = "\u{1b}[?25l"; - // output.push_str_to_all_clients(hide_cursor); output.push_str_to_multiple_clients(hide_cursor, self.connected_clients.iter().copied()); if self.should_clear_display_before_rendering { let clear_display = "\u{1b}[2J"; - // output.push_str_to_all_clients(clear_display); output.push_str_to_multiple_clients( clear_display, self.connected_clients.iter().copied(), @@ -3449,10 +3443,6 @@ impl Tab { fn write_selection_to_clipboard(&self, selection: &str) { let mut output = Output::default(); output.add_clients(&self.connected_clients); - // output.push_str_to_all_clients(&format!( - // "\u{1b}]52;c;{}\u{1b}\\", - // base64::encode(selection) - // )); output.push_str_to_multiple_clients( &format!("\u{1b}]52;c;{}\u{1b}\\", base64::encode(selection)), self.connected_clients.iter().copied(), diff --git a/zellij-server/src/ui/pane_contents_and_ui.rs b/zellij-server/src/ui/pane_contents_and_ui.rs index 4395192000..d8967f6eab 100644 --- a/zellij-server/src/ui/pane_contents_and_ui.rs +++ b/zellij-server/src/ui/pane_contents_and_ui.rs @@ -43,7 +43,6 @@ impl<'a> PaneContentsAndUi<'a> { ) { if let Some(vte_output) = self.pane.render(None) { // FIXME: Use Termion for cursor and style clearing? - // self.output.push_str_to_all_clients(&format!( self.output.push_str_to_multiple_clients( &format!( "\u{1b}[{};{}H\u{1b}[m{}",