From bfc63a39836dc43729a5e8c2391f3e303b3be7fe Mon Sep 17 00:00:00 2001 From: Srar <> Date: Wed, 10 Dec 2025 14:54:49 +0800 Subject: [PATCH] fix: copy hotkey conflicts with ctrlc (cherry picked from commit b499667cbb6c047ca16742dfe105535b8bd34c80) --- src/main/kotlin/app/termora/actions/TerminalCopyAction.kt | 6 +++++- .../app/termora/terminal/panel/TerminalPanelKeyAdapter.kt | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/app/termora/actions/TerminalCopyAction.kt b/src/main/kotlin/app/termora/actions/TerminalCopyAction.kt index 48e2e6e..f1c145d 100644 --- a/src/main/kotlin/app/termora/actions/TerminalCopyAction.kt +++ b/src/main/kotlin/app/termora/actions/TerminalCopyAction.kt @@ -20,6 +20,10 @@ class TerminalCopyAction : AnAction() { override fun actionPerformed(evt: AnActionEvent) { val terminalPanel = evt.getData(DataProviders.TerminalPanel) ?: return + val selectionModel = terminalPanel.terminal.getSelectionModel() + if (!selectionModel.hasSelection()) { + return + } val text = terminalPanel.copy() val systemClipboard = terminalPanel.toolkit.systemClipboard @@ -53,4 +57,4 @@ class TerminalCopyAction : AnAction() { } -} \ No newline at end of file +} diff --git a/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt b/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt index c7c9556..ff9d0c3 100644 --- a/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt +++ b/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt @@ -1,5 +1,6 @@ package app.termora.terminal.panel +import app.termora.actions.TerminalCopyAction import app.termora.keymap.KeyShortcut import app.termora.keymap.KeymapManager import app.termora.plugin.internal.AltKeyModifier @@ -71,6 +72,7 @@ class TerminalPanelKeyAdapter( } val keyStroke = KeyStroke.getKeyStrokeForEvent(e) + val keymapActions = activeKeymap.getActionIds(KeyShortcut(keyStroke)) for (action in terminalPanel.getTerminalActions()) { if (action.test(keyStroke, e)) { action.actionPerformed(e) @@ -104,7 +106,9 @@ class TerminalPanelKeyAdapter( } // 如果命中了全局快捷键,那么不处理 - if (keyStroke.modifiers != 0 && activeKeymap.getActionIds(KeyShortcut(keyStroke)).isNotEmpty()) { + val copyShortcutWithoutSelection = + keymapActions.contains(TerminalCopyAction.COPY) && terminal.getSelectionModel().hasSelection().not() + if (keyStroke.modifiers != 0 && keymapActions.isNotEmpty() && !copyShortcutWithoutSelection) { return } @@ -159,4 +163,4 @@ class TerminalPanelKeyAdapter( return Character.toLowerCase(e.keyCode.toChar()) } -} \ No newline at end of file +}