feat: Windows keyboard shortcut (#86)

This commit is contained in:
hstyi
2025-01-16 12:38:43 +08:00
committed by GitHub
parent 0cd818e9a0
commit 314c112d4b
4 changed files with 50 additions and 2 deletions

View File

@@ -47,7 +47,10 @@ class TerminalPanel(val terminal: Terminal, private val ptyConnector: PtyConnect
/** /**
* 键盘事件 * 键盘事件
*/ */
private val actions = mutableListOf<TerminalPredicateAction>() private val actions = mutableListOf(
TerminalWindowsCopyAction(),
TerminalWindowsPasteAction(),
)
/** /**

View File

@@ -52,7 +52,7 @@ class TerminalPanelKeyAdapter(
return return
} }
if (Character.isISOControl(e.keyChar)) { if (Character.isISOControl(e.keyChar) && isCtrlPressedOnly(e)) {
terminal.getSelectionModel().clearSelection() terminal.getSelectionModel().clearSelection()
// 如果不为空表示已经发送过了,所以这里为空的时候再发送 // 如果不为空表示已经发送过了,所以这里为空的时候再发送
if (encode.isEmpty()) { if (encode.isEmpty()) {

View File

@@ -0,0 +1,22 @@
package app.termora.terminal.panel
import app.termora.actions.AnActionEvent
import app.termora.actions.TerminalCopyAction
import com.formdev.flatlaf.util.SystemInfo
import org.apache.commons.lang3.StringUtils
import org.jdesktop.swingx.action.ActionManager
import java.awt.event.InputEvent
import java.awt.event.KeyEvent
import javax.swing.KeyStroke
class TerminalWindowsCopyAction : TerminalPredicateAction {
private val keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.CTRL_DOWN_MASK)
override fun actionPerformed(e: KeyEvent) {
ActionManager.getInstance().getAction(TerminalCopyAction.COPY)
?.actionPerformed(AnActionEvent(e.source, StringUtils.EMPTY, e))
}
override fun test(keyStroke: KeyStroke, e: KeyEvent): Boolean {
return (SystemInfo.isWindows || SystemInfo.isLinux) && keyStroke == this.keyStroke
}
}

View File

@@ -0,0 +1,23 @@
package app.termora.terminal.panel
import app.termora.actions.AnActionEvent
import app.termora.actions.TerminalPasteAction
import com.formdev.flatlaf.util.SystemInfo
import org.apache.commons.lang3.StringUtils
import org.jdesktop.swingx.action.ActionManager
import java.awt.event.InputEvent
import java.awt.event.KeyEvent
import javax.swing.KeyStroke
class TerminalWindowsPasteAction : TerminalPredicateAction {
private val keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.SHIFT_DOWN_MASK)
override fun actionPerformed(e: KeyEvent) {
ActionManager.getInstance().getAction(TerminalPasteAction.PASTE)
?.actionPerformed(AnActionEvent(e.source, StringUtils.EMPTY, e))
}
override fun test(keyStroke: KeyStroke, e: KeyEvent): Boolean {
return (SystemInfo.isWindows || SystemInfo.isLinux) && keyStroke == this.keyStroke
}
}