summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/screen.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-server/src/screen.rs')
-rw-r--r--zellij-server/src/screen.rs21
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();