pane sync start != pane sync select

This commit is contained in:
2026-06-19 15:19:12 +02:00
parent 8bd8170270
commit 47b2daa782
5 changed files with 27 additions and 12 deletions

View File

@@ -170,7 +170,8 @@ next_tab = "ALT+SHIFT+L"
open_font_selector = "ALT+T" open_font_selector = "ALT+T"
open_scrollback = "ALT+S" open_scrollback = "ALT+S"
create_worktree = "ALT+W" create_worktree = "ALT+W"
pane_sync_select = "ALT+Y" pane_sync_start = "ALT+Y"
pane_sync_select = "SPACE"
pane_sync_commit = "ALT+SHIFT+Y" pane_sync_commit = "ALT+SHIFT+Y"
pane_sync_end = "ALT+U" pane_sync_end = "ALT+U"
paste = "CTRL+SHIFT+V" paste = "CTRL+SHIFT+V"
@@ -191,7 +192,8 @@ paste = "CTRL+SHIFT+V"
- `Alt+s`: open the active pane scrollback in `$EDITOR` - `Alt+s`: open the active pane scrollback in `$EDITOR`
- `Alt+w`: edit a worktree name, then run `git worktree add <relative_worktree_path>/<name>` - `Alt+w`: edit a worktree name, then run `git worktree add <relative_worktree_path>/<name>`
from the previously focused pane's working directory from the previously focused pane's working directory
- `Alt+y`: enter pane-sync selection mode and toggle the focused pane in the sync set - `Alt+y`: enter pane-sync selection mode
- `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 - `Alt+Shift+y`: commit the current pane-sync selection; input typed or pasted into any synced
pane is mirrored to the other synced panes pane is mirrored to the other synced panes
- `Alt+u`: end pane sync - `Alt+u`: end pane sync

View File

@@ -41,7 +41,8 @@ next_tab = "ALT+SHIFT+L"
open_font_selector = "ALT+T" open_font_selector = "ALT+T"
open_scrollback = "ALT+S" open_scrollback = "ALT+S"
create_worktree = "ALT+W" create_worktree = "ALT+W"
pane_sync_select = "ALT+Y" pane_sync_start = "ALT+Y"
pane_sync_select = "SPACE"
pane_sync_commit = "ALT+SHIFT+Y" pane_sync_commit = "ALT+SHIFT+Y"
pane_sync_end = "ALT+U" pane_sync_end = "ALT+U"
paste = "CTRL+SHIFT+V" paste = "CTRL+SHIFT+V"

View File

@@ -50,6 +50,7 @@ public record AppConfig(
"open_font_selector", "open_font_selector",
"open_scrollback", "open_scrollback",
"create_worktree", "create_worktree",
"pane_sync_start",
"pane_sync_select", "pane_sync_select",
"pane_sync_commit", "pane_sync_commit",
"pane_sync_end", "pane_sync_end",
@@ -119,7 +120,8 @@ public record AppConfig(
Map.entry("open_font_selector", KeyBinding.parse("ALT+T")), Map.entry("open_font_selector", KeyBinding.parse("ALT+T")),
Map.entry("open_scrollback", KeyBinding.parse("ALT+S")), Map.entry("open_scrollback", KeyBinding.parse("ALT+S")),
Map.entry("create_worktree", KeyBinding.parse("ALT+W")), Map.entry("create_worktree", KeyBinding.parse("ALT+W")),
Map.entry("pane_sync_select", KeyBinding.parse("ALT+Y")), Map.entry("pane_sync_start", 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_commit", KeyBinding.parse("ALT+SHIFT+Y")),
Map.entry("pane_sync_end", KeyBinding.parse("ALT+U")), Map.entry("pane_sync_end", KeyBinding.parse("ALT+U")),
Map.entry("paste", KeyBinding.parse("CTRL+SHIFT+V")) Map.entry("paste", KeyBinding.parse("CTRL+SHIFT+V"))

View File

@@ -144,14 +144,19 @@ public final class Compositor {
return paneSyncSelectMode; return paneSyncSelectMode;
} }
public void togglePaneSyncSelection() { public void startPaneSyncSelection() {
TerminalPane active = activePane(); if (activePane() == null || paneSyncSelectMode) {
if (active == null) {
return; return;
} }
if (!paneSyncSelectMode) {
paneSyncSelectMode = true; paneSyncSelectMode = true;
paneSyncSelection.clear(); paneSyncSelection.clear();
layoutVersion++;
}
public void togglePaneSyncSelection() {
TerminalPane active = activePane();
if (active == null || !paneSyncSelectMode) {
return;
} }
if (!paneSyncSelection.add(active)) { if (!paneSyncSelection.add(active)) {
paneSyncSelection.remove(active); paneSyncSelection.remove(active);

View File

@@ -72,6 +72,7 @@ final class TerminalWindow {
keyActions.put("open_font_selector", this::openFontSelector); keyActions.put("open_font_selector", this::openFontSelector);
keyActions.put("open_scrollback", this::openScrollbackInEditor); keyActions.put("open_scrollback", this::openScrollbackInEditor);
keyActions.put("create_worktree", this::createWorktreeInEditor); keyActions.put("create_worktree", this::createWorktreeInEditor);
keyActions.put("pane_sync_start", compositor::startPaneSyncSelection);
keyActions.put("pane_sync_select", compositor::togglePaneSyncSelection); keyActions.put("pane_sync_select", compositor::togglePaneSyncSelection);
keyActions.put("pane_sync_commit", compositor::commitPaneSyncSelection); keyActions.put("pane_sync_commit", compositor::commitPaneSyncSelection);
keyActions.put("pane_sync_end", compositor::endPaneSync); keyActions.put("pane_sync_end", compositor::endPaneSync);
@@ -134,8 +135,12 @@ final class TerminalWindow {
private void handlePressed(KeyEvent event) { private void handlePressed(KeyEvent event) {
for (Map.Entry<String, Runnable> action : keyActions.entrySet()) { for (Map.Entry<String, Runnable> action : keyActions.entrySet()) {
if (config.keybindings().get(action.getKey()).matches(event)) { String actionName = action.getKey();
if (compositor.isPaneSyncSelecting() && !allowedDuringPaneSyncSelection(action.getKey())) { if (config.keybindings().get(actionName).matches(event)) {
if (actionName.equals("pane_sync_select") && !compositor.isPaneSyncSelecting()) {
continue;
}
if (compositor.isPaneSyncSelecting() && !allowedDuringPaneSyncSelection(actionName)) {
event.consume(); event.consume();
return; return;
} }