panesync start + panesync end = panesync toggle

This commit is contained in:
2026-06-19 15:21:59 +02:00
parent 47b2daa782
commit a6a700b2c0
5 changed files with 17 additions and 26 deletions

View File

@@ -50,10 +50,9 @@ public record AppConfig(
"open_font_selector",
"open_scrollback",
"create_worktree",
"pane_sync_start",
"pane_sync_toggle",
"pane_sync_select",
"pane_sync_commit",
"pane_sync_end",
"paste"
);
@@ -120,10 +119,9 @@ public record AppConfig(
Map.entry("open_font_selector", KeyBinding.parse("ALT+T")),
Map.entry("open_scrollback", KeyBinding.parse("ALT+S")),
Map.entry("create_worktree", KeyBinding.parse("ALT+W")),
Map.entry("pane_sync_start", KeyBinding.parse("ALT+Y")),
Map.entry("pane_sync_toggle", KeyBinding.parse("ALT+Y")),
Map.entry("pane_sync_select", KeyBinding.parse("SPACE")),
Map.entry("pane_sync_commit", KeyBinding.parse("ALT+SHIFT+Y")),
Map.entry("pane_sync_end", KeyBinding.parse("ALT+U")),
Map.entry("paste", KeyBinding.parse("CTRL+SHIFT+V"))
)
);

View File

@@ -144,8 +144,15 @@ public final class Compositor {
return paneSyncSelectMode;
}
public void startPaneSyncSelection() {
if (activePane() == null || paneSyncSelectMode) {
public void togglePaneSync() {
if (paneSyncSelectMode || !paneSyncPanes.isEmpty()) {
paneSyncSelectMode = false;
paneSyncSelection.clear();
paneSyncPanes.clear();
layoutVersion++;
return;
}
if (activePane() == null) {
return;
}
paneSyncSelectMode = true;
@@ -176,16 +183,6 @@ public final class Compositor {
layoutVersion++;
}
public void endPaneSync() {
if (!paneSyncSelectMode && paneSyncSelection.isEmpty() && paneSyncPanes.isEmpty()) {
return;
}
paneSyncSelectMode = false;
paneSyncSelection.clear();
paneSyncPanes.clear();
layoutVersion++;
}
public List<TerminalPane> paneSyncPeers(TerminalPane source) {
prunePaneSyncState();
if (source == null || !paneSyncPanes.contains(source)) {

View File

@@ -72,10 +72,9 @@ final class TerminalWindow {
keyActions.put("open_font_selector", this::openFontSelector);
keyActions.put("open_scrollback", this::openScrollbackInEditor);
keyActions.put("create_worktree", this::createWorktreeInEditor);
keyActions.put("pane_sync_start", compositor::startPaneSyncSelection);
keyActions.put("pane_sync_toggle", compositor::togglePaneSync);
keyActions.put("pane_sync_select", compositor::togglePaneSyncSelection);
keyActions.put("pane_sync_commit", compositor::commitPaneSyncSelection);
keyActions.put("pane_sync_end", compositor::endPaneSync);
keyActions.put("paste", this::pasteFromClipboard);
StackPane root = new StackPane(compositor.canvas(), compositor.imageOverlay());
@@ -169,9 +168,9 @@ final class TerminalWindow {
"next_floating",
"previous_tab",
"next_tab",
"pane_sync_toggle",
"pane_sync_select",
"pane_sync_commit",
"pane_sync_end" -> true;
"pane_sync_commit" -> true;
default -> false;
};
}