diff --git a/src/window/settings.rs b/src/window/settings.rs index 3bc257d8e..feebc9eb2 100644 --- a/src/window/settings.rs +++ b/src/window/settings.rs @@ -26,6 +26,7 @@ pub struct WindowSettings { pub input_ime: bool, pub unlink_border_highlights: bool, pub show_border: bool, + pub bell_command: String, #[option = "mousemoveevent"] pub mouse_move_event: bool, @@ -65,6 +66,7 @@ impl Default for WindowSettings { observed_columns: None, unlink_border_highlights: true, show_border: false, + bell_command: "".to_string(), } } } diff --git a/src/window/window_wrapper.rs b/src/window/window_wrapper.rs index 7b242c68a..6536d1f11 100644 --- a/src/window/window_wrapper.rs +++ b/src/window/window_wrapper.rs @@ -199,13 +199,24 @@ impl WinitWindowWrapper { self.mouse_manager.enabled = mouse_enabled } WindowCommand::ListAvailableFonts => self.send_font_names(), - WindowCommand::Bell => unsafe { - // TODO: How to bell on X11/Wayland? - #[cfg(target_os = "macos")] - NSBeep(); - #[cfg(target_os = "windows")] - MessageBeep(MB_OK); - }, + WindowCommand::Bell => { + let bell_command = SETTINGS.get::().bell_command; + let bell_command = bell_command.split(" ").collect::>(); + if bell_command.is_empty() { + unsafe { + // TODO: How to bell on X11/Wayland? + #[cfg(target_os = "macos")] + NSBeep(); + #[cfg(target_os = "windows")] + MessageBeep(MB_OK); + } + } else { + let _ = std::process::Command::new(&bell_command[0]) + .args(&bell_command[1..]) + .spawn() + .unwrap(); + } + } WindowCommand::FocusWindow => { self.skia_renderer.window().focus_window(); }