diff --git a/Makefile b/Makefile index 574b407..ac34e76 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,10 @@ .PHONY: * +TSC_SCRIPT_FLAGS = --lib es2020 ./src/extern.d.ts + config: mkdir -p ./package/contents/config - tsc ./src/config/definition.ts ./generators/config/kcfg.ts --outFile /dev/stdout | node - > ./package/contents/config/main.xml + tsc ${TSC_SCRIPT_FLAGS} ./src/config/definition.ts ./generators/config/kcfg.ts --outFile /dev/stdout | node - > ./package/contents/config/main.xml build: tsc --outFile ./package/contents/code/main.js @@ -18,3 +20,12 @@ package: logs: journalctl -t kwin_x11 -g '^qml:|^file://.*karousel' -f + +docs-key-bindings-plain: + @tsc ${TSC_SCRIPT_FLAGS} ./src/keyBindings/definition.ts ./generators/docs/keyBindings.ts ./generators/docs/keyBindingsPlain.ts --outFile /dev/stdout | node - + +docs-key-bindings-table: + @tsc ${TSC_SCRIPT_FLAGS} ./src/keyBindings/definition.ts ./generators/docs/keyBindings.ts ./generators/docs/keyBindingsTable.ts --outFile /dev/stdout | node - + +docs-key-bindings-fmt: + @tsc ${TSC_SCRIPT_FLAGS} ./src/keyBindings/definition.ts ./generators/docs/keyBindings.ts ./generators/docs/keyBindingsFmt.ts --outFile /dev/stdout | node - diff --git a/generators/docs/keyBindings.ts b/generators/docs/keyBindings.ts new file mode 100644 index 0000000..d3d9655 --- /dev/null +++ b/generators/docs/keyBindings.ts @@ -0,0 +1,61 @@ +interface KeyBinding { + name: string; + description: string; + defaultKeySequence: string; + action: string; +} + +interface NumKeyBinding { + name: string; + description: string; + defaultModifiers: string; + fKeys: boolean; + action: string; +} + +function printCols(...columns: (string[] | string)[]) { + const nCols = columns.length; + if (nCols == 0) { + return; + } + + let nRows = Math.min(...columns.filter( + (column: string[] | string) => column instanceof Array + ).map( + (column: string[] | string) => column.length + )); + if (nRows == Infinity) { + // we only have single string columns + nRows = 1; + } + + const colWidths = columns.map( + (column: string[] | string) => { + if (column instanceof Array) { + return Math.max(...column.map( + (cell: string) => cell.length + )) + } else { + return column.length; + } + } + ); + + function getCell(col: number, row: number) { + const column = columns[col]; + const cell = column instanceof Array ? column[row] : column; + if (col < nCols-1) { + return cell.padEnd(colWidths[col]); + } else { + return cell; + } + } + + for (let row = 0; row < nRows; row++) { + let line = ""; + for (let col = 0; col < nCols; col++) { + line += getCell(col, row); + } + console.log(line); + } +} diff --git a/generators/docs/keyBindingsFmt.ts b/generators/docs/keyBindingsFmt.ts new file mode 100644 index 0000000..a57ada1 --- /dev/null +++ b/generators/docs/keyBindingsFmt.ts @@ -0,0 +1,14 @@ +const colLeft = [ + ...keyBindings.map((binding: KeyBinding) => binding.defaultKeySequence), + ...numKeyBindings.map((binding: NumKeyBinding) => { + const numPrefix = binding.fKeys ? "F" : ""; + return `${binding.defaultModifiers}+${numPrefix}[N]`; + }), +]; + +const colRight = [ + ...keyBindings.map((binding: KeyBinding) => binding.description), + ...numKeyBindings.map((binding: NumKeyBinding) => binding.description + "N"), +]; + +printCols(colLeft, " ", colRight); diff --git a/generators/docs/keyBindingsPlain.ts b/generators/docs/keyBindingsPlain.ts new file mode 100644 index 0000000..fcbb2a4 --- /dev/null +++ b/generators/docs/keyBindingsPlain.ts @@ -0,0 +1,8 @@ +for (const binding of keyBindings) { + console.log(`${binding.defaultKeySequence} - ${binding.description}`); +} + +for (const binding of numKeyBindings) { + const numPrefix = binding.fKeys ? "F" : ""; + console.log(`${binding.defaultModifiers}+${numPrefix}[N] - ${binding.description}N`); +} diff --git a/generators/docs/keyBindingsTable.ts b/generators/docs/keyBindingsTable.ts new file mode 100644 index 0000000..41c330f --- /dev/null +++ b/generators/docs/keyBindingsTable.ts @@ -0,0 +1,18 @@ +const colLeft = [ + "Shortcut", + "---", + ...keyBindings.map((binding: KeyBinding) => binding.defaultKeySequence), + ...numKeyBindings.map((binding: NumKeyBinding) => { + const numPrefix = binding.fKeys ? "F" : ""; + return `${binding.defaultModifiers}+${numPrefix}[N]`; + }), +]; + +const colRight = [ + "Action", + "---", + ...keyBindings.map((binding: KeyBinding) => binding.description), + ...numKeyBindings.map((binding: NumKeyBinding) => binding.description + "N"), +]; + +printCols("| ", colLeft, " | ", colRight, " |"); diff --git a/src/extern.d.ts b/src/extern.d.ts index ba9a492..c9d111c 100644 --- a/src/extern.d.ts +++ b/src/extern.d.ts @@ -1,9 +1,9 @@ -const qmlBase; -const console; -const KWin; -const Qt; -const workspace; -const options; +declare const qmlBase; +declare const console; +declare const KWin; +declare const Qt; +declare const workspace; +declare const options; type AbstractClient = any; type TopLevel = any;