diff options
Diffstat (limited to 'zellij-server/src/screen.rs')
-rw-r--r-- | zellij-server/src/screen.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index c312480dc..5b0b6bea1 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -577,6 +577,8 @@ pub(crate) struct Screen { default_shell: Option<PathBuf>, styled_underlines: bool, arrow_fonts: bool, + layout_dir: Option<PathBuf>, + default_layout_name: Option<String>, } impl Screen { @@ -592,12 +594,14 @@ impl Screen { copy_options: CopyOptions, debug: bool, default_layout: Box<Layout>, + default_layout_name: Option<String>, default_shell: Option<PathBuf>, session_serialization: bool, serialize_pane_viewport: bool, scrollback_lines_to_serialize: Option<usize>, styled_underlines: bool, arrow_fonts: bool, + layout_dir: Option<PathBuf>, ) -> Self { let session_name = mode_info.session_name.clone().unwrap_or_default(); let session_info = SessionInfo::new(session_name.clone()); @@ -629,6 +633,7 @@ impl Screen { session_name, session_infos_on_machine, default_layout, + default_layout_name, default_shell, session_serialization, serialize_pane_viewport, @@ -636,6 +641,7 @@ impl Screen { styled_underlines, arrow_fonts, resurrectable_sessions, + layout_dir, } } @@ -1412,12 +1418,21 @@ impl Screen { // generate own session info let pane_manifest = self.generate_and_report_pane_state()?; let tab_infos = self.generate_and_report_tab_state()?; + // in the context of unit/integration tests, we don't need to list available layouts + // because this is mostly about HD access - it does however throw off the timing in the + // tests and causes them to flake, which is why we skip it here + #[cfg(not(test))] + let available_layouts = + Layout::list_available_layouts(self.layout_dir.clone(), &self.default_layout_name); + #[cfg(test)] + let available_layouts = vec![]; let session_info = SessionInfo { name: self.session_name.clone(), tabs: tab_infos, panes: pane_manifest, connected_clients: self.active_tab_indices.keys().len(), is_current_session: true, + available_layouts, }; self.bus .senders @@ -2101,7 +2116,11 @@ pub(crate) fn screen_thread_main( let serialize_pane_viewport = config_options.serialize_pane_viewport.unwrap_or(false); let scrollback_lines_to_serialize = config_options.scrollback_lines_to_serialize; let session_is_mirrored = config_options.mirror_session.unwrap_or(false); + let layout_dir = config_options.layout_dir; let default_shell = config_options.default_shell; + let default_layout_name = config_options + .default_layout + .map(|l| format!("{}", l.display())); let copy_options = CopyOptions::new( config_options.copy_command, config_options.copy_clipboard.unwrap_or_default(), @@ -2128,12 +2147,14 @@ pub(crate) fn screen_thread_main( copy_options, debug, default_layout, + default_layout_name, default_shell, session_serialization, serialize_pane_viewport, scrollback_lines_to_serialize, styled_underlines, arrow_fonts, + layout_dir, ); let mut pending_tab_ids: HashSet<usize> = HashSet::new(); |