mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix closing tab on session end. Fix popup for editor terminal tabs.
This commit is contained in:
@@ -195,7 +195,7 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget {
|
||||
|
||||
private TabInfo createTabInfo(String name, JediTermWidget terminal) {
|
||||
return new TabInfo(terminal).setText(name).setDragOutDelegate(myDragDelegate)
|
||||
.setObject(new TerminalSessionVirtualFileImpl(name, terminal));
|
||||
.setObject(new TerminalSessionVirtualFileImpl(name, terminal, mySettingsProvider));
|
||||
}
|
||||
|
||||
public String getTitleAt(int i) {
|
||||
|
||||
@@ -15,31 +15,83 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.terminal.vfs;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.codeHighlighting.BackgroundEditorHighlighter;
|
||||
import com.intellij.ide.structureView.StructureViewBuilder;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorLocation;
|
||||
import com.intellij.openapi.fileEditor.FileEditorState;
|
||||
import com.intellij.openapi.fileEditor.FileEditorStateLevel;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
|
||||
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.jediterm.terminal.TtyConnectorWaitFor;
|
||||
import com.jediterm.terminal.ui.TerminalAction;
|
||||
import com.jediterm.terminal.ui.TerminalActionProviderBase;
|
||||
import com.jediterm.terminal.ui.settings.TabbedSettingsProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
*/
|
||||
public class TerminalSessionEditor extends UserDataHolderBase implements FileEditor {
|
||||
|
||||
private Project myProject;
|
||||
private final TerminalSessionVirtualFileImpl myFile;
|
||||
private final TtyConnectorWaitFor myWaitFor;
|
||||
|
||||
public TerminalSessionEditor(@NotNull TerminalSessionVirtualFileImpl terminalFile) {
|
||||
public TerminalSessionEditor(Project project, @NotNull TerminalSessionVirtualFileImpl terminalFile) {
|
||||
myProject = project;
|
||||
myFile = terminalFile;
|
||||
|
||||
final TabbedSettingsProvider settings = myFile.getSettingsProvider();
|
||||
|
||||
myFile.getTerminal().setNextProvider(new TerminalActionProviderBase() {
|
||||
@Override
|
||||
public List<TerminalAction> getActions() {
|
||||
return Lists.newArrayList(
|
||||
new TerminalAction("Close Session", settings.getCloseSessionKeyStrokes(), new Predicate<KeyEvent>() {
|
||||
@Override
|
||||
public boolean apply(KeyEvent input) {
|
||||
handleCloseSession();
|
||||
return true;
|
||||
}
|
||||
}).withMnemonicKey(KeyEvent.VK_S)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
myWaitFor = new TtyConnectorWaitFor(myFile.getTerminal().getTtyConnector(), Executors.newSingleThreadExecutor());
|
||||
|
||||
myWaitFor
|
||||
.setTerminationCallback(new Predicate<Integer>() {
|
||||
@Override
|
||||
public boolean apply(Integer integer) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FileEditorManagerEx.getInstanceEx(myProject).closeFile(myFile);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void handleCloseSession() {
|
||||
myFile.getTerminal().close();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
@@ -121,6 +173,7 @@ public class TerminalSessionEditor extends UserDataHolderBase implements FileEdi
|
||||
@Override
|
||||
public void dispose() {
|
||||
Boolean closingToReopen = myFile.getUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN);
|
||||
myWaitFor.detach();
|
||||
if (closingToReopen == null || !closingToReopen) {
|
||||
myFile.getTerminal().close();
|
||||
}
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ public class TerminalSessionEditorProvider implements FileEditorProvider, DumbAw
|
||||
@NotNull
|
||||
@Override
|
||||
public FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile file) {
|
||||
return new TerminalSessionEditor((TerminalSessionVirtualFileImpl)file);
|
||||
return new TerminalSessionEditor(project, (TerminalSessionVirtualFileImpl)file);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+9
-2
@@ -21,6 +21,7 @@ package org.jetbrains.plugins.terminal.vfs;
|
||||
|
||||
import com.intellij.testFramework.LightVirtualFile;
|
||||
import com.jediterm.terminal.ui.JediTermWidget;
|
||||
import com.jediterm.terminal.ui.settings.TabbedSettingsProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -28,12 +29,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public class TerminalSessionVirtualFileImpl extends LightVirtualFile {
|
||||
private final JediTermWidget myTerminal;
|
||||
private TabbedSettingsProvider mySettingsProvider;
|
||||
|
||||
private final String myName;
|
||||
|
||||
public TerminalSessionVirtualFileImpl(String name, JediTermWidget terminal) {
|
||||
|
||||
public TerminalSessionVirtualFileImpl(String name, JediTermWidget terminal, TabbedSettingsProvider settingsProvider) {
|
||||
myName = name;
|
||||
myTerminal = terminal;
|
||||
mySettingsProvider = settingsProvider;
|
||||
setFileType(TerminalSessionFileType.INSTANCE);
|
||||
setWritable(true);
|
||||
}
|
||||
@@ -46,4 +49,8 @@ public class TerminalSessionVirtualFileImpl extends LightVirtualFile {
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public TabbedSettingsProvider getSettingsProvider() {
|
||||
return mySettingsProvider;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user