diff --git a/src/main/kotlin/app/termora/Database.kt b/src/main/kotlin/app/termora/Database.kt index 0715404..8e9e09b 100644 --- a/src/main/kotlin/app/termora/Database.kt +++ b/src/main/kotlin/app/termora/Database.kt @@ -523,6 +523,11 @@ class Database private constructor(private val env: Environment) : Disposable { */ var beep by BooleanPropertyDelegate(true) + /** + * 超链接 + */ + var hyperlink by BooleanPropertyDelegate(true) + /** * 光标闪烁 */ diff --git a/src/main/kotlin/app/termora/SettingsOptionsPane.kt b/src/main/kotlin/app/termora/SettingsOptionsPane.kt index 4a0427c..a9ad64f 100644 --- a/src/main/kotlin/app/termora/SettingsOptionsPane.kt +++ b/src/main/kotlin/app/termora/SettingsOptionsPane.kt @@ -422,6 +422,7 @@ class SettingsOptionsPane : OptionsPane() { private val selectCopyComboBox = YesOrNoComboBox() private val autoCloseTabComboBox = YesOrNoComboBox() private val floatingToolbarComboBox = YesOrNoComboBox() + private val hyperlinkComboBox = YesOrNoComboBox() init { initView() @@ -499,6 +500,13 @@ class SettingsOptionsPane : OptionsPane() { } } + hyperlinkComboBox.addItemListener { e -> + if (e.stateChange == ItemEvent.SELECTED) { + terminalSetting.hyperlink = hyperlinkComboBox.selectedItem as Boolean + TerminalPanelFactory.getInstance().repaintAll() + } + } + cursorBlinkComboBox.addItemListener { e -> if (e.stateChange == ItemEvent.SELECTED) { terminalSetting.cursorBlink = cursorBlinkComboBox.selectedItem as Boolean @@ -591,6 +599,7 @@ class SettingsOptionsPane : OptionsPane() { fontComboBox.selectedItem = terminalSetting.font debugComboBox.selectedItem = terminalSetting.debug beepComboBox.selectedItem = terminalSetting.beep + hyperlinkComboBox.selectedItem = terminalSetting.hyperlink cursorBlinkComboBox.selectedItem = terminalSetting.cursorBlink cursorStyleComboBox.selectedItem = terminalSetting.cursor selectCopyComboBox.selectedItem = terminalSetting.selectCopy @@ -613,7 +622,7 @@ class SettingsOptionsPane : OptionsPane() { private fun getCenterComponent(): JComponent { val layout = FormLayout( "left:pref, $formMargin, default:grow, $formMargin, left:pref, $formMargin, pref, default:grow", - "pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref" + "pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref" ) val beepBtn = JButton(Icons.run) @@ -636,6 +645,8 @@ class SettingsOptionsPane : OptionsPane() { .add("${I18n.getString("termora.settings.terminal.beep")}:").xy(1, rows) .add(beepComboBox).xy(3, rows) .add(beepBtn).xy(5, rows).apply { rows += step } + .add("${I18n.getString("termora.settings.terminal.hyperlink")}:").xy(1, rows) + .add(hyperlinkComboBox).xy(3, rows).apply { rows += step } .add("${I18n.getString("termora.settings.terminal.select-copy")}:").xy(1, rows) .add(selectCopyComboBox).xy(3, rows).apply { rows += step } .add("${I18n.getString("termora.settings.terminal.cursor-style")}:").xy(1, rows) diff --git a/src/main/kotlin/app/termora/terminal/panel/TerminalHyperlinkPaintListener.kt b/src/main/kotlin/app/termora/terminal/panel/TerminalHyperlinkPaintListener.kt index 22f76ca..89983fd 100644 --- a/src/main/kotlin/app/termora/terminal/panel/TerminalHyperlinkPaintListener.kt +++ b/src/main/kotlin/app/termora/terminal/panel/TerminalHyperlinkPaintListener.kt @@ -2,6 +2,7 @@ package app.termora.terminal.panel import app.termora.Application import app.termora.ApplicationScope +import app.termora.Database import app.termora.terminal.* import java.awt.Graphics import java.net.URI @@ -16,6 +17,7 @@ class TerminalHyperlinkPaintListener private constructor() : TerminalPaintListen } private val regex = Regex("https?://\\S*[^.\\s'\",()<>\\[\\]]") + private val isEnableHyperlink get() = Database.getDatabase().terminal.hyperlink override fun before( offset: Int, @@ -25,6 +27,9 @@ class TerminalHyperlinkPaintListener private constructor() : TerminalPaintListen terminalDisplay: TerminalDisplay, terminal: Terminal ) { + + if (isEnableHyperlink.not()) return + val document = terminal.getDocument() var startOffset = offset var endOffset = startOffset + count @@ -91,4 +96,18 @@ class TerminalHyperlinkPaintListener private constructor() : TerminalPaintListen } } + override fun after( + offset: Int, + count: Int, + g: Graphics, + terminalPanel: TerminalPanel, + terminalDisplay: TerminalDisplay, + terminal: Terminal + ) { + if (isEnableHyperlink.not()) { + // 删除之前的 + terminal.getMarkupModel().removeAllHighlighters(Highlighter.HYPERLINK) + } + } + } \ No newline at end of file diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 990dc2f..75066d6 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -73,6 +73,7 @@ termora.settings.terminal.size=Size termora.settings.terminal.max-rows=Max rows termora.settings.terminal.debug=Debug mode termora.settings.terminal.beep=Beep +termora.settings.terminal.hyperlink=Hyperlink termora.settings.terminal.select-copy=Select copy termora.settings.terminal.cursor-style=Cursor type termora.settings.terminal.cursor-blink=Cursor blink diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index cc2bdfa..47057a6 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -77,6 +77,7 @@ termora.settings.terminal.size=大小 termora.settings.terminal.max-rows=最大行数 termora.settings.terminal.debug=调试模式 termora.settings.terminal.beep=蜂鸣声 +termora.settings.terminal.hyperlink=超链接 termora.settings.terminal.select-copy=选中复制 termora.settings.terminal.cursor-style=光标样式 termora.settings.terminal.cursor-blink=光标闪烁 diff --git a/src/main/resources/i18n/messages_zh_TW.properties b/src/main/resources/i18n/messages_zh_TW.properties index 433e42f..bd42246 100644 --- a/src/main/resources/i18n/messages_zh_TW.properties +++ b/src/main/resources/i18n/messages_zh_TW.properties @@ -88,7 +88,8 @@ termora.settings.terminal.font=字體 termora.settings.terminal.size=大小 termora.settings.terminal.max-rows=最大行數 termora.settings.terminal.debug=偵錯模式 -termora.settings.terminal.beep=蜂鳴聲 +termora.settings.terminal.beep=超連結 +termora.settings.terminal.hyperlink=Hyperlink termora.settings.terminal.select-copy=選取複製 termora.settings.terminal.cursor-style=遊標風格 termora.settings.terminal.cursor-blink=遊標閃爍