From 988d2f8ee47e17ef328ba520876ff2412d2b54b4 Mon Sep 17 00:00:00 2001 From: Dustin Swan Date: Tue, 17 Feb 2026 21:08:44 -0700 Subject: [PATCH] keybindings to move windows left or right in the win list --- src/cg/10-os.cg | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/cg/10-os.cg b/src/cg/10-os.cg index c51dc09..3ccb020 100644 --- a/src/cg/10-os.cg +++ b/src/cg/10-os.cg @@ -183,6 +183,38 @@ os = newIndex = min (len osState.windows - 1) (osState.wm.focusedIndex + 1); { state = state, emit = [focusWindow newIndex] }; + handleMoveLeftEvent = state \ + idx = osState.wm.focusedIndex; + idx == 0 + | True \ { state = state, emit = [] } + | False \ ( + newIdx = idx - 1; + windows = osState.windows; + newWindows = [ + ...take newIdx windows, + nth idx windows ~ unwrapOr {}, + nth newIdx windows ~ unwrapOr {}, + ...drop (idx + 1) windows + ]; + { state = state, emit = [osState.windows := newWindows, focusWindow newIdx] } + ); + + handleMoveRightEvent = state \ + idx = osState.wm.focusedIndex; + idx == len osState.windows - 1 + | True \ { state = state, emit = [] } + | False \ ( + newIdx = idx + 1; + windows = osState.windows; + newWindows = [ + ...take idx windows, + nth newIdx windows ~ unwrapOr {}, + nth idx windows ~ unwrapOr {}, + ...drop (newIdx + 1) windows + ]; + { state = state, emit = [osState.windows := newWindows, focusWindow newIdx] } + ); + ui.stateful { key = "os", autoFocus = True, @@ -192,10 +224,19 @@ os = update = state event \ event | Key { key = "p", meta = True } \ { state = state, emit = [openPalette] } + + | Key { key = "ArrowLeft", meta = True, shift = True } \ handleMoveLeftEvent state + | Key { key = "h", meta = True, shift = True } \ handleMoveLeftEvent state + + | Key { key = "ArrowRight", meta = True, shift = True } \ handleMoveRightEvent state + | Key { key = "l", meta = True, shift = True } \ handleMoveRightEvent state + | Key { key = "ArrowLeft", meta = True } \ handleFocusLeftEvent state | Key { key = "h", meta = True } \ handleFocusLeftEvent state + | Key { key = "ArrowRight", meta = True } \ handleFocusRightEvent state | Key { key = "l", meta = True } \ handleFocusRightEvent state + | Key { key = "d", meta = True } \ { state = state, emit = [closeFocusedWindow 0] } | Key { key = "f", meta = True } \