mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
terminal: refactor TerminalOptionsProvider
GitOrigin-RevId: 8d13ed2f5aae093ce3323234cb998784ac1a0464
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7f0fb04181
commit
2812f1101e
@@ -17,7 +17,7 @@ import java.util.concurrent.TimeUnit;
|
||||
public class JBTerminalSystemSettingsProvider extends JBTerminalSystemSettingsProviderBase {
|
||||
@Override
|
||||
public boolean shouldCloseTabOnLogout(TtyConnector ttyConnector) {
|
||||
return TerminalOptionsProvider.getInstance().closeSessionOnLogout();
|
||||
return TerminalOptionsProvider.getInstance().getCloseSessionOnLogout();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,22 +45,22 @@ public class JBTerminalSystemSettingsProvider extends JBTerminalSystemSettingsPr
|
||||
|
||||
@Override
|
||||
public boolean audibleBell() {
|
||||
return TerminalOptionsProvider.getInstance().audibleBell();
|
||||
return TerminalOptionsProvider.getInstance().getAudibleBell();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enableMouseReporting() {
|
||||
return TerminalOptionsProvider.getInstance().enableMouseReporting();
|
||||
return TerminalOptionsProvider.getInstance().getMouseReporting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean copyOnSelect() {
|
||||
return TerminalOptionsProvider.getInstance().copyOnSelection();
|
||||
return TerminalOptionsProvider.getInstance().getCopyOnSelection();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean pasteOnMiddleMouseClick() {
|
||||
return TerminalOptionsProvider.getInstance().pasteOnMiddleMouseButton();
|
||||
return TerminalOptionsProvider.getInstance().getPasteOnMiddleMouseButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,12 +70,12 @@ public class JBTerminalSystemSettingsProvider extends JBTerminalSystemSettingsPr
|
||||
|
||||
@Override
|
||||
public boolean overrideIdeShortcuts() {
|
||||
return TerminalOptionsProvider.getInstance().overrideIdeShortcuts();
|
||||
return TerminalOptionsProvider.getInstance().getOverrideIdeShortcuts();
|
||||
}
|
||||
|
||||
@Override
|
||||
public HyperlinkStyle.HighlightMode getHyperlinkHighlightingMode() {
|
||||
return TerminalOptionsProvider.getInstance().highlightHyperlinks()
|
||||
return TerminalOptionsProvider.getInstance().getHighlightHyperlinks()
|
||||
? HyperlinkStyle.HighlightMode.ALWAYS
|
||||
: HyperlinkStyle.HighlightMode.HOVER;
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner<PtyProcess
|
||||
*/
|
||||
public @NotNull List<String> getInitialCommand(@NotNull Map<String, String> envs) {
|
||||
String shellPath = getShellPath();
|
||||
return getCommand(shellPath, envs, TerminalOptionsProvider.getInstance().shellIntegration());
|
||||
return getCommand(shellPath, envs, TerminalOptionsProvider.getInstance().getShellIntegration());
|
||||
}
|
||||
|
||||
private @NotNull String getShellPath() {
|
||||
|
||||
@@ -2,64 +2,28 @@
|
||||
package org.jetbrains.plugins.terminal
|
||||
|
||||
import com.intellij.execution.configuration.EnvironmentVariablesData
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.*
|
||||
import com.intellij.openapi.components.PersistentStateComponent
|
||||
import com.intellij.openapi.components.State
|
||||
import com.intellij.openapi.components.Storage
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
import com.intellij.terminal.TerminalUiSettingsManager
|
||||
import org.jetbrains.annotations.Nls
|
||||
|
||||
@State(name = "TerminalOptionsProvider", presentableName = TerminalOptionsProvider.PresentableNameGetter::class,
|
||||
storages = [(Storage("terminal.xml", roamingType = RoamingType.DEFAULT))])
|
||||
storages = [Storage("terminal.xml")])
|
||||
class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider.State> {
|
||||
private var myState = State()
|
||||
private var state = State()
|
||||
|
||||
override fun getState(): State {
|
||||
return myState
|
||||
}
|
||||
override fun getState(): State = state
|
||||
|
||||
override fun loadState(state: State) {
|
||||
myState = state
|
||||
}
|
||||
|
||||
fun closeSessionOnLogout(): Boolean {
|
||||
return myState.myCloseSessionOnLogout
|
||||
}
|
||||
|
||||
fun enableMouseReporting(): Boolean {
|
||||
return myState.myReportMouse
|
||||
}
|
||||
|
||||
fun audibleBell(): Boolean {
|
||||
return myState.mySoundBell
|
||||
}
|
||||
|
||||
var tabName: String
|
||||
@Nls
|
||||
get() : String = myState.myTabName ?: TerminalBundle.message("local.terminal.default.name")
|
||||
set(@Nls tabName) {
|
||||
myState.myTabName = tabName
|
||||
}
|
||||
|
||||
fun overrideIdeShortcuts(): Boolean {
|
||||
return myState.myOverrideIdeShortcuts
|
||||
}
|
||||
|
||||
fun setOverrideIdeShortcuts(overrideIdeShortcuts: Boolean) {
|
||||
myState.myOverrideIdeShortcuts = overrideIdeShortcuts
|
||||
}
|
||||
|
||||
fun shellIntegration(): Boolean {
|
||||
return myState.myShellIntegration
|
||||
}
|
||||
|
||||
fun setShellIntegration(shellIntegration: Boolean) {
|
||||
myState.myShellIntegration = shellIntegration
|
||||
override fun loadState(newState: State) {
|
||||
state = newState
|
||||
}
|
||||
|
||||
class State {
|
||||
var myShellPath: String? = null
|
||||
@Nls
|
||||
var myTabName: String? = null
|
||||
var myTabName: @Nls String? = null
|
||||
var myCloseSessionOnLogout: Boolean = true
|
||||
var myReportMouse: Boolean = true
|
||||
var mySoundBell: Boolean = true
|
||||
@@ -71,62 +35,71 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
|
||||
var useOptionAsMetaKey: Boolean = false
|
||||
}
|
||||
|
||||
fun setCloseSessionOnLogout(closeSessionOnLogout: Boolean) {
|
||||
myState.myCloseSessionOnLogout = closeSessionOnLogout
|
||||
}
|
||||
|
||||
fun setReportMouse(reportMouse: Boolean) {
|
||||
myState.myReportMouse = reportMouse
|
||||
}
|
||||
|
||||
fun setSoundBell(soundBell: Boolean) {
|
||||
myState.mySoundBell = soundBell
|
||||
}
|
||||
|
||||
fun copyOnSelection(): Boolean {
|
||||
return myState.myCopyOnSelection
|
||||
}
|
||||
|
||||
fun setCopyOnSelection(copyOnSelection: Boolean) {
|
||||
myState.myCopyOnSelection = copyOnSelection
|
||||
}
|
||||
|
||||
fun pasteOnMiddleMouseButton(): Boolean {
|
||||
return myState.myPasteOnMiddleMouseButton
|
||||
}
|
||||
|
||||
fun setPasteOnMiddleMouseButton(pasteOnMiddleMouseButton: Boolean) {
|
||||
myState.myPasteOnMiddleMouseButton = pasteOnMiddleMouseButton
|
||||
}
|
||||
|
||||
fun highlightHyperlinks(): Boolean {
|
||||
return myState.myHighlightHyperlinks
|
||||
}
|
||||
|
||||
fun setHighlightHyperlinks(highlight: Boolean) {
|
||||
myState.myHighlightHyperlinks = highlight
|
||||
}
|
||||
|
||||
@Deprecated("To be removed", ReplaceWith("org.jetbrains.plugins.terminal.TerminalProjectOptionsProvider.getEnvData"))
|
||||
fun getEnvData(): EnvironmentVariablesData {
|
||||
return EnvironmentVariablesData.DEFAULT
|
||||
}
|
||||
|
||||
@Deprecated("To be removed", ReplaceWith("org.jetbrains.plugins.terminal.TerminalProjectOptionsProvider.setEnvData"))
|
||||
fun setEnvData(envData: EnvironmentVariablesData) {
|
||||
}
|
||||
|
||||
// Or replace with `var shellPath: String? by myState::myShellPath`, but `myState` must be `val` in this case
|
||||
// Nice property delegation (var shellPath: String? by state::myShellPath) cannot be used on `var` properties (KTIJ-19450)
|
||||
var shellPath: String?
|
||||
get() = myState.myShellPath
|
||||
get() = state.myShellPath
|
||||
set(value) {
|
||||
myState.myShellPath = value
|
||||
state.myShellPath = value
|
||||
}
|
||||
|
||||
var tabName: @Nls String
|
||||
get() = state.myTabName ?: TerminalBundle.message("local.terminal.default.name")
|
||||
set(@Nls tabName) {
|
||||
state.myTabName = tabName
|
||||
}
|
||||
|
||||
var closeSessionOnLogout: Boolean
|
||||
get() = state.myCloseSessionOnLogout
|
||||
set(value) {
|
||||
state.myCloseSessionOnLogout = value
|
||||
}
|
||||
|
||||
var mouseReporting: Boolean
|
||||
get() = state.myReportMouse
|
||||
set(value) {
|
||||
state.myReportMouse = value
|
||||
}
|
||||
|
||||
var audibleBell: Boolean
|
||||
get() = state.mySoundBell
|
||||
set(value) {
|
||||
state.mySoundBell = value
|
||||
}
|
||||
|
||||
var copyOnSelection: Boolean
|
||||
get() = state.myCopyOnSelection
|
||||
set(value) {
|
||||
state.myCopyOnSelection = value
|
||||
}
|
||||
|
||||
var pasteOnMiddleMouseButton: Boolean
|
||||
get() = state.myPasteOnMiddleMouseButton
|
||||
set(value) {
|
||||
state.myPasteOnMiddleMouseButton = value
|
||||
}
|
||||
|
||||
var overrideIdeShortcuts: Boolean
|
||||
get() = state.myOverrideIdeShortcuts
|
||||
set(value) {
|
||||
state.myOverrideIdeShortcuts = value
|
||||
}
|
||||
|
||||
var shellIntegration: Boolean
|
||||
get() = state.myShellIntegration
|
||||
set(value) {
|
||||
state.myShellIntegration = value
|
||||
}
|
||||
|
||||
var highlightHyperlinks: Boolean
|
||||
get() = state.myHighlightHyperlinks
|
||||
set(value) {
|
||||
state.myHighlightHyperlinks = value
|
||||
}
|
||||
|
||||
var useOptionAsMetaKey: Boolean
|
||||
get() = myState.useOptionAsMetaKey
|
||||
get() = state.useOptionAsMetaKey
|
||||
set(value) {
|
||||
myState.useOptionAsMetaKey = value
|
||||
state.useOptionAsMetaKey = value
|
||||
}
|
||||
|
||||
var cursorShape: TerminalUiSettingsManager.CursorShape
|
||||
@@ -135,10 +108,14 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
|
||||
service<TerminalUiSettingsManager>().cursorShape = value
|
||||
}
|
||||
|
||||
@Deprecated("To be removed", ReplaceWith("org.jetbrains.plugins.terminal.TerminalProjectOptionsProvider.setEnvData"))
|
||||
fun setEnvData(@Suppress("UNUSED_PARAMETER") envData: EnvironmentVariablesData) {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val instance: TerminalOptionsProvider
|
||||
@JvmStatic
|
||||
get() = ApplicationManager.getApplication().getService(TerminalOptionsProvider::class.java)
|
||||
get() = service()
|
||||
}
|
||||
|
||||
class PresentableNameGetter: com.intellij.openapi.components.State.NameGetter() {
|
||||
|
||||
@@ -153,14 +153,14 @@ public class TerminalSettingsPanel {
|
||||
return !Objects.equals(myShellPathField.getText(), myProjectOptionsProvider.getShellPath())
|
||||
|| !Objects.equals(myStartDirectoryField.getText(), StringUtil.notNullize(myProjectOptionsProvider.getStartingDirectory()))
|
||||
|| !Objects.equals(myTabNameTextField.getText(), myOptionsProvider.getTabName())
|
||||
|| (myCloseSessionCheckBox.isSelected() != myOptionsProvider.closeSessionOnLogout())
|
||||
|| (myMouseReportCheckBox.isSelected() != myOptionsProvider.enableMouseReporting())
|
||||
|| (mySoundBellCheckBox.isSelected() != myOptionsProvider.audibleBell())
|
||||
|| (myCopyOnSelectionCheckBox.isSelected() != myOptionsProvider.copyOnSelection())
|
||||
|| (myPasteOnMiddleButtonCheckBox.isSelected() != myOptionsProvider.pasteOnMiddleMouseButton())
|
||||
|| (myOverrideIdeShortcuts.isSelected() != myOptionsProvider.overrideIdeShortcuts())
|
||||
|| (myShellIntegration.isSelected() != myOptionsProvider.shellIntegration())
|
||||
|| (myHighlightHyperlinks.isSelected() != myOptionsProvider.highlightHyperlinks())
|
||||
|| (myCloseSessionCheckBox.isSelected() != myOptionsProvider.getCloseSessionOnLogout())
|
||||
|| (myMouseReportCheckBox.isSelected() != myOptionsProvider.getMouseReporting())
|
||||
|| (mySoundBellCheckBox.isSelected() != myOptionsProvider.getAudibleBell())
|
||||
|| (myCopyOnSelectionCheckBox.isSelected() != myOptionsProvider.getCopyOnSelection())
|
||||
|| (myPasteOnMiddleButtonCheckBox.isSelected() != myOptionsProvider.getPasteOnMiddleMouseButton())
|
||||
|| (myOverrideIdeShortcuts.isSelected() != myOptionsProvider.getOverrideIdeShortcuts())
|
||||
|| (myShellIntegration.isSelected() != myOptionsProvider.getShellIntegration())
|
||||
|| (myHighlightHyperlinks.isSelected() != myOptionsProvider.getHighlightHyperlinks())
|
||||
|| (myUseOptionAsMetaKey.isSelected() != myOptionsProvider.getUseOptionAsMetaKey())
|
||||
|| myConfigurables.stream().anyMatch(c -> c.isModified())
|
||||
|| !Comparing.equal(myEnvVarField.getData(), myProjectOptionsProvider.getEnvData())
|
||||
@@ -172,8 +172,8 @@ public class TerminalSettingsPanel {
|
||||
myProjectOptionsProvider.setShellPath(myShellPathField.getText());
|
||||
myOptionsProvider.setTabName(myTabNameTextField.getText());
|
||||
myOptionsProvider.setCloseSessionOnLogout(myCloseSessionCheckBox.isSelected());
|
||||
myOptionsProvider.setReportMouse(myMouseReportCheckBox.isSelected());
|
||||
myOptionsProvider.setSoundBell(mySoundBellCheckBox.isSelected());
|
||||
myOptionsProvider.setMouseReporting(myMouseReportCheckBox.isSelected());
|
||||
myOptionsProvider.setAudibleBell(mySoundBellCheckBox.isSelected());
|
||||
myOptionsProvider.setCopyOnSelection(myCopyOnSelectionCheckBox.isSelected());
|
||||
myOptionsProvider.setPasteOnMiddleMouseButton(myPasteOnMiddleButtonCheckBox.isSelected());
|
||||
myOptionsProvider.setOverrideIdeShortcuts(myOverrideIdeShortcuts.isSelected());
|
||||
@@ -196,14 +196,14 @@ public class TerminalSettingsPanel {
|
||||
myShellPathField.setText(myProjectOptionsProvider.getShellPath());
|
||||
myStartDirectoryField.setText(myProjectOptionsProvider.getStartingDirectory());
|
||||
myTabNameTextField.setText(myOptionsProvider.getTabName());
|
||||
myCloseSessionCheckBox.setSelected(myOptionsProvider.closeSessionOnLogout());
|
||||
myMouseReportCheckBox.setSelected(myOptionsProvider.enableMouseReporting());
|
||||
mySoundBellCheckBox.setSelected(myOptionsProvider.audibleBell());
|
||||
myCopyOnSelectionCheckBox.setSelected(myOptionsProvider.copyOnSelection());
|
||||
myPasteOnMiddleButtonCheckBox.setSelected(myOptionsProvider.pasteOnMiddleMouseButton());
|
||||
myOverrideIdeShortcuts.setSelected(myOptionsProvider.overrideIdeShortcuts());
|
||||
myShellIntegration.setSelected(myOptionsProvider.shellIntegration());
|
||||
myHighlightHyperlinks.setSelected(myOptionsProvider.highlightHyperlinks());
|
||||
myCloseSessionCheckBox.setSelected(myOptionsProvider.getCloseSessionOnLogout());
|
||||
myMouseReportCheckBox.setSelected(myOptionsProvider.getMouseReporting());
|
||||
mySoundBellCheckBox.setSelected(myOptionsProvider.getAudibleBell());
|
||||
myCopyOnSelectionCheckBox.setSelected(myOptionsProvider.getCopyOnSelection());
|
||||
myPasteOnMiddleButtonCheckBox.setSelected(myOptionsProvider.getPasteOnMiddleMouseButton());
|
||||
myOverrideIdeShortcuts.setSelected(myOptionsProvider.getOverrideIdeShortcuts());
|
||||
myShellIntegration.setSelected(myOptionsProvider.getShellIntegration());
|
||||
myHighlightHyperlinks.setSelected(myOptionsProvider.getHighlightHyperlinks());
|
||||
myUseOptionAsMetaKey.setSelected(myOptionsProvider.getUseOptionAsMetaKey());
|
||||
myConfigurables.forEach(c -> c.reset());
|
||||
myEnvVarField.setData(myProjectOptionsProvider.getEnvData());
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.plugins.terminal.ui;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.IdeCoreBundle;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -161,7 +160,7 @@ public class TerminalContainer {
|
||||
}
|
||||
|
||||
private void processSingleTerminalCompleted() {
|
||||
if (myForceHideUiWhenSessionEnds || TerminalOptionsProvider.getInstance().closeSessionOnLogout()) {
|
||||
if (myForceHideUiWhenSessionEnds || TerminalOptionsProvider.getInstance().getCloseSessionOnLogout()) {
|
||||
myTerminalView.closeTab(myContent);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -49,7 +49,7 @@ class PyVirtualEnvTerminalCustomizer : LocalTerminalCustomizer() {
|
||||
}
|
||||
|
||||
private fun isShellIntegrationAvailable(shellPath: String) : Boolean {
|
||||
if (TerminalOptionsProvider.instance.shellIntegration()) {
|
||||
if (TerminalOptionsProvider.instance.shellIntegration) {
|
||||
val shellName = File(shellPath).name
|
||||
return shellName == "bash" || (SystemInfo.isMac && shellName == "sh") || shellName == "zsh" || shellName == "fish"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user