feat(config): allow disabling writing session metadata to disk (#3258)

* feat(config): allow disabling writing session metadata to disk

* style(fmt): rustfmt
This commit is contained in:
Aram Drevekenin 2024-04-12 16:15:11 +02:00 committed by GitHub
parent 1c883c2a83
commit 89ce355c04
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 52 additions and 10 deletions

View file

@ -84,6 +84,7 @@ static DEFAULT_SERIALIZATION_INTERVAL: u64 = 60000;
pub(crate) fn background_jobs_main( pub(crate) fn background_jobs_main(
bus: Bus<BackgroundJob>, bus: Bus<BackgroundJob>,
serialization_interval: Option<u64>, serialization_interval: Option<u64>,
disable_session_metadata: bool,
) -> Result<()> { ) -> Result<()> {
let err_context = || "failed to write to pty".to_string(); let err_context = || "failed to write to pty".to_string();
let mut running_jobs: HashMap<BackgroundJob, Instant> = HashMap::new(); let mut running_jobs: HashMap<BackgroundJob, Instant> = HashMap::new();
@ -175,11 +176,13 @@ pub(crate) fn background_jobs_main(
let current_session_info = current_session_info.lock().unwrap().clone(); let current_session_info = current_session_info.lock().unwrap().clone();
let current_session_layout = let current_session_layout =
current_session_layout.lock().unwrap().clone(); current_session_layout.lock().unwrap().clone();
write_session_state_to_disk( if !disable_session_metadata {
current_session_name.clone(), write_session_state_to_disk(
current_session_info, current_session_name.clone(),
current_session_layout, current_session_info,
); current_session_layout,
);
}
let session_infos_on_machine = let session_infos_on_machine =
read_other_live_session_states(&current_session_name); read_other_live_session_states(&current_session_name);
let resurrectable_sessions = let resurrectable_sessions =

View file

@ -881,6 +881,7 @@ fn init_session(
}; };
let serialization_interval = config_options.serialization_interval; let serialization_interval = config_options.serialization_interval;
let disable_session_metadata = config_options.disable_session_metadata.unwrap_or(false);
let default_shell = config_options.default_shell.clone().map(|command| { let default_shell = config_options.default_shell.clone().map(|command| {
TerminalAction::RunCommand(RunCommand { TerminalAction::RunCommand(RunCommand {
@ -1017,7 +1018,14 @@ fn init_session(
None, None,
Some(os_input.clone()), Some(os_input.clone()),
); );
move || background_jobs_main(background_jobs_bus, serialization_interval).fatal() move || {
background_jobs_main(
background_jobs_bus,
serialization_interval,
disable_session_metadata,
)
.fatal()
}
}) })
.unwrap(); .unwrap();

View file

@ -357,3 +357,9 @@ plugins {
// Default: true // Default: true
// //
// styled_underlines false // styled_underlines false
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// Default: false
//
// disable_session_metadata true

View file

@ -151,6 +151,10 @@ pub struct Options {
/// The interval at which to serialize sessions for resurrection (in seconds) /// The interval at which to serialize sessions for resurrection (in seconds)
#[clap(long, value_parser)] #[clap(long, value_parser)]
pub serialization_interval: Option<u64>, pub serialization_interval: Option<u64>,
/// If true, will disable writing session metadata to disk
#[clap(long, value_parser)]
pub disable_session_metadata: Option<bool>,
} }
#[derive(ArgEnum, Deserialize, Serialize, Debug, Clone, Copy, PartialEq)] #[derive(ArgEnum, Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
@ -223,6 +227,9 @@ impl Options {
.or(self.scrollback_lines_to_serialize); .or(self.scrollback_lines_to_serialize);
let styled_underlines = other.styled_underlines.or(self.styled_underlines); let styled_underlines = other.styled_underlines.or(self.styled_underlines);
let serialization_interval = other.serialization_interval.or(self.serialization_interval); let serialization_interval = other.serialization_interval.or(self.serialization_interval);
let disable_session_metadata = other
.disable_session_metadata
.or(self.disable_session_metadata);
Options { Options {
simplified_ui, simplified_ui,
@ -250,6 +257,7 @@ impl Options {
scrollback_lines_to_serialize, scrollback_lines_to_serialize,
styled_underlines, styled_underlines,
serialization_interval, serialization_interval,
disable_session_metadata,
} }
} }
@ -302,6 +310,9 @@ impl Options {
.or_else(|| self.scrollback_lines_to_serialize.clone()); .or_else(|| self.scrollback_lines_to_serialize.clone());
let styled_underlines = other.styled_underlines.or(self.styled_underlines); let styled_underlines = other.styled_underlines.or(self.styled_underlines);
let serialization_interval = other.serialization_interval.or(self.serialization_interval); let serialization_interval = other.serialization_interval.or(self.serialization_interval);
let disable_session_metadata = other
.disable_session_metadata
.or(self.disable_session_metadata);
Options { Options {
simplified_ui, simplified_ui,
@ -329,6 +340,7 @@ impl Options {
scrollback_lines_to_serialize, scrollback_lines_to_serialize,
styled_underlines, styled_underlines,
serialization_interval, serialization_interval,
disable_session_metadata,
} }
} }

View file

@ -1611,6 +1611,9 @@ impl Options {
let serialization_interval = let serialization_interval =
kdl_property_first_arg_as_i64_or_error!(kdl_options, "serialization_interval") kdl_property_first_arg_as_i64_or_error!(kdl_options, "serialization_interval")
.map(|(scroll_buffer_size, _entry)| scroll_buffer_size as u64); .map(|(scroll_buffer_size, _entry)| scroll_buffer_size as u64);
let disable_session_metadata =
kdl_property_first_arg_as_bool_or_error!(kdl_options, "disable_session_metadata")
.map(|(v, _)| v);
Ok(Options { Ok(Options {
simplified_ui, simplified_ui,
theme, theme,
@ -1637,6 +1640,7 @@ impl Options {
scrollback_lines_to_serialize, scrollback_lines_to_serialize,
styled_underlines, styled_underlines,
serialization_interval, serialization_interval,
disable_session_metadata,
}) })
} }
} }

View file

@ -1,6 +1,6 @@
--- ---
source: zellij-utils/src/setup.rs source: zellij-utils/src/setup.rs
assertion_line: 686 assertion_line: 713
expression: "format!(\"{:#?}\", options)" expression: "format!(\"{:#?}\", options)"
--- ---
Options { Options {
@ -31,4 +31,5 @@ Options {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
} }

View file

@ -1,6 +1,6 @@
--- ---
source: zellij-utils/src/setup.rs source: zellij-utils/src/setup.rs
assertion_line: 714 assertion_line: 741
expression: "format!(\"{:#?}\", options)" expression: "format!(\"{:#?}\", options)"
--- ---
Options { Options {
@ -31,4 +31,5 @@ Options {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
} }

View file

@ -1,6 +1,6 @@
--- ---
source: zellij-utils/src/setup.rs source: zellij-utils/src/setup.rs
assertion_line: 673 assertion_line: 700
expression: "format!(\"{:#?}\", options)" expression: "format!(\"{:#?}\", options)"
--- ---
Options { Options {
@ -29,4 +29,5 @@ Options {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
} }

View file

@ -3830,6 +3830,7 @@ Config {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
}, },
themes: {}, themes: {},
plugins: PluginAliases { plugins: PluginAliases {

View file

@ -3830,6 +3830,7 @@ Config {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
}, },
themes: {}, themes: {},
plugins: PluginAliases { plugins: PluginAliases {

View file

@ -87,6 +87,7 @@ Config {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
}, },
themes: {}, themes: {},
plugins: PluginAliases { plugins: PluginAliases {

View file

@ -1,6 +1,6 @@
--- ---
source: zellij-utils/src/setup.rs source: zellij-utils/src/setup.rs
assertion_line: 696 assertion_line: 723
expression: "format!(\"{:#?}\", options)" expression: "format!(\"{:#?}\", options)"
--- ---
Options { Options {
@ -31,4 +31,5 @@ Options {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
} }

View file

@ -3830,6 +3830,7 @@ Config {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
}, },
themes: { themes: {
"other-theme-from-config": Theme { "other-theme-from-config": Theme {

View file

@ -3830,6 +3830,7 @@ Config {
scrollback_lines_to_serialize: None, scrollback_lines_to_serialize: None,
styled_underlines: None, styled_underlines: None,
serialization_interval: None, serialization_interval: None,
disable_session_metadata: None,
}, },
themes: {}, themes: {},
plugins: PluginAliases { plugins: PluginAliases {