fixed required positional arguement

This commit is contained in:
Nickiel12 2023-11-16 18:13:32 -08:00
parent c2bc19611f
commit 92414fb7ce
2 changed files with 9 additions and 31 deletions

View file

@ -18,6 +18,9 @@ pub struct CliArgs {
#[arg(index = 1, value_enum)] #[arg(index = 1, value_enum)]
action: Option<ProcessType>, action: Option<ProcessType>,
#[arg(index=2, required_if_eq("action", "workspace-selector"))]
source_workspace: Option<i32>,
#[arg(short, long)] #[arg(short, long)]
debug: bool, debug: bool,
} }
@ -42,7 +45,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
run_calendar(); run_calendar();
} }
ProcessType::WorkspaceSelector => { ProcessType::WorkspaceSelector => {
run_workspace_selector(); run_workspace_selector(&args);
} }
} }
Ok(()) Ok(())

View file

@ -1,38 +1,12 @@
use log::{debug, error}; use log::{debug, error};
use std::io::stdin;
use std::io::IsTerminal;
use std::process::Command; use std::process::Command;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json; use serde_json;
pub fn run_workspace_selector() { use crate::CliArgs;
let in_pipe = stdin();
if in_pipe.is_terminal() {
error!("Workspace Selector process requires being run as a terminal process");
panic!("Expected to be run in a terminal process, but was not");
}
let mut buffer = String::new();
let bytes = in_pipe.read_line(&mut buffer).unwrap();
debug!("Received from pipe: {buffer}");
if bytes == 0 {
error!("The input pipe was empty! Unrecoverable error");
panic!("The input pipe was empty! Unrecoverable error");
}
debug!("Attempting to parse buffer");
let src_workspace = match buffer.trim().parse::<i32>() {
Ok(val) => val,
Err(e) => {
error!("Error parsing stdin buffer: {e}");
panic!("Could not parse stdin to i32");
}
};
pub fn run_workspace_selector(cli: &CliArgs) {
let output = { let output = {
let std_out = match Command::new("hyprctl").arg("monitors").arg("-j").output() { let std_out = match Command::new("hyprctl").arg("monitors").arg("-j").output() {
Ok(val) => val, Ok(val) => val,
@ -91,11 +65,12 @@ pub fn run_workspace_selector() {
debug!("Monitor number adjusted: {}", monitor_num); debug!("Monitor number adjusted: {}", monitor_num);
// Because there is a monitor 0, make sure it is always at least monitor 1 // Because there is a monitor 0, make sure it is always at least monitor 1
let target_workspace = src_workspace * (monitor_num + 1) as i32; let target_workspace = cli.source_workspace.unwrap() * (monitor_num + 1) as i32;
debug!("Target workspace: {}", target_workspace); debug!("Target workspace: {}", target_workspace);
print!("{}", target_workspace); debug!("Calling hyprctl and closing");
Command::new("hyprctl").arg("dispatch").arg("workspace").arg(target_workspace.to_string()).output().unwrap();
} }