fix(utils): use virtual key codes for cross-layout paste

This commit is contained in:
Vlad Gerasimov 2025-07-28 18:32:18 +04:00
parent e92f94573e
commit d252f8e1ae

View file

@ -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)