From 767317f0bbf685e9f89ed3d91915c170515a98bf Mon Sep 17 00:00:00 2001 From: salixor <salixor@pm.me> Date: Thu, 18 Jan 2024 23:27:38 +0100 Subject: [PATCH] Spawn a program when pressing an Fn key --- src/input.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/input.rs b/src/input.rs index 3869232..c70eb1f 100644 --- a/src/input.rs +++ b/src/input.rs @@ -1,7 +1,7 @@ use smithay::{ backend::input::{ AbsolutePositionEvent, Axis, AxisSource, ButtonState, Event, InputBackend, InputEvent, - KeyboardKeyEvent, PointerAxisEvent, PointerButtonEvent, + KeyState, KeyboardKeyEvent, PointerAxisEvent, PointerButtonEvent, }, input::{ keyboard::FilterResult, @@ -13,6 +13,8 @@ use smithay::{ use crate::state::Smallvil; +const PROGRAM_TO_SPAWN: &str = "konsole"; + impl Smallvil { pub fn process_input_event<I: InputBackend>(&mut self, event: InputEvent<I>) { match event { @@ -26,7 +28,17 @@ impl Smallvil { event.state(), serial, time, - |_, _, _| FilterResult::Forward, + |_, _, handle| { + let state = event.state(); + let keysym = handle.modified_sym(); + + if state == KeyState::Pressed && keysym.is_function_key() { + std::process::Command::new(PROGRAM_TO_SPAWN).spawn().ok(); + return FilterResult::Intercept(()); + } + + FilterResult::Forward + }, ); } InputEvent::PointerMotion { .. } => {} -- GitLab