From 126ce7304519366d83db6b4fd4bacba097651a6d Mon Sep 17 00:00:00 2001 From: Konstantin Hudyakov Date: Wed, 8 Nov 2023 19:08:50 +0200 Subject: [PATCH] [terminal] IDEA-337522 Clear text selection on typing when command is running GitOrigin-RevId: b43c30a0fd08e0477e060479c118a7f69eae317c --- .../plugins/terminal/exp/BlockTerminalEventsHandler.kt | 4 ++-- .../plugins/terminal/exp/SimpleTerminalController.kt | 2 +- .../plugins/terminal/exp/SimpleTerminalEventsHandler.kt | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalEventsHandler.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalEventsHandler.kt index e41b718d4961..ca247dd8acb9 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalEventsHandler.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalEventsHandler.kt @@ -7,9 +7,9 @@ import java.awt.event.KeyEvent class BlockTerminalEventsHandler( session: TerminalSession, settings: JBTerminalSystemSettingsProviderBase, - private val outputModel: TerminalOutputModel, + outputModel: TerminalOutputModel, private val selectionModel: TerminalSelectionModel -) : SimpleTerminalEventsHandler(session, settings) { +) : SimpleTerminalEventsHandler(session, settings, outputModel) { override fun keyTyped(e: KeyEvent) { // Clear the block selection on typing if (selectionModel.primarySelection != null) { diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalController.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalController.kt index d139b85d436f..ac0180e58248 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalController.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalController.kt @@ -42,7 +42,7 @@ class SimpleTerminalController( terminalModel.isCommandRunning = true setupContentListener() - val eventsHandler = SimpleTerminalEventsHandler(session, settings) + val eventsHandler = SimpleTerminalEventsHandler(session, settings, outputModel) setupKeyEventDispatcher(editor, settings, eventsHandler, outputModel, selectionModel, disposable = this) setupMouseListener(editor, settings, terminalModel, eventsHandler, disposable = this) terminalModel.withContentLock { diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalEventsHandler.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalEventsHandler.kt index 6d12046fd207..6c5dd0a9e410 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalEventsHandler.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalEventsHandler.kt @@ -23,7 +23,8 @@ import javax.swing.SwingUtilities */ open class SimpleTerminalEventsHandler( private val session: TerminalSession, - private val settings: JBTerminalSystemSettingsProviderBase + private val settings: JBTerminalSystemSettingsProviderBase, + protected val outputModel: TerminalOutputModel, ) : TerminalEventsHandler { private var ignoreNextKeyTypedEvent: Boolean = false private var lastMotionReport: Point? = null @@ -37,6 +38,11 @@ open class SimpleTerminalEventsHandler( get() = session.model override fun keyTyped(e: KeyEvent) { + val selectionModel = outputModel.editor.selectionModel + if (selectionModel.hasSelection()) { + selectionModel.removeSelection() + } + if (ignoreNextKeyTypedEvent) { e.consume() return