mirror of
https://github.com/He4eT/oddkb.git
synced 2026-05-05 01:17:25 +00:00
Layout images generator
This commit is contained in:
parent
1cd1bf93f0
commit
4894240006
4 changed files with 182 additions and 0 deletions
12
Makefile
12
Makefile
|
|
@ -21,3 +21,15 @@ flash:
|
|||
@make keymap_copy
|
||||
@make qmk_flash
|
||||
@make keymap_clean
|
||||
|
||||
preview_cmd = node \
|
||||
./preview_generator/preview_generator.js \
|
||||
"${PWD}/keymap/keymap.c"
|
||||
|
||||
preview:
|
||||
@${preview_cmd}
|
||||
|
||||
preview_and_copy:
|
||||
@${preview_cmd} | xclip -sel clipboard
|
||||
@echo 'Copied to the clipboard! Paste it in the "Raw data" tab:'
|
||||
@echo 'http://www.keyboard-layout-editor.com/'
|
||||
|
|
|
|||
113
preview_generator/legends.js
Normal file
113
preview_generator/legends.js
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
const legends = {
|
||||
'NO': '',
|
||||
'TRNS': '▽',
|
||||
|
||||
'MO(1': 'FN1',
|
||||
'MO(2': 'Mouse\nmode',
|
||||
|
||||
'GRV': '~\n`',
|
||||
'1': '!\n1',
|
||||
'2': '@\n2',
|
||||
'3': '#\n3',
|
||||
'4': '$\n4',
|
||||
'5': '%\n5',
|
||||
'6': '^\n6',
|
||||
'7': '&\n7',
|
||||
'8': '*\n8',
|
||||
'9': '(\n9',
|
||||
'0': ')\n0',
|
||||
|
||||
'MINS': '_\n−',
|
||||
'EQL': '+\n=',
|
||||
'SLSH': '?\n/',
|
||||
'BSLS': '|\n\\',
|
||||
'LBRC': '{\n[',
|
||||
'RBRC': '}\n]',
|
||||
'SCLN': ':\n;',
|
||||
'QUOT': '"\n\'',
|
||||
'COMM': '<\n,',
|
||||
'DOT': '>\n.',
|
||||
|
||||
'GT': '>',
|
||||
'LT': '<',
|
||||
'LPRN': '(',
|
||||
'RPRN': ')',
|
||||
'LCBR': '{',
|
||||
'RCBR': '}',
|
||||
'PLUS': '+',
|
||||
'PMNS': '−',
|
||||
'PAST': '*',
|
||||
'PSLS': '/',
|
||||
'PEQL': '=',
|
||||
'UNDS': '_',
|
||||
|
||||
'ESC': 'Esc',
|
||||
'ENT': 'Enter',
|
||||
'SPC': 'Space',
|
||||
'BSPC': 'Back\nSpace',
|
||||
'TAB': 'Tab',
|
||||
|
||||
'LCTRL': 'Ctrl',
|
||||
'RCTRL': 'Ctrl',
|
||||
'LALT': 'Alt',
|
||||
'RALT': 'Alt',
|
||||
'LSFT': 'Shift',
|
||||
'RSFT': 'Shift',
|
||||
'LGUI': 'OS',
|
||||
'RGUI': 'OS',
|
||||
'LCTL_T(ESC': 'Ctrl\nEsc',
|
||||
'RCTL_T(ESC': 'Ctrl\nEsc',
|
||||
|
||||
'HOME': 'Home',
|
||||
'INS': 'Insert',
|
||||
'DEL': 'Delete',
|
||||
'END': 'End',
|
||||
'PGDN': 'PgDn',
|
||||
'PGUP': 'PgUp',
|
||||
'PAUS': 'Pause',
|
||||
'PSCR': 'PrScr',
|
||||
'APP': 'Menu',
|
||||
|
||||
'LEFT': 'Left',
|
||||
'DOWN': 'Down',
|
||||
'RGHT': 'Right',
|
||||
'UP': 'Up',
|
||||
|
||||
'MUTE': 'Mute',
|
||||
'VOLD': 'Vol +',
|
||||
'VOLU': 'Vol −',
|
||||
|
||||
'ACL0': 'Slow',
|
||||
'ACL1': 'Usual',
|
||||
'ACL2': 'Fast',
|
||||
'BTN1': 'Click',
|
||||
'BTN2': 'Mouse\n2',
|
||||
'BTN3': 'Mouse\n3',
|
||||
'BTN4': 'Mouse\n4',
|
||||
'BTN5': 'Mouse\n5',
|
||||
'MS_D': 'Mouse\nDown',
|
||||
'MS_L': 'Mouse\nLeft',
|
||||
'MS_R': 'Mouse\nRight',
|
||||
'MS_U': 'Mouse\nUp',
|
||||
'WH_D': 'Wheel\ndown',
|
||||
'WH_U': 'Wheel\nup',
|
||||
}
|
||||
|
||||
const cleanKeys = keys => keys
|
||||
.map(key => key
|
||||
.replaceAll(')', '')
|
||||
.trim())
|
||||
.filter(Boolean)
|
||||
|
||||
const printLegends = keys => keys
|
||||
.map(key => key.replace('KC_', ''))
|
||||
.map(key => legends[key] ?? key)
|
||||
.map(key => [{a: key.includes('\n')
|
||||
? 5 // 2 lines
|
||||
: 3 // 1 line
|
||||
}, key])
|
||||
|
||||
module.exports = {
|
||||
cleanKeys,
|
||||
printLegends
|
||||
}
|
||||
30
preview_generator/preview_generator.js
Normal file
30
preview_generator/preview_generator.js
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* Convert the keymap.c file to the "Raw data" for
|
||||
* http://www.keyboard-layout-editor.com/
|
||||
*/
|
||||
|
||||
const fs = require('fs')
|
||||
|
||||
const {buildRow} = require('./rows')
|
||||
const {cleanKeys, printLegends} = require('./legends')
|
||||
|
||||
const keymapFilePath = process.argv[2]
|
||||
const fileContent = fs.readFileSync(keymapFilePath, 'utf8')
|
||||
|
||||
const keymapToKLERawData = fileContent =>
|
||||
fileContent
|
||||
.split('\n')
|
||||
.map(row => row.split(','))
|
||||
.filter(key => key.length > 1)
|
||||
.map(cleanKeys)
|
||||
.map(printLegends)
|
||||
.map(buildRow)
|
||||
.map(JSON.stringify)
|
||||
|
||||
const result = keymapToKLERawData(fileContent)
|
||||
// .slice(0, 8)
|
||||
// .slice(8, 16)
|
||||
// .slice(16)
|
||||
|
||||
console.log(result.join(',\n'))
|
||||
|
||||
27
preview_generator/rows.js
Normal file
27
preview_generator/rows.js
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
const HALVES_GAP = 5
|
||||
|
||||
const row = (keys, start, gapOffset) => [
|
||||
{x: start},
|
||||
...keys.slice(0, keys.length / 2),
|
||||
{x: HALVES_GAP + gapOffset},
|
||||
...keys.slice(keys.length / 2),
|
||||
].flat()
|
||||
|
||||
const row12 = keys =>
|
||||
row(keys, 0, 0)
|
||||
|
||||
const row4 = (keys, rowIndex) => ({
|
||||
4: row(keys, 2, 4),
|
||||
5: row(keys, 4, 0),
|
||||
6: row(keys, 6, -4),
|
||||
7: row(keys, 6, -4),
|
||||
}[rowIndex % 8])
|
||||
|
||||
const buildRow = (keys, rowIndex) => ({
|
||||
12: row12(keys),
|
||||
4: row4(keys, rowIndex)
|
||||
}[keys.length] || ['Oh no...'])
|
||||
|
||||
module.exports = {
|
||||
buildRow
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue