Support RCtrl/etc (#782)

This commit is contained in:
CJ Pais 2026-02-11 11:37:38 +08:00 committed by GitHub
parent bf2a59f5ef
commit 624579e636
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 43 additions and 8 deletions

4
src-tauri/Cargo.lock generated
View file

@ -2499,9 +2499,9 @@ dependencies = [
[[package]]
name = "handy-keys"
version = "0.1.4"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f85c247daebc113bb7128afa9ee19eb83b9a6d1301772b89111328ab856186"
checksum = "f9d80f27a8566d1dd16cef20dd0a96247d2982fc2e03ef728ea842808b130d94"
dependencies = [
"bitflags 2.10.0",
"block2 0.6.2",

View file

@ -69,7 +69,7 @@ rusqlite = { version = "0.37", features = ["bundled"] }
tar = "0.4.44"
flate2 = "1.0"
transcribe-rs = { version = "0.2.3", features = ["whisper", "parakeet", "moonshine", "sense_voice"] }
handy-keys = "0.1.4"
handy-keys = "0.2.0"
ferrous-opencc = "0.2.3"
specta = "=2.0.0-rc.22"
specta-typescript = "0.0.9"

View file

@ -154,17 +154,52 @@ export const getKeyName = (
return `unknown-${e.keyCode || e.which || 0}`;
};
/**
* Capitalize a key name for display (e.g. "space" -> "Space", "f1" -> "F1")
*/
const capitalizeKey = (key: string): string => {
// fn key: keep lowercase
if (key === "fn") return "fn";
// Function keys: f1 -> F1
if (/^f\d+$/.test(key)) return key.toUpperCase();
// Single char: a -> A
if (key.length === 1) return key.toUpperCase();
// Multi-word: capitalize first letter of each word
return key.replace(/\b\w/g, (c) => c.toUpperCase());
};
/**
* Format a single key part for display.
* Handles _left/_right suffixes and capitalizes names.
* e.g. "shift_left" -> "Left Shift", "option" -> "Option", "space" -> "Space"
*/
const formatKeyPart = (part: string): string => {
const trimmed = part.trim();
if (!trimmed) return "";
if (trimmed.endsWith("_left")) {
const name = trimmed.slice(0, -5);
return `Left ${capitalizeKey(name)}`;
}
if (trimmed.endsWith("_right")) {
const name = trimmed.slice(0, -6);
return `Right ${capitalizeKey(name)}`;
}
return capitalizeKey(trimmed);
};
/**
* Get display-friendly key combination string for the current OS
* Returns basic plus-separated format with correct platform key names
* Formats raw hotkey strings like "option_left+shift+space" into
* human-readable form like "Left Option + Shift + Space"
*/
export const formatKeyCombination = (
combination: string,
osType: OSType,
_osType: OSType,
): string => {
// Simply return the combination as-is since getKeyName already provides
// the correct platform-specific key names
return combination;
if (!combination) return "";
return combination.split("+").map(formatKeyPart).join(" + ");
};
/**