diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-10 09:33:32 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-10 09:40:32 +0400 |
| commit | 93e16a6582f8e80ac4079ac527637861696ed7b1 (patch) | |
| tree | ec557f5d2d8816516a0b4925ad41df1ed139007c /niri-config | |
| parent | 3486fa5536e0c69213b9e6fb4b58a1cf225d5959 (diff) | |
| download | niri-93e16a6582f8e80ac4079ac527637861696ed7b1.tar.gz niri-93e16a6582f8e80ac4079ac527637861696ed7b1.tar.bz2 niri-93e16a6582f8e80ac4079ac527637861696ed7b1.zip | |
Implement niri msg action
Diffstat (limited to 'niri-config')
| -rw-r--r-- | niri-config/Cargo.toml | 1 | ||||
| -rw-r--r-- | niri-config/src/lib.rs | 138 |
2 files changed, 74 insertions, 65 deletions
diff --git a/niri-config/Cargo.toml b/niri-config/Cargo.toml index 4123cb07..8bff3a30 100644 --- a/niri-config/Cargo.toml +++ b/niri-config/Cargo.toml @@ -11,6 +11,7 @@ repository.workspace = true bitflags.workspace = true knuffel = "3.2.0" miette = "5.10.0" +niri-ipc = { version = "0.1.1", path = "../niri-ipc" } smithay = { workspace = true, features = ["backend_libinput"] } tracing.workspace = true tracy-client.workspace = true diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 333a018a..f32ca741 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -6,6 +6,7 @@ use std::str::FromStr; use bitflags::bitflags; use miette::{miette, Context, IntoDiagnostic, NarratableReportHandler}; +use niri_ipc::{LayoutSwitchTarget, SizeChange}; use smithay::input::keyboard::keysyms::KEY_NoSymbol; use smithay::input::keyboard::xkb::{keysym_from_name, KEYSYM_CASE_INSENSITIVE}; use smithay::input::keyboard::{Keysym, XkbConfig}; @@ -512,6 +513,7 @@ bitflags! { } } +// Remember to add new actions to the CLI enum too. #[derive(knuffel::Decode, Debug, Clone, PartialEq)] pub enum Action { Quit, @@ -578,7 +580,7 @@ pub enum Action { SwitchPresetColumnWidth, MaximizeColumn, SetColumnWidth(#[knuffel(argument, str)] SizeChange), - SwitchLayout(#[knuffel(argument)] LayoutAction), + SwitchLayout(#[knuffel(argument, str)] LayoutSwitchTarget), ShowHotkeyOverlay, MoveWorkspaceToMonitorLeft, MoveWorkspaceToMonitorRight, @@ -586,18 +588,76 @@ pub enum Action { MoveWorkspaceToMonitorUp, } -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum SizeChange { - SetFixed(i32), - SetProportion(f64), - AdjustFixed(i32), - AdjustProportion(f64), -} - -#[derive(knuffel::DecodeScalar, Debug, Clone, Copy, PartialEq)] -pub enum LayoutAction { - Next, - Prev, +impl From<niri_ipc::Action> for Action { + fn from(value: niri_ipc::Action) -> Self { + match value { + niri_ipc::Action::Quit => Self::Quit, + niri_ipc::Action::PowerOffMonitors => Self::PowerOffMonitors, + niri_ipc::Action::Spawn { command } => Self::Spawn(command), + niri_ipc::Action::Screenshot => Self::Screenshot, + niri_ipc::Action::ScreenshotScreen => Self::ScreenshotScreen, + niri_ipc::Action::ScreenshotWindow => Self::ScreenshotWindow, + niri_ipc::Action::CloseWindow => Self::CloseWindow, + niri_ipc::Action::FullscreenWindow => Self::FullscreenWindow, + niri_ipc::Action::FocusColumnLeft => Self::FocusColumnLeft, + niri_ipc::Action::FocusColumnRight => Self::FocusColumnRight, + niri_ipc::Action::FocusColumnFirst => Self::FocusColumnFirst, + niri_ipc::Action::FocusColumnLast => Self::FocusColumnLast, + niri_ipc::Action::FocusWindowDown => Self::FocusWindowDown, + niri_ipc::Action::FocusWindowUp => Self::FocusWindowUp, + niri_ipc::Action::FocusWindowOrWorkspaceDown => Self::FocusWindowOrWorkspaceDown, + niri_ipc::Action::FocusWindowOrWorkspaceUp => Self::FocusWindowOrWorkspaceUp, + niri_ipc::Action::MoveColumnLeft => Self::MoveColumnLeft, + niri_ipc::Action::MoveColumnRight => Self::MoveColumnRight, + niri_ipc::Action::MoveColumnToFirst => Self::MoveColumnToFirst, + niri_ipc::Action::MoveColumnToLast => Self::MoveColumnToLast, + niri_ipc::Action::MoveWindowDown => Self::MoveWindowDown, + niri_ipc::Action::MoveWindowUp => Self::MoveWindowUp, + niri_ipc::Action::MoveWindowDownOrToWorkspaceDown => { + Self::MoveWindowDownOrToWorkspaceDown + } + niri_ipc::Action::MoveWindowUpOrToWorkspaceUp => Self::MoveWindowUpOrToWorkspaceUp, + niri_ipc::Action::ConsumeOrExpelWindowLeft => Self::ConsumeOrExpelWindowLeft, + niri_ipc::Action::ConsumeOrExpelWindowRight => Self::ConsumeOrExpelWindowRight, + niri_ipc::Action::ConsumeWindowIntoColumn => Self::ConsumeWindowIntoColumn, + niri_ipc::Action::ExpelWindowFromColumn => Self::ExpelWindowFromColumn, + niri_ipc::Action::CenterColumn => Self::CenterColumn, + niri_ipc::Action::FocusWorkspaceDown => Self::FocusWorkspaceDown, + niri_ipc::Action::FocusWorkspaceUp => Self::FocusWorkspaceUp, + niri_ipc::Action::FocusWorkspace { index } => Self::FocusWorkspace(index), + niri_ipc::Action::MoveWindowToWorkspaceDown => Self::MoveWindowToWorkspaceDown, + niri_ipc::Action::MoveWindowToWorkspaceUp => Self::MoveWindowToWorkspaceUp, + niri_ipc::Action::MoveWindowToWorkspace { index } => Self::MoveWindowToWorkspace(index), + niri_ipc::Action::MoveColumnToWorkspaceDown => Self::MoveColumnToWorkspaceDown, + niri_ipc::Action::MoveColumnToWorkspaceUp => Self::MoveColumnToWorkspaceUp, + niri_ipc::Action::MoveColumnToWorkspace { index } => Self::MoveColumnToWorkspace(index), + niri_ipc::Action::MoveWorkspaceDown => Self::MoveWorkspaceDown, + niri_ipc::Action::MoveWorkspaceUp => Self::MoveWorkspaceUp, + niri_ipc::Action::FocusMonitorLeft => Self::FocusMonitorLeft, + niri_ipc::Action::FocusMonitorRight => Self::FocusMonitorRight, + niri_ipc::Action::FocusMonitorDown => Self::FocusMonitorDown, + niri_ipc::Action::FocusMonitorUp => Self::FocusMonitorUp, + niri_ipc::Action::MoveWindowToMonitorLeft => Self::MoveWindowToMonitorLeft, + niri_ipc::Action::MoveWindowToMonitorRight => Self::MoveWindowToMonitorRight, + niri_ipc::Action::MoveWindowToMonitorDown => Self::MoveWindowToMonitorDown, + niri_ipc::Action::MoveWindowToMonitorUp => Self::MoveWindowToMonitorUp, + niri_ipc::Action::MoveColumnToMonitorLeft => Self::MoveColumnToMonitorLeft, + niri_ipc::Action::MoveColumnToMonitorRight => Self::MoveColumnToMonitorRight, + niri_ipc::Action::MoveColumnToMonitorDown => Self::MoveColumnToMonitorDown, + niri_ipc::Action::MoveColumnToMonitorUp => Self::MoveColumnToMonitorUp, + niri_ipc::Action::SetWindowHeight { change } => Self::SetWindowHeight(change), + niri_ipc::Action::SwitchPresetColumnWidth => Self::SwitchPresetColumnWidth, + niri_ipc::Action::MaximizeColumn => Self::MaximizeColumn, + niri_ipc::Action::SetColumnWidth { change } => Self::SetColumnWidth(change), + niri_ipc::Action::SwitchLayout { layout } => Self::SwitchLayout(layout), + niri_ipc::Action::ShowHotkeyOverlay => Self::ShowHotkeyOverlay, + niri_ipc::Action::MoveWorkspaceToMonitorLeft => Self::MoveWorkspaceToMonitorLeft, + niri_ipc::Action::MoveWorkspaceToMonitorRight => Self::MoveWorkspaceToMonitorRight, + niri_ipc::Action::MoveWorkspaceToMonitorDown => Self::MoveWorkspaceToMonitorDown, + niri_ipc::Action::MoveWorkspaceToMonitorUp => Self::MoveWorkspaceToMonitorUp, + niri_ipc::Action::ToggleDebugTint => Self::ToggleDebugTint, + } + } } #[derive(knuffel::Decode, Debug, Default, PartialEq)] @@ -718,58 +778,6 @@ impl FromStr for Key { } } -impl FromStr for SizeChange { - type Err = miette::Error; - - fn from_str(s: &str) -> Result<Self, Self::Err> { - match s.split_once('%') { - Some((value, empty)) => { - if !empty.is_empty() { - return Err(miette!("trailing characters after '%' are not allowed")); - } - - match value.bytes().next() { - Some(b'-' | b'+') => { - let value = value - .parse() - .into_diagnostic() - .context("error parsing value")?; - Ok(Self::AdjustProportion(value)) - } - Some(_) => { - let value = value - .parse() - .into_diagnostic() - .context("error parsing value")?; - Ok(Self::SetProportion(value)) - } - None => Err(miette!("value is missing")), - } - } - None => { - let value = s; - match value.bytes().next() { - Some(b'-' | b'+') => { - let value = value - .parse() - .into_diagnostic() - .context("error parsing value")?; - Ok(Self::AdjustFixed(value)) - } - Some(_) => { - let value = value - .parse() - .into_diagnostic() - .context("error parsing value")?; - Ok(Self::SetFixed(value)) - } - None => Err(miette!("value is missing")), - } - } - } - } -} - impl FromStr for AccelProfile { type Err = miette::Error; |
