diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-09-02 09:05:18 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-09-01 23:47:19 -0700 |
| commit | 64a935192143286d59b94de00ba4726dadf0fd79 (patch) | |
| tree | 65efcb34555aaef6a8f3cf35c3c4d45cd29c6cc1 /src/ipc | |
| parent | 332af8b062d93aa542c639d663199fde568172f7 (diff) | |
| download | niri-64a935192143286d59b94de00ba4726dadf0fd79.tar.gz niri-64a935192143286d59b94de00ba4726dadf0fd79.tar.bz2 niri-64a935192143286d59b94de00ba4726dadf0fd79.zip | |
Add niri msg windows
Diffstat (limited to 'src/ipc')
| -rw-r--r-- | src/ipc/client.rs | 40 | ||||
| -rw-r--r-- | src/ipc/server.rs | 5 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs index ea6121dc..0f4d6228 100644 --- a/src/ipc/client.rs +++ b/src/ipc/client.rs @@ -20,6 +20,7 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { action: action.clone(), }, Msg::Workspaces => Request::Workspaces, + Msg::Windows => Request::Windows, Msg::KeyboardLayouts => Request::KeyboardLayouts, Msg::EventStream => Request::EventStream, Msg::RequestError => Request::ReturnError, @@ -155,6 +156,45 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { println!("No window is focused."); } } + Msg::Windows => { + let Response::Windows(mut windows) = response else { + bail!("unexpected response: expected Windows, got {response:?}"); + }; + + if json { + let windows = + serde_json::to_string(&windows).context("error formatting response")?; + println!("{windows}"); + return Ok(()); + } + + windows.sort_unstable_by(|a, b| a.id.cmp(&b.id)); + + for window in windows { + let focused = if window.is_focused { " (focused)" } else { "" }; + println!("Window ID {}:{focused}", window.id); + + if let Some(title) = window.title { + println!(" Title: \"{title}\""); + } else { + println!(" Title: (unset)"); + } + + if let Some(app_id) = window.app_id { + println!(" App ID: \"{app_id}\""); + } else { + println!(" App ID: (unset)"); + } + + if let Some(workspace_id) = window.workspace_id { + println!(" Workspace ID: {workspace_id}"); + } else { + println!(" Workspace ID: (none)"); + } + + println!(); + } + } Msg::FocusedOutput => { let Response::FocusedOutput(output) = response else { bail!("unexpected response: expected FocusedOutput, got {response:?}"); diff --git a/src/ipc/server.rs b/src/ipc/server.rs index dcdfc3fb..6990cd41 100644 --- a/src/ipc/server.rs +++ b/src/ipc/server.rs @@ -260,6 +260,11 @@ async fn process(ctx: &ClientCtx, request: Request) -> Reply { let workspaces = state.workspaces.workspaces.values().cloned().collect(); Response::Workspaces(workspaces) } + Request::Windows => { + let state = ctx.event_stream_state.borrow(); + let windows = state.windows.windows.values().cloned().collect(); + Response::Windows(windows) + } Request::KeyboardLayouts => { let state = ctx.event_stream_state.borrow(); let layout = state.keyboard_layouts.keyboard_layouts.clone(); |
