mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	
						commit
						2ba0de8fcd
					
				
							
								
								
									
										710
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										710
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,710 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | """Compiler for keymap.c files | ||||||
|  | 
 | ||||||
|  | This scrip will generate a keymap.c file from a simple | ||||||
|  | markdown file with a specific layout. | ||||||
|  | 
 | ||||||
|  | Usage: | ||||||
|  |     python compile_keymap.py INPUT_PATH [OUTPUT_PATH] | ||||||
|  | """ | ||||||
|  | from __future__ import division | ||||||
|  | from __future__ import print_function | ||||||
|  | from __future__ import absolute_import | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | import os | ||||||
|  | import io | ||||||
|  | import re | ||||||
|  | import sys | ||||||
|  | import json | ||||||
|  | import unicodedata | ||||||
|  | import collections | ||||||
|  | import itertools as it | ||||||
|  | 
 | ||||||
|  | PY2 = sys.version_info.major == 2 | ||||||
|  | 
 | ||||||
|  | if PY2: | ||||||
|  |     chr = unichr | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | KEYBOARD_LAYOUTS = { | ||||||
|  |     # These map positions in the parsed layout to | ||||||
|  |     # positions in the KEYMAP MATRIX | ||||||
|  |     'ergodox_ez': [ | ||||||
|  |         [ 0,  1,  2,  3,  4,  5,  6],  [38, 39, 40, 41, 42, 43, 44], | ||||||
|  |         [ 7,  8,  9, 10, 11, 12, 13],  [45, 46, 47, 48, 49, 50, 51], | ||||||
|  |         [14, 15, 16, 17, 18, 19    ],  [    52, 53, 54, 55, 56, 57], | ||||||
|  |         [20, 21, 22, 23, 24, 25, 26],  [58, 59, 60, 61, 62, 63, 64], | ||||||
|  |         [27, 28, 29, 30, 31        ],  [        65, 66, 67, 68, 69], | ||||||
|  |         [                    32, 33],  [70, 71                    ], | ||||||
|  |         [                        34],  [72                        ], | ||||||
|  |         [                35, 36, 37],  [73, 74, 75                ], | ||||||
|  |     ] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ROW_INDENTS = { | ||||||
|  |     'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BLANK_LAYOUTS = [ | ||||||
|  | # Compact Layout | ||||||
|  | """ | ||||||
|  | .------------------------------------.------------------------------------. | ||||||
|  | |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  | !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  | |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  | !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  | |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     | | ||||||
|  | !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  | |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  | '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |  '------------------------'                     '------------------------' | ||||||
|  |                         .-----------. .-----------. | ||||||
|  |                         |     |     | !     |     | | ||||||
|  |                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                   !     !     |     | !     |     !     ! | ||||||
|  |                   !     !     !-----! !-----!     !     ! | ||||||
|  |                   |     |     |     | !     |     |     | | ||||||
|  |                   '-----------------' '-----------------' | ||||||
|  | """, | ||||||
|  | 
 | ||||||
|  | # Wide Layout | ||||||
|  | """ | ||||||
|  | .---------------------------------------------. .---------------------------------------------. | ||||||
|  | |       |     |     |     |     |     |       | !       |     |     |     |     |     |       | | ||||||
|  | !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! | ||||||
|  | |       |     |     |     |     |     |       | !       |     |     |     |     |     |       | | ||||||
|  | !-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------! | ||||||
|  | |       |     |     |     |     |     |-------! !-------!     |     |     |     |     |       | | ||||||
|  | !-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------! | ||||||
|  | |       |     |     |     |     |     |       | !       |     |     |     |     |     |       | | ||||||
|  | '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' | ||||||
|  |  |      |     |     |     |     |                             !     |     |     |     |      | | ||||||
|  |  '------------------------------'                             '------------------------------' | ||||||
|  |                               .---------------. .---------------. | ||||||
|  |                               |       |       | !       |       | | ||||||
|  |                       .-------+-------+-------! !-------+-------+-------. | ||||||
|  |                       !       !       |       | !       |       !       ! | ||||||
|  |                       !       !       !-------! !-------!       !       ! | ||||||
|  |                       |       |       |       | !       |       |       | | ||||||
|  |                       '-----------------------' '-----------------------' | ||||||
|  | """, | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DEFAULT_CONFIG = { | ||||||
|  |     "keymaps_includes": [ | ||||||
|  |         "keymap_common.h", | ||||||
|  |     ], | ||||||
|  |     'filler': "-+.'!:x", | ||||||
|  |     'separator': "|", | ||||||
|  |     'default_key_prefix': ["KC_"], | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SECTIONS = [ | ||||||
|  |     'layout_config', | ||||||
|  |     'layers', | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #       Markdown Parsing | ||||||
|  | 
 | ||||||
|  | ONELINE_COMMENT_RE = re.compile(r""" | ||||||
|  |     ^                       # comment must be at the start of the line | ||||||
|  |     \s*                     # arbitrary whitespace | ||||||
|  |     //                      # start of the comment | ||||||
|  |     (.*)                    # the comment | ||||||
|  |     $                       # until the end of line | ||||||
|  | """, re.MULTILINE | re.VERBOSE | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | INLINE_COMMENT_RE = re.compile(r""" | ||||||
|  |     ([\,\"\[\]\{\}\d])      # anythig that might end a expression | ||||||
|  |     \s+                     # comment must be preceded by whitespace | ||||||
|  |     //                      # start of the comment | ||||||
|  |     \s                      # and succeded by whitespace | ||||||
|  |     (?:[^\"\]\}\{\[]*)      # the comment (except things which might be json) | ||||||
|  |     $                       # until the end of line | ||||||
|  | """, re.MULTILINE | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | TRAILING_COMMA_RE = re.compile(r""" | ||||||
|  |     ,                       # the comma | ||||||
|  |     (?:\s*)                 # arbitrary whitespace | ||||||
|  |     $                       # only works if the trailing comma is followed by newline | ||||||
|  |     (\s*)                   # arbitrary whitespace | ||||||
|  |     ([\]\}])                # end of an array or object | ||||||
|  | """, re.MULTILINE | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def loads(raw_data): | ||||||
|  |     if isinstance(raw_data, bytes): | ||||||
|  |         raw_data = raw_data.decode('utf-8') | ||||||
|  | 
 | ||||||
|  |     raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) | ||||||
|  |     raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) | ||||||
|  |     raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data) | ||||||
|  |     return json.loads(raw_data) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_config(path): | ||||||
|  |     def reset_section(): | ||||||
|  |         section.update({ | ||||||
|  |             'name': section.get('name', ""), | ||||||
|  |             'sub_name': "", | ||||||
|  |             'start_line': -1, | ||||||
|  |             'end_line': -1, | ||||||
|  |             'code_lines': [], | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|  |     def start_section(line_index, line): | ||||||
|  |         end_section() | ||||||
|  |         if line.startswith("# "): | ||||||
|  |             name = line[2:] | ||||||
|  |         elif line.startswith("## "): | ||||||
|  |             name = line[3:] | ||||||
|  |         else: | ||||||
|  |             name = "" | ||||||
|  | 
 | ||||||
|  |         name = name.strip().replace(" ", "_").lower() | ||||||
|  |         if name in SECTIONS: | ||||||
|  |             section['name'] = name | ||||||
|  |         else: | ||||||
|  |             section['sub_name'] = name | ||||||
|  |         section['start_line'] = line_index | ||||||
|  | 
 | ||||||
|  |     def end_section(): | ||||||
|  |         if section['start_line'] >= 0: | ||||||
|  |             if section['name'] == 'layout_config': | ||||||
|  |                 config.update(loads("\n".join( | ||||||
|  |                     section['code_lines'] | ||||||
|  |                 ))) | ||||||
|  |             elif section['sub_name'].startswith('layer'): | ||||||
|  |                 layer_name = section['sub_name'] | ||||||
|  |                 config['layer_lines'][layer_name] = section['code_lines'] | ||||||
|  | 
 | ||||||
|  |         reset_section() | ||||||
|  | 
 | ||||||
|  |     def amend_section(line_index, line): | ||||||
|  |         section['end_line'] = line_index | ||||||
|  |         section['code_lines'].append(line) | ||||||
|  | 
 | ||||||
|  |     config = DEFAULT_CONFIG.copy() | ||||||
|  |     config.update({ | ||||||
|  |         'layer_lines': collections.OrderedDict(), | ||||||
|  |         'macro_ids': {'UM'}, | ||||||
|  |         'unicode_macros': {}, | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     section = {} | ||||||
|  |     reset_section() | ||||||
|  | 
 | ||||||
|  |     with io.open(path, encoding="utf-8") as fh: | ||||||
|  |         for i, line in enumerate(fh): | ||||||
|  |             if line.startswith("#"): | ||||||
|  |                 start_section(i, line) | ||||||
|  |             elif line.startswith("    "): | ||||||
|  |                 amend_section(i, line[4:]) | ||||||
|  |             else: | ||||||
|  |                 # TODO: maybe parse description | ||||||
|  |                 pass | ||||||
|  | 
 | ||||||
|  |     end_section() | ||||||
|  |     assert 'layout' in config | ||||||
|  |     return config | ||||||
|  | 
 | ||||||
|  | #       header file parsing | ||||||
|  | 
 | ||||||
|  | IF0_RE = re.compile(r""" | ||||||
|  |     ^ | ||||||
|  |     #if 0 | ||||||
|  |     $.*? | ||||||
|  |     #endif | ||||||
|  | """, re.MULTILINE | re.DOTALL | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COMMENT_RE = re.compile(r""" | ||||||
|  |     /\* | ||||||
|  |     .*? | ||||||
|  |     \*/" | ||||||
|  | """, re.MULTILINE | re.DOTALL | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def read_header_file(path): | ||||||
|  |     with io.open(path, encoding="utf-8") as fh: | ||||||
|  |         data = fh.read() | ||||||
|  |     data, _ = COMMENT_RE.subn("", data) | ||||||
|  |     data, _ = IF0_RE.subn("", data) | ||||||
|  |     return data | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def regex_partial(re_str_fmt, flags): | ||||||
|  |     def partial(*args, **kwargs): | ||||||
|  |         re_str = re_str_fmt.format(*args, **kwargs) | ||||||
|  |         return re.compile(re_str, flags) | ||||||
|  |     return partial | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | KEYDEF_REP = regex_partial(r""" | ||||||
|  |     #define | ||||||
|  |     \s | ||||||
|  |     ( | ||||||
|  |         (?:{})          # the prefixes | ||||||
|  |         (?:\w+)         # the key name | ||||||
|  |     )                   # capture group end | ||||||
|  | """, re.MULTILINE | re.DOTALL | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ENUM_RE = re.compile(r""" | ||||||
|  |     ( | ||||||
|  |         enum | ||||||
|  |         \s\w+\s | ||||||
|  |         \{ | ||||||
|  |         .*?             # the enum content | ||||||
|  |         \} | ||||||
|  |         ; | ||||||
|  |     )                   # capture group end | ||||||
|  | """, re.MULTILINE | re.DOTALL | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ENUM_KEY_REP = regex_partial(r""" | ||||||
|  |     ( | ||||||
|  |         {}              # the prefixes | ||||||
|  |         \w+             # the key name | ||||||
|  |     )                   # capture group end | ||||||
|  | """, re.MULTILINE | re.DOTALL | re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_keydefs(config, data): | ||||||
|  |     prefix_options = "|".join(config['key_prefixes']) | ||||||
|  |     keydef_re = KEYDEF_REP(prefix_options) | ||||||
|  |     enum_key_re = ENUM_KEY_REP(prefix_options) | ||||||
|  |     for match in keydef_re.finditer(data): | ||||||
|  |         yield match.groups()[0] | ||||||
|  | 
 | ||||||
|  |     for enum_match in ENUM_RE.finditer(data): | ||||||
|  |         enum = enum_match.groups()[0] | ||||||
|  |         for key_match in enum_key_re.finditer(enum): | ||||||
|  |             yield key_match.groups()[0] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_valid_keys(config, out_path): | ||||||
|  |     basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) | ||||||
|  |     dirpaths = [] | ||||||
|  |     subpaths = [] | ||||||
|  |     while len(subpaths) < 6: | ||||||
|  |         path = os.path.join(basepath, *subpaths) | ||||||
|  |         dirpaths.append(path) | ||||||
|  |         dirpaths.append(os.path.join(path, "tmk_core", "common")) | ||||||
|  |         dirpaths.append(os.path.join(path, "quantum")) | ||||||
|  |         subpaths.append('..') | ||||||
|  | 
 | ||||||
|  |     includes = set(config['keymaps_includes']) | ||||||
|  |     includes.add("keycode.h") | ||||||
|  | 
 | ||||||
|  |     valid_keycodes = set() | ||||||
|  |     for dirpath, include in it.product(dirpaths, includes): | ||||||
|  |         include_path = os.path.join(dirpath, include) | ||||||
|  |         if os.path.exists(include_path): | ||||||
|  |             header_data = read_header_file(include_path) | ||||||
|  |             valid_keycodes.update( | ||||||
|  |                 parse_keydefs(config, header_data) | ||||||
|  |             ) | ||||||
|  |     return valid_keycodes | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #       Keymap Parsing | ||||||
|  | 
 | ||||||
|  | def iter_raw_codes(layer_lines, filler, separator): | ||||||
|  |     filler_re = re.compile("[" + filler + " ]") | ||||||
|  |     for line in layer_lines: | ||||||
|  |         line, _ = filler_re.subn("", line.strip()) | ||||||
|  |         if not line: | ||||||
|  |             continue | ||||||
|  |         codes = line.split(separator) | ||||||
|  |         for code in codes[1:-1]: | ||||||
|  |             yield code | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def iter_indexed_codes(raw_codes, key_indexes): | ||||||
|  |     key_rows = {} | ||||||
|  |     key_indexes_flat = [] | ||||||
|  | 
 | ||||||
|  |     for row_index, key_indexes in enumerate(key_indexes): | ||||||
|  |         for key_index in key_indexes: | ||||||
|  |             key_rows[key_index] = row_index | ||||||
|  |         key_indexes_flat.extend(key_indexes) | ||||||
|  |     assert len(raw_codes) == len(key_indexes_flat) | ||||||
|  |     for raw_code, key_index in zip(raw_codes, key_indexes_flat): | ||||||
|  |         # we keep track of the row mostly for layout purposes | ||||||
|  |         yield raw_code, key_index, key_rows[key_index] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | LAYER_CHANGE_RE = re.compile(r""" | ||||||
|  |     (DF|TG|MO)\(\d+\) | ||||||
|  | """, re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | MACRO_RE = re.compile(r""" | ||||||
|  |     M\(\w+\) | ||||||
|  | """, re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | UNICODE_RE = re.compile(r""" | ||||||
|  |     U[0-9A-F]{4} | ||||||
|  | """, re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | NON_CODE = re.compile(r""" | ||||||
|  |     ^[^A-Z0-9_]$ | ||||||
|  | """, re.VERBOSE) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_uni_code(raw_code): | ||||||
|  |     macro_id = "UC_" + ( | ||||||
|  |         unicodedata.name(raw_code) | ||||||
|  |         .replace(" ", "_") | ||||||
|  |         .replace("-", "_") | ||||||
|  |     ) | ||||||
|  |     code = "M({})".format(macro_id) | ||||||
|  |     uc_hex = "{:04X}".format(ord(raw_code)) | ||||||
|  |     return code, macro_id, uc_hex | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_key_code(raw_code, key_prefixes, valid_keycodes): | ||||||
|  |     if raw_code in valid_keycodes: | ||||||
|  |         return raw_code | ||||||
|  | 
 | ||||||
|  |     for prefix in key_prefixes: | ||||||
|  |         code = prefix + raw_code | ||||||
|  |         if code in valid_keycodes: | ||||||
|  |             return code | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_code(raw_code, key_prefixes, valid_keycodes): | ||||||
|  |     if not raw_code: | ||||||
|  |         return 'KC_TRNS', None, None | ||||||
|  | 
 | ||||||
|  |     if LAYER_CHANGE_RE.match(raw_code): | ||||||
|  |         return raw_code, None, None | ||||||
|  | 
 | ||||||
|  |     if MACRO_RE.match(raw_code): | ||||||
|  |         macro_id = raw_code[2:-1] | ||||||
|  |         return raw_code, macro_id, None | ||||||
|  | 
 | ||||||
|  |     if UNICODE_RE.match(raw_code): | ||||||
|  |         hex_code = raw_code[1:] | ||||||
|  |         return parse_uni_code(chr(int(hex_code, 16))) | ||||||
|  | 
 | ||||||
|  |     if NON_CODE.match(raw_code): | ||||||
|  |         return parse_uni_code(raw_code) | ||||||
|  | 
 | ||||||
|  |     code = parse_key_code(raw_code, key_prefixes, valid_keycodes) | ||||||
|  |     return code, None, None | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): | ||||||
|  |     keymap = {} | ||||||
|  |     raw_codes = list(iter_raw_codes( | ||||||
|  |         layer_lines, config['filler'], config['separator'] | ||||||
|  |     )) | ||||||
|  |     indexed_codes = iter_indexed_codes(raw_codes, key_indexes) | ||||||
|  |     key_prefixes = config['key_prefixes'] | ||||||
|  |     for raw_code, key_index, row_index in indexed_codes: | ||||||
|  |         code, macro_id, uc_hex = parse_code( | ||||||
|  |             raw_code, key_prefixes, valid_keycodes | ||||||
|  |         ) | ||||||
|  |         # TODO: line numbers for invalid codes | ||||||
|  |         err_msg = "Could not parse key '{}' on row {}".format( | ||||||
|  |             raw_code, row_index | ||||||
|  |         ) | ||||||
|  |         assert code is not None, err_msg | ||||||
|  |         # print(repr(raw_code), repr(code), macro_id, uc_hex) | ||||||
|  |         if macro_id: | ||||||
|  |             config['macro_ids'].add(macro_id) | ||||||
|  |         if uc_hex: | ||||||
|  |             config['unicode_macros'][macro_id] = uc_hex | ||||||
|  |         keymap[key_index] = (code, row_index) | ||||||
|  |     return keymap | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def parse_keymaps(config, valid_keycodes): | ||||||
|  |     keymaps = collections.OrderedDict() | ||||||
|  |     key_indexes = config.get( | ||||||
|  |         'key_indexes', KEYBOARD_LAYOUTS[config['layout']] | ||||||
|  |     ) | ||||||
|  |     # TODO: maybe validate key_indexes | ||||||
|  | 
 | ||||||
|  |     for layer_name, layer_lines, in config['layer_lines'].items(): | ||||||
|  |         keymaps[layer_name] = parse_keymap( | ||||||
|  |             config, key_indexes, layer_lines, valid_keycodes | ||||||
|  |         ) | ||||||
|  |     return keymaps | ||||||
|  | 
 | ||||||
|  | #       keymap.c output | ||||||
|  | 
 | ||||||
|  | USERCODE = """ | ||||||
|  | // Runs just one time when the keyboard initializes. | ||||||
|  | void matrix_init_user(void) { | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // Runs constantly in the background, in a loop. | ||||||
|  | void matrix_scan_user(void) { | ||||||
|  |     uint8_t layer = biton32(layer_state); | ||||||
|  | 
 | ||||||
|  |     ergodox_board_led_off(); | ||||||
|  |     ergodox_right_led_1_off(); | ||||||
|  |     ergodox_right_led_2_off(); | ||||||
|  |     ergodox_right_led_3_off(); | ||||||
|  |     switch (layer) { | ||||||
|  |         case L1: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             break; | ||||||
|  |         case L2: | ||||||
|  |             ergodox_right_led_2_on(); | ||||||
|  |             break; | ||||||
|  |         case L3: | ||||||
|  |             ergodox_right_led_3_on(); | ||||||
|  |             break; | ||||||
|  |         case L4: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             ergodox_right_led_2_on(); | ||||||
|  |             break; | ||||||
|  |         case L5: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             ergodox_right_led_3_on(); | ||||||
|  |             break; | ||||||
|  |         // case L6: | ||||||
|  |         //     ergodox_right_led_2_on(); | ||||||
|  |         //     ergodox_right_led_3_on(); | ||||||
|  |         //     break; | ||||||
|  |         // case L7: | ||||||
|  |         //     ergodox_right_led_1_on(); | ||||||
|  |         //     ergodox_right_led_2_on(); | ||||||
|  |         //     ergodox_right_led_3_on(); | ||||||
|  |         //     break; | ||||||
|  |         default: | ||||||
|  |             ergodox_board_led_off(); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | MACROCODE = """ | ||||||
|  | #define UC_MODE_WIN 0 | ||||||
|  | #define UC_MODE_LINUX 1 | ||||||
|  | #define UC_MODE_OSX 2 | ||||||
|  | 
 | ||||||
|  | // TODO: allow default mode to be configured | ||||||
|  | static uint16_t unicode_mode = UC_MODE_WIN; | ||||||
|  | 
 | ||||||
|  | uint16_t hextokeycode(uint8_t hex) {{ | ||||||
|  |     if (hex == 0x0) {{ | ||||||
|  |         return KC_P0; | ||||||
|  |     }} | ||||||
|  |     if (hex < 0xA) {{ | ||||||
|  |         return KC_P1 + (hex - 0x1); | ||||||
|  |     }} | ||||||
|  |     return KC_A + (hex - 0xA); | ||||||
|  | }} | ||||||
|  | 
 | ||||||
|  | void unicode_action_function(uint16_t hi, uint16_t lo) {{ | ||||||
|  |     switch (unicode_mode) {{ | ||||||
|  |     case UC_MODE_WIN: | ||||||
|  |         register_code(KC_LALT); | ||||||
|  | 
 | ||||||
|  |         register_code(KC_PPLS); | ||||||
|  |         unregister_code(KC_PPLS); | ||||||
|  | 
 | ||||||
|  |         register_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         register_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((lo & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((lo & 0x0F))); | ||||||
|  | 
 | ||||||
|  |         unregister_code(KC_LALT); | ||||||
|  |         break; | ||||||
|  |     case UC_MODE_LINUX: | ||||||
|  |         register_code(KC_LCTL); | ||||||
|  |         register_code(KC_LSFT); | ||||||
|  | 
 | ||||||
|  |         register_code(KC_U); | ||||||
|  |         unregister_code(KC_U); | ||||||
|  | 
 | ||||||
|  |         register_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         register_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((lo & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((lo & 0x0F))); | ||||||
|  | 
 | ||||||
|  |         unregister_code(KC_LCTL); | ||||||
|  |         unregister_code(KC_LSFT); | ||||||
|  |         break; | ||||||
|  |     case UC_MODE_OSX: | ||||||
|  |         break; | ||||||
|  |     }} | ||||||
|  | }} | ||||||
|  | 
 | ||||||
|  | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ | ||||||
|  |     if (!record->event.pressed) {{ | ||||||
|  |         return MACRO_NONE; | ||||||
|  |     }} | ||||||
|  |     // MACRODOWN only works in this function | ||||||
|  |     switch(id) {{ | ||||||
|  |         case UM: | ||||||
|  |             unicode_mode = (unicode_mode + 1) % 2; | ||||||
|  |             break; | ||||||
|  | {macro_cases} | ||||||
|  | {unicode_macro_cases} | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |     }} | ||||||
|  |     return MACRO_NONE; | ||||||
|  | }}; | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | UNICODE_MACRO_TEMPLATE = """ | ||||||
|  | case {macro_id}: | ||||||
|  |     unicode_action_function(0x{hi:02x}, 0x{lo:02x}); | ||||||
|  |     break; | ||||||
|  | """.strip() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def unicode_macro_cases(config): | ||||||
|  |     for macro_id, uc_hex in config['unicode_macros'].items(): | ||||||
|  |         hi = int(uc_hex, 16) >> 8 | ||||||
|  |         lo = int(uc_hex, 16) & 0xFF | ||||||
|  |         unimacro_keys = ", ".join( | ||||||
|  |             "T({})".format( | ||||||
|  |                 "KP_" + digit if digit.isdigit() else digit | ||||||
|  |             ) for digit in uc_hex | ||||||
|  |         ) | ||||||
|  |         yield UNICODE_MACRO_TEMPLATE.format( | ||||||
|  |             macro_id=macro_id, hi=hi, lo=lo | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def iter_keymap_lines(keymap, row_indents=None): | ||||||
|  |     col_widths = {} | ||||||
|  |     col = 0 | ||||||
|  |     # first pass, figure out the column widths | ||||||
|  |     prev_row_index = None | ||||||
|  |     for code, row_index in keymap.values(): | ||||||
|  |         if row_index != prev_row_index: | ||||||
|  |             col = 0 | ||||||
|  |             if row_indents: | ||||||
|  |                 col = row_indents[row_index] | ||||||
|  |         col_widths[col] = max(len(code), col_widths.get(col, 0)) | ||||||
|  |         prev_row_index = row_index | ||||||
|  |         col += 1 | ||||||
|  | 
 | ||||||
|  |     # second pass, yield the cell values | ||||||
|  |     col = 0 | ||||||
|  |     prev_row_index = None | ||||||
|  |     for key_index in sorted(keymap): | ||||||
|  |         code, row_index = keymap[key_index] | ||||||
|  |         if row_index != prev_row_index: | ||||||
|  |             col = 0 | ||||||
|  |             yield "\n" | ||||||
|  |             if row_indents: | ||||||
|  |                 for indent_col in range(row_indents[row_index]): | ||||||
|  |                     pad = " " * (col_widths[indent_col] - 4) | ||||||
|  |                     yield (" /*-*/" + pad) | ||||||
|  |                 col = row_indents[row_index] | ||||||
|  |         else: | ||||||
|  |             yield pad | ||||||
|  |         yield " {}".format(code) | ||||||
|  |         if key_index < len(keymap) - 1: | ||||||
|  |             yield "," | ||||||
|  |             # This will be yielded on the next iteration when | ||||||
|  |             # we know that we're not at the end of a line. | ||||||
|  |             pad = " " * (col_widths[col] - len(code)) | ||||||
|  |         prev_row_index = row_index | ||||||
|  |         col += 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def iter_keymap_parts(config, keymaps): | ||||||
|  |     # includes | ||||||
|  |     for include_path in config['keymaps_includes']: | ||||||
|  |         yield '#include "{}"\n'.format(include_path) | ||||||
|  | 
 | ||||||
|  |     yield "\n" | ||||||
|  | 
 | ||||||
|  |     # definitions | ||||||
|  |     for i, macro_id in enumerate(sorted(config['macro_ids'])): | ||||||
|  |         yield "#define {} {}\n".format(macro_id, i) | ||||||
|  | 
 | ||||||
|  |     yield "\n" | ||||||
|  | 
 | ||||||
|  |     for i, layer_name in enumerate(config['layer_lines']): | ||||||
|  |         yield '#define L{0:<3} {0:<5}  // {1}\n'.format(i, layer_name) | ||||||
|  | 
 | ||||||
|  |     yield "\n" | ||||||
|  | 
 | ||||||
|  |     # keymaps | ||||||
|  |     yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" | ||||||
|  | 
 | ||||||
|  |     for i, layer_name in enumerate(config['layer_lines']): | ||||||
|  |         # comment | ||||||
|  |         layer_lines = config['layer_lines'][layer_name] | ||||||
|  |         prefixed_lines = " * " + " * ".join(layer_lines) | ||||||
|  |         yield "/*\n{} */\n".format(prefixed_lines) | ||||||
|  | 
 | ||||||
|  |         # keymap codes | ||||||
|  |         keymap = keymaps[layer_name] | ||||||
|  |         row_indents = ROW_INDENTS.get(config['layout']) | ||||||
|  |         keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) | ||||||
|  |         yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) | ||||||
|  | 
 | ||||||
|  |     yield "};\n\n" | ||||||
|  | 
 | ||||||
|  |     # no idea what this is for | ||||||
|  |     yield "const uint16_t PROGMEM fn_actions[] = {};\n" | ||||||
|  | 
 | ||||||
|  |     # macros | ||||||
|  |     yield MACROCODE.format( | ||||||
|  |         macro_cases="", | ||||||
|  |         unicode_macro_cases="\n".join(unicode_macro_cases(config)), | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     # TODO: dynamically create blinking lights | ||||||
|  |     yield USERCODE | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def main(argv=sys.argv[1:]): | ||||||
|  |     if not argv or '-h' in argv or '--help' in argv: | ||||||
|  |         print(__doc__) | ||||||
|  |         return 0 | ||||||
|  | 
 | ||||||
|  |     in_path = os.path.abspath(argv[0]) | ||||||
|  |     if not os.path.exists(in_path): | ||||||
|  |         print("No such file '{}'".format(in_path)) | ||||||
|  |         return 1 | ||||||
|  | 
 | ||||||
|  |     if len(argv) > 1: | ||||||
|  |         out_path = os.path.abspath(argv[1]) | ||||||
|  |     else: | ||||||
|  |         dirname = os.path.dirname(in_path) | ||||||
|  |         out_path = os.path.join(dirname, "keymap.c") | ||||||
|  | 
 | ||||||
|  |     config = parse_config(in_path) | ||||||
|  |     valid_keys = parse_valid_keys(config, out_path) | ||||||
|  |     keymaps = parse_keymaps(config, valid_keys) | ||||||
|  | 
 | ||||||
|  |     with io.open(out_path, mode="w", encoding="utf-8") as fh: | ||||||
|  |         for part in iter_keymap_parts(config, keymaps): | ||||||
|  |             fh.write(part) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     sys.exit(main()) | ||||||
							
								
								
									
										
											BIN
										
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										783
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										783
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,783 @@ | |||||||
|  | #include "ergodox_ez.h" | ||||||
|  | #include "action_layer.h" | ||||||
|  | #include "keymap_common.h" | ||||||
|  | #include "keymap_extras/keymap_german.h" | ||||||
|  | 
 | ||||||
|  | #define UC_ASYMPTOTICALLY_EQUAL_TO 0 | ||||||
|  | #define UC_DIVISION_SIGN 1 | ||||||
|  | #define UC_DOWNWARDS_ARROW 2 | ||||||
|  | #define UC_ELEMENT_OF 3 | ||||||
|  | #define UC_EMPTY_SET 4 | ||||||
|  | #define UC_FOR_ALL 5 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_ALPHA 6 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_BETA 7 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_CHI 8 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_DELTA 9 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_EPSILON 10 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_ETA 11 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_GAMMA 12 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_IOTA 13 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_KAPPA 14 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_LAMDA 15 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_MU 16 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_NU 17 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_OMEGA 18 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_OMICRON 19 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_PHI 20 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_PI 21 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_PSI 22 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_RHO 23 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_SIGMA 24 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_TAU 25 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_THETA 26 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_UPSILON 27 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_XI 28 | ||||||
|  | #define UC_GREEK_CAPITAL_LETTER_ZETA 29 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_ALPHA 30 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_BETA 31 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_CHI 32 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_DELTA 33 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_EPSILON 34 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_ETA 35 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_GAMMA 37 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_IOTA 38 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_KAPPA 39 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_LAMDA 40 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_MU 41 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_NU 42 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_OMEGA 43 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_OMICRON 44 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_PHI 45 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_PI 46 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_PSI 47 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_RHO 48 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_SIGMA 49 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_TAU 50 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_THETA 51 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_UPSILON 52 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_XI 53 | ||||||
|  | #define UC_GREEK_SMALL_LETTER_ZETA 54 | ||||||
|  | #define UC_INFINITY 55 | ||||||
|  | #define UC_LEFTWARDS_ARROW 56 | ||||||
|  | #define UC_MULTIPLICATION_SIGN 57 | ||||||
|  | #define UC_NOT_AN_ELEMENT_OF 58 | ||||||
|  | #define UC_NOT_EQUAL_TO 59 | ||||||
|  | #define UC_PLUS_MINUS_SIGN 60 | ||||||
|  | #define UC_RIGHTWARDS_ARROW 61 | ||||||
|  | #define UC_SUBSCRIPT_EIGHT 62 | ||||||
|  | #define UC_SUBSCRIPT_FIVE 63 | ||||||
|  | #define UC_SUBSCRIPT_FOUR 64 | ||||||
|  | #define UC_SUBSCRIPT_NINE 65 | ||||||
|  | #define UC_SUBSCRIPT_ONE 66 | ||||||
|  | #define UC_SUBSCRIPT_SEVEN 67 | ||||||
|  | #define UC_SUBSCRIPT_SIX 68 | ||||||
|  | #define UC_SUBSCRIPT_THREE 69 | ||||||
|  | #define UC_SUBSCRIPT_TWO 70 | ||||||
|  | #define UC_SUBSCRIPT_ZERO 71 | ||||||
|  | #define UC_SUPERSCRIPT_EIGHT 72 | ||||||
|  | #define UC_SUPERSCRIPT_FIVE 73 | ||||||
|  | #define UC_SUPERSCRIPT_FOUR 74 | ||||||
|  | #define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75 | ||||||
|  | #define UC_SUPERSCRIPT_NINE 76 | ||||||
|  | #define UC_SUPERSCRIPT_ONE 77 | ||||||
|  | #define UC_SUPERSCRIPT_SEVEN 78 | ||||||
|  | #define UC_SUPERSCRIPT_SIX 79 | ||||||
|  | #define UC_SUPERSCRIPT_THREE 80 | ||||||
|  | #define UC_SUPERSCRIPT_TWO 81 | ||||||
|  | #define UC_SUPERSCRIPT_ZERO 82 | ||||||
|  | #define UC_THERE_DOES_NOT_EXIST 83 | ||||||
|  | #define UC_THERE_EXISTS 84 | ||||||
|  | #define UC_UPWARDS_ARROW 85 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_EIGHTH 86 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_FIFTH 87 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_HALF 88 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_QUARTER 89 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_SIXTH 90 | ||||||
|  | #define UC_VULGAR_FRACTION_ONE_THIRD 91 | ||||||
|  | #define UC_VULGAR_FRACTION_THREE_QUARTERS 92 | ||||||
|  | #define UC_VULGAR_FRACTION_TWO_THIRDS 93 | ||||||
|  | #define UM 94 | ||||||
|  | 
 | ||||||
|  | #define L0   0      // layer_0
 | ||||||
|  | #define L1   1      // layer_1
 | ||||||
|  | #define L2   2      // layer_2
 | ||||||
|  | #define L3   3      // layer_3
 | ||||||
|  | #define L4   4      // layer_4
 | ||||||
|  | #define L5   5      // layer_5
 | ||||||
|  | #define L6   6      // layer_6
 | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT| | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |INS  |TG(2)| !M(UM)|DELT | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     | APP | ! PGUP|     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L0] = KEYMAP( | ||||||
|  |  MO(5),   DE_1,     DE_2,     DE_3,    DE_4,    DE_5,    DE_ACUT, | ||||||
|  |  MO(4),   DE_X,     DE_P,     DE_F,    DE_W,    DE_G,    KC_HOME, | ||||||
|  |  MO(1),   DE_U,     DE_I,     DE_A,    DE_E,    DE_O, | ||||||
|  |  MO(3),   DE_UE,    DE_OE,    DE_AE,   DE_C,    DE_V,    KC_END, | ||||||
|  |  KC_TRNS, KC_TRNS,  KC_LGUI,  KC_LALT, KC_LCTL, | ||||||
|  |  /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    KC_INS,  TG(2), | ||||||
|  |  /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    /*-*/    KC_APP, | ||||||
|  |  /*-*/    /*-*/     /*-*/     /*-*/    KC_BSPC, KC_LSFT, KC_ESC, | ||||||
|  |  DE_GRV,  DE_6,     DE_7,     DE_8,    DE_9,    DE_0,    DE_CIRC, | ||||||
|  |  TG(2),   DE_H,     DE_J,     DE_K,    DE_L,    DE_Q,    DE_Z, | ||||||
|  |  /*-*/    DE_S,     DE_N,     DE_R,    DE_T,    DE_D,    DE_SS, | ||||||
|  |  KC_TAB,  DE_B,     DE_M,     DE_COMM, DE_DOT,  KC_UP,   DE_Y, | ||||||
|  |  /*-*/    /*-*/     KC_RCTL,  KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, | ||||||
|  |  M(UM),   KC_DELT, | ||||||
|  |  KC_PGUP, | ||||||
|  |  KC_PGDN, KC_ENTER, KC_SPACE | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     !    |    | ←  | ↓  | →  | | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L1] = KEYMAP( | ||||||
|  |  KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS,               KC_TRNS,               KC_TRNS, | ||||||
|  |  KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR,               DE_RCBR,               KC_TRNS, | ||||||
|  |  KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC,               DE_RBRC, | ||||||
|  |  KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL,  KC_TRNS,               KC_TRNS,               KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  KC_TRNS,               KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  /*-*/                  KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,               KC_TRNS,               KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,               DE_RING,               KC_TRNS, | ||||||
|  |  KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS,               DE_DQOT,               KC_TRNS, | ||||||
|  |  /*-*/    DE_DLR,  DE_LPRN, DE_RPRN, DE_TILD,               DE_QUOT,               DE_QST, | ||||||
|  |  KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN,               M(UC_UPWARDS_ARROW),   KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT| | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L2] = KEYMAP( | ||||||
|  |  KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PEQL, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_P7,   KC_P8,   KC_P9,   KC_PAST, KC_PSLS, | ||||||
|  |  /*-*/    KC_TRNS, KC_P4,   KC_P5,   KC_P6,   KC_PMNS, KC_PMNS, | ||||||
|  |  KC_NLCK, KC_TRNS, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PPLS, | ||||||
|  |  /*-*/    /*-*/    KC_P0,   KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L3] = KEYMAP( | ||||||
|  |  KC_TRNS, M(UC_SUPERSCRIPT_ONE),           M(UC_SUPERSCRIPT_TWO),                  M(UC_SUPERSCRIPT_THREE),          M(UC_SUPERSCRIPT_FOUR),               M(UC_SUPERSCRIPT_FIVE),          M(UC_FOR_ALL), | ||||||
|  |  KC_TRNS, M(UC_MULTIPLICATION_SIGN),       M(UC_VULGAR_FRACTION_ONE_HALF),         M(UC_DIVISION_SIGN),              M(UC_VULGAR_FRACTION_ONE_QUARTER),    M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                         M(UC_PLUS_MINUS_SIGN),                  DE_AT,                            DE_EURO,                              M(UC_EMPTY_SET), | ||||||
|  |  KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO),                     M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO),   KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                         KC_TRNS,                                KC_TRNS,                          KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 KC_TRNS,                         KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 /*-*/                            KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                            /*-*/                                   /*-*/                             KC_TRNS,                              KC_TRNS,                         KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_SUPERSCRIPT_SIX),           M(UC_SUPERSCRIPT_SEVEN),                M(UC_SUPERSCRIPT_EIGHT),          M(UC_SUPERSCRIPT_NINE),               M(UC_SUPERSCRIPT_ZERO),          KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS,                                M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS,                              KC_TRNS,                         KC_TRNS, | ||||||
|  |  /*-*/    M(UC_INFINITY),                  M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS),               M(UC_ELEMENT_OF),                     KC_TRNS,                         KC_TRNS, | ||||||
|  |  KC_TRNS, DE_EXLM,                         KC_TRNS,                                M(UC_THERE_DOES_NOT_EXIST),       M(UC_NOT_AN_ELEMENT_OF),              KC_TRNS,                         KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                            KC_TRNS,                                KC_TRNS,                          KC_TRNS,                              KC_TRNS,                         KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                         KC_TRNS | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L4] = KEYMAP( | ||||||
|  |  KC_TRNS, M(UC_SUBSCRIPT_ONE),              M(UC_SUBSCRIPT_TWO),            M(UC_SUBSCRIPT_THREE),          M(UC_SUBSCRIPT_FOUR),             M(UC_SUBSCRIPT_FIVE),             KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI),     M(UC_GREEK_SMALL_LETTER_PI),    M(UC_GREEK_SMALL_LETTER_PHI),   M(UC_GREEK_SMALL_LETTER_OMEGA),   M(UC_GREEK_SMALL_LETTER_GAMMA),   KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA),  M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON), | ||||||
|  |  KC_TRNS, KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                          KC_TRNS,                        KC_TRNS,                        KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             KC_TRNS,                          KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             /*-*/                             KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                             /*-*/                           /*-*/                           KC_TRNS,                          KC_TRNS,                          KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_SUBSCRIPT_SIX),              M(UC_SUBSCRIPT_SEVEN),          M(UC_SUBSCRIPT_EIGHT),          M(UC_SUBSCRIPT_NINE),             M(UC_SUBSCRIPT_ZERO),             KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA),     M(UC_GREEK_SMALL_LETTER_XI),    M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA),   KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_ZETA), | ||||||
|  |  /*-*/    M(UC_GREEK_SMALL_LETTER_SIGMA),   M(UC_GREEK_SMALL_LETTER_NU),    M(UC_GREEK_SMALL_LETTER_RHO),   M(UC_GREEK_SMALL_LETTER_TAU),     M(UC_GREEK_SMALL_LETTER_DELTA),   M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA), | ||||||
|  |  KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA),    M(UC_GREEK_SMALL_LETTER_MU),    KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_PSI), | ||||||
|  |  /*-*/    /*-*/                             KC_TRNS,                        KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                          KC_TRNS | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L5] = KEYMAP( | ||||||
|  |  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI),     M(UC_GREEK_CAPITAL_LETTER_PI),    M(UC_GREEK_CAPITAL_LETTER_PHI),   M(UC_GREEK_CAPITAL_LETTER_OMEGA),   M(UC_GREEK_CAPITAL_LETTER_GAMMA),   KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA),  M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON), | ||||||
|  |  KC_TRNS, KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               KC_TRNS,                            KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               /*-*/                               KC_TRNS, | ||||||
|  |  /*-*/    /*-*/                               /*-*/                             /*-*/                             KC_TRNS,                            KC_TRNS,                            KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA),     M(UC_GREEK_CAPITAL_LETTER_XI),    M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA),   KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_ZETA), | ||||||
|  |  /*-*/    M(UC_GREEK_CAPITAL_LETTER_SIGMA),   M(UC_GREEK_CAPITAL_LETTER_NU),    M(UC_GREEK_CAPITAL_LETTER_RHO),   M(UC_GREEK_CAPITAL_LETTER_TAU),     M(UC_GREEK_CAPITAL_LETTER_DELTA),   KC_TRNS, | ||||||
|  |  KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA),    M(UC_GREEK_CAPITAL_LETTER_MU),    KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_PSI), | ||||||
|  |  /*-*/    /*-*/                               KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS,                            KC_TRNS | ||||||
|  | ), | ||||||
|  | /*
 | ||||||
|  |  * .------------------------------------.------------------------------------. | ||||||
|  |  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |  * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     | | ||||||
|  |  * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |  * |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |  * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |  *  |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |  *  '------------------------'                     '------------------------' | ||||||
|  |  *                         .-----------. .-----------. | ||||||
|  |  *                         |     |     | !     |     | | ||||||
|  |  *                   .-----+-----+-----! !-----+-----+-----. | ||||||
|  |  *                   !     !     |     | !     |     !     ! | ||||||
|  |  *                   !     !     !-----! !-----!     !     ! | ||||||
|  |  *                   |     |     |     | !     |     |     | | ||||||
|  |  *                   '-----------------' '-----------------' | ||||||
|  |  */ | ||||||
|  | [L6] = KEYMAP( | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, | ||||||
|  |  KC_TRNS, | ||||||
|  |  KC_TRNS, KC_TRNS, KC_TRNS | ||||||
|  | ), | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM fn_actions[] = {}; | ||||||
|  | 
 | ||||||
|  | #define UC_MODE_WIN 0 | ||||||
|  | #define UC_MODE_LINUX 1 | ||||||
|  | #define UC_MODE_OSX 2 | ||||||
|  | 
 | ||||||
|  | // TODO: allow default mode to be configured
 | ||||||
|  | static uint16_t unicode_mode = UC_MODE_WIN; | ||||||
|  | 
 | ||||||
|  | uint16_t hextokeycode(uint8_t hex) { | ||||||
|  |     if (hex == 0x0) { | ||||||
|  |         return KC_P0; | ||||||
|  |     } | ||||||
|  |     if (hex < 0xA) { | ||||||
|  |         return KC_P1 + (hex - 0x1); | ||||||
|  |     } | ||||||
|  |     return KC_A + (hex - 0xA); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void unicode_action_function(uint16_t hi, uint16_t lo) { | ||||||
|  |     switch (unicode_mode) { | ||||||
|  |     case UC_MODE_WIN: | ||||||
|  |         register_code(KC_LALT); | ||||||
|  | 
 | ||||||
|  |         register_code(KC_PPLS); | ||||||
|  |         unregister_code(KC_PPLS); | ||||||
|  | 
 | ||||||
|  |         register_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         register_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((lo & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((lo & 0x0F))); | ||||||
|  | 
 | ||||||
|  |         unregister_code(KC_LALT); | ||||||
|  |         break; | ||||||
|  |     case UC_MODE_LINUX: | ||||||
|  |         register_code(KC_LCTL); | ||||||
|  |         register_code(KC_LSFT); | ||||||
|  | 
 | ||||||
|  |         register_code(KC_U); | ||||||
|  |         unregister_code(KC_U); | ||||||
|  | 
 | ||||||
|  |         register_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((hi & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((hi & 0x0F))); | ||||||
|  |         register_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         unregister_code(hextokeycode((lo & 0xF0) >> 4)); | ||||||
|  |         register_code(hextokeycode((lo & 0x0F))); | ||||||
|  |         unregister_code(hextokeycode((lo & 0x0F))); | ||||||
|  | 
 | ||||||
|  |         unregister_code(KC_LCTL); | ||||||
|  |         unregister_code(KC_LSFT); | ||||||
|  |         break; | ||||||
|  |     case UC_MODE_OSX: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { | ||||||
|  |     if (!record->event.pressed) { | ||||||
|  |         return MACRO_NONE; | ||||||
|  |     } | ||||||
|  |     // MACRODOWN only works in this function
 | ||||||
|  |     switch(id) { | ||||||
|  |         case UM: | ||||||
|  |             unicode_mode = (unicode_mode + 1) % 2; | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  | case UC_GREEK_SMALL_LETTER_OMICRON: | ||||||
|  |     unicode_action_function(0x03, 0xbf); | ||||||
|  |     break; | ||||||
|  | case UC_LEFTWARDS_ARROW: | ||||||
|  |     unicode_action_function(0x21, 0x90); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_RHO: | ||||||
|  |     unicode_action_function(0x03, 0xa1); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_THREE: | ||||||
|  |     unicode_action_function(0x20, 0x83); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_EIGHTH: | ||||||
|  |     unicode_action_function(0x21, 0x5b); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_LAMDA: | ||||||
|  |     unicode_action_function(0x03, 0xbb); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_THIRD: | ||||||
|  |     unicode_action_function(0x21, 0x53); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_XI: | ||||||
|  |     unicode_action_function(0x03, 0xbe); | ||||||
|  |     break; | ||||||
|  | case UC_THERE_DOES_NOT_EXIST: | ||||||
|  |     unicode_action_function(0x22, 0x04); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_ONE: | ||||||
|  |     unicode_action_function(0x00, 0xb9); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_BETA: | ||||||
|  |     unicode_action_function(0x03, 0xb2); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_FIVE: | ||||||
|  |     unicode_action_function(0x20, 0x85); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_IOTA: | ||||||
|  |     unicode_action_function(0x03, 0x99); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_FIFTH: | ||||||
|  |     unicode_action_function(0x21, 0x55); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_PSI: | ||||||
|  |     unicode_action_function(0x03, 0xc8); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_NINE: | ||||||
|  |     unicode_action_function(0x20, 0x89); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_FOUR: | ||||||
|  |     unicode_action_function(0x20, 0x74); | ||||||
|  |     break; | ||||||
|  | case UC_RIGHTWARDS_ARROW: | ||||||
|  |     unicode_action_function(0x21, 0x92); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_SIX: | ||||||
|  |     unicode_action_function(0x20, 0x76); | ||||||
|  |     break; | ||||||
|  | case UC_DOWNWARDS_ARROW: | ||||||
|  |     unicode_action_function(0x21, 0x93); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_PI: | ||||||
|  |     unicode_action_function(0x03, 0xc0); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_TWO: | ||||||
|  |     unicode_action_function(0x00, 0xb2); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_OMEGA: | ||||||
|  |     unicode_action_function(0x03, 0xa9); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_PSI: | ||||||
|  |     unicode_action_function(0x03, 0xa8); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_FOUR: | ||||||
|  |     unicode_action_function(0x20, 0x84); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_NU: | ||||||
|  |     unicode_action_function(0x03, 0x9d); | ||||||
|  |     break; | ||||||
|  | case UC_DIVISION_SIGN: | ||||||
|  |     unicode_action_function(0x00, 0xf7); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_SIGMA: | ||||||
|  |     unicode_action_function(0x03, 0xc3); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_RHO: | ||||||
|  |     unicode_action_function(0x03, 0xc1); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_SIXTH: | ||||||
|  |     unicode_action_function(0x21, 0x59); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_GAMMA: | ||||||
|  |     unicode_action_function(0x03, 0xb3); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_TWO_THIRDS: | ||||||
|  |     unicode_action_function(0x21, 0x54); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_NU: | ||||||
|  |     unicode_action_function(0x03, 0xbd); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_ZETA: | ||||||
|  |     unicode_action_function(0x03, 0xb6); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_EPSILON: | ||||||
|  |     unicode_action_function(0x03, 0xb5); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_KAPPA: | ||||||
|  |     unicode_action_function(0x03, 0xba); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_SEVEN: | ||||||
|  |     unicode_action_function(0x20, 0x77); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_PI: | ||||||
|  |     unicode_action_function(0x03, 0xa0); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: | ||||||
|  |     unicode_action_function(0x03, 0xc2); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_XI: | ||||||
|  |     unicode_action_function(0x03, 0x9e); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_THETA: | ||||||
|  |     unicode_action_function(0x03, 0xb8); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_ETA: | ||||||
|  |     unicode_action_function(0x03, 0xb7); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_TWO: | ||||||
|  |     unicode_action_function(0x20, 0x82); | ||||||
|  |     break; | ||||||
|  | case UC_ASYMPTOTICALLY_EQUAL_TO: | ||||||
|  |     unicode_action_function(0x22, 0x43); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_ALPHA: | ||||||
|  |     unicode_action_function(0x03, 0xb1); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_PHI: | ||||||
|  |     unicode_action_function(0x03, 0xa6); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_PHI: | ||||||
|  |     unicode_action_function(0x03, 0xc6); | ||||||
|  |     break; | ||||||
|  | case UC_INFINITY: | ||||||
|  |     unicode_action_function(0x22, 0x1e); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_OMICRON: | ||||||
|  |     unicode_action_function(0x03, 0x9f); | ||||||
|  |     break; | ||||||
|  | case UC_ELEMENT_OF: | ||||||
|  |     unicode_action_function(0x22, 0x08); | ||||||
|  |     break; | ||||||
|  | case UC_MULTIPLICATION_SIGN: | ||||||
|  |     unicode_action_function(0x00, 0xd7); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_ZERO: | ||||||
|  |     unicode_action_function(0x20, 0x80); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_SIGMA: | ||||||
|  |     unicode_action_function(0x03, 0xa3); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_OMEGA: | ||||||
|  |     unicode_action_function(0x03, 0xc9); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_ONE: | ||||||
|  |     unicode_action_function(0x20, 0x81); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_ZETA: | ||||||
|  |     unicode_action_function(0x03, 0x96); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_TAU: | ||||||
|  |     unicode_action_function(0x03, 0xc4); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_FIVE: | ||||||
|  |     unicode_action_function(0x20, 0x75); | ||||||
|  |     break; | ||||||
|  | case UC_THERE_EXISTS: | ||||||
|  |     unicode_action_function(0x22, 0x03); | ||||||
|  |     break; | ||||||
|  | case UC_PLUS_MINUS_SIGN: | ||||||
|  |     unicode_action_function(0x00, 0xb1); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_THREE_QUARTERS: | ||||||
|  |     unicode_action_function(0x00, 0xbe); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_THREE: | ||||||
|  |     unicode_action_function(0x00, 0xb3); | ||||||
|  |     break; | ||||||
|  | case UC_EMPTY_SET: | ||||||
|  |     unicode_action_function(0x22, 0x05); | ||||||
|  |     break; | ||||||
|  | case UC_UPWARDS_ARROW: | ||||||
|  |     unicode_action_function(0x21, 0x91); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_NINE: | ||||||
|  |     unicode_action_function(0x20, 0x79); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_DELTA: | ||||||
|  |     unicode_action_function(0x03, 0xb4); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_MU: | ||||||
|  |     unicode_action_function(0x03, 0xbc); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_KAPPA: | ||||||
|  |     unicode_action_function(0x03, 0x9a); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_EIGHT: | ||||||
|  |     unicode_action_function(0x20, 0x88); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_ALPHA: | ||||||
|  |     unicode_action_function(0x03, 0x91); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_SEVEN: | ||||||
|  |     unicode_action_function(0x20, 0x87); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_BETA: | ||||||
|  |     unicode_action_function(0x03, 0x92); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_ETA: | ||||||
|  |     unicode_action_function(0x03, 0x97); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_EIGHT: | ||||||
|  |     unicode_action_function(0x20, 0x78); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_ZERO: | ||||||
|  |     unicode_action_function(0x20, 0x70); | ||||||
|  |     break; | ||||||
|  | case UC_NOT_AN_ELEMENT_OF: | ||||||
|  |     unicode_action_function(0x22, 0x09); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_UPSILON: | ||||||
|  |     unicode_action_function(0x03, 0xc5); | ||||||
|  |     break; | ||||||
|  | case UC_NOT_EQUAL_TO: | ||||||
|  |     unicode_action_function(0x22, 0x60); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_CHI: | ||||||
|  |     unicode_action_function(0x03, 0xa7); | ||||||
|  |     break; | ||||||
|  | case UC_FOR_ALL: | ||||||
|  |     unicode_action_function(0x22, 0x00); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_TAU: | ||||||
|  |     unicode_action_function(0x03, 0xa4); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_QUARTER: | ||||||
|  |     unicode_action_function(0x00, 0xbc); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_CHI: | ||||||
|  |     unicode_action_function(0x03, 0xc7); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_THETA: | ||||||
|  |     unicode_action_function(0x03, 0x98); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_SMALL_LETTER_IOTA: | ||||||
|  |     unicode_action_function(0x03, 0xb9); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_LAMDA: | ||||||
|  |     unicode_action_function(0x03, 0x9b); | ||||||
|  |     break; | ||||||
|  | case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: | ||||||
|  |     unicode_action_function(0x20, 0x7f); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_UPSILON: | ||||||
|  |     unicode_action_function(0x03, 0xa5); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_MU: | ||||||
|  |     unicode_action_function(0x03, 0x9c); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_EPSILON: | ||||||
|  |     unicode_action_function(0x03, 0x95); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_GAMMA: | ||||||
|  |     unicode_action_function(0x03, 0x93); | ||||||
|  |     break; | ||||||
|  | case UC_SUBSCRIPT_SIX: | ||||||
|  |     unicode_action_function(0x20, 0x86); | ||||||
|  |     break; | ||||||
|  | case UC_GREEK_CAPITAL_LETTER_DELTA: | ||||||
|  |     unicode_action_function(0x03, 0x94); | ||||||
|  |     break; | ||||||
|  | case UC_VULGAR_FRACTION_ONE_HALF: | ||||||
|  |     unicode_action_function(0x00, 0xbd); | ||||||
|  |     break; | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  |     return MACRO_NONE; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // Runs just one time when the keyboard initializes.
 | ||||||
|  | void matrix_init_user(void) { | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // Runs constantly in the background, in a loop.
 | ||||||
|  | void matrix_scan_user(void) { | ||||||
|  |     uint8_t layer = biton32(layer_state); | ||||||
|  | 
 | ||||||
|  |     ergodox_board_led_off(); | ||||||
|  |     ergodox_right_led_1_off(); | ||||||
|  |     ergodox_right_led_2_off(); | ||||||
|  |     ergodox_right_led_3_off(); | ||||||
|  |     switch (layer) { | ||||||
|  |         case L1: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             break; | ||||||
|  |         case L2: | ||||||
|  |             ergodox_right_led_2_on(); | ||||||
|  |             break; | ||||||
|  |         case L3: | ||||||
|  |             ergodox_right_led_3_on(); | ||||||
|  |             break; | ||||||
|  |         case L4: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             ergodox_right_led_2_on(); | ||||||
|  |             break; | ||||||
|  |         case L5: | ||||||
|  |             ergodox_right_led_1_on(); | ||||||
|  |             ergodox_right_led_3_on(); | ||||||
|  |             break; | ||||||
|  |         // case L6:
 | ||||||
|  |         //     ergodox_right_led_2_on();
 | ||||||
|  |         //     ergodox_right_led_3_on();
 | ||||||
|  |         //     break;
 | ||||||
|  |         // case L7:
 | ||||||
|  |         //     ergodox_right_led_1_on();
 | ||||||
|  |         //     ergodox_right_led_2_on();
 | ||||||
|  |         //     ergodox_right_led_3_on();
 | ||||||
|  |         //     break;
 | ||||||
|  |         default: | ||||||
|  |             ergodox_board_led_off(); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | }; | ||||||
							
								
								
									
										188
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,188 @@ | |||||||
|  | # ManuNeo Ergodox Keyboard Layout | ||||||
|  | 
 | ||||||
|  | Compile this file to a `keymap.c` file using `compile_keymap.py` | ||||||
|  | 
 | ||||||
|  |     python compile_keymap.py keymaps/german-manuneo/keymap.md | ||||||
|  | 
 | ||||||
|  | Tested with python 2.7 and python 3.4 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Layout Config | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |         "layout": "ergodox_ez", | ||||||
|  |         "keymaps_includes": [ | ||||||
|  |             "ergodox_ez.h", | ||||||
|  |             "action_layer.h", | ||||||
|  |             "keymap_common.h", | ||||||
|  |             "keymap_extras/keymap_german.h", | ||||||
|  |         ], | ||||||
|  |         "key_prefixes": ["DE_", "KC_"], | ||||||
|  |         "macros": { | ||||||
|  |             // TODO: implement macros | ||||||
|  |             // "MUC": "", | ||||||
|  |         }, | ||||||
|  |         // TODO: implement default unicode mode | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Layers | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 0 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT| | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |INS  |TG(2)| !M(UM)|DELT | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     | APP | ! PGUP|     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 1 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     !    |    | ←  | ↓  | →  | | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 2 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT| | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 3 | ||||||
|  | 
 | ||||||
|  | http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 4 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 5 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Layer 6 | ||||||
|  | 
 | ||||||
|  |     .------------------------------------.------------------------------------. | ||||||
|  |     |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |     !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     | | ||||||
|  |     !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----! | ||||||
|  |     |     |    |    |    |    |    |     |     |    |    |    |    |    |     | | ||||||
|  |     '-----+----+----+----+----+----------'----------+----+----+----+----+-----' | ||||||
|  |      |    |    |    |    |    |                     !    |    |    |    |    | | ||||||
|  |      '------------------------'                     '------------------------' | ||||||
|  |                             .-----------. .-----------. | ||||||
|  |                             |     |     | !     |     | | ||||||
|  |                       .-----+-----+-----! !-----+-----+-----. | ||||||
|  |                       !     !     |     | !     |     !     ! | ||||||
|  |                       !     !     !-----! !-----!     !     ! | ||||||
|  |                       |     |     |     | !     |     |     | | ||||||
|  |                       '-----------------' '-----------------' | ||||||
|  | 
 | ||||||
| @ -13,9 +13,11 @@ | |||||||
| #define M_CTRL_CMDV 1 | #define M_CTRL_CMDV 1 | ||||||
| #define M_CTRL_CMDC 2 | #define M_CTRL_CMDC 2 | ||||||
| #define M_MEH_SH_ACUT 3 | #define M_MEH_SH_ACUT 3 | ||||||
| #define M_DE_PLUS_CTRLALT 12 | #define M_DE_OSX_PLUS_CTRLALT 12 | ||||||
| #define M_DE_CIRC_CTRLCMD 13 | #define M_DE_OSX_CIRC_CTRLCMD 13 | ||||||
| #define M_TOGGLE_5 14 | #define M_TOGGLE_5 14 | ||||||
|  | #define M_CTL_SFT_HASH 15 | ||||||
|  | #define M_LGUI_SHFT 16 | ||||||
| 
 | 
 | ||||||
| #define SM_SMILE 4 | #define SM_SMILE 4 | ||||||
| #define SM_SMIRK 5 | #define SM_SMIRK 5 | ||||||
| @ -30,19 +32,19 @@ | |||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
| /* Keymap 0: Basic layer
 | /* Keymap 0: Basic layer
 | ||||||
|  * |  * | ||||||
|  * ,--------------------------------------------------.           ,--------------------------------------------------. |  * ,-----------------------------------------------------.           ,--------------------------------------------------. | ||||||
|  * |  ESC   |   1  |   2  |   3  |   4  |   5  |CMD-V |           |CMD-C |   6  |   7  |   8  |   9  |   0  |   ß    | |  * |  ESC   |   1  |   2  |   3  |   4  |   5  |CTL_SFT/#|           |CTL_SFT/#|   6  |   7  |   8  |   9  |   0  |   ß    | | ||||||
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| |  * |--------+------+------+------+------+----------------|           |---------+------+------+------+------+------+--------| | ||||||
|  * |  TAB   |   Q  |   W  |   E  |   R  |   T  | CMD     |           | CMD     |   Z  |   U  |   I  |   O  |   P  |   ü    | |  * |  TAB   |   Q  |   W  |   E  |   R  |   T  | CMD     |           | CMD     |   Z  |   U  |   I  |   O  |   P  |   ü    | | ||||||
|  * |--------+------+------+------+------+------|         |           |         |------+------+------+------+------+--------| |  * |--------+------+------+------+------+------|         |           |         |------+------+------+------+------+--------| | ||||||
|  * |  LALT  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ö  |  ä/RALT| |  * |  LALT  |   A  |   S  |   D  |   F  |   G  |---------|           |---------|   H |   J  |   K  |   L  |   ö  |  ä/RALT| | ||||||
|  * |--------+------+------+------+------+------| LALT    |           | RALT    |------+------+------+------+------+--------| |  * |--------+------+------+------+------+------| LALT    |           | RALT    |------+------+------+------+------+--------| | ||||||
|  * | LShift |Y/Ctrl|   X  |   C  |   V  |   B  |         |           |         |   N  |   M  |   ,  |   .  |-/Ctrl| RShift | |  * | LShift |Y/Ctrl|   X  |   C  |   V  |   B  |         |           |         |   N  |   M  |   ,  |   .  |-/Ctrl| RShift | | ||||||
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' |  * `--------+------+------+------+------+----------------'           `-------------+------+------+------+------+--------' | ||||||
|  *   |</L1|  ^°  |AltShf| Left | Right|                                       |  Up  | Down | CMD-SHIFT |  +  | #/L1 | |  *   |</L1| ^°/CTRL_CMD | +/CTRL_ALT | UP | DOWN|                    |  Left  | Right | CMD-SHFT| ALT-SHIFT  | +/L1 | | ||||||
|  *   `----------------------------------'                                       `----------------------------------' |  *   `------------------------------------------'                    `---------------------------------------------' | ||||||
|  *                                        ,-------------.       ,---------------. |  *                                        ,-------------.       ,---------------. | ||||||
|  *                                        | MDIA | Meh  |       | Hyper|  NUM   | |  *                                        |`/Meh | Media|       | NUM | ´/Hyper | | ||||||
|  *                                 ,------|------|------|       |------+--------+------. |  *                                 ,------|------|------|       |------+--------+------. | ||||||
|  *                                 |      |      | Home |       | PgUp |        |      | |  *                                 |      |      | Home |       | PgUp |        |      | | ||||||
|  *                                 | Back-|  Del |------|       |------|  Enter | Space| |  *                                 | Back-|  Del |------|       |------|  Enter | Space| | ||||||
| @ -53,21 +55,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
| // Otherwise, it needs KC_*
 | // Otherwise, it needs KC_*
 | ||||||
| [BASE] = KEYMAP(  // layer 0 : default
 | [BASE] = KEYMAP(  // layer 0 : default
 | ||||||
|         // left hand
 |         // left hand
 | ||||||
|         KC_ESC,                  DE_1,         DE_2,   DE_3,   DE_4,   DE_5,   M(M_CTRL_CMDV), |         KC_ESC,                  DE_OSX_1,         DE_OSX_2,   DE_OSX_3,   DE_OSX_4,   DE_OSX_5,   M(M_CTL_SFT_HASH), | ||||||
|         KC_TAB,                  DE_Q,         DE_W,   DE_E,   DE_R,   DE_T,   KC_LGUI, |         KC_TAB,                  DE_OSX_Q,         DE_OSX_W,   DE_OSX_E,   DE_OSX_R,   DE_OSX_T,   KC_LGUI, | ||||||
|         KC_LALT,                   DE_A,         DE_S,   DE_D,   DE_F,   DE_G, |         KC_LALT,                 DE_OSX_A,         DE_OSX_S,   DE_OSX_D,   DE_OSX_F,   DE_OSX_G, | ||||||
|         KC_LSFT,                 CTL_T(DE_Y),  DE_X,   DE_C,   DE_V,   DE_B,   KC_LALT, |         KC_LSFT,                 CTL_T(DE_OSX_Y),  DE_OSX_X,   DE_OSX_C,   DE_OSX_V,   DE_OSX_B,   KC_LALT, | ||||||
|         LT(SYMB,DE_LESS),        M(M_DE_CIRC_CTRLCMD),      M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT),  LGUI(KC_LSFT), |         LT(SYMB,DE_OSX_LESS),        M(M_DE_OSX_CIRC_CTRLCMD),      M(M_DE_OSX_PLUS_CTRLALT), KC_UP,  KC_DOWN, | ||||||
|                                                			  	M(M_MEH_SH_ACUT), 	TG(2), |                                                			  	M(M_MEH_SH_ACUT), 	TG(MDIA), | ||||||
|                                                               					KC_HOME, |                                                               					KC_HOME, | ||||||
|                                                				KC_BSPC,KC_DEL,		LT(SMLY,KC_END), |                                                				KC_BSPC,KC_DEL,		LT(SMLY,KC_END), | ||||||
|         // right hand
 |         // right hand
 | ||||||
|              M(M_CTRL_CMDC),  DE_6,   DE_7,   DE_8,   DE_9,   DE_0,     	DE_SS, |              M(M_CTL_SFT_HASH),  DE_OSX_6,  DE_OSX_7,   DE_OSX_8,   DE_OSX_9,   DE_OSX_0,   DE_OSX_SS, | ||||||
|              KC_RGUI,     DE_Z,   DE_U,   DE_I,   DE_O,   DE_P,         	DE_UE, |              KC_RGUI,     DE_OSX_Z,   DE_OSX_U,   DE_OSX_I,   DE_OSX_O,   DE_OSX_P,         	DE_OSX_UE, | ||||||
|                           DE_H,   DE_J,   DE_K,   DE_L,   DE_OE,		ALT_T(DE_AE), |                           DE_OSX_H,   DE_OSX_J,   DE_OSX_K,   DE_OSX_L,   DE_OSX_OE,		ALT_T(DE_OSX_AE), | ||||||
|              KC_RALT,	  DE_N,   DE_M,   DE_COMM,DE_DOT, CTL_T(DE_MINS),   	KC_RSFT, |              KC_RALT,	  DE_OSX_N,   DE_OSX_M,   DE_OSX_COMM,DE_OSX_DOT, CTL_T(DE_OSX_MINS),   	KC_RSFT, | ||||||
|                                   KC_LEFT,  KC_UP,KC_DOWN,KC_RIGHT,        LT(SYMB,DE_HASH), |                                   KC_LEFT,  KC_RIGHT,LGUI(KC_LSFT),LALT(KC_LSFT),        LT(SYMB,DE_OSX_PLUS), | ||||||
|              TG(4),	  ALL_T(DE_ACUT), |              TG(NUMB),	  ALL_T(DE_OSX_ACUT), | ||||||
|              KC_PGUP, |              KC_PGUP, | ||||||
|              KC_PGDN,KC_ENT, KC_SPC |              KC_PGDN,KC_ENT, KC_SPC | ||||||
|     ), |     ), | ||||||
| @ -76,42 +78,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|  * ,--------------------------------------------------.           ,--------------------------------------------------. |  * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||||
|  * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |  L5  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  | |  * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |  L5  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  | | ||||||
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| |  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||||
|  * |        |  <   |  >   |   !  |  ?   |      |      |           |      |   \  |   [  |   ]  |   |  |   #  |   F12  | |  * |        |  <   |  >   |   !  |  ?   |      |      |           |      |   \  |   [  |   ]  |   <  |   >  |   !    | | ||||||
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||||
|  * |        |   #  |   $  |   \  |   /  |   .  |------|           |------|   /  |   (  |   )  |   {  |   }  |        | |  * |        |   #  |   $  |   \  |   /  |   .  |------|           |------|   /  |   (  |   )  |   {  |   }  |   #    | | ||||||
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||||
|  * |        |      |   ^  |   %  |   |  |   ~  |      |           |      |   &  |   <  |   >  |   "  |   '  |    ?   | |  * |        |      |   ^  |   %  |   |  |   ~  |      |           |      |   |  |   ~  |  ^   |   UP |      |   $    | | ||||||
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' |  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||||
|  *   |      |      |      |      |      |                                       |      |      |   .  |   !  |      | |  *   |      |      |      |      |      |                                       |   '  |  LEFT| DOWN  | RIGHT |    | | ||||||
|  *   `----------------------------------'                                       `----------------------------------' |  *   `----------------------------------'                                       `----------------------------------' | ||||||
|  *                                        ,-------------.       ,-------------. |  *                                        ,-------------.       ,-------------. | ||||||
|  *                                        |      |      |       |      |      | |  *                                        |      |      |       | F13  |  F12 | | ||||||
|  *                                 ,------|------|------|       |------+------+------. |  *                                 ,------|------|------|       |------+------+------. | ||||||
|  *                                 |      |      |      |       |      |      |      | |  *                                 |      |      |      |       | F14  |      |      | | ||||||
|  *                                 |      |      |------|       |------|      |      | |  *                                 |      |      |------|       |------|      |      | | ||||||
|  *                                 |      |      |      |       |      |      |      | |  *                                 |      |      |      |       | F15  |      |      | | ||||||
|  *                                 `--------------------'       `--------------------' |  *                                 `--------------------'       `--------------------' | ||||||
|  */ |  */ | ||||||
| // SYMBOLS
 | // SYMBOLS
 | ||||||
| [SYMB] = KEYMAP( | [SYMB] = KEYMAP( | ||||||
|        // left hand
 |        // left hand
 | ||||||
|        KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS, |        KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS, | ||||||
|        KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS, |        KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS, | ||||||
|        KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT, |        KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT, | ||||||
|        KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS, |        KC_TRNS,KC_TRNS,DE_OSX_LESS,DE_OSX_PERC,DE_OSX_PIPE,DE_OSX_TILD,KC_TRNS, | ||||||
|        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, |        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, | ||||||
|                                        KC_TRNS,KC_TRNS, |                                        KC_TRNS,KC_TRNS, | ||||||
|                                                KC_TRNS, |                                                KC_TRNS, | ||||||
|                                KC_TRNS,KC_DEL,KC_TRNS, |                                KC_TRNS,KC_DEL,KC_TRNS, | ||||||
|        // right hand
 |        // right hand
 | ||||||
|        M(M_TOGGLE_5), KC_F6, KC_F7,   KC_F8,  KC_F9,   KC_F10,   KC_F11, |        M(M_TOGGLE_5), KC_F6, KC_F7,   KC_F8,  KC_F9,   KC_F10,   KC_F11, | ||||||
|        KC_TRNS, LALT(LSFT(KC_7)),   LALT(KC_5),   LALT(KC_6),    LALT(KC_7),    DE_HASH, KC_F12, |        KC_TRNS, LALT(LSFT(KC_7)),   LALT(KC_5),   LALT(KC_6),    DE_OSX_LESS,    DE_OSX_MORE, DE_OSX_EXLM, | ||||||
|                 DE_SLSH,   DE_LPRN,   DE_RPRN,    LALT(KC_8),    LALT(KC_9), KC_TRNS, |                 DE_OSX_SLSH,              DE_OSX_LPRN,   DE_OSX_RPRN,    LALT(KC_8),    LALT(KC_9),  DE_OSX_HASH, | ||||||
|        KC_TRNS, DE_AMPR, KC_GRV,   LSFT(KC_GRV),    DE_DQOT,    DE_QUOT, DE_QST, |        KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD,  DE_OSX_CIRC,    KC_UP, DE_OSX_MINS,  LSFT(KC_4), | ||||||
|                          KC_TRNS,KC_DOT,  KC_EXLM,    KC_TRNS,  KC_TRNS, |                          DE_OSX_QUOT,   KC_LEFT,  KC_DOWN,    KC_RIGHT,  KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, |        KC_F13, KC_F12, | ||||||
|        KC_TRNS, |        KC_F14, | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS |        KC_F15, KC_TRNS, KC_TRNS | ||||||
| ), | ), | ||||||
| /* Keymap 2: Media and mouse keys
 | /* Keymap 2: Media and mouse keys
 | ||||||
|  * |  * | ||||||
| @ -135,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|  *                                 `--------------------'       `--------------------' |  *                                 `--------------------'       `--------------------' | ||||||
|  */ |  */ | ||||||
| // MEDIA AND MOUSE
 | // MEDIA AND MOUSE
 | ||||||
| KEYMAP( | [MDIA] = KEYMAP( | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, |        KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, | ||||||
| @ -177,7 +179,7 @@ KEYMAP( | |||||||
|  *                                 |      |      |      |       |      |        |      | |  *                                 |      |      |      |       |      |        |      | | ||||||
|  *                                 `--------------------'       `----------------------' |  *                                 `--------------------'       `----------------------' | ||||||
|  */ |  */ | ||||||
| KEYMAP( | [SMLY] = KEYMAP( | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS, |        KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS, |        KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS, | ||||||
| @ -197,7 +199,7 @@ KEYMAP( | |||||||
|        KC_TRNS, KC_TRNS, KC_TRNS |        KC_TRNS, KC_TRNS, KC_TRNS | ||||||
| ), | ), | ||||||
| //number pad
 | //number pad
 | ||||||
| KEYMAP( | [NUMB] = KEYMAP( | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, | ||||||
| @ -209,9 +211,9 @@ KEYMAP( | |||||||
|        // right hand
 |        // right hand
 | ||||||
|        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11, |        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11, | ||||||
|        KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    LSFT(KC_RBRC), KC_F12, |        KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    LSFT(KC_RBRC), KC_F12, | ||||||
|                 KC_DOWN, KC_4,   KC_5,    KC_6,    KC_RBRC, DE_MINS, |                 KC_DOWN, KC_4,   KC_5,    KC_6,    KC_RBRC, DE_OSX_MINS, | ||||||
|        KC_TRNS, LSFT(KC_6), KC_1,   KC_2,    KC_3,    LSFT(KC_7), KC_TRNS, |        KC_TRNS, LSFT(KC_6), KC_1,   KC_2,    KC_3,    LSFT(KC_7), KC_TRNS, | ||||||
|                          KC_0,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS, |                          KC_0,KC_DOT,  KC_COMM,    DE_OSX_EQL,  KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, |        KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS |        KC_TRNS, KC_TRNS, KC_TRNS | ||||||
| @ -238,7 +240,7 @@ KEYMAP( | |||||||
|  *                                 |      |      |  F4  |       |      |        |      | |  *                                 |      |      |  F4  |       |      |        |      | | ||||||
|  *                                 `--------------------'       `----------------------' |  *                                 `--------------------'       `----------------------' | ||||||
|  */ |  */ | ||||||
| KEYMAP( | [EGOS] = KEYMAP( | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
|        KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |        KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||||||
| @ -308,11 +310,30 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||||
| 			if (timer_elapsed(start) > 150){ | 			if (timer_elapsed(start) > 150){ | ||||||
| 				return MACRO(U(LCTRL),U(LSFT),U(LALT),END); | 				return MACRO(U(LCTRL),U(LSFT),U(LALT),END); | ||||||
| 			} else { | 			} else { | ||||||
| 				return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix
 | 				return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_OSX_ACUT here, as macro needs KC_ prefix
 | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case M_DE_CIRC_CTRLCMD: | 	case M_LGUI_SHFT: | ||||||
|  | 		if (record->event.pressed){ | ||||||
|  | 			return MACRO(D(LGUI),D(LSFT),END); | ||||||
|  | 		}else{ | ||||||
|  | 			return MACRO(U(LGUI),U(LSFT),END); | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
|  | 	case M_CTL_SFT_HASH: | ||||||
|  | 		if (record->event.pressed) { | ||||||
|  | 			start=timer_read();  | ||||||
|  | 			return MACRO(D(LCTRL),D(LSFT),END);  | ||||||
|  | 		} else { | ||||||
|  | 			if (timer_elapsed(start) > 150){ | ||||||
|  | 				return MACRO(U(LCTRL),U(LSFT),END); | ||||||
|  | 			} else { | ||||||
|  | 				return MACRO(U(LCTRL),U(LSFT),T(BSLS),END); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		break;	 | ||||||
|  | 	case M_DE_OSX_CIRC_CTRLCMD: | ||||||
| 		if (record->event.pressed) { | 		if (record->event.pressed) { | ||||||
| 			start = timer_read(); | 			start = timer_read(); | ||||||
| 			return MACRO(D(LCTRL),D(LGUI),END); | 			return MACRO(D(LCTRL),D(LGUI),END); | ||||||
| @ -324,7 +345,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case M_DE_PLUS_CTRLALT: | 	case M_DE_OSX_PLUS_CTRLALT: | ||||||
| 		if (record->event.pressed) { | 		if (record->event.pressed) { | ||||||
| 			start = timer_read(); | 			start = timer_read(); | ||||||
| 			return MACRO(D(LCTRL),D(LALT),END); | 			return MACRO(D(LCTRL),D(LALT),END); | ||||||
|  | |||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 732 KiB After Width: | Height: | Size: 669 KiB | 
							
								
								
									
										136
									
								
								keyboard/planck/keymaps/tak3over.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								keyboard/planck/keymaps/tak3over.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,136 @@ | |||||||
|  | // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
 | ||||||
|  | // this is the style you want to emulate.
 | ||||||
|  | //
 | ||||||
|  | // Custom style by tak3over.  Dropped the dvorak layer as it was not being used by me. Shifted over
 | ||||||
|  | // keys to make room for a second function key on the left side.  Now has a keypad and most all
 | ||||||
|  | // standard keyboard keys. Including Delete. See TK layer.
 | ||||||
|  | 
 | ||||||
|  | #include "planck.h" | ||||||
|  | #ifdef BACKLIGHT_ENABLE | ||||||
|  |   #include "backlight.h" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // Each layer gets a name for readability, which is then used in the keymap matrix below.
 | ||||||
|  | // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 | ||||||
|  | // Layer names don't all need to be of the same length, obviously, and you can also skip them
 | ||||||
|  | // entirely and just use numbers.
 | ||||||
|  | #define _QW 0 | ||||||
|  | #define _CM 1 | ||||||
|  | #define _TK 2 | ||||||
|  | #define _LW 3 | ||||||
|  | #define _RS 4 | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  | 
 | ||||||
|  | /* Qwerty
 | ||||||
|  |  * ,-----------------------------------------------------------------------------------. | ||||||
|  |  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | | ||||||
|  |  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||||
|  |  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   | | ||||||
|  |  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||||
|  |  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter | | ||||||
|  |  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||||
|  |  * | Ctrl | Alt  | GUI  | TK   |Raise |    Space    |Lower | Left | Down |  Up  |Right | | ||||||
|  |  * `-----------------------------------------------------------------------------------' | ||||||
|  |  */ | ||||||
|  | [_QW] = { | ||||||
|  |   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC}, | ||||||
|  |   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT}, | ||||||
|  |   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT }, | ||||||
|  |   {KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||||
|  | }, | ||||||
|  | 
 | ||||||
|  | /* Colemak
 | ||||||
|  |  * ,-----------------------------------------------------------------------------------. | ||||||
|  |  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | | ||||||
|  |  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||||
|  |  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   | | ||||||
|  |  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||||
|  |  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter | | ||||||
|  |  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||||
|  |  * | Ctrl | Alt  | GUI  | TK   |Raise |    Space    |Lower | Left | Down |  Up  |Right | | ||||||
|  |  * `-----------------------------------------------------------------------------------' | ||||||
|  |  */ | ||||||
|  | [_CM] = { | ||||||
|  |   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC}, | ||||||
|  |   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT}, | ||||||
|  |   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT }, | ||||||
|  |   {KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||||
|  | }, | ||||||
|  | 
 | ||||||
|  | /* TenKey, Arrow, and Function key Layer
 | ||||||
|  |  * ,-----------------------------------------------------------------------------------. | ||||||
|  |  * |  `   |   1  |   2  |   3  |   4  |   5  |  6   |   7  |   8  |   9  |   0  | Bksp | | ||||||
|  |  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||||
|  |  * | Esc  | Left | Up   | Down | Right| Del  |   *  |   4  |   5  |   6  |   +  |  /   | | ||||||
|  |  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||||
|  |  * | Shift| Home | PGUP | PGDN | End  | Ins  |   .  |   1  |   2  |   3  |   -  |Enter | | ||||||
|  |  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||||
|  |  * | Ctrl | Alt  | GUI  | TK   |Raise |    Space    |Lower | Left | Down |  Up  |Right | | ||||||
|  |  * `-----------------------------------------------------------------------------------' | ||||||
|  |  */ | ||||||
|  | [_TK] = { | ||||||
|  |   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||||
|  |   {KC_ESC,  KC_LEFT, KC_UP,   KC_DOWN, KC_RGHT, KC_DEL,  KC_ASTR, KC_4,    KC_5,    KC_6,    KC_PLUS, KC_SLSH}, | ||||||
|  |   {KC_LSFT, KC_HOME, KC_PGUP, KC_PGDN, KC_END,  KC_INS,  KC_DOT,  KC_1,    KC_2,    KC_3,    KC_MINS, KC_ENT }, | ||||||
|  |   {KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT} | ||||||
|  | }, | ||||||
|  | 
 | ||||||
|  | /* Raise
 | ||||||
|  |  * ,-----------------------------------------------------------------------------------. | ||||||
|  |  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | | ||||||
|  |  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||||
|  |  * | Esc  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   | | ||||||
|  |  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||||
|  |  * | Shift|  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |Qwerty|Colemk|Brite | Reset|Enter | | ||||||
|  |  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||||
|  |  * | Ctrl | Alt  | GUI  |  TK  |Raise |    Space    |Lower | Next | Vol- | Vol+ | Play | | ||||||
|  |  * `-----------------------------------------------------------------------------------' | ||||||
|  |  */ | ||||||
|  | [_RS] = { | ||||||
|  |   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC}, | ||||||
|  |   {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS}, | ||||||
|  |   {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_CM), M(0),    RESET,   KC_TRNS}, | ||||||
|  |   {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} | ||||||
|  | }, | ||||||
|  | 
 | ||||||
|  | /* Lower
 | ||||||
|  |  * ,-----------------------------------------------------------------------------------. | ||||||
|  |  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | | ||||||
|  |  * |------+------+------+------+------+-------------+------+------+------+------+------| | ||||||
|  |  * | Esc  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   | | ||||||
|  |  * |------+------+------+------+------+------|------+------+------+------+------+------| | ||||||
|  |  * | Shift|  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |Qwerty|Colemk|Brite | Reset|Enter | | ||||||
|  |  * |------+------+------+------+------+------+------+------+------+------+------+------| | ||||||
|  |  * | Ctrl | Alt  | GUI  |  TK  |Raise |    Space    |Lower | Next | Vol- | Vol+ | Play | | ||||||
|  |  * `-----------------------------------------------------------------------------------' | ||||||
|  |  */ | ||||||
|  | [_LW] = { | ||||||
|  |   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, | ||||||
|  |   {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, | ||||||
|  |   {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_CM), M(0),    RESET,   KC_TRNS}, | ||||||
|  |   {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} | ||||||
|  | } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM fn_actions[] = { | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||||||
|  | { | ||||||
|  |   // MACRODOWN only works in this function
 | ||||||
|  |       switch(id) { | ||||||
|  |         case 0: | ||||||
|  |           if (record->event.pressed) { | ||||||
|  |             register_code(KC_RSFT); | ||||||
|  |             #ifdef BACKLIGHT_ENABLE | ||||||
|  |               backlight_step(); | ||||||
|  |             #endif | ||||||
|  |           } else { | ||||||
|  |             unregister_code(KC_RSFT); | ||||||
|  |           } | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |     return MACRO_NONE; | ||||||
|  | }; | ||||||
| @ -139,8 +139,8 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration | |||||||
| # SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | # SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | ||||||
| # NKRO_ENABLE = yes		# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | # NKRO_ENABLE = yes		# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | ||||||
| BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality | BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality | ||||||
| # MIDI_ENABLE = YES 		# MIDI controls
 | MIDI_ENABLE = YES 		# MIDI controls | ||||||
| # AUDIO_ENABLE = YES 		# Audio output on port C6
 | AUDIO_ENABLE = YES 		# Audio output on port C6 | ||||||
| # UNICODE_ENABLE = YES 		# Unicode
 | # UNICODE_ENABLE = YES 		# Unicode
 | ||||||
| # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
 | # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
 | ||||||
| # RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.  Do not enable this with MIDI at the same time.
 | # RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.  Do not enable this with MIDI at the same time.
 | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||||
|     return MACRO_NONE; |     return MACRO_NONE; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void * matrix_init_user(void) { | void matrix_init_user(void) { | ||||||
| #ifdef AUDIO_ENABLE | #ifdef AUDIO_ENABLE | ||||||
|     init_notes(); |     init_notes(); | ||||||
|     play_notes(&start_up, 9, false); |     play_notes(&start_up, 9, false); | ||||||
|  | |||||||
| @ -99,7 +99,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||||
|     return MACRO_NONE; |     return MACRO_NONE; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void * matrix_init_user(void) { | void matrix_init_user(void) { | ||||||
|     init_notes(); |     init_notes(); | ||||||
|     play_notes(&start_up, 9, false); |     play_notes(&start_up, 9, false); | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,16 +1,16 @@ | |||||||
| #include "preonic.h" | #include "preonic.h" | ||||||
| 
 | 
 | ||||||
| __attribute__ ((weak)) | __attribute__ ((weak)) | ||||||
| void * matrix_init_user(void) { | void matrix_init_user(void) { | ||||||
| 
 | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| __attribute__ ((weak)) | __attribute__ ((weak)) | ||||||
| void * matrix_scan_user(void) { | void matrix_scan_user(void) { | ||||||
| 
 | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void * matrix_init_kb(void) { | void matrix_init_kb(void) { | ||||||
| 	#ifdef BACKLIGHT_ENABLE | 	#ifdef BACKLIGHT_ENABLE | ||||||
|     	backlight_init_ports(); |     	backlight_init_ports(); | ||||||
| 	#endif | 	#endif | ||||||
| @ -24,13 +24,9 @@ void * matrix_init_kb(void) { | |||||||
|     DDRE |= (1<<6); |     DDRE |= (1<<6); | ||||||
|     PORTE |= (1<<6); |     PORTE |= (1<<6); | ||||||
| 
 | 
 | ||||||
| 	if (matrix_init_user) { | 	matrix_init_user(); | ||||||
| 		(*matrix_init_user)(); |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void * matrix_scan_kb(void) { | void matrix_scan_kb(void) { | ||||||
| 	if (matrix_scan_user) { | 	matrix_scan_user(); | ||||||
| 		(*matrix_scan_user)(); |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
| 	{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ | 	{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void * matrix_init_user(void); | void matrix_init_user(void); | ||||||
| void * matrix_scan_user(void); | void matrix_scan_user(void); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								keyboard/preonic/preonic_music.hex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								keyboard/preonic/preonic_music.hex
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -9,92 +9,92 @@ | |||||||
| // Alt gr
 | // Alt gr
 | ||||||
| 
 | 
 | ||||||
| // normal characters
 | // normal characters
 | ||||||
| #define DE_Z KC_Y | #define DE_OSX_Z KC_Y | ||||||
| #define DE_Y KC_Z | #define DE_OSX_Y KC_Z | ||||||
| 
 | 
 | ||||||
| #define DE_A KC_A | #define DE_OSX_A KC_A | ||||||
| #define DE_B KC_B | #define DE_OSX_B KC_B | ||||||
| #define DE_C KC_C | #define DE_OSX_C KC_C | ||||||
| #define DE_D KC_D | #define DE_OSX_D KC_D | ||||||
| #define DE_E KC_E | #define DE_OSX_E KC_E | ||||||
| #define DE_F KC_F | #define DE_OSX_F KC_F | ||||||
| #define DE_G KC_G | #define DE_OSX_G KC_G | ||||||
| #define DE_H KC_H | #define DE_OSX_H KC_H | ||||||
| #define DE_I KC_I | #define DE_OSX_I KC_I | ||||||
| #define DE_J KC_J | #define DE_OSX_J KC_J | ||||||
| #define DE_K KC_K | #define DE_OSX_K KC_K | ||||||
| #define DE_L KC_L | #define DE_OSX_L KC_L | ||||||
| #define DE_M KC_M | #define DE_OSX_M KC_M | ||||||
| #define DE_N KC_N | #define DE_OSX_N KC_N | ||||||
| #define DE_O KC_O | #define DE_OSX_O KC_O | ||||||
| #define DE_P KC_P | #define DE_OSX_P KC_P | ||||||
| #define DE_Q KC_Q | #define DE_OSX_Q KC_Q | ||||||
| #define DE_R KC_R | #define DE_OSX_R KC_R | ||||||
| #define DE_S KC_S | #define DE_OSX_S KC_S | ||||||
| #define DE_T KC_T | #define DE_OSX_T KC_T | ||||||
| #define DE_U KC_U | #define DE_OSX_U KC_U | ||||||
| #define DE_V KC_V | #define DE_OSX_V KC_V | ||||||
| #define DE_W KC_W | #define DE_OSX_W KC_W | ||||||
| #define DE_X KC_X | #define DE_OSX_X KC_X | ||||||
| 
 | 
 | ||||||
| #define DE_0 KC_0 | #define DE_OSX_0 KC_0 | ||||||
| #define DE_1 KC_1 | #define DE_OSX_1 KC_1 | ||||||
| #define DE_2 KC_2 | #define DE_OSX_2 KC_2 | ||||||
| #define DE_3 KC_3 | #define DE_OSX_3 KC_3 | ||||||
| #define DE_4 KC_4 | #define DE_OSX_4 KC_4 | ||||||
| #define DE_5 KC_5 | #define DE_OSX_5 KC_5 | ||||||
| #define DE_6 KC_6 | #define DE_OSX_6 KC_6 | ||||||
| #define DE_7 KC_7 | #define DE_OSX_7 KC_7 | ||||||
| #define DE_8 KC_8 | #define DE_OSX_8 KC_8 | ||||||
| #define DE_9 KC_9 | #define DE_OSX_9 KC_9 | ||||||
| 
 | 
 | ||||||
| #define DE_DOT KC_DOT | #define DE_OSX_DOT KC_DOT | ||||||
| #define DE_COMM KC_COMM | #define DE_OSX_COMM KC_COMM | ||||||
| 
 | 
 | ||||||
| #define DE_SS KC_MINS | #define DE_OSX_SS KC_MINS | ||||||
| #define DE_AE KC_QUOT | #define DE_OSX_AE KC_QUOT | ||||||
| #define DE_UE KC_LBRC | #define DE_OSX_UE KC_LBRC | ||||||
| #define DE_OE KC_SCLN | #define DE_OSX_OE KC_SCLN | ||||||
| 
 | 
 | ||||||
| #define DE_CIRC KC_NUBS // accent circumflex ^ and ring °
 | #define DE_OSX_CIRC KC_NUBS // accent circumflex ^ and ring °
 | ||||||
| #define DE_ACUT KC_EQL // accent acute ´ and grave `
 | #define DE_OSX_ACUT KC_EQL // accent acute ´ and grave `
 | ||||||
| #define DE_PLUS KC_RBRC // + and * and ~
 | #define DE_OSX_PLUS KC_RBRC // + and * and ~
 | ||||||
| #define DE_HASH KC_BSLS // # and '
 | #define DE_OSX_HASH KC_BSLS // # and '
 | ||||||
| #define DE_LESS KC_GRV // < and > and |
 | #define DE_OSX_LESS KC_GRV // < and > and |
 | ||||||
| #define DE_MINS KC_SLSH // - and _
 | #define DE_OSX_MINS KC_SLSH // - and _
 | ||||||
| 
 | 
 | ||||||
| // shifted characters
 | // shifted characters
 | ||||||
| #define DE_RING LSFT(DE_CIRC) // °
 | #define DE_OSX_RING LSFT(DE_OSX_CIRC) // °
 | ||||||
| #define DE_EXLM LSFT(KC_1) // !
 | #define DE_OSX_EXLM LSFT(KC_1) // !
 | ||||||
| #define DE_DQOT LSFT(KC_2) // "
 | #define DE_OSX_DQOT LSFT(KC_2) // "
 | ||||||
| #define DE_PARA LSFT(KC_3) // §
 | #define DE_OSX_PARA LSFT(KC_3) // §
 | ||||||
| #define DE_DLR  LSFT(KC_4) // $
 | #define DE_OSX_DLR  LSFT(KC_4) // $
 | ||||||
| #define DE_PERC LSFT(KC_5) // %
 | #define DE_OSX_PERC LSFT(KC_5) // %
 | ||||||
| #define DE_AMPR LSFT(KC_6) // &
 | #define DE_OSX_AMPR LSFT(KC_6) // &
 | ||||||
| #define DE_SLSH LSFT(KC_7) // /
 | #define DE_OSX_SLSH LSFT(KC_7) // /
 | ||||||
| #define DE_LPRN LSFT(KC_8) // (
 | #define DE_OSX_LPRN LSFT(KC_8) // (
 | ||||||
| #define DE_RPRN LSFT(KC_9) // )
 | #define DE_OSX_RPRN LSFT(KC_9) // )
 | ||||||
| #define DE_EQL  LSFT(KC_0) // =
 | #define DE_OSX_EQL  LSFT(KC_0) // =
 | ||||||
| #define DE_QST  LSFT(DE_SS) // ?
 | #define DE_OSX_QST  LSFT(DE_OSX_SS) // ?
 | ||||||
| #define DE_GRV  LSFT(DE_ACUT) // `
 | #define DE_OSX_GRV  LSFT(DE_OSX_ACUT) // `
 | ||||||
| #define DE_ASTR LSFT(DE_PLUS) // *
 | #define DE_OSX_ASTR LSFT(DE_OSX_PLUS) // *
 | ||||||
| #define DE_QUOT LSFT(DE_HASH) // '
 | #define DE_OSX_QUOT LSFT(DE_OSX_HASH) // '
 | ||||||
| #define DE_MORE LSFT(DE_LESS) // >
 | #define DE_OSX_MORE LSFT(DE_OSX_LESS) // >
 | ||||||
| #define DE_COLN LSFT(KC_DOT) // :
 | #define DE_OSX_COLN LSFT(KC_DOT) // :
 | ||||||
| #define DE_SCLN LSFT(KC_COMM) // ;
 | #define DE_OSX_SCLN LSFT(KC_COMM) // ;
 | ||||||
| #define DE_UNDS LSFT(DE_MINS) // _
 | #define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
 | ||||||
| 
 | 
 | ||||||
| // Alt-ed characters
 | // Alt-ed characters
 | ||||||
| #define DE_SQ2 LALT(KC_2) // ²
 | #define DE_OSX_SQ2 LALT(KC_2) // ²
 | ||||||
| #define DE_SQ3 LALT(KC_3) // ³
 | #define DE_OSX_SQ3 LALT(KC_3) // ³
 | ||||||
| #define DE_LCBR LALT(KC_8) // {
 | #define DE_OSX_LCBR LALT(KC_8) // {
 | ||||||
| #define DE_LBRC LALT(KC_5) // [
 | #define DE_OSX_LBRC LALT(KC_5) // [
 | ||||||
| #define DE_RBRC LALT(KC_6) // ]
 | #define DE_OSX_RBRC LALT(KC_6) // ]
 | ||||||
| #define DE_RCBR LALT(KC_9) // }
 | #define DE_OSX_RCBR LALT(KC_9) // }
 | ||||||
| #define DE_BSLS LALT(LSFT(KC_7)) // backslash
 | #define DE_OSX_BSLS LALT(LSFT(KC_7)) // backslash
 | ||||||
| #define DE_AT  LALT(DE_L) // @
 | #define DE_OSX_AT  LALT(DE_OSX_L) // @
 | ||||||
| #define DE_EURO LALT(KC_E) // €
 | #define DE_OSX_EURO LALT(KC_E) // €
 | ||||||
| #define DE_TILD LALT(DE_N) // ~
 | #define DE_OSX_TILD LALT(DE_OSX_N) // ~
 | ||||||
| #define DE_PIPE LALT(DE_7) // |
 | #define DE_OSX_PIPE LALT(DE_OSX_7) // |
 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 tak3over
						tak3over