From 408976e5dc72089be4a075742e1db4166466adf6 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Tue, 10 Dec 2024 20:28:05 +0800 Subject: [PATCH] feat: add shortcut for assistant and topic show --- electron-builder.yml | 1 + packages/shared/config/constant.ts | 9 +++-- src/main/services/ConfigManager.ts | 5 ++- src/renderer/src/assets/styles/index.scss | 10 +----- src/renderer/src/assets/styles/scrollbar.scss | 4 +-- src/renderer/src/i18n/locales/en-us.json | 4 ++- src/renderer/src/i18n/locales/ru-ru.json | 4 ++- src/renderer/src/i18n/locales/zh-cn.json | 4 ++- src/renderer/src/i18n/locales/zh-tw.json | 4 ++- src/renderer/src/pages/home/Navbar.tsx | 14 ++++++++ src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/migrate.ts | 21 ++++++++++++ src/renderer/src/store/shortcuts.ts | 33 ++++++++++++++----- src/renderer/src/types/index.ts | 1 + 14 files changed, 88 insertions(+), 28 deletions(-) diff --git a/electron-builder.yml b/electron-builder.yml index 7b276842..b0a66a89 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -62,6 +62,7 @@ electronDownload: afterSign: scripts/notarize.js releaseInfo: releaseNotes: | + 增加快捷键切换助手和话题显示 历史消息懒加载 by @1355873789 更快的应用更新下载速度 by @1355873789 更加清晰的模型分组 diff --git a/packages/shared/config/constant.ts b/packages/shared/config/constant.ts index c5c19a3e..67542c3a 100644 --- a/packages/shared/config/constant.ts +++ b/packages/shared/config/constant.ts @@ -95,18 +95,21 @@ export const ZOOM_SHORTCUTS = [ key: 'zoom_in', shortcut: ['CommandOrControl', '='], editable: false, - enabled: true + enabled: true, + system: true }, { key: 'zoom_out', shortcut: ['CommandOrControl', '-'], editable: false, - enabled: true + enabled: true, + system: true }, { key: 'zoom_reset', shortcut: ['CommandOrControl', '0'], editable: false, - enabled: true + enabled: true, + system: true } ] diff --git a/src/main/services/ConfigManager.ts b/src/main/services/ConfigManager.ts index 65a06596..51181e01 100644 --- a/src/main/services/ConfigManager.ts +++ b/src/main/services/ConfigManager.ts @@ -77,7 +77,10 @@ export class ConfigManager { } setShortcuts(shortcuts: Shortcut[]) { - this.store.set('shortcuts', shortcuts) + this.store.set( + 'shortcuts', + shortcuts.filter((shortcut) => shortcut.system) + ) this.notifySubscribers('shortcuts', shortcuts) } } diff --git a/src/renderer/src/assets/styles/index.scss b/src/renderer/src/assets/styles/index.scss index 135cef13..42cd1f95 100644 --- a/src/renderer/src/assets/styles/index.scss +++ b/src/renderer/src/assets/styles/index.scss @@ -107,12 +107,6 @@ body[theme-mode='light'] { --chat-background-user: #95ec69; --chat-background-assistant: #ffffff; --chat-text-user: var(--color-text); - - #content-container { - box-shadow: - 0 4px 24px -4px rgba(0, 0, 0, 0.08), - 0 2px 12px -2px rgba(0, 0, 0, 0.06); - } } *, @@ -173,15 +167,13 @@ body, #content-container { background-color: var(--color-background); border-top: 0.5px solid var(--color-border); - box-shadow: - 0 4px 28px -4px rgba(0, 0, 0, 0.3), - 0 2px 16px -2px rgba(0, 0, 0, 0.25); } body[os='mac'] { #content-container { border-top-left-radius: 12px; border-left: 0.5px solid var(--color-border); + box-shadow: -2px 0px 24px -4px rgba(0, 0, 0, 0.1); } } diff --git a/src/renderer/src/assets/styles/scrollbar.scss b/src/renderer/src/assets/styles/scrollbar.scss index 4a2b2582..f25039f5 100644 --- a/src/renderer/src/assets/styles/scrollbar.scss +++ b/src/renderer/src/assets/styles/scrollbar.scss @@ -14,8 +14,8 @@ body[theme-mode='light'] { /* 全局初始化滚动条样式 */ ::-webkit-scrollbar { - width: 5px; - height: 5px; + width: 6px; + height: 6px; } ::-webkit-scrollbar-track { diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index d8bae439..628b2232 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -471,7 +471,9 @@ "press_shortcut": "Press Shortcut", "alt_warning": "Mac does not support Option + letters as shortcuts", "reset_to_default": "Reset to Default", - "clear_shortcut": "Clear Shortcut" + "clear_shortcut": "Clear Shortcut", + "toggle_show_assistants": "Toggle Assistants", + "toggle_show_topics": "Toggle Topics" }, "theme.auto": "Auto", "theme.dark": "Dark", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 9ee9f859..e1d6e1a5 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -471,7 +471,9 @@ "press_shortcut": "Нажмите сочетание клавиш", "alt_warning": "Mac не поддерживает Option + буквы как горячие клавиши", "reset_to_default": "Сбросить настройки по умолчанию", - "clear_shortcut": "Очистить сочетание клавиш" + "clear_shortcut": "Очистить сочетание клавиш", + "toggle_show_assistants": "Переключить отображение ассистентов", + "toggle_show_topics": "Переключить отображение топиков" }, "theme.auto": "Автоматически", "theme.dark": "Темная", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 4a098cc8..cbec03d6 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -459,7 +459,9 @@ "press_shortcut": "按下快捷键", "alt_warning": "Mac 系统不能使用 Option + 字母作为快捷键", "reset_to_default": "重置为默认", - "clear_shortcut": "清除快捷键" + "clear_shortcut": "清除快捷键", + "toggle_show_assistants": "切换助手显示", + "toggle_show_topics": "切换话题显示" }, "theme.auto": "跟随系统", "theme.dark": "深色主题", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index f2cedeb3..defa9f3d 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -459,7 +459,9 @@ "press_shortcut": "按下快捷鍵", "alt_warning": "Mac 不能使用 Option + 字母作為快捷鍵", "reset_to_default": "重置為預設", - "clear_shortcut": "清除快捷鍵" + "clear_shortcut": "清除快捷鍵", + "toggle_show_assistants": "切換助手顯示", + "toggle_show_topics": "切換話題顯示" }, "theme.auto": "自動", "theme.dark": "深色主題", diff --git a/src/renderer/src/pages/home/Navbar.tsx b/src/renderer/src/pages/home/Navbar.tsx index 0a233b51..23fa49f5 100644 --- a/src/renderer/src/pages/home/Navbar.tsx +++ b/src/renderer/src/pages/home/Navbar.tsx @@ -6,7 +6,9 @@ import SearchPopup from '@renderer/components/Popups/SearchPopup' import { isMac, isWindows } from '@renderer/config/constant' import { useAssistant } from '@renderer/hooks/useAssistant' import { useSettings } from '@renderer/hooks/useSettings' +import { useShortcut } from '@renderer/hooks/useShortcuts' import { useShowAssistants, useShowTopics } from '@renderer/hooks/useStore' +import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { Assistant, Topic } from '@renderer/types' import { FC } from 'react' import styled from 'styled-components' @@ -25,6 +27,18 @@ const HeaderNavbar: FC = ({ activeAssistant }) => { const { topicPosition } = useSettings() const { showTopics, toggleShowTopics } = useShowTopics() + useShortcut('toggle_show_assistants', () => { + toggleShowAssistants() + }) + + useShortcut('toggle_show_topics', () => { + if (topicPosition === 'right') { + toggleShowTopics() + } else { + EventEmitter.emit(EVENT_NAMES.SHOW_TOPIC_SIDEBAR) + } + }) + return ( {showAssistants && ( diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index e31450ef..d2cd1127 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -26,7 +26,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 47, + version: 48, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index c4740bcc..37e57883 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1,3 +1,4 @@ +import { isMac } from '@renderer/config/constant' import { SYSTEM_MODELS } from '@renderer/config/models' import { TRANSLATE_PROMPT } from '@renderer/config/prompts' import db from '@renderer/databases' @@ -726,6 +727,26 @@ const migrateConfig = { }) }) return state + }, + '48': (state: RootState) => { + state.shortcuts.shortcuts.forEach((shortcut) => { + shortcut.system = shortcut.key !== 'new_topic' + }) + state.shortcuts.shortcuts.push({ + key: 'toggle_show_assistants', + shortcut: [isMac ? 'Command' : 'Ctrl', '['], + editable: true, + enabled: true, + system: false + }) + state.shortcuts.shortcuts.push({ + key: 'toggle_show_topics', + shortcut: [isMac ? 'Command' : 'Ctrl', ']'], + editable: true, + enabled: true, + system: false + }) + return state } } diff --git a/src/renderer/src/store/shortcuts.ts b/src/renderer/src/store/shortcuts.ts index e402e482..29ef3f09 100644 --- a/src/renderer/src/store/shortcuts.ts +++ b/src/renderer/src/store/shortcuts.ts @@ -10,17 +10,33 @@ export interface ShortcutsState { const initialState: ShortcutsState = { shortcuts: [ ...ZOOM_SHORTCUTS, - { - key: 'new_topic', - shortcut: [isMac ? 'Command' : 'Ctrl', 'N'], - editable: true, - enabled: true - }, { key: 'show_app', shortcut: [], editable: true, - enabled: true + enabled: true, + system: true + }, + { + key: 'new_topic', + shortcut: [isMac ? 'Command' : 'Ctrl', 'N'], + editable: true, + enabled: true, + system: false + }, + { + key: 'toggle_show_assistants', + shortcut: [isMac ? 'Command' : 'Ctrl', '['], + editable: true, + enabled: true, + system: false + }, + { + key: 'toggle_show_topics', + shortcut: [isMac ? 'Command' : 'Ctrl', ']'], + editable: true, + enabled: true, + system: false } ] } @@ -29,7 +45,8 @@ const getSerializableShortcuts = (shortcuts: Shortcut[]) => { return shortcuts.map((shortcut) => ({ key: shortcut.key, shortcut: [...shortcut.shortcut], - enabled: shortcut.enabled + enabled: shortcut.enabled, + system: shortcut.system })) } diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index 2975a70e..4f30546c 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -169,4 +169,5 @@ export interface Shortcut { shortcut: string[] editable: boolean enabled: boolean + system: boolean }