diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index be67035..a543ca9 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -16,27 +16,31 @@ use tauri::AppHandle; use tauri::Manager; use tauri_plugin_clipboard_manager::ClipboardExt; +/// Sends a paste command (Cmd+V or Ctrl+V) using platform-specific virtual key codes. +/// This ensures the paste works regardless of keyboard layout (e.g., Russian, AZERTY, DVORAK). fn send_paste() -> Result<(), String> { - // Determine the modifier key based on the OS + // Platform-specific key definitions #[cfg(target_os = "macos")] - let modifier_key = Key::Meta; // Command key on macOS - #[cfg(not(target_os = "macos"))] - let modifier_key = Key::Control; // Control key on other systems + let (modifier_key, v_key_code) = (Key::Meta, 9); + #[cfg(target_os = "windows")] + let (modifier_key, v_key_code) = (Key::Control, 0x56); // VK_V + #[cfg(target_os = "linux")] + let (modifier_key, v_key_code) = (Key::Control, 47); let mut enigo = Enigo::new(&Settings::default()) .map_err(|e| format!("Failed to initialize Enigo: {}", e))?; - // Press both keys + // Press modifier + V enigo .key(modifier_key, enigo::Direction::Press) .map_err(|e| format!("Failed to press modifier key: {}", e))?; enigo - .key(Key::Unicode('v'), enigo::Direction::Press) + .key(Key::Other(v_key_code), enigo::Direction::Press) .map_err(|e| format!("Failed to press V key: {}", e))?; - // Release both keys + // Release V + modifier (reverse order) enigo - .key(Key::Unicode('v'), enigo::Direction::Release) + .key(Key::Other(v_key_code), enigo::Direction::Release) .map_err(|e| format!("Failed to release V key: {}", e))?; enigo .key(modifier_key, enigo::Direction::Release)