From 9fb12c7a7125ba39a79065a634ac1089fc6e7daa Mon Sep 17 00:00:00 2001 From: hstyi Date: Sun, 23 Feb 2025 21:27:34 +0800 Subject: [PATCH] feat: SFTP command add key shortcut --- .../kotlin/app/termora/TermoraRestarter.kt | 8 ++--- .../app/termora/actions/ActionManager.kt | 1 + .../app/termora/actions/SFTPCommandAction.kt | 30 +++++++++++++++++++ .../kotlin/app/termora/keymap/KeymapImpl.kt | 6 ++++ .../app/termora/keymap/KeymapTableModel.kt | 3 +- src/main/resources/i18n/messages.properties | 1 + .../resources/i18n/messages_zh_CN.properties | 1 + .../resources/i18n/messages_zh_TW.properties | 1 + 8 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/app/termora/actions/SFTPCommandAction.kt diff --git a/src/main/kotlin/app/termora/TermoraRestarter.kt b/src/main/kotlin/app/termora/TermoraRestarter.kt index 22a2309..ef13eb2 100644 --- a/src/main/kotlin/app/termora/TermoraRestarter.kt +++ b/src/main/kotlin/app/termora/TermoraRestarter.kt @@ -85,10 +85,6 @@ class TermoraRestarter { private fun doRestart() { - for (window in TermoraFrameManager.getInstance().getWindows()) { - window.dispose() - } - if (SystemInfo.isMacOS) { Restarter.restart(arrayOf("open", "-n", macOSApplicationPath)) } else if (SystemInfo.isWindows && startupCommand != null) { @@ -100,6 +96,10 @@ class TermoraRestarter { Restarter.restart(arrayOf(startupCommand)) } } + + for (window in TermoraFrameManager.getInstance().getWindows()) { + window.dispose() + } } diff --git a/src/main/kotlin/app/termora/actions/ActionManager.kt b/src/main/kotlin/app/termora/actions/ActionManager.kt index 5a2a9b0..520a91a 100644 --- a/src/main/kotlin/app/termora/actions/ActionManager.kt +++ b/src/main/kotlin/app/termora/actions/ActionManager.kt @@ -33,6 +33,7 @@ class ActionManager : org.jdesktop.swingx.action.ActionManager() { addAction(Actions.KEYWORD_HIGHLIGHT, KeywordHighlightAction()) addAction(Actions.TERMINAL_LOGGER, TerminalLoggerAction()) addAction(Actions.SFTP, SFTPAction()) + addAction(SFTPCommandAction.SFTP_COMMAND, SFTPCommandAction()) addAction(Actions.MACRO, MacroAction()) addAction(Actions.KEY_MANAGER, KeyManagerAction()) diff --git a/src/main/kotlin/app/termora/actions/SFTPCommandAction.kt b/src/main/kotlin/app/termora/actions/SFTPCommandAction.kt new file mode 100644 index 0000000..05dcbd4 --- /dev/null +++ b/src/main/kotlin/app/termora/actions/SFTPCommandAction.kt @@ -0,0 +1,30 @@ +package app.termora.actions + +import app.termora.HostTerminalTab +import app.termora.I18n +import app.termora.OpenHostActionEvent +import app.termora.Protocol + +class SFTPCommandAction : AnAction() { + companion object { + /** + * 打开 SFTP command + */ + const val SFTP_COMMAND = "SFTPCommandAction" + } + + init { + putValue(ACTION_COMMAND_KEY, SFTP_COMMAND) + putValue(SHORT_DESCRIPTION, I18n.getString("termora.actions.open-sftp-command")) + } + + override fun actionPerformed(evt: AnActionEvent) { + val actionManager = ActionManager.getInstance().getAction(OpenHostAction.OPEN_HOST) ?: return + val terminalTabbedManager = evt.getData(DataProviders.TerminalTabbedManager) ?: return + val tab = terminalTabbedManager.getSelectedTerminalTab() as? HostTerminalTab ?: return + val host = tab.host + if (!(host.protocol == Protocol.SSH || host.protocol == Protocol.SFTPPty)) return + actionManager.actionPerformed(OpenHostActionEvent(evt.source, host.copy(protocol = Protocol.SFTPPty), evt)) + evt.consume() + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/termora/keymap/KeymapImpl.kt b/src/main/kotlin/app/termora/keymap/KeymapImpl.kt index 5e90a8f..3207078 100644 --- a/src/main/kotlin/app/termora/keymap/KeymapImpl.kt +++ b/src/main/kotlin/app/termora/keymap/KeymapImpl.kt @@ -76,6 +76,12 @@ class KeymapImpl(private val menuShortcutKeyMaskEx: Int) : Keymap("Keymap", null KeyShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_R, menuShortcutKeyMaskEx or InputEvent.SHIFT_DOWN_MASK)) ) + // Command + Shift + P + addShortcut( + SFTPCommandAction.SFTP_COMMAND, + KeyShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_P, menuShortcutKeyMaskEx or InputEvent.SHIFT_DOWN_MASK)) + ) + // switch map for (i in KeyEvent.VK_1..KeyEvent.VK_9) { diff --git a/src/main/kotlin/app/termora/keymap/KeymapTableModel.kt b/src/main/kotlin/app/termora/keymap/KeymapTableModel.kt index 25d2a8e..e510272 100644 --- a/src/main/kotlin/app/termora/keymap/KeymapTableModel.kt +++ b/src/main/kotlin/app/termora/keymap/KeymapTableModel.kt @@ -27,10 +27,11 @@ class KeymapTableModel : DefaultTableModel() { TerminalZoomOutAction.ZOOM_OUT, TerminalZoomResetAction.ZOOM_RESET, OpenLocalTerminalAction.LOCAL_TERMINAL, - TerminalClearScreenAction.CLEAR_SCREEN, FindEverywhereAction.FIND_EVERYWHERE, NewWindowAction.NEW_WINDOW, TabReconnectAction.RECONNECT_TAB, + TerminalClearScreenAction.CLEAR_SCREEN, + SFTPCommandAction.SFTP_COMMAND, SwitchTabAction.SWITCH_TAB, )) { val action = actionManager.getAction(id) ?: continue diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 6ea323d..94413f1 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -343,6 +343,7 @@ termora.actions.open-local-terminal=Open Local Terminal termora.actions.open-find-everywhere=Open FindEverywhere termora.actions.open-new-window=Open new Window termora.actions.clear-screen=Clear Terminal Screen +termora.actions.open-sftp-command=Open SFTP Command termora.actions.switch-tab=Switch to specific Tab [1..9] # Terminal diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index bdffacc..f96675b 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -334,6 +334,7 @@ termora.actions.open-local-terminal=打开本地终端 termora.actions.open-find-everywhere=打开全局查找 termora.actions.open-new-window=打开新窗口 termora.actions.clear-screen=清除终端屏幕 +termora.actions.open-sftp-command=打开 SFTP 终端 termora.actions.switch-tab=切换到特定标签页 [1..9] diff --git a/src/main/resources/i18n/messages_zh_TW.properties b/src/main/resources/i18n/messages_zh_TW.properties index 7ae761f..050a591 100644 --- a/src/main/resources/i18n/messages_zh_TW.properties +++ b/src/main/resources/i18n/messages_zh_TW.properties @@ -314,6 +314,7 @@ termora.actions.open-local-terminal=開啟本地終端 termora.actions.open-find-everywhere=開啟全域搜尋 termora.actions.open-new-window=開啟新視窗 termora.actions.clear-screen=清除終端機螢幕 +termora.actions.open-sftp-command=打開 SFTP 終端 termora.actions.switch-tab=切換到特定分頁 [1..9] # Visual Window