feat(wm): dump and load previous instance state

This commit adds changes to the main wm process to dump a state file to
temp_dir() when the process is exited either via komorebic stop or
ctrl-c, and to automatically try to reload that dumped state file if it
exists on the next run.

A new flag "--clean-state" has been added to both komorebi.exe and the
komorebic start command to override this behaviour.

The dumped state file can only be applied if the number of connected
monitors matches the number of monitors recorded in the state, and if
every HWND listed in the state file still exists.

This is validated by calling Window.exe(), which under the hood checks
for the continued existence of the process associated with the HWND.

Only the "workspace" subsection of the state for each matching
connecting monitor will be applied.
This commit is contained in:
LGUG2Z
2024-12-17 08:24:39 -08:00
parent b49e634b65
commit 7bf1521363
4 changed files with 105 additions and 0 deletions

View File

@@ -782,6 +782,9 @@ struct Start {
/// Start masir in a background process for focus-follows-mouse
#[clap(long)]
masir: bool,
/// Do not attempt to auto-apply a dumped state temp file from a previously running instance of komorebi
#[clap(long)]
clean_state: bool,
}
#[derive(Parser)]
@@ -2012,6 +2015,10 @@ fn main() -> Result<()> {
flags.push(format!("'--tcp-port={port}'"));
}
if arg.clean_state {
flags.push("'--clean-state'".to_string());
}
let script = if flags.is_empty() {
format!(
"Start-Process '{}' -WindowStyle hidden",