From d8ec7b6d4aad448a695ec93289d48af969a83f5c Mon Sep 17 00:00:00 2001 From: hstyi Date: Thu, 27 Mar 2025 11:44:10 +0800 Subject: [PATCH] chore: automatically jump to the bottom (#397) --- .../terminal/panel/TerminalPanelKeyAdapter.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt b/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt index 2bebfb9..6b687cf 100644 --- a/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt +++ b/src/main/kotlin/app/termora/terminal/panel/TerminalPanelKeyAdapter.kt @@ -4,6 +4,7 @@ import app.termora.keymap.KeyShortcut import app.termora.keymap.KeymapManager import app.termora.terminal.Terminal import com.formdev.flatlaf.util.SystemInfo +import org.slf4j.LoggerFactory import java.awt.event.InputEvent import java.awt.event.KeyAdapter import java.awt.event.KeyEvent @@ -17,6 +18,7 @@ class TerminalPanelKeyAdapter( companion object { private const val ASCII_ESC = 27.toChar() + private val log = LoggerFactory.getLogger(TerminalPanelKeyAdapter::class.java) } private val activeKeymap get() = KeymapManager.getInstance().getActiveKeymap() @@ -38,8 +40,18 @@ class TerminalPanelKeyAdapter( // 重置 isIgnoreKeyTyped = false - // 处理 - doKeyPressed(e) + try { + // 处理 + doKeyPressed(e) + } catch (e: Exception) { + if (log.isErrorEnabled) { + log.error(e.message, e) + } + // https://github.com/TermoraDev/termora/issues/388 + terminal.getSelectionModel().clearSelection() + terminal.getScrollingModel().scrollTo(Int.MAX_VALUE) + return + } // 如果已经处理,那么忽略 keyTyped 事件 if (e.isConsumed) { @@ -119,7 +131,7 @@ class TerminalPanelKeyAdapter( private fun simpleMapKeyCodeToChar(e: KeyEvent): Char { // zsh requires proper case of letter if (e.isShiftDown) return Character.toUpperCase(e.keyCode.toChar()) - return Character.toLowerCase(e.keyCode.toChar()); + return Character.toLowerCase(e.keyCode.toChar()) } } \ No newline at end of file