terminal: refactor TerminalOptionsProvider

GitOrigin-RevId: 8d13ed2f5aae093ce3323234cb998784ac1a0464
This commit is contained in:
Sergey Simonchik
2021-12-31 00:43:34 +03:00
committed by intellij-monorepo-bot
parent 7f0fb04181
commit 2812f1101e
6 changed files with 102 additions and 126 deletions

View File

@@ -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;
}

View File

@@ -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() {

View File

@@ -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() {

View File

@@ -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());

View File

@@ -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 {

View File

@@ -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"
}