feat: release OpsXShell 2.1.0 native Tauri edition

This commit is contained in:
Logan.Li committed 2026-07-30 23:32:51 +08:00
1 parent e9a0d21758
commit a3dba0c6ed
311 files changed
+31748 -14897

No files matched your search

+39 -21
View File
@@ -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