diff --git a/src/input.rs b/src/input.rs
index 38692324f13a4d4a1e9439aced9529dfa9043454..c70eb1fe5dc1a9525ff9f7089b7dab90ea2566e9 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 { .. } => {}