Translator hotkey: Option + ` (key left of 1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -54,7 +54,7 @@ struct FuncPill: View {
|
||||
withAnimation(.easeOut(duration: 0.18)) { showSystem = true }
|
||||
}
|
||||
FuncRow(symbol: "character.bubble", color: "#60A5FA", title: "Переводчик",
|
||||
subtitle: "выделенный текст RU ↔ EN", hint: "⌃⌥R") {
|
||||
subtitle: "выделенный текст RU ↔ EN", hint: "⌥`") {
|
||||
open = false
|
||||
showSystem = false
|
||||
TranslatorRun.start(state: state)
|
||||
|
||||
@@ -18,7 +18,7 @@ enum ShortcutAction: String, CaseIterable, Sendable {
|
||||
case muteToggle = "muteToggle" // ⌃⌥M — mute / unmute sounds
|
||||
case desktopToggle = "desktopToggle" // ⌃⌥D — send Mochi to desktop / bring back
|
||||
case wardrobeToggle = "wardrobeToggle" // ⌃⌥G — open / close wardrobe
|
||||
case translate = "translate" // ⌃⌥R — translate the selected text (BroV)
|
||||
case translate = "translate" // ⌥` — translate the selected text (BroV)
|
||||
|
||||
// MARK: UserDefaults keys
|
||||
|
||||
@@ -106,7 +106,7 @@ enum ShortcutLogic {
|
||||
.muteToggle: ShortcutSpec(keyCode: 46, nsFlags: ShortcutSpec.ctrlOpt), // ⌃⌥M
|
||||
.desktopToggle: ShortcutSpec(keyCode: 2, nsFlags: ShortcutSpec.ctrlOpt), // ⌃⌥D
|
||||
.wardrobeToggle: ShortcutSpec(keyCode: 5, nsFlags: ShortcutSpec.ctrlOpt), // ⌃⌥G
|
||||
.translate: ShortcutSpec(keyCode: 15, nsFlags: ShortcutSpec.ctrlOpt), // ⌃⌥R
|
||||
.translate: ShortcutSpec(keyCode: 50, nsFlags: ShortcutSpec.optBit), // ⌥` (key left of 1)
|
||||
]
|
||||
|
||||
// MARK: - Load / save (UserDefaults)
|
||||
@@ -199,7 +199,7 @@ enum ShortcutLogic {
|
||||
0:"A", 1:"S", 2:"D", 3:"F", 4:"H", 5:"G", 6:"Z", 7:"X",
|
||||
8:"C", 9:"V", 11:"B", 12:"Q", 13:"W", 14:"E", 15:"R", 16:"Y",
|
||||
17:"T", 31:"O", 32:"U", 33:"[", 34:"I", 35:"P", 37:"L", 38:"J",
|
||||
40:"K", 45:"N", 46:"M", 30:"]", 49:"Space",
|
||||
40:"K", 45:"N", 46:"M", 30:"]", 49:"Space", 50:"`", 27:"-", 29:"0",
|
||||
36:"↩", 51:"⌫", 53:"⎋",
|
||||
123:"←", 124:"→", 125:"↓", 126:"↑",
|
||||
18:"1", 19:"2", 20:"3", 21:"4", 23:"5", 22:"6", 26:"7", 28:"8", 25:"9",
|
||||
|
||||
@@ -2,7 +2,7 @@ import SwiftUI
|
||||
import AppKit
|
||||
import Translation
|
||||
|
||||
// MARK: - Translator (Func → Переводчик, ⌃⌥R)
|
||||
// MARK: - Translator (Func → Переводчик, ⌥`)
|
||||
//
|
||||
// Takes the text selected in the front app (Accessibility; falls back to a simulated ⌘C
|
||||
// with the clipboard restored afterwards; then to whatever is already on the clipboard),
|
||||
@@ -26,8 +26,8 @@ enum TranslatorRun {
|
||||
guard let source = await SelectionGrabber.grab(), !source.isEmpty else {
|
||||
state.translation = TranslationResult(source: "", toRussian: true,
|
||||
error: SelectionGrabber.trusted
|
||||
? "Не нашёл выделенного текста. Выдели текст в приложении и нажми ⌃⌥R."
|
||||
: "Дай BroV доступ: Системные настройки → Конфиденциальность → Универсальный доступ → BroV. Потом выдели текст и нажми ⌃⌥R.",
|
||||
? "Не нашёл выделенного текста. Выдели текст в приложении и нажми ⌥`."
|
||||
: "Дай BroV доступ: Системные настройки → Конфиденциальность → Универсальный доступ → BroV. Потом выдели текст и нажми ⌥`.",
|
||||
loading: false)
|
||||
show(state)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user