Keymap: Updates to guidoism layout (#4262)
* Initial commit of guidoism * created movement layer * movement layer works! * removed unnecessary layers * moved enter key up and recreated caps lock * cleaned up * num pad * checkpoint * checkpoint * checkpoint * Added num pad * changed max power draw so i can use this on ipad * move around quotes * added tri layer for a homed numpad * moved layout to new style * Update readme.md * Update readme.md * Update readme.md * Update readme.md * added keys to unicode conversion * removed adjust layer since its not used anymore * moved esc to seperate key * tweaked python * checkpoint * new code put into function * new code put into function * cleanup * cleanup * new code works perfect * removed old code * removed old code * generate_c.py now replaces code within keymap.c * added function layer * updated readme * updated readme * updated readme * updates readme * updates readme * updates readme * Tweaks based on CR * Remove old guidoism * Use MO(_FUNCTION) directly
This commit is contained in:
		
							parent
							
								
									4ffcacd920
								
							
						
					
					
						commit
						2abb29402a
					
				
					 10 changed files with 236 additions and 418 deletions
				
			
		| 
						 | 
				
			
			@ -1,38 +1,29 @@
 | 
			
		|||
import itertools
 | 
			
		||||
import json
 | 
			
		||||
from pprint import pprint as pp
 | 
			
		||||
import os.path
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
layers = dict(enumerate(['_QWERTY', '_LOWER', '_RAISE', '_MOVEMENT', '_NUMPAD']))
 | 
			
		||||
key_names = {('MO(%d)' % i): layers.get(i).strip('_') for i in layers.keys()}
 | 
			
		||||
KEYMAP_C = """/* {0}
 | 
			
		||||
{1}
 | 
			
		||||
*/
 | 
			
		||||
[{2}] = {3}(
 | 
			
		||||
    {4})
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
unicodes = {
 | 
			
		||||
    "<i class='fa fa-fast-forward'></i>": "next",
 | 
			
		||||
    "<i class='fa fa-volume-down'></i>": "vol-",
 | 
			
		||||
    "<i class='fa fa-volume-up'></i>": "vol+",
 | 
			
		||||
    "<i class='fa fa-play'></i>": "play",
 | 
			
		||||
}
 | 
			
		||||
README_MD = """## {0}
 | 
			
		||||
```
 | 
			
		||||
{1}
 | 
			
		||||
```
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
d = json.load(open('layouts/community/ortho_4x12/guidoism/guidoism.json'))
 | 
			
		||||
base = os.path.dirname(__file__)
 | 
			
		||||
 | 
			
		||||
def grouper(iterable, n):
 | 
			
		||||
    args = [iter(iterable)] * n
 | 
			
		||||
    return itertools.zip_longest(*args, fillvalue='')
 | 
			
		||||
layer_names = dict(enumerate(['_QWERTY', '_LOWER', '_RAISE', '_MOVEMENT', '_NUMPAD', '_FUNCTION']))
 | 
			
		||||
layer_name = {('MO(%d)' % i): layer_names.get(i).strip('_') for i in layer_names.keys()}
 | 
			
		||||
 | 
			
		||||
def truthy(s):
 | 
			
		||||
    return [a for a in s if a]
 | 
			
		||||
keys = json.load(open(os.path.join(base, 'keys.json')))
 | 
			
		||||
 | 
			
		||||
def just(s, n):
 | 
			
		||||
    return [a.center(n*2+1 if len(s) == 11 and i == 5 else n) for i, a in enumerate(s)]
 | 
			
		||||
 | 
			
		||||
def replace(s):
 | 
			
		||||
    return [key_names.get(a, a) for a in s]
 | 
			
		||||
 | 
			
		||||
def layer(i, l):
 | 
			
		||||
    n = max(len(s) for s in l)
 | 
			
		||||
    rows = [', '.join(replace(truthy(row))) for row in grouper(l, 12)]
 | 
			
		||||
    return '[%s] = %s(\n%s)' % (layers[i], d['layout'], ',\n'.join(rows))
 | 
			
		||||
 | 
			
		||||
print(',\n\n'.join(layer(i, l) for i, l in enumerate(d['layers'])))
 | 
			
		||||
d = json.load(open(os.path.join(base, 'guidoism.json')))
 | 
			
		||||
 | 
			
		||||
def surround(s, a, b, c):
 | 
			
		||||
    return a + b.join(s) + c
 | 
			
		||||
| 
						 | 
				
			
			@ -40,20 +31,45 @@ def surround(s, a, b, c):
 | 
			
		|||
def pattern(cell, table):
 | 
			
		||||
    return ['─'*cell for i in range(table)]
 | 
			
		||||
 | 
			
		||||
keys = json.load(open('layouts/community/ortho_4x12/guidoism/keys.json'))
 | 
			
		||||
top    = surround(pattern(5, 12), '┌', '┬', '┐')
 | 
			
		||||
mid    = surround(pattern(5, 12), '├', '┼', '┤')
 | 
			
		||||
bottom = surround(pattern(5, 12), '└', '┴', '┘')
 | 
			
		||||
 | 
			
		||||
def layer2(i, l):
 | 
			
		||||
    def replace(s):
 | 
			
		||||
        s = [keys.get(a, a) for a in s]
 | 
			
		||||
        return [unicodes.get(a, a) for a in s]
 | 
			
		||||
    n = max(len(s) for s in l)
 | 
			
		||||
    return [surround(just(replace(truthy(row)), 5), '│', '│', '│') for row in grouper(l, 12)]
 | 
			
		||||
from more_itertools import chunked, intersperse, interleave_longest
 | 
			
		||||
 | 
			
		||||
for i, l in enumerate(d['layers']):
 | 
			
		||||
    print(surround(pattern(5, 12), '┌', '┬', '┐'))
 | 
			
		||||
    for n, row in enumerate(layer2(i, l)):
 | 
			
		||||
        print(row)
 | 
			
		||||
        if n < 3:
 | 
			
		||||
            print(surround(pattern(5, 12), '├', '┼', '┤'))
 | 
			
		||||
        else:
 | 
			
		||||
            print(surround(pattern(5, 12), '└', '┴', '┘'))
 | 
			
		||||
def uni(k):
 | 
			
		||||
    return keys.get(k, k).lower().center(5)
 | 
			
		||||
 | 
			
		||||
def c_layout(i, definition, template):
 | 
			
		||||
    c_name = layer_names[i]
 | 
			
		||||
    pretty_name = c_name.strip('_').capitalize()
 | 
			
		||||
    layout = d['layout']
 | 
			
		||||
    
 | 
			
		||||
    surround = lambda s: ''.join(interleave_longest(['│']*(len(s)+1), s))
 | 
			
		||||
    layer = list(map(uni, definition))
 | 
			
		||||
    layer[41] = layer[41].center(11)
 | 
			
		||||
    layer = chunked(layer, 12)
 | 
			
		||||
    rows = intersperse(mid, map(surround, layer))
 | 
			
		||||
    pretty = '\n'.join(itertools.chain([top], rows, [bottom]))
 | 
			
		||||
    
 | 
			
		||||
    surround = lambda s: ', '.join(s)
 | 
			
		||||
    layer = list(map(lambda k: layer_name.get(k, k), definition))
 | 
			
		||||
    layer = chunked(layer, 12)
 | 
			
		||||
    rows = map(surround, layer)
 | 
			
		||||
    c_layer = ',\n    '.join(itertools.chain([], rows, []))
 | 
			
		||||
    
 | 
			
		||||
    return template.format(pretty_name, pretty, c_name, layout, c_layer)
 | 
			
		||||
 | 
			
		||||
start = '// START_REPLACEMENT\n'
 | 
			
		||||
end = '// END_REPLACEMENT\n'
 | 
			
		||||
replacement = start + ',\n\n'.join(c_layout(i, l, KEYMAP_C) for i, l in enumerate(d['layers'])) + end
 | 
			
		||||
keymap = os.path.join(base, 'keymap.c')
 | 
			
		||||
existing = open(keymap).read()
 | 
			
		||||
r = re.compile(r'// START_REPLACEMENT.*// END_REPLACEMENT', re.DOTALL)
 | 
			
		||||
open(keymap, 'w').write(r.sub(replacement, existing))
 | 
			
		||||
 | 
			
		||||
replacement = '## Current Configuration\n\n' + '\n\n'.join(c_layout(i, l, README_MD) for i, l in enumerate(d['layers']))
 | 
			
		||||
keymap = os.path.join(base, 'readme.md')
 | 
			
		||||
existing = open(keymap).read()
 | 
			
		||||
r = re.compile(r'## Current Configuration.*', re.DOTALL)
 | 
			
		||||
open(keymap, 'w').write(r.sub(replacement, existing))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue