feat: release OpsXShell 2.1.0 native Tauri edition
This commit is contained in:
1 parent
e9a0d21758
commit
a3dba0c6ed
311 files changed
+31748
-14897
No files matched your search
@@ -29,12 +29,14 @@ function isInputElement(e: KeyboardEvent): boolean {
|
||||
const target = e.target as HTMLElement
|
||||
if (!target) return false
|
||||
const tagName = target.tagName.toLowerCase()
|
||||
return (
|
||||
tagName === 'input' ||
|
||||
tagName === 'textarea' ||
|
||||
tagName === 'select' ||
|
||||
target.isContentEditable
|
||||
)
|
||||
return tagName === 'input' || tagName === 'textarea' || tagName === 'select' || target.isContentEditable
|
||||
}
|
||||
|
||||
/** Native text editing commands are reserved inside editable controls. */
|
||||
function isNativeEditingShortcut(e: KeyboardEvent): boolean {
|
||||
if (!(e.ctrlKey || e.metaKey) || e.altKey) return false
|
||||
const key = e.key.toLowerCase()
|
||||
return ['a', 'c', 'v', 'x', 'z', 'y'].includes(key)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,7 +46,10 @@ function isInputElement(e: KeyboardEvent): boolean {
|
||||
function matchesKeySequence(e: KeyboardEvent, keySequence: string): boolean {
|
||||
if (!keySequence) return false
|
||||
|
||||
const parts = keySequence.split('+').map((p) => p.trim()).filter(Boolean)
|
||||
const parts = keySequence
|
||||
.split('+')
|
||||
.map((p) => p.trim())
|
||||
.filter(Boolean)
|
||||
const modifiers: string[] = []
|
||||
let mainKey = ''
|
||||
|
||||
@@ -83,12 +88,18 @@ function matchesKeySequence(e: KeyboardEvent, keySequence: string): boolean {
|
||||
const eventKey = e.key
|
||||
|
||||
switch (keyLower) {
|
||||
case 'tab': return eventKey === 'Tab'
|
||||
case 'enter': return eventKey === 'Enter'
|
||||
case 'escape': return eventKey === 'Escape'
|
||||
case 'space': return eventKey === ' '
|
||||
case 'backspace': return eventKey === 'Backspace'
|
||||
case 'delete': return eventKey === 'Delete'
|
||||
case 'tab':
|
||||
return eventKey === 'Tab'
|
||||
case 'enter':
|
||||
return eventKey === 'Enter'
|
||||
case 'escape':
|
||||
return eventKey === 'Escape'
|
||||
case 'space':
|
||||
return eventKey === ' '
|
||||
case 'backspace':
|
||||
return eventKey === 'Backspace'
|
||||
case 'delete':
|
||||
return eventKey === 'Delete'
|
||||
default:
|
||||
// F-keys
|
||||
if (keyLower.startsWith('f') && keyLower.length <= 3) {
|
||||
@@ -135,6 +146,10 @@ export function useKeyboardShortcuts(): void {
|
||||
const store = useKeybindingStore.getState()
|
||||
const keys = store.getAllEffective()
|
||||
|
||||
// Never let configurable application shortcuts shadow the platform's
|
||||
// select/copy/cut/paste/undo/redo behavior in text controls.
|
||||
if (isInputElement(e) && isNativeEditingShortcut(e)) return
|
||||
|
||||
// ---- 命令面板 ----
|
||||
if (matchesKeySequence(e, keys[KeybindingAction.TOOLS_COMMAND_PALETTE])) {
|
||||
e.preventDefault()
|
||||
@@ -173,13 +188,16 @@ export function useKeyboardShortcuts(): void {
|
||||
// ---- F11: 全屏 ----
|
||||
if (matchesKeySequence(e, keys[KeybindingAction.VIEW_FULLSCREEN])) {
|
||||
e.preventDefault()
|
||||
if (window.electronAPI?.settingsSet) {
|
||||
window.electronAPI.settingsGet('fullscreen').then((res: { success: boolean; value?: unknown }) => {
|
||||
const isFullscreen = res?.value === true
|
||||
window.electronAPI?.settingsSet('fullscreen', !isFullscreen)
|
||||
}).catch(() => {
|
||||
logger.warn('Failed to toggle fullscreen')
|
||||
})
|
||||
if (window.opsxApi?.settingsSet) {
|
||||
window.opsxApi
|
||||
.settingsGet('fullscreen')
|
||||
.then((res: { success: boolean; value?: unknown }) => {
|
||||
const isFullscreen = res?.value === true
|
||||
window.opsxApi?.settingsSet('fullscreen', !isFullscreen)
|
||||
})
|
||||
.catch(() => {
|
||||
logger.warn('Failed to toggle fullscreen')
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -229,6 +247,6 @@ export function useKeyboardShortcuts(): void {
|
||||
}
|
||||
|
||||
// 导出匹配函数供测试使用
|
||||
export { matchesKeySequence }
|
||||
export { isNativeEditingShortcut, matchesKeySequence }
|
||||
|
||||
export default useKeyboardShortcuts
|
||||
Reference in new issue
Block a user