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 90cb434..ce28ac8 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.terminal.ControlCharacters @@ -69,6 +70,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) @@ -100,7 +102,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 } @@ -155,4 +159,4 @@ class TerminalPanelKeyAdapter( return Character.toLowerCase(e.keyCode.toChar()) } -} \ No newline at end of file +}