aboutsummaryrefslogtreecommitdiff
path: root/src/ipc/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipc/client.rs')
-rw-r--r--src/ipc/client.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs
index 8682d8d3..66cdaf7d 100644
--- a/src/ipc/client.rs
+++ b/src/ipc/client.rs
@@ -19,6 +19,7 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> {
Msg::Outputs => Request::Outputs,
Msg::FocusedWindow => Request::FocusedWindow,
Msg::FocusedOutput => Request::FocusedOutput,
+ Msg::PickWindow => Request::PickWindow,
Msg::Action { action } => Request::Action(action.clone()),
Msg::Output { output, action } => Request::Output {
output: output.clone(),
@@ -252,6 +253,23 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> {
println!("No output is focused.");
}
}
+ Msg::PickWindow => {
+ let Response::PickedWindow(window) = response else {
+ bail!("unexpected response: expected PickedWindow, got {response:?}");
+ };
+
+ if json {
+ let window = serde_json::to_string(&window).context("error formatting response")?;
+ println!("{window}");
+ return Ok(());
+ }
+
+ if let Some(window) = window {
+ print_window(&window);
+ } else {
+ println!("No window selected.");
+ }
+ }
Msg::Action { .. } => {
let Response::Handled = response else {
bail!("unexpected response: expected Handled, got {response:?}");