diff --git a/openless-all/app/src-tauri/src/types.rs b/openless-all/app/src-tauri/src/types.rs
index 069205db..b74f7bcc 100644
--- a/openless-all/app/src-tauri/src/types.rs
+++ b/openless-all/app/src-tauri/src/types.rs
@@ -2576,12 +2576,13 @@ impl HotkeyCapability {
{
return Self {
adapter: HotkeyAdapterKind::WindowsLowLevel,
+ // Windows 没有 Command 键:leftCommand/rightCommand 会被映射到 Win 键,
+ // 而单按 Win 会弹出开始菜单,实际无法作为录音热键使用。故不在 Windows
+ // 的常用单键预设里提供 Command 选项(issue #784)。
available_triggers: vec![
HotkeyTrigger::RightControl,
HotkeyTrigger::RightAlt,
HotkeyTrigger::LeftControl,
- HotkeyTrigger::RightCommand,
- HotkeyTrigger::LeftCommand,
HotkeyTrigger::LeftShift,
HotkeyTrigger::RightShift,
HotkeyTrigger::MediaPlayPause,
diff --git a/openless-all/app/src/i18n/en.ts b/openless-all/app/src/i18n/en.ts
index bc6ee644..962bf4ea 100644
--- a/openless-all/app/src/i18n/en.ts
+++ b/openless-all/app/src/i18n/en.ts
@@ -1166,6 +1166,9 @@ export const en: typeof zhCN = {
rightControl: 'Right Control',
leftControl: 'Left Control',
rightCommand: 'Right Command',
+ leftCommand: 'Left Command',
+ leftShift: 'Left Shift',
+ rightShift: 'Right Shift',
fn: 'Fn (Globe key)',
rightAlt: 'Right Alt',
mediaPlayPause: '⏯ Media Play/Pause',
diff --git a/openless-all/app/src/i18n/ja.ts b/openless-all/app/src/i18n/ja.ts
index 5e32d598..a06691fd 100644
--- a/openless-all/app/src/i18n/ja.ts
+++ b/openless-all/app/src/i18n/ja.ts
@@ -1134,6 +1134,9 @@ export const ja: typeof zhCN = {
rightControl: '右 Control',
leftControl: '左 Control',
rightCommand: '右 Command',
+ leftCommand: '左 Command',
+ leftShift: '左 Shift',
+ rightShift: '右 Shift',
fn: 'Fn (地球キー)',
rightAlt: '右 Alt',
mediaPlayPause: '⏯ メディア再生/一時停止',
diff --git a/openless-all/app/src/i18n/ko.ts b/openless-all/app/src/i18n/ko.ts
index e4c21fae..c11fa80e 100644
--- a/openless-all/app/src/i18n/ko.ts
+++ b/openless-all/app/src/i18n/ko.ts
@@ -1134,6 +1134,9 @@ export const ko: typeof zhCN = {
rightControl: '오른쪽 Control',
leftControl: '왼쪽 Control',
rightCommand: '오른쪽 Command',
+ leftCommand: '왼쪽 Command',
+ leftShift: '왼쪽 Shift',
+ rightShift: '오른쪽 Shift',
fn: 'Fn (지구본 키)',
rightAlt: '오른쪽 Alt',
mediaPlayPause: '⏯ 미디어 재생/일시정지',
diff --git a/openless-all/app/src/i18n/zh-CN.ts b/openless-all/app/src/i18n/zh-CN.ts
index 6f33701e..d1164f0b 100644
--- a/openless-all/app/src/i18n/zh-CN.ts
+++ b/openless-all/app/src/i18n/zh-CN.ts
@@ -1164,6 +1164,9 @@ export const zhCN = {
rightControl: '右 Control',
leftControl: '左 Control',
rightCommand: '右 Command',
+ leftCommand: '左 Command',
+ leftShift: '左 Shift',
+ rightShift: '右 Shift',
fn: 'Fn (地球键)',
rightAlt: '右 Alt',
mediaPlayPause: '⏯ 媒体播放/暂停',
diff --git a/openless-all/app/src/i18n/zh-TW.ts b/openless-all/app/src/i18n/zh-TW.ts
index 60bb6a53..3f27bc7d 100644
--- a/openless-all/app/src/i18n/zh-TW.ts
+++ b/openless-all/app/src/i18n/zh-TW.ts
@@ -1132,6 +1132,9 @@ export const zhTW: typeof zhCN = {
rightControl: '右 Control',
leftControl: '左 Control',
rightCommand: '右 Command',
+ leftCommand: '左 Command',
+ leftShift: '左 Shift',
+ rightShift: '右 Shift',
fn: 'Fn (地球鍵)',
rightAlt: '右 Alt',
mediaPlayPause: '⏯ 媒體播放/暫停',
diff --git a/openless-all/app/src/lib/ipc/mock-data.ts b/openless-all/app/src/lib/ipc/mock-data.ts
index 8b487c40..1dc753f1 100644
--- a/openless-all/app/src/lib/ipc/mock-data.ts
+++ b/openless-all/app/src/lib/ipc/mock-data.ts
@@ -399,7 +399,9 @@ export const mockHotkeyCapability: HotkeyCapability = {
"rightControl",
"rightAlt",
"leftControl",
- "rightCommand",
+ "leftShift",
+ "rightShift",
+ "mediaPlayPause",
"custom",
],
requiresAccessibilityPermission: false,
diff --git a/openless-all/app/src/pages/Overview.tsx b/openless-all/app/src/pages/Overview.tsx
index 17d5129f..8e99dcf4 100644
--- a/openless-all/app/src/pages/Overview.tsx
+++ b/openless-all/app/src/pages/Overview.tsx
@@ -219,7 +219,9 @@ export function Overview({ onOpenHistory }: OverviewProps) {
只有「最近识别」内部允许滚动;其他卡片按内容自然高度,不破裂底部圆角。
issue #243 follow-up:去掉外层 overflow 后底部圆角被裁的视觉问题。 */}
-
+ {/* overflow:hidden:窗口过小时这一行 flex:1 会被压到比内容还矮,柱状图(固定高)
+ 原本会溢出卡片圆角外(issue #782)。裁进卡片内,与右侧「最近识别」卡片一致。 */}
+
{t('overview.weekTitle')}
{t('overview.weekUnit')}
@@ -342,7 +344,9 @@ function ActivityHeatmapCard({ activity }: { activity: ActivityDay[] }) {
};
}, [activity, i18n.language]);
return (
-
+ // marginBottom 与上方 provider / metrics 两行的 18px 节奏保持一致:否则「年度活动」
+ // 会直接贴住下面「近 7 天 / 最近识别」那一行,中间没有间隔(issue #781)。
+
{t('overview.activityTitle')}
diff --git a/openless-all/app/src/pages/settings/RecordingInputSection.tsx b/openless-all/app/src/pages/settings/RecordingInputSection.tsx
index 0f33d7e8..52f9538e 100644
--- a/openless-all/app/src/pages/settings/RecordingInputSection.tsx
+++ b/openless-all/app/src/pages/settings/RecordingInputSection.tsx
@@ -58,6 +58,18 @@ export function RecordingInputSection() {
void getPlatformCapabilities().then(setPlatformCaps);
}, []);
+ // 兼容旧 Windows 配置:Shift+Insert 仍保留在跨平台类型/后端中供 Linux 使用,
+ // 但 Windows 已不再提供该选项;进入设置时迁移为 Ctrl+V,避免下拉框无匹配值。
+ useEffect(() => {
+ if (os !== 'win' || prefs?.pasteShortcut !== 'shiftInsert') return;
+ void savePrefs(current => {
+ if (current.pasteShortcut !== 'shiftInsert') return current;
+ return { ...current, pasteShortcut: 'ctrlV' };
+ }).catch(error => {
+ console.warn('[settings] migrate Windows paste shortcut failed', error);
+ });
+ }, [os, prefs?.pasteShortcut, savePrefs]);
+
const loadMicrophoneDevices = useCallback(async (
signal?: { cancelled: boolean },
options: { showLoading?: boolean } = {},
@@ -133,6 +145,9 @@ export function RecordingInputSection() {
const showDesktopHotkey = platformCaps?.supportsDesktopHotkey === true;
const showDesktopInsert = showDesktopHotkey && os !== 'linux';
const showDesktopStartup = showDesktopHotkey;
+ const effectivePasteShortcut = os === 'win' && prefs.pasteShortcut === 'shiftInsert'
+ ? 'ctrlV'
+ : prefs.pasteShortcut;
const onModeChange = (mode: HotkeyMode) =>
savePrefs({ ...prefs, hotkey: { ...prefs.hotkey, mode } });
@@ -309,12 +324,14 @@ export function RecordingInputSection() {
{capability.adapter !== 'macEventTap' && (
onPasteShortcutChange(next as PasteShortcut)}
options={[
{ value: 'ctrlV', label: t('settings.recording.pasteShortcutCtrlV') },
{ value: 'ctrlShiftV', label: t('settings.recording.pasteShortcutCtrlShiftV') },
- { value: 'shiftInsert', label: t('settings.recording.pasteShortcutShiftInsert') },
+ // 这个「粘贴与剪贴板」组只在 Windows 出现(showDesktopInsert 已排除 Linux,mac 走
+ // macEventTap 不显示本行)。Shift+Insert 是 xterm/urxvt 等 X11 终端的粘贴组合,
+ // 放在 Windows 上纯属误导,故不再作为选项(issue #786)。
]}
ariaLabel={t('settings.recording.pasteShortcutLabel')}
style={{ ...inputStyle, maxWidth: 220 }}
@@ -404,11 +421,6 @@ export function RecordingInputSection() {
- {capability.statusHint && (
-
- {capability.statusHint}
-
- )}
)}
>
diff --git a/openless-all/app/src/pages/settings/ShortcutsSection.tsx b/openless-all/app/src/pages/settings/ShortcutsSection.tsx
index b57d9cde..e5ff9e59 100644
--- a/openless-all/app/src/pages/settings/ShortcutsSection.tsx
+++ b/openless-all/app/src/pages/settings/ShortcutsSection.tsx
@@ -62,7 +62,9 @@ export function ShortcutsSection() {
const readonlyRows: Array<[string, string]> = [
[t('settings.shortcuts.cancel'), 'Esc'],
- ...(os !== 'linux' ? [[t('settings.shortcuts.confirm'), t('settings.shortcuts.confirmHint')]] as Array<[string, string]> : []),
+ // 胶囊右侧「✓ 确认插入」目前只在 macOS 胶囊上有,Windows/Linux 胶囊没有这个按钮,
+ // 之前 os !== 'linux' 把它也展示给了 Windows,误导用户以为有个用不了的快捷键(issue #780)。
+ ...(os === 'mac' ? [[t('settings.shortcuts.confirm'), t('settings.shortcuts.confirmHint')]] as Array<[string, string]> : []),
];
return (
diff --git a/openless-all/app/src/state/HotkeySettingsContext.tsx b/openless-all/app/src/state/HotkeySettingsContext.tsx
index abde285e..bfe63520 100644
--- a/openless-all/app/src/state/HotkeySettingsContext.tsx
+++ b/openless-all/app/src/state/HotkeySettingsContext.tsx
@@ -59,6 +59,7 @@ export function HotkeySettingsProvider({ children }: { children: ReactNode }) {
])
let nextError: string | null = null
if (prefsResult.status === "fulfilled") {
+ latestPrefsRef.current = prefsResult.value
setPrefs(prefsResult.value)
applyThemeFromPreference(prefsResult.value.themeMode ?? "system")
} else {