diff --git a/src/lib/actions/Getter.ts b/src/lib/actions/Getter.ts deleted file mode 100644 index e3d77cf..0000000 --- a/src/lib/actions/Getter.ts +++ /dev/null @@ -1,30 +0,0 @@ -namespace Actions { - export class Getter { - private readonly actions: Actions; - private readonly numActions: NumActions; - - constructor(world: World, config: Config) { - this.actions = new Actions(world, config); - this.numActions = new NumActions(world); - } - - public getAction(action: keyof Actions) { - return this.actions[action].bind(this.actions); - } - - public getNumAction(action: keyof NumActions) { - return this.numActions[action].bind(this.numActions); - } - } - - export type Config = { - manualScrollStep: number; - manualResizeStep: number; - columnResizer: ColumnResizer; - }; - - export type ColumnResizer = { - increaseWidth(column: Column, step: number): void; - decreaseWidth(column: Column, step: number): void; - }; -} diff --git a/src/lib/actions/types.ts b/src/lib/actions/types.ts new file mode 100644 index 0000000..2929eaf --- /dev/null +++ b/src/lib/actions/types.ts @@ -0,0 +1,12 @@ +namespace Actions { + export type Config = { + manualScrollStep: number; + manualResizeStep: number; + columnResizer: ColumnResizer; + }; + + export type ColumnResizer = { + increaseWidth(column: Column, step: number): void; + decreaseWidth(column: Column, step: number): void; + }; +} diff --git a/src/lib/keyBindings/definition.ts b/src/lib/keyBindings/definition.ts index fe13657..52fe415 100644 --- a/src/lib/keyBindings/definition.ts +++ b/src/lib/keyBindings/definition.ts @@ -1,190 +1,228 @@ -const keyBindings: KeyBinding[] = [ - { - name: "window-toggle-floating", - description: "Toggle floating", - defaultKeySequence: "Meta+Space", - }, - { - name: "focus-left", - description: "Move focus left", - defaultKeySequence: "Meta+A", - }, - { - name: "focus-right", - description: "Move focus right", - comment: "Clashes with default KDE shortcuts, may require manual remapping", - defaultKeySequence: "Meta+D", - }, - { - name: "focus-up", - description: "Move focus up", - comment: "Clashes with default KDE shortcuts, may require manual remapping", - defaultKeySequence: "Meta+W", - }, - { - name: "focus-down", - description: "Move focus down", - comment: "Clashes with default KDE shortcuts, may require manual remapping", - defaultKeySequence: "Meta+S", - }, - { - name: "focus-start", - description: "Move focus to start", - defaultKeySequence: "Meta+Home", - }, - { - name: "focus-end", - description: "Move focus to end", - defaultKeySequence: "Meta+End", - }, - { - name: "window-move-left", - description: "Move window left", - comment: "Moves window out of and into columns", - defaultKeySequence: "Meta+Shift+A", - }, - { - name: "window-move-right", - description: "Move window right", - comment: "Moves window out of and into columns", - defaultKeySequence: "Meta+Shift+D", - }, - { - name: "window-move-up", - description: "Move window up", - defaultKeySequence: "Meta+Shift+W", - }, - { - name: "window-move-down", - description: "Move window down", - defaultKeySequence: "Meta+Shift+S", - }, - { - name: "window-move-start", - description: "Move window to start", - defaultKeySequence: "Meta+Shift+Home", - }, - { - name: "window-move-end", - description: "Move window to end", - defaultKeySequence: "Meta+Shift+End", - }, - { - name: "column-toggle-stacked", - description: "Toggle stacked layout for focused column", - comment: "One window in the column visible, others shaded; not supported on Wayland", - defaultKeySequence: "Meta+X", - }, - { - name: "column-move-left", - description: "Move column left", - defaultKeySequence: "Meta+Ctrl+Shift+A", - }, - { - name: "column-move-right", - description: "Move column right", - defaultKeySequence: "Meta+Ctrl+Shift+D", - }, - { - name: "column-move-start", - description: "Move column to start", - defaultKeySequence: "Meta+Ctrl+Shift+Home", - }, - { - name: "column-move-end", - description: "Move column to end", - defaultKeySequence: "Meta+Ctrl+Shift+End", - }, - { - name: "column-width-increase", - description: "Increase column width", - defaultKeySequence: "Meta+Ctrl++", - }, - { - name: "column-width-decrease", - description: "Decrease column width", - defaultKeySequence: "Meta+Ctrl+-", - }, - { - name: "columns-width-equalize", - description: "Equalize widths of visible columns", - defaultKeySequence: "Meta+Ctrl+X", - }, - { - name: "grid-scroll-focused", - description: "Center focused window", - comment: "Scrolls so that the focused window is centered in the screen", - defaultKeySequence: "Meta+Alt+Return", - }, - { - name: "grid-scroll-left-column", - description: "Scroll one column to the left", - defaultKeySequence: "Meta+Alt+A", - }, - { - name: "grid-scroll-right-column", - description: "Scroll one column to the right", - defaultKeySequence: "Meta+Alt+D", - }, - { - name: "grid-scroll-left", - description: "Scroll left", - defaultKeySequence: "Meta+Alt+PgUp", - }, - { - name: "grid-scroll-right", - description: "Scroll right", - defaultKeySequence: "Meta+Alt+PgDown", - }, - { - name: "grid-scroll-start", - description: "Scroll to start", - defaultKeySequence: "Meta+Alt+Home", - }, - { - name: "grid-scroll-end", - description: "Scroll to end", - defaultKeySequence: "Meta+Alt+End", - }, - { - name: "screen-switch", - description: "Move Karousel grid to the current screen", - defaultKeySequence: "Meta+Ctrl+Return", - } -]; +function getKeyBindings(actions: Actions.Actions): KeyBinding[] { + return [ + { + name: "window-toggle-floating", + description: "Toggle floating", + defaultKeySequence: "Meta+Space", + action: actions["window-toggle-floating"], + }, + { + name: "focus-left", + description: "Move focus left", + defaultKeySequence: "Meta+A", + action: actions["focus-left"], + }, + { + name: "focus-right", + description: "Move focus right", + comment: "Clashes with default KDE shortcuts, may require manual remapping", + defaultKeySequence: "Meta+D", + action: actions["focus-right"], + }, + { + name: "focus-up", + description: "Move focus up", + comment: "Clashes with default KDE shortcuts, may require manual remapping", + defaultKeySequence: "Meta+W", + action: actions["focus-up"], + }, + { + name: "focus-down", + description: "Move focus down", + comment: "Clashes with default KDE shortcuts, may require manual remapping", + defaultKeySequence: "Meta+S", + action: actions["focus-down"], + }, + { + name: "focus-start", + description: "Move focus to start", + defaultKeySequence: "Meta+Home", + action: actions["focus-start"], + }, + { + name: "focus-end", + description: "Move focus to end", + defaultKeySequence: "Meta+End", + action: actions["focus-end"], + }, + { + name: "window-move-left", + description: "Move window left", + comment: "Moves window out of and into columns", + defaultKeySequence: "Meta+Shift+A", + action: actions["window-move-left"], + }, + { + name: "window-move-right", + description: "Move window right", + comment: "Moves window out of and into columns", + defaultKeySequence: "Meta+Shift+D", + action: actions["window-move-right"], + }, + { + name: "window-move-up", + description: "Move window up", + defaultKeySequence: "Meta+Shift+W", + action: actions["window-move-up"], + }, + { + name: "window-move-down", + description: "Move window down", + defaultKeySequence: "Meta+Shift+S", + action: actions["window-move-down"], + }, + { + name: "window-move-start", + description: "Move window to start", + defaultKeySequence: "Meta+Shift+Home", + action: actions["window-move-start"], + }, + { + name: "window-move-end", + description: "Move window to end", + defaultKeySequence: "Meta+Shift+End", + action: actions["window-move-end"], + }, + { + name: "column-toggle-stacked", + description: "Toggle stacked layout for focused column", + comment: "One window in the column visible, others shaded; not supported on Wayland", + defaultKeySequence: "Meta+X", + action: actions["column-toggle-stacked"], + }, + { + name: "column-move-left", + description: "Move column left", + defaultKeySequence: "Meta+Ctrl+Shift+A", + action: actions["column-move-left"], + }, + { + name: "column-move-right", + description: "Move column right", + defaultKeySequence: "Meta+Ctrl+Shift+D", + action: actions["column-move-right"], + }, + { + name: "column-move-start", + description: "Move column to start", + defaultKeySequence: "Meta+Ctrl+Shift+Home", + action: actions["column-move-start"], + }, + { + name: "column-move-end", + description: "Move column to end", + defaultKeySequence: "Meta+Ctrl+Shift+End", + action: actions["column-move-end"], + }, + { + name: "column-width-increase", + description: "Increase column width", + defaultKeySequence: "Meta+Ctrl++", + action: actions["column-width-increase"], + }, + { + name: "column-width-decrease", + description: "Decrease column width", + defaultKeySequence: "Meta+Ctrl+-", + action: actions["column-width-decrease"], + }, + { + name: "columns-width-equalize", + description: "Equalize widths of visible columns", + defaultKeySequence: "Meta+Ctrl+X", + action: actions["columns-width-equalize"], + }, + { + name: "grid-scroll-focused", + description: "Center focused window", + comment: "Scrolls so that the focused window is centered in the screen", + defaultKeySequence: "Meta+Alt+Return", + action: actions["grid-scroll-focused"], + }, + { + name: "grid-scroll-left-column", + description: "Scroll one column to the left", + defaultKeySequence: "Meta+Alt+A", + action: actions["grid-scroll-left-column"], + }, + { + name: "grid-scroll-right-column", + description: "Scroll one column to the right", + defaultKeySequence: "Meta+Alt+D", + action: actions["grid-scroll-right-column"], + }, + { + name: "grid-scroll-left", + description: "Scroll left", + defaultKeySequence: "Meta+Alt+PgUp", + action: actions["grid-scroll-left"], + }, + { + name: "grid-scroll-right", + description: "Scroll right", + defaultKeySequence: "Meta+Alt+PgDown", + action: actions["grid-scroll-right"], + }, + { + name: "grid-scroll-start", + description: "Scroll to start", + defaultKeySequence: "Meta+Alt+Home", + action: actions["grid-scroll-start"], + }, + { + name: "grid-scroll-end", + description: "Scroll to end", + defaultKeySequence: "Meta+Alt+End", + action: actions["grid-scroll-end"], + }, + { + name: "screen-switch", + description: "Move Karousel grid to the current screen", + defaultKeySequence: "Meta+Ctrl+Return", + action: actions["screen-switch"], + }, + ]; +} -const numKeyBindings: NumKeyBinding[] = [ - { - name: "focus-", - description: "Move focus to column ", - comment: "Clashes with default KDE shortcuts, may require manual remapping", - defaultModifiers: "Meta", - fKeys: false, - }, - { - name: "window-move-to-column-", - description: "Move window to column ", - comment: "Requires manual remapping according to your keyboard layout, e.g. Meta+Shift+1 -> Meta+!", - defaultModifiers: "Meta+Shift", - fKeys: false, - }, - { - name: "column-move-to-column-", - description: "Move column to position ", - comment: "Requires manual remapping according to your keyboard layout, e.g. Meta+Ctrl+Shift+1 -> Meta+Ctrl+!", - defaultModifiers: "Meta+Ctrl+Shift", - fKeys: false, - }, - { - name: "column-move-to-desktop-", - description: "Move column to desktop ", - defaultModifiers: "Meta+Ctrl+Shift", - fKeys: true, - }, - { - name: "tail-move-to-desktop-", - description: "Move this and all following columns to desktop ", - defaultModifiers: "Meta+Ctrl+Shift+Alt", - fKeys: true, - }, -]; +function getNumKeyBindings(numActions: Actions.NumActions): NumKeyBinding[] { + return [ + { + name: "focus-", + description: "Move focus to column ", + comment: "Clashes with default KDE shortcuts, may require manual remapping", + defaultModifiers: "Meta", + fKeys: false, + action: numActions["focus-"], + }, + { + name: "window-move-to-column-", + description: "Move window to column ", + comment: "Requires manual remapping according to your keyboard layout, e.g. Meta+Shift+1 -> Meta+!", + defaultModifiers: "Meta+Shift", + fKeys: false, + action: numActions["window-move-to-column-"], + }, + { + name: "column-move-to-column-", + description: "Move column to position ", + comment: "Requires manual remapping according to your keyboard layout, e.g. Meta+Ctrl+Shift+1 -> Meta+Ctrl+!", + defaultModifiers: "Meta+Ctrl+Shift", + fKeys: false, + action: numActions["column-move-to-column-"], + }, + { + name: "column-move-to-desktop-", + description: "Move column to desktop ", + defaultModifiers: "Meta+Ctrl+Shift", + fKeys: true, + action: numActions["column-move-to-desktop-"], + }, + { + name: "tail-move-to-desktop-", + description: "Move this and all following columns to desktop ", + defaultModifiers: "Meta+Ctrl+Shift+Alt", + fKeys: true, + action: numActions["tail-move-to-desktop-"], + }, + ]; +} diff --git a/src/lib/keyBindings/loader.ts b/src/lib/keyBindings/loader.ts index 436fe2b..afa7d9a 100644 --- a/src/lib/keyBindings/loader.ts +++ b/src/lib/keyBindings/loader.ts @@ -1,16 +1,18 @@ type KeyBinding = { - name: keyof Actions.Actions; + name: string; description: string; comment?: string; defaultKeySequence: string; + action: () => void; }; type NumKeyBinding = { - name: keyof Actions.NumActions; + name: string; description: string; comment?: string; defaultModifiers: string; fKeys: boolean; + action: (i: number) => void; }; function catchWrap(f: () => void) { @@ -24,14 +26,14 @@ function catchWrap(f: () => void) { }; } -function registerKeyBinding(actionGetter: Actions.Getter, shortcutActions: ShortcutAction[], keyBinding: KeyBinding) { +function registerKeyBinding(shortcutActions: ShortcutAction[], keyBinding: KeyBinding) { shortcutActions.push(new ShortcutAction( keyBinding, - catchWrap(actionGetter.getAction(keyBinding.name)), + catchWrap(keyBinding.action), )); } -function registerNumKeyBindings(actionGetter: Actions.Getter, shortcutActions: ShortcutAction[], numKeyBinding: NumKeyBinding) { +function registerNumKeyBindings(shortcutActions: ShortcutAction[], numKeyBinding: NumKeyBinding) { const numPrefix = numKeyBinding.fKeys ? "F" : ""; const n = numKeyBinding.fKeys ? 12 : 9; for (let i = 0; i < 12; i++) { @@ -39,28 +41,28 @@ function registerNumKeyBindings(actionGetter: Actions.Getter, shortcutActions: S const keySequence = i < n ? numKeyBinding.defaultModifiers + "+" + numPrefix + numKey : ""; - const action = actionGetter.getNumAction(numKeyBinding.name); shortcutActions.push(new ShortcutAction( { name: numKeyBinding.name + numKey, description: numKeyBinding.description + numKey, defaultKeySequence: keySequence, }, - catchWrap(() => action(i)), + catchWrap(() => numKeyBinding.action(i)), )); } } function registerKeyBindings(world: World, config: Actions.Config) { - const actionGetter = new Actions.Getter(world, config); + const actions = new Actions.Actions(world, config); + const numActions = new Actions.NumActions(world); const shortcutActions: ShortcutAction[] = []; - for (const keyBinding of keyBindings) { - registerKeyBinding(actionGetter, shortcutActions, keyBinding); + for (const keyBinding of getKeyBindings(actions)) { + registerKeyBinding(shortcutActions, keyBinding); } - for (const numKeyBinding of numKeyBindings) { - registerNumKeyBindings(actionGetter, shortcutActions, numKeyBinding); + for (const numKeyBinding of getNumKeyBindings(numActions)) { + registerNumKeyBindings(shortcutActions, numKeyBinding); } return shortcutActions;