mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
Compare commits
1 Commits
2.x
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a56774454d |
@@ -1,16 +1,16 @@
|
|||||||
[versions]
|
[versions]
|
||||||
kotlin = "2.3.0"
|
kotlin = "2.2.21"
|
||||||
slf4j = "2.0.17"
|
slf4j = "2.0.17"
|
||||||
pty4j = "0.13.10"
|
pty4j = "0.13.10"
|
||||||
tinylog = "2.7.0"
|
tinylog = "2.7.0"
|
||||||
kotlinx-coroutines = "1.10.2"
|
kotlinx-coroutines = "1.10.2"
|
||||||
flatlaf = "3.7"
|
flatlaf = "3.6.2"
|
||||||
kotlinx-serialization-json = "1.9.0"
|
kotlinx-serialization-json = "1.9.0"
|
||||||
commons-codec = "1.20.0"
|
commons-codec = "1.20.0"
|
||||||
commons-lang3 = "3.20.0"
|
commons-lang3 = "3.20.0"
|
||||||
commons-csv = "1.14.1"
|
commons-csv = "1.14.1"
|
||||||
commons-net = "3.12.0"
|
commons-net = "3.12.0"
|
||||||
commons-text = "1.15.0"
|
commons-text = "1.14.0"
|
||||||
commons-compress = "1.28.0"
|
commons-compress = "1.28.0"
|
||||||
commons-vfs2 = "2.10.0"
|
commons-vfs2 = "2.10.0"
|
||||||
swingx = "1.6.5-1"
|
swingx = "1.6.5-1"
|
||||||
@@ -20,11 +20,11 @@ oshi = "6.9.1"
|
|||||||
versioncompare = "1.4.1"
|
versioncompare = "1.4.1"
|
||||||
jna = "5.18.1"
|
jna = "5.18.1"
|
||||||
jSystemThemeDetector = "3.9.1"
|
jSystemThemeDetector = "3.9.1"
|
||||||
commons-io = "2.21.0"
|
commons-io = "2.20.0"
|
||||||
jbr-api = "17.1.10.1"
|
jbr-api = "17.1.10.1"
|
||||||
hutool = "5.8.40"
|
hutool = "5.8.40"
|
||||||
jsch = "2.27.3"
|
jsch = "2.27.3"
|
||||||
okhttp = "5.3.0"
|
okhttp = "5.3.2"
|
||||||
sshj = "0.39.0"
|
sshj = "0.39.0"
|
||||||
sshd-core = "2.15.0"
|
sshd-core = "2.15.0"
|
||||||
jgit = "7.4.0.202509020913-r"
|
jgit = "7.4.0.202509020913-r"
|
||||||
@@ -33,18 +33,18 @@ jnafilechooser = "1.1.2"
|
|||||||
xodus = "2.0.1"
|
xodus = "2.0.1"
|
||||||
bip39 = "1.0.9"
|
bip39 = "1.0.9"
|
||||||
colorpicker = "2.0.1"
|
colorpicker = "2.0.1"
|
||||||
rhino = "1.9.0"
|
rhino = "1.8.0"
|
||||||
delight-rhino-sandbox = "0.2.1"
|
delight-rhino-sandbox = "0.2.1"
|
||||||
testcontainers = "2.0.3"
|
testcontainers = "2.0.1"
|
||||||
mixpanel = "1.7.0"
|
mixpanel = "1.5.4"
|
||||||
jSerialComm = "2.11.4"
|
jSerialComm = "2.11.4"
|
||||||
ini4j = "0.5.5-2"
|
ini4j = "0.5.5-2"
|
||||||
restart4j = "0.0.1"
|
restart4j = "0.0.1"
|
||||||
eddsa = "0.3.0"
|
eddsa = "0.3.0"
|
||||||
exposed = "1.0.0-rc-4"
|
exposed = "1.0.0-rc-2"
|
||||||
h2 = "2.3.232"
|
h2 = "2.3.232"
|
||||||
sqlite = "3.50.3.0"
|
sqlite = "3.50.3.0"
|
||||||
jug = "5.2.0"
|
jug = "5.1.1"
|
||||||
semver4j = "6.0.0"
|
semver4j = "6.0.0"
|
||||||
jsvg = "2.0.0"
|
jsvg = "2.0.0"
|
||||||
dom4j = "2.2.0"
|
dom4j = "2.2.0"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ project.version = "0.0.4"
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
implementation("com.qcloud:cos_api:5.6.260.1")
|
implementation("com.qcloud:cos_api:5.6.257")
|
||||||
compileOnly(project(":"))
|
compileOnly(project(":"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ project.version = "0.0.8"
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
compileOnly(project(":"))
|
compileOnly(project(":"))
|
||||||
implementation("com.fifesoft:rsyntaxtextarea:3.6.1")
|
implementation("com.fifesoft:rsyntaxtextarea:3.6.0")
|
||||||
implementation("com.fifesoft:languagesupport:3.4.0")
|
implementation("com.fifesoft:languagesupport:3.4.0")
|
||||||
implementation("com.fifesoft:autocomplete:3.3.2")
|
implementation("com.fifesoft:autocomplete:3.3.2")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ project.version = "0.0.2"
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
compileOnly(project(":"))
|
compileOnly(project(":"))
|
||||||
implementation("org.apache.commons:commons-pool2:2.13.0")
|
implementation("org.apache.commons:commons-pool2:2.12.1")
|
||||||
testImplementation(project(":"))
|
testImplementation(project(":"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ project.version = "0.0.8"
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
compileOnly(project(":"))
|
compileOnly(project(":"))
|
||||||
implementation("com.maxmind.geoip2:geoip2:5.0.0")
|
implementation("com.maxmind.geoip2:geoip2:4.4.0")
|
||||||
// https://github.com/hstyi/geolite2
|
// https://github.com/hstyi/geolite2
|
||||||
implementation("com.github.hstyi:geolite2:v1.0-202510270056")
|
implementation("com.github.hstyi:geolite2:v1.0-202510270056")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -547,7 +547,6 @@ class SettingsOptionsPane : OptionsPane() {
|
|||||||
|
|
||||||
rightClickComboBox.addItem("Copy")
|
rightClickComboBox.addItem("Copy")
|
||||||
rightClickComboBox.addItem("CopyAndPaste")
|
rightClickComboBox.addItem("CopyAndPaste")
|
||||||
rightClickComboBox.addItem("Nothing")
|
|
||||||
|
|
||||||
rightClickComboBox.selectedItem = terminalSetting.rightClick
|
rightClickComboBox.selectedItem = terminalSetting.rightClick
|
||||||
|
|
||||||
@@ -577,8 +576,6 @@ class SettingsOptionsPane : OptionsPane() {
|
|||||||
text = I18n.getString("termora.settings.terminal.right-click.copy")
|
text = I18n.getString("termora.settings.terminal.right-click.copy")
|
||||||
} else if (value == "CopyAndPaste") {
|
} else if (value == "CopyAndPaste") {
|
||||||
text = I18n.getString("termora.settings.terminal.right-click.copy-and-paste")
|
text = I18n.getString("termora.settings.terminal.right-click.copy-and-paste")
|
||||||
}else if (value == "Nothing") {
|
|
||||||
text = I18n.getString("termora.settings.terminal.right-click.nothing")
|
|
||||||
}
|
}
|
||||||
return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus)
|
return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,11 +67,6 @@ class PullService private constructor() : SyncService(), Disposable, Application
|
|||||||
private var lastChangeHash = StringUtils.EMPTY
|
private var lastChangeHash = StringUtils.EMPTY
|
||||||
|
|
||||||
private fun pullChanges() {
|
private fun pullChanges() {
|
||||||
|
|
||||||
if (accountManager.isLocally()) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val hash: String
|
val hash: String
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ class TerminalCopyAction : AnAction() {
|
|||||||
|
|
||||||
override fun actionPerformed(evt: AnActionEvent) {
|
override fun actionPerformed(evt: AnActionEvent) {
|
||||||
val terminalPanel = evt.getData(DataProviders.TerminalPanel) ?: return
|
val terminalPanel = evt.getData(DataProviders.TerminalPanel) ?: return
|
||||||
val selectionModel = terminalPanel.terminal.getSelectionModel()
|
|
||||||
if (!selectionModel.hasSelection()) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
val text = terminalPanel.copy()
|
val text = terminalPanel.copy()
|
||||||
val systemClipboard = terminalPanel.toolkit.systemClipboard
|
val systemClipboard = terminalPanel.toolkit.systemClipboard
|
||||||
|
|
||||||
@@ -57,4 +53,4 @@ class TerminalCopyAction : AnAction() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -27,14 +27,12 @@ class KeyboardInteractiveDialog(
|
|||||||
isModal = true
|
isModal = true
|
||||||
isResizable = true
|
isResizable = true
|
||||||
controlsVisible = false
|
controlsVisible = false
|
||||||
|
title = I18n.getString("termora.new-host.title")
|
||||||
|
|
||||||
init()
|
init()
|
||||||
pack()
|
pack()
|
||||||
size = Dimension(max(300, size.width), size.height)
|
size = Dimension(max(300, size.width), size.height)
|
||||||
|
|
||||||
// fix https://github.com/TermoraDev/termora/issues/1311
|
|
||||||
pack()
|
|
||||||
|
|
||||||
setLocationRelativeTo(null)
|
setLocationRelativeTo(null)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ class TerminalUserInteraction(
|
|||||||
)
|
)
|
||||||
dialog.setLocationRelativeTo(owner)
|
dialog.setLocationRelativeTo(owner)
|
||||||
dialog.title = instruction ?: name ?: "OTP"
|
dialog.title = instruction ?: name ?: "OTP"
|
||||||
dialog.title = StringUtils.defaultIfBlank(dialog.title, "OTP")
|
|
||||||
passwords[i] = dialog.getText()
|
passwords[i] = dialog.getText()
|
||||||
if (passwords[i].isBlank()) {
|
if (passwords[i].isBlank()) {
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ import kotlinx.coroutines.launch
|
|||||||
import org.apache.commons.io.FileUtils
|
import org.apache.commons.io.FileUtils
|
||||||
import org.apache.commons.io.IOUtils
|
import org.apache.commons.io.IOUtils
|
||||||
import org.apache.commons.lang3.StringUtils
|
import org.apache.commons.lang3.StringUtils
|
||||||
import org.apache.commons.lang3.Strings
|
|
||||||
import org.apache.commons.lang3.SystemUtils
|
|
||||||
import java.awt.datatransfer.DataFlavor
|
import java.awt.datatransfer.DataFlavor
|
||||||
import java.awt.datatransfer.StringSelection
|
import java.awt.datatransfer.StringSelection
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
@@ -66,15 +64,7 @@ internal class RDPProtocolProvider private constructor() : GenericProtocolProvid
|
|||||||
}
|
}
|
||||||
|
|
||||||
val sb = StringBuilder()
|
val sb = StringBuilder()
|
||||||
sb.append("full address:s:")
|
sb.append("full address:s:").append(host.host).append(':').append(host.port).appendLine()
|
||||||
if (SystemUtils.IS_OS_WINDOWS && Strings.CI.contains(host.host, ":")) {
|
|
||||||
var newHost = Strings.CI.removeStart(host.host, "[")
|
|
||||||
newHost = Strings.CI.removeEnd(newHost, "]")
|
|
||||||
sb.append('[').append(newHost).append(']')
|
|
||||||
} else {
|
|
||||||
sb.append(host.host)
|
|
||||||
}
|
|
||||||
sb.append(':').append(host.port).appendLine()
|
|
||||||
sb.append("username:s:").append(host.username).appendLine()
|
sb.append("username:s:").append(host.username).appendLine()
|
||||||
val desktop = host.options.extras["desktop"]
|
val desktop = host.options.extras["desktop"]
|
||||||
if (desktop.isNullOrBlank().not()) {
|
if (desktop.isNullOrBlank().not()) {
|
||||||
|
|||||||
@@ -332,12 +332,6 @@ class ControlSequenceIntroducerProcessor(terminal: Terminal, reader: TerminalRea
|
|||||||
var top = sr.getOrElse(0) { 1 }
|
var top = sr.getOrElse(0) { 1 }
|
||||||
var bottom = sr.getOrElse(1) { terminalModel.getRows() }
|
var bottom = sr.getOrElse(1) { terminalModel.getRows() }
|
||||||
|
|
||||||
// ";r" https://vt100.net/docs/vt510-rm/DECSTBM.html
|
|
||||||
if (sr.size == 1 && args.startsWith(';')) {
|
|
||||||
bottom = top
|
|
||||||
top = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bottom <= top) {
|
if (bottom <= top) {
|
||||||
if (log.isWarnEnabled) {
|
if (log.isWarnEnabled) {
|
||||||
log.warn("Set Scrolling Region Error. top: $top , bottom: $bottom")
|
log.warn("Set Scrolling Region Error. top: $top , bottom: $bottom")
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package app.termora.terminal.panel
|
package app.termora.terminal.panel
|
||||||
|
|
||||||
import app.termora.actions.TerminalCopyAction
|
|
||||||
import app.termora.keymap.KeyShortcut
|
import app.termora.keymap.KeyShortcut
|
||||||
import app.termora.keymap.KeymapManager
|
import app.termora.keymap.KeymapManager
|
||||||
import app.termora.plugin.internal.AltKeyModifier
|
import app.termora.plugin.internal.AltKeyModifier
|
||||||
@@ -72,7 +71,6 @@ class TerminalPanelKeyAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val keyStroke = KeyStroke.getKeyStrokeForEvent(e)
|
val keyStroke = KeyStroke.getKeyStrokeForEvent(e)
|
||||||
val keymapActions = activeKeymap.getActionIds(KeyShortcut(keyStroke))
|
|
||||||
for (action in terminalPanel.getTerminalActions()) {
|
for (action in terminalPanel.getTerminalActions()) {
|
||||||
if (action.test(keyStroke, e)) {
|
if (action.test(keyStroke, e)) {
|
||||||
action.actionPerformed(e)
|
action.actionPerformed(e)
|
||||||
@@ -106,9 +104,7 @@ class TerminalPanelKeyAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果命中了全局快捷键,那么不处理
|
// 如果命中了全局快捷键,那么不处理
|
||||||
val copyShortcutWithoutSelection =
|
if (keyStroke.modifiers != 0 && activeKeymap.getActionIds(KeyShortcut(keyStroke)).isNotEmpty()) {
|
||||||
keymapActions.contains(TerminalCopyAction.COPY) && terminal.getSelectionModel().hasSelection().not()
|
|
||||||
if (keyStroke.modifiers != 0 && keymapActions.isNotEmpty() && !copyShortcutWithoutSelection) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,4 +159,4 @@ class TerminalPanelKeyAdapter(
|
|||||||
return Character.toLowerCase(e.keyCode.toChar())
|
return Character.toLowerCase(e.keyCode.toChar())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -53,31 +53,30 @@ class TerminalPanelMouseSelectionAdapter(private val terminalPanel: TerminalPane
|
|||||||
if (SwingUtilities.isRightMouseButton(e)) {
|
if (SwingUtilities.isRightMouseButton(e)) {
|
||||||
// 如果有选中并且开启了选中复制,那么右键直接是粘贴
|
// 如果有选中并且开启了选中复制,那么右键直接是粘贴
|
||||||
if (selectionModel.hasSelection() && isSelectCopy.not()) {
|
if (selectionModel.hasSelection() && isSelectCopy.not()) {
|
||||||
if (rightClickMode != "Nothing") {
|
triggerCopyAction(
|
||||||
triggerCopyAction(
|
KeyEvent(
|
||||||
|
e.component,
|
||||||
|
KeyEvent.KEY_PRESSED,
|
||||||
|
e.`when`,
|
||||||
|
e.modifiersEx,
|
||||||
|
KeyEvent.VK_C,
|
||||||
|
'C'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (rightClickMode == "CopyAndPaste") {
|
||||||
|
triggerPasteAction(
|
||||||
KeyEvent(
|
KeyEvent(
|
||||||
e.component,
|
e.component,
|
||||||
KeyEvent.KEY_PRESSED,
|
KeyEvent.KEY_PRESSED,
|
||||||
e.`when`,
|
e.`when`,
|
||||||
e.modifiersEx,
|
e.modifiersEx,
|
||||||
KeyEvent.VK_C,
|
KeyEvent.VK_V,
|
||||||
'C'
|
'V'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (rightClickMode == "CopyAndPaste") {
|
|
||||||
triggerPasteAction(
|
|
||||||
KeyEvent(
|
|
||||||
e.component,
|
|
||||||
KeyEvent.KEY_PRESSED,
|
|
||||||
e.`when`,
|
|
||||||
e.modifiersEx,
|
|
||||||
KeyEvent.VK_V,
|
|
||||||
'V'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// paste
|
// paste
|
||||||
triggerPasteAction(
|
triggerPasteAction(
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ termora.settings.terminal.hyperlink=Hyperlink
|
|||||||
termora.settings.terminal.select-copy=Select copy
|
termora.settings.terminal.select-copy=Select copy
|
||||||
termora.settings.terminal.right-click=Right click
|
termora.settings.terminal.right-click=Right click
|
||||||
termora.settings.terminal.right-click.copy-and-paste=Copy and Paste
|
termora.settings.terminal.right-click.copy-and-paste=Copy and Paste
|
||||||
termora.settings.terminal.right-click.nothing=Nothing
|
|
||||||
termora.settings.terminal.right-click.copy=${termora.copy}
|
termora.settings.terminal.right-click.copy=${termora.copy}
|
||||||
termora.settings.terminal.cursor-style=Cursor type
|
termora.settings.terminal.cursor-style=Cursor type
|
||||||
termora.settings.terminal.cursor-blink=Cursor blink
|
termora.settings.terminal.cursor-blink=Cursor blink
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ termora.settings.terminal.hyperlink=Ссылки
|
|||||||
termora.settings.terminal.select-copy=Копировать выделенное
|
termora.settings.terminal.select-copy=Копировать выделенное
|
||||||
termora.settings.terminal.right-click=правой кнопкой мыши
|
termora.settings.terminal.right-click=правой кнопкой мыши
|
||||||
termora.settings.terminal.right-click.copy-and-paste=Копировать и вставить
|
termora.settings.terminal.right-click.copy-and-paste=Копировать и вставить
|
||||||
termora.settings.terminal.right-click.nothing=никто
|
|
||||||
termora.settings.terminal.cursor-style=Вид курсора
|
termora.settings.terminal.cursor-style=Вид курсора
|
||||||
termora.settings.terminal.cursor-blink=Мигать курсором
|
termora.settings.terminal.cursor-blink=Мигать курсором
|
||||||
termora.settings.terminal.local-shell=Локальный терминал
|
termora.settings.terminal.local-shell=Локальный терминал
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ termora.settings.terminal.hyperlink=超链接
|
|||||||
termora.settings.terminal.select-copy=选中复制
|
termora.settings.terminal.select-copy=选中复制
|
||||||
termora.settings.terminal.right-click=右键点击
|
termora.settings.terminal.right-click=右键点击
|
||||||
termora.settings.terminal.right-click.copy-and-paste=复制 & 粘贴
|
termora.settings.terminal.right-click.copy-and-paste=复制 & 粘贴
|
||||||
termora.settings.terminal.right-click.nothing=无操作
|
|
||||||
termora.settings.terminal.cursor-style=光标样式
|
termora.settings.terminal.cursor-style=光标样式
|
||||||
termora.settings.terminal.cursor-blink=光标闪烁
|
termora.settings.terminal.cursor-blink=光标闪烁
|
||||||
termora.settings.terminal.local-shell=本地终端
|
termora.settings.terminal.local-shell=本地终端
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ termora.settings.terminal.hyperlink=超連結
|
|||||||
termora.settings.terminal.select-copy=選取複製
|
termora.settings.terminal.select-copy=選取複製
|
||||||
termora.settings.terminal.right-click=右鍵點擊
|
termora.settings.terminal.right-click=右鍵點擊
|
||||||
termora.settings.terminal.right-click.copy-and-paste=複製 & 貼上
|
termora.settings.terminal.right-click.copy-and-paste=複製 & 貼上
|
||||||
termora.settings.terminal.right-click.nothing=無操作
|
|
||||||
termora.settings.terminal.cursor-style=遊標風格
|
termora.settings.terminal.cursor-style=遊標風格
|
||||||
termora.settings.terminal.cursor-blink=遊標閃爍
|
termora.settings.terminal.cursor-blink=遊標閃爍
|
||||||
termora.settings.terminal.local-shell=本地端
|
termora.settings.terminal.local-shell=本地端
|
||||||
|
|||||||
Reference in New Issue
Block a user