From 1894b055f7c72acdd6c66fb8f5c7912e4eedb415 Mon Sep 17 00:00:00 2001 From: Peter Fajdiga Date: Tue, 15 Aug 2023 17:07:48 +0200 Subject: [PATCH] create Actions module --- src/actions.ts | 580 +++++++++++++++++++------------------- src/keyBindings/loader.ts | 8 +- 2 files changed, 295 insertions(+), 293 deletions(-) diff --git a/src/actions.ts b/src/actions.ts index 0e0070e..a250dc4 100644 --- a/src/actions.ts +++ b/src/actions.ts @@ -1,321 +1,323 @@ -function initActions(world: World) { - return { - focusLeft: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const prevColumn = grid.getPrevColumn(column); - if (prevColumn === null) { - return; - } - prevColumn.focus(); - }); - }, - - focusRight: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const nextColumn = grid.getNextColumn(column); - if (nextColumn === null) { - return; - } - nextColumn.focus(); - }); - }, - - focusUp: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const prevWindow = column.getPrevWindow(window); - if (prevWindow === null) { - return; - } - prevWindow.focus(); - }); - }, - - focusDown: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const nextWindow = column.getNextWindow(window); - if (nextWindow === null) { - return; - } - nextWindow.focus(); - }); - }, - - focusStart: () => { - const grid = world.getCurrentGrid(); - const firstColumn = grid.getFirstColumn(); - if (firstColumn === null) { - return; - } - firstColumn.focus(); - grid.container.arrange(); - }, - - focusEnd: () => { - const grid = world.getCurrentGrid(); - const lastColumn = grid.getLastColumn(); - if (lastColumn === null) { - return; - } - lastColumn.focus(); - grid.container.arrange(); - }, - - windowMoveLeft: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - if (column.getWindowCount() === 1) { - // move from own column into existing column +module Actions { + export function init(world: World) { + return { + focusLeft: () => { + world.doIfTiledFocused(true, (window, column, grid) => { const prevColumn = grid.getPrevColumn(column); if (prevColumn === null) { return; } - window.moveToColumn(prevColumn); - grid.container.onGridReordered(); - } else { - // move from shared column into own column - const newColumn = new Column(grid, grid.getPrevColumn(column)); - window.moveToColumn(newColumn); - } - grid.container.arrange(); - }); - }, + prevColumn.focus(); + }); + }, - windowMoveRight: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - if (column.getWindowCount() === 1) { - // move from own column into existing column + focusRight: () => { + world.doIfTiledFocused(true, (window, column, grid) => { const nextColumn = grid.getNextColumn(column); if (nextColumn === null) { return; } - window.moveToColumn(nextColumn); - grid.container.onGridReordered(); - } else { - // move from shared column into own column - const newColumn = new Column(grid, column); - window.moveToColumn(newColumn); + nextColumn.focus(); + }); + }, + + focusUp: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + const prevWindow = column.getPrevWindow(window); + if (prevWindow === null) { + return; + } + prevWindow.focus(); + }); + }, + + focusDown: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + const nextWindow = column.getNextWindow(window); + if (nextWindow === null) { + return; + } + nextWindow.focus(); + }); + }, + + focusStart: () => { + const grid = world.getCurrentGrid(); + const firstColumn = grid.getFirstColumn(); + if (firstColumn === null) { + return; } + firstColumn.focus(); grid.container.arrange(); - }); - }, + }, - windowMoveUp: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - column.moveWindowUp(window); - grid.container.arrange(); // TODO (optimization): only arrange moved windows - }); - }, - - windowMoveDown: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - column.moveWindowDown(window); - grid.container.arrange(); // TODO (optimization): only arrange moved windows - }); - }, - - windowMoveStart: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const newColumn = new Column(grid, null); - window.moveToColumn(newColumn); + focusEnd: () => { + const grid = world.getCurrentGrid(); + const lastColumn = grid.getLastColumn(); + if (lastColumn === null) { + return; + } + lastColumn.focus(); grid.container.arrange(); - }); - }, + }, - windowMoveEnd: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - const newColumn = new Column(grid, grid.getLastColumn()); - window.moveToColumn(newColumn); + windowMoveLeft: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + if (column.getWindowCount() === 1) { + // move from own column into existing column + const prevColumn = grid.getPrevColumn(column); + if (prevColumn === null) { + return; + } + window.moveToColumn(prevColumn); + grid.container.onGridReordered(); + } else { + // move from shared column into own column + const newColumn = new Column(grid, grid.getPrevColumn(column)); + window.moveToColumn(newColumn); + } + grid.container.arrange(); + }); + }, + + windowMoveRight: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + if (column.getWindowCount() === 1) { + // move from own column into existing column + const nextColumn = grid.getNextColumn(column); + if (nextColumn === null) { + return; + } + window.moveToColumn(nextColumn); + grid.container.onGridReordered(); + } else { + // move from shared column into own column + const newColumn = new Column(grid, column); + window.moveToColumn(newColumn); + } + grid.container.arrange(); + }); + }, + + windowMoveUp: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + column.moveWindowUp(window); + grid.container.arrange(); // TODO (optimization): only arrange moved windows + }); + }, + + windowMoveDown: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + column.moveWindowDown(window); + grid.container.arrange(); // TODO (optimization): only arrange moved windows + }); + }, + + windowMoveStart: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + const newColumn = new Column(grid, null); + window.moveToColumn(newColumn); + grid.container.arrange(); + }); + }, + + windowMoveEnd: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + const newColumn = new Column(grid, grid.getLastColumn()); + window.moveToColumn(newColumn); + grid.container.arrange(); + }); + }, + + windowToggleFloating: () => { + const kwinClient = workspace.activeClient; + world.toggleFloatingClient(kwinClient); + }, + + columnMoveLeft: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + grid.moveColumnLeft(column); + grid.container.arrange(); + }); + }, + + columnMoveRight: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + grid.moveColumnRight(column); + grid.container.arrange(); + }); + }, + + columnMoveStart: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + column.moveAfter(null); + grid.container.arrange(); + }); + }, + + columnMoveEnd: () => { + world.doIfTiledFocused(true, (window, column, grid) => { + column.moveAfter(grid.getLastColumn()); + grid.container.arrange(); + }); + }, + + columnToggleStacked: () => { + world.doIfTiledFocused(false, (window, column, grid) => { + column.toggleStacked(); + grid.container.arrange(); + }); + }, + + columnWidthIncrease: () => { + world.doIfTiledFocused(false, (window, column, grid) => { + grid.increaseColumnWidth(column); + grid.container.arrange(); + }); + }, + + columnWidthDecrease: () => { + world.doIfTiledFocused(false, (window, column, grid) => { + grid.decreaseColumnWidth(column); + grid.container.arrange(); + }); + }, + + gridScrollStart: () => { + const grid = world.getCurrentGrid(); + const firstColumn = grid.getFirstColumn(); + if (firstColumn === null) { + return; + } + grid.container.scrollToColumn(firstColumn); grid.container.arrange(); - }); - }, + }, - windowToggleFloating: () => { - const kwinClient = workspace.activeClient; - world.toggleFloatingClient(kwinClient); - }, - - columnMoveLeft: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - grid.moveColumnLeft(column); + gridScrollEnd: () => { + const grid = world.getCurrentGrid(); + const lastColumn = grid.getLastColumn(); + if (lastColumn === null) { + return; + } + grid.container.scrollToColumn(lastColumn); grid.container.arrange(); - }); - }, + }, - columnMoveRight: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - grid.moveColumnRight(column); + gridScrollFocused: () => { + const focusedWindow = world.getFocusedWindow(); + if (focusedWindow === null) { + return; + } + const column = focusedWindow.column; + const grid = column.grid; + grid.container.scrollCenterColumn(column); grid.container.arrange(); - }); - }, + }, - columnMoveStart: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - column.moveAfter(null); + gridScrollLeftColumn: () => { + const grid = world.getCurrentGrid(); + const column = grid.getLeftmostVisibleColumn(grid.container.getCurrentScrollPos(), true); + if (column === null) { + return; + } + + const prevColumn = grid.getPrevColumn(column); + if (prevColumn === null) { + return; + } + + grid.container.scrollToColumn(prevColumn); grid.container.arrange(); - }); - }, + }, - columnMoveEnd: () => { - world.doIfTiledFocused(true, (window, column, grid) => { - column.moveAfter(grid.getLastColumn()); + gridScrollRightColumn: () => { + const grid = world.getCurrentGrid(); + const column = grid.getRightmostVisibleColumn(grid.container.getCurrentScrollPos(), true); + if (column === null) { + return; + } + + const nextColumn = grid.getNextColumn(column); + if (nextColumn === null) { + return; + } + + grid.container.scrollToColumn(nextColumn); grid.container.arrange(); - }); - }, + }, + }; + } - columnToggleStacked: () => { - world.doIfTiledFocused(false, (window, column, grid) => { - column.toggleStacked(); - grid.container.arrange(); - }); - }, - - columnWidthIncrease: () => { - world.doIfTiledFocused(false, (window, column, grid) => { - grid.increaseColumnWidth(column); - grid.container.arrange(); - }); - }, - - columnWidthDecrease: () => { - world.doIfTiledFocused(false, (window, column, grid) => { - grid.decreaseColumnWidth(column); - grid.container.arrange(); - }); - }, - - gridScrollStart: () => { - const grid = world.getCurrentGrid(); - const firstColumn = grid.getFirstColumn(); - if (firstColumn === null) { - return; - } - grid.container.scrollToColumn(firstColumn); - grid.container.arrange(); - }, - - gridScrollEnd: () => { - const grid = world.getCurrentGrid(); - const lastColumn = grid.getLastColumn(); - if (lastColumn === null) { - return; - } - grid.container.scrollToColumn(lastColumn); - grid.container.arrange(); - }, - - gridScrollFocused: () => { - const focusedWindow = world.getFocusedWindow(); - if (focusedWindow === null) { - return; - } - const column = focusedWindow.column; - const grid = column.grid; - grid.container.scrollCenterColumn(column); - grid.container.arrange(); - }, - - gridScrollLeftColumn: () => { - const grid = world.getCurrentGrid(); - const column = grid.getLeftmostVisibleColumn(grid.container.getCurrentScrollPos(), true); - if (column === null) { - return; - } - - const prevColumn = grid.getPrevColumn(column); - if (prevColumn === null) { - return; - } - - grid.container.scrollToColumn(prevColumn); - grid.container.arrange(); - }, - - gridScrollRightColumn: () => { - const grid = world.getCurrentGrid(); - const column = grid.getRightmostVisibleColumn(grid.container.getCurrentScrollPos(), true); - if (column === null) { - return; - } - - const nextColumn = grid.getNextColumn(column); - if (nextColumn === null) { - return; - } - - grid.container.scrollToColumn(nextColumn); - grid.container.arrange(); - }, - }; -} - -function initNumActions(world: World) { - return { - focusColumn: (columnIndex: number) => { - const grid = world.getCurrentGrid(); - const targetColumn = grid.getColumnAtIndex(columnIndex); - if (targetColumn === null) { - return null; - } - targetColumn.focus(); - }, - - windowMoveToColumn: (columnIndex: number) => { - world.doIfTiledFocused(true, (window, column, grid) => { + export function initNum(world: World) { + return { + focusColumn: (columnIndex: number) => { + const grid = world.getCurrentGrid(); const targetColumn = grid.getColumnAtIndex(columnIndex); if (targetColumn === null) { return null; } - window.moveToColumn(targetColumn); - grid.container.onGridReordered(); - grid.container.arrange(); - }); - }, + targetColumn.focus(); + }, - columnMoveToColumn: (columnIndex: number) => { - world.doIfTiledFocused(true, (window, column, grid) => { - const targetColumn = grid.getColumnAtIndex(columnIndex); - if (targetColumn === null || targetColumn === column) { - return null; - } - if (targetColumn.isAfter(column)) { - column.moveAfter(targetColumn); - } else { - column.moveAfter(grid.getPrevColumn(targetColumn)); - } - grid.container.arrange(); - }); - }, + windowMoveToColumn: (columnIndex: number) => { + world.doIfTiledFocused(true, (window, column, grid) => { + const targetColumn = grid.getColumnAtIndex(columnIndex); + if (targetColumn === null) { + return null; + } + window.moveToColumn(targetColumn); + grid.container.onGridReordered(); + grid.container.arrange(); + }); + }, - columnMoveToDesktop: (desktopIndex: number) => { - world.doIfTiledFocused(true, (window, column, oldGrid) => { - const desktopNumber = desktopIndex + 1; - const newGrid = world.getGridInCurrentActivity(desktopNumber); - if (newGrid === null || newGrid === oldGrid) { - return; - } - column.moveToGrid(newGrid, newGrid.getLastColumn()); - oldGrid.container.arrange(); - newGrid.container.arrange(); - }); - }, + columnMoveToColumn: (columnIndex: number) => { + world.doIfTiledFocused(true, (window, column, grid) => { + const targetColumn = grid.getColumnAtIndex(columnIndex); + if (targetColumn === null || targetColumn === column) { + return null; + } + if (targetColumn.isAfter(column)) { + column.moveAfter(targetColumn); + } else { + column.moveAfter(grid.getPrevColumn(targetColumn)); + } + grid.container.arrange(); + }); + }, - tailMoveToDesktop: (desktopIndex: number) => { - world.doIfTiledFocused(true, (window, column, oldGrid) => { - const desktopNumber = desktopIndex + 1; - const newGrid = world.getGridInCurrentActivity(desktopNumber); - if (newGrid === null || newGrid === oldGrid) { - return; - } - oldGrid.evacuateTail(newGrid, column); - oldGrid.container.arrange(); - newGrid.container.arrange(); - }); - }, - }; -} - -function gridScroll(world: World, amount: number) { - const scrollAmount = amount; - const grid = world.getCurrentGrid(); - grid.container.adjustScroll(scrollAmount, false); - grid.container.arrange(); + columnMoveToDesktop: (desktopIndex: number) => { + world.doIfTiledFocused(true, (window, column, oldGrid) => { + const desktopNumber = desktopIndex + 1; + const newGrid = world.getGridInCurrentActivity(desktopNumber); + if (newGrid === null || newGrid === oldGrid) { + return; + } + column.moveToGrid(newGrid, newGrid.getLastColumn()); + oldGrid.container.arrange(); + newGrid.container.arrange(); + }); + }, + + tailMoveToDesktop: (desktopIndex: number) => { + world.doIfTiledFocused(true, (window, column, oldGrid) => { + const desktopNumber = desktopIndex + 1; + const newGrid = world.getGridInCurrentActivity(desktopNumber); + if (newGrid === null || newGrid === oldGrid) { + return; + } + oldGrid.evacuateTail(newGrid, column); + oldGrid.container.arrange(); + newGrid.container.arrange(); + }); + }, + }; + } + + function gridScroll(world: World, amount: number) { + const scrollAmount = amount; + const grid = world.getCurrentGrid(); + grid.container.adjustScroll(scrollAmount, false); + grid.container.arrange(); + } } diff --git a/src/keyBindings/loader.ts b/src/keyBindings/loader.ts index 94f8580..e8d4726 100644 --- a/src/keyBindings/loader.ts +++ b/src/keyBindings/loader.ts @@ -3,7 +3,7 @@ interface KeyBinding { description: string; comment?: string; defaultKeySequence: string; - action: keyof ReturnType; + action: keyof ReturnType; } interface NumKeyBinding { @@ -12,7 +12,7 @@ interface NumKeyBinding { comment?: string; defaultModifiers: string; fKeys: boolean; - action: keyof ReturnType; + action: keyof ReturnType; } function catchWrap(f: () => void) { @@ -50,12 +50,12 @@ function registerNumKeyBindings(name: string, description: string, modifiers: st } function registerKeyBindings(world: World) { - const actions = initActions(world); + const actions = Actions.init(world); for (const binding of keyBindings) { registerKeyBinding(binding.name, binding.description, binding.defaultKeySequence, actions[binding.action]); } - const numActions = initNumActions(world); + const numActions = Actions.initNum(world); for (const binding of numKeyBindings) { registerNumKeyBindings(binding.name, binding.description, binding.defaultModifiers, binding.fKeys, numActions[binding.action]); }