diff --git a/src/main/java/com/gregor/jprototerm/Compositor.java b/src/main/java/com/gregor/jprototerm/Compositor.java index 6a57cea..69e25b6 100644 --- a/src/main/java/com/gregor/jprototerm/Compositor.java +++ b/src/main/java/com/gregor/jprototerm/Compositor.java @@ -113,6 +113,16 @@ public final class Compositor { layoutVersion++; } + /** Opens a new floating pane, makes it active, and returns it (null when no tab exists). */ + public TerminalPane openFloatingPane() { + if (isEmpty()) { + return null; + } + TerminalPane pane = currentTab().createFloatingPane(); + layoutVersion++; + return pane; + } + public void nextFloatingPane() { if (isEmpty()) { return; diff --git a/src/main/java/com/gregor/jprototerm/Main.java b/src/main/java/com/gregor/jprototerm/Main.java index 1b38207..0e7779a 100644 --- a/src/main/java/com/gregor/jprototerm/Main.java +++ b/src/main/java/com/gregor/jprototerm/Main.java @@ -167,11 +167,16 @@ public final class Main extends Application { private void openScrollbackInEditor() { try { + // Capture the active pane's scrollback before opening the floating pane, since that + // makes the new pane active. Path file = Files.createTempFile("jprototerm-scrollback-", ".txt"); Files.writeString(file, compositor.activePane().scrollbackText()); file.toFile().deleteOnExit(); - compositor.activePane().send(scrollbackEditorCommand(file) + "\r"); + TerminalPane pane = compositor.openFloatingPane(); + if (pane != null) { + pane.send(scrollbackEditorCommand(file) + "\r"); + } } catch (IOException ex) { System.err.println("Could not open scrollback in editor: " + ex.getMessage()); } diff --git a/src/main/java/com/gregor/jprototerm/Tab.java b/src/main/java/com/gregor/jprototerm/Tab.java index 4a8146e..1f5c66d 100644 --- a/src/main/java/com/gregor/jprototerm/Tab.java +++ b/src/main/java/com/gregor/jprototerm/Tab.java @@ -257,11 +257,12 @@ final class Tab implements AutoCloseable { } } - private void createFloatingPane() { + TerminalPane createFloatingPane() { TerminalPane pane = openPane(true); floating.add(pane); floatingVisible = true; setActive(pane); + return pane; } private boolean navigateFloatingStack(Direction direction) {