diff --git a/README.md b/README.md index 904a7c7..26bf827 100644 --- a/README.md +++ b/README.md @@ -170,10 +170,9 @@ next_tab = "ALT+SHIFT+L" open_font_selector = "ALT+T" open_scrollback = "ALT+S" create_worktree = "ALT+W" -pane_sync_start = "ALT+Y" +pane_sync_toggle = "ALT+Y" pane_sync_select = "SPACE" pane_sync_commit = "ALT+SHIFT+Y" -pane_sync_end = "ALT+U" paste = "CTRL+SHIFT+V" ``` @@ -192,11 +191,10 @@ paste = "CTRL+SHIFT+V" - `Alt+s`: open the active pane scrollback in `$EDITOR` - `Alt+w`: edit a worktree name, then run `git worktree add /` from the previously focused pane's working directory -- `Alt+y`: enter pane-sync selection mode +- `Alt+y`: enter pane-sync selection mode, cancel selection mode, or stop an active pane sync - `Space`: toggle the focused pane in the sync set while pane-sync selection mode is active - `Alt+Shift+y`: commit the current pane-sync selection; input typed or pasted into any synced pane is mirrored to the other synced panes -- `Alt+u`: end pane sync - `Ctrl+Shift+v`: paste - Font default: `JetBrainsMono Nerd Font` - Kitty graphics protocol parsing is enabled by default diff --git a/config.example.toml b/config.example.toml index ddde5f3..e1a0211 100644 --- a/config.example.toml +++ b/config.example.toml @@ -41,8 +41,7 @@ next_tab = "ALT+SHIFT+L" open_font_selector = "ALT+T" open_scrollback = "ALT+S" create_worktree = "ALT+W" -pane_sync_start = "ALT+Y" +pane_sync_toggle = "ALT+Y" pane_sync_select = "SPACE" pane_sync_commit = "ALT+SHIFT+Y" -pane_sync_end = "ALT+U" paste = "CTRL+SHIFT+V" diff --git a/src/main/java/com/gregor/jprototerm/AppConfig.java b/src/main/java/com/gregor/jprototerm/AppConfig.java index 6e1e3b3..016e2ad 100644 --- a/src/main/java/com/gregor/jprototerm/AppConfig.java +++ b/src/main/java/com/gregor/jprototerm/AppConfig.java @@ -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")) ) ); diff --git a/src/main/java/com/gregor/jprototerm/Compositor.java b/src/main/java/com/gregor/jprototerm/Compositor.java index 694571c..c16f310 100644 --- a/src/main/java/com/gregor/jprototerm/Compositor.java +++ b/src/main/java/com/gregor/jprototerm/Compositor.java @@ -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 paneSyncPeers(TerminalPane source) { prunePaneSyncState(); if (source == null || !paneSyncPanes.contains(source)) { diff --git a/src/main/java/com/gregor/jprototerm/TerminalWindow.java b/src/main/java/com/gregor/jprototerm/TerminalWindow.java index 25adc8d..ffea88d 100644 --- a/src/main/java/com/gregor/jprototerm/TerminalWindow.java +++ b/src/main/java/com/gregor/jprototerm/TerminalWindow.java @@ -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; }; }