Merge pull request #50 from vladstudio/cross-layout-paste

fix(utils): use virtual key codes for cross-layout paste
This commit is contained in:
CJ Pais 2025-08-01 18:55:03 -07:00 committed by GitHub
commit 1c9b2ee7a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -17,27 +17,31 @@ use tauri::tray::TrayIcon;
use tauri::{AppHandle, Emitter, Manager, WebviewWindowBuilder};
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, Key::Other(9));
#[cfg(target_os = "windows")]
let (modifier_key, v_key_code) = (Key::Control, Key::Other(0x56)); // VK_V
#[cfg(target_os = "linux")]
let (modifier_key, v_key_code) = (Key::Control, Key::Unicode('v'));
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(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(v_key_code, enigo::Direction::Release)
.map_err(|e| format!("Failed to release V key: {}", e))?;
enigo
.key(modifier_key, enigo::Direction::Release)