From 995f6087d98f8497f700138f1ca8f306b220e297 Mon Sep 17 00:00:00 2001 From: Wang Jiyuan <59059173+EurFelux@users.noreply.github.com> Date: Sat, 14 Jun 2025 23:11:52 +0800 Subject: [PATCH] fix: send message shortcut doesn't work when editing existing message (#6934) * fix: send message shortcut doesn't work when editing existing message * fix: resend shortcut only apply on user msg --- .../src/pages/home/Inputbar/Inputbar.tsx | 2 +- .../src/pages/home/Messages/MessageEditor.tsx | 58 +++++++++++++++---- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 1509f03395..f9faa45169 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -309,7 +309,7 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic, topic }) = }, [knowledgeBases, openKnowledgeFileList, quickPanel, t, inputbarToolsRef]) const handleKeyDown = (event: React.KeyboardEvent) => { - const isEnterPressed = event.keyCode == 13 + const isEnterPressed = event.key === 'Enter' // 按下Tab键,自动选中${xxx} if (event.key === 'Tab' && inputFocus) { diff --git a/src/renderer/src/pages/home/Messages/MessageEditor.tsx b/src/renderer/src/pages/home/Messages/MessageEditor.tsx index 698991e92f..8a5bd974dd 100644 --- a/src/renderer/src/pages/home/Messages/MessageEditor.tsx +++ b/src/renderer/src/pages/home/Messages/MessageEditor.tsx @@ -40,7 +40,7 @@ const MessageBlockEditor: FC = ({ message, onSave, onResend, onCancel }) const model = assistant.model || assistant.defaultModel const isVision = useMemo(() => isVisionModel(model), [model]) const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision]) - const { pasteLongTextAsFile, pasteLongTextThreshold, fontSize } = useSettings() + const { pasteLongTextAsFile, pasteLongTextThreshold, fontSize, sendMessageShortcut } = useSettings() const { t } = useTranslation() const textareaRef = useRef(null) const attachmentButtonRef = useRef(null) @@ -137,9 +137,8 @@ const MessageBlockEditor: FC = ({ message, onSave, onResend, onCancel }) } } - const handleClick = async (withResend?: boolean) => { - if (isProcessing) return - setIsProcessing(true) + // 处理编辑区块并上传文件 + const processEditedBlocks = async () => { const updatedBlocks = [...editedBlocks] if (files && files.length) { const uploadedFiles = await FileManager.uploadFiles(files) @@ -153,10 +152,48 @@ const MessageBlockEditor: FC = ({ message, onSave, onResend, onCancel }) } }) } - if (withResend) { - onResend(updatedBlocks) - } else { - onSave(updatedBlocks) + return updatedBlocks + } + + const handleSave = async () => { + if (isProcessing) return + setIsProcessing(true) + const updatedBlocks = await processEditedBlocks() + onSave(updatedBlocks) + } + + const handleResend = async () => { + if (isProcessing) return + setIsProcessing(true) + const updatedBlocks = await processEditedBlocks() + onResend(updatedBlocks) + } + + const handleKeyDown = (event: React.KeyboardEvent) => { + if (message.role !== 'user') { + return + } + + const isEnterPressed = event.key === 'Enter' + + if (isEnterPressed && !event.shiftKey && sendMessageShortcut === 'Enter') { + handleResend() + return event.preventDefault() + } + + if (sendMessageShortcut === 'Shift+Enter' && isEnterPressed && event.shiftKey) { + handleResend() + return event.preventDefault() + } + + if (sendMessageShortcut === 'Ctrl+Enter' && isEnterPressed && event.ctrlKey) { + handleResend() + return event.preventDefault() + } + + if (sendMessageShortcut === 'Command+Enter' && isEnterPressed && event.metaKey) { + handleResend() + return event.preventDefault() } } @@ -175,6 +212,7 @@ const MessageBlockEditor: FC = ({ message, onSave, onResend, onCancel }) handleTextChange(block.id, e.target.value) resizeTextArea() }} + onKeyDown={handleKeyDown} autoFocus contextMenu="true" spellCheck={false} @@ -240,13 +278,13 @@ const MessageBlockEditor: FC = ({ message, onSave, onResend, onCancel }) - handleClick()}> + {message.role === 'user' && ( - handleClick(true)}> +