mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +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_CMDC 2 | ||||
| #define M_MEH_SH_ACUT 3 | ||||
| #define M_DE_PLUS_CTRLALT 12 | ||||
| #define M_DE_CIRC_CTRLCMD 13 | ||||
| #define M_DE_OSX_PLUS_CTRLALT 12 | ||||
| #define M_DE_OSX_CIRC_CTRLCMD 13 | ||||
| #define M_TOGGLE_5 14 | ||||
| #define M_CTL_SFT_HASH 15 | ||||
| #define M_LGUI_SHFT 16 | ||||
| 
 | ||||
| #define SM_SMILE 4 | ||||
| #define SM_SMIRK 5 | ||||
| @ -30,19 +32,19 @@ | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| /* Keymap 0: Basic layer
 | ||||
|  * | ||||
|  * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|  * |  ESC   |   1  |   2  |   3  |   4  |   5  |CMD-V |           |CMD-C |   6  |   7  |   8  |   9  |   0  |   ß    | | ||||
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|  * |  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 |           | RALT |------+------+------+------+------+--------| | ||||
|  * | LShift |Y/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |-/Ctrl| RShift | | ||||
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|  *   |</L1|  ^°  |AltShf| Left | Right|                                       |  Up  | Down | CMD-SHIFT |  +  | #/L1 | | ||||
|  *   `----------------------------------'                                       `----------------------------------' | ||||
|  * ,-----------------------------------------------------.           ,--------------------------------------------------. | ||||
|  * |  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  |   ü    | | ||||
|  * |--------+------+------+------+------+------|         |           |         |------+------+------+------+------+--------| | ||||
|  * |  LALT  |   A  |   S  |   D  |   F  |   G  |---------|           |---------|   H |   J  |   K  |   L  |   ö  |  ä/RALT| | ||||
|  * |--------+------+------+------+------+------| LALT    |           | RALT    |------+------+------+------+------+--------| | ||||
|  * | LShift |Y/Ctrl|   X  |   C  |   V  |   B  |         |           |         |   N  |   M  |   ,  |   .  |-/Ctrl| RShift | | ||||
|  * `--------+------+------+------+------+----------------'           `-------------+------+------+------+------+--------' | ||||
|  *   |</L1| ^°/CTRL_CMD | +/CTRL_ALT | UP | DOWN|                    |  Left  | Right | CMD-SHFT| ALT-SHIFT  | +/L1 | | ||||
|  *   `------------------------------------------'                    `---------------------------------------------' | ||||
|  *                                        ,-------------.       ,---------------. | ||||
|  *                                        | MDIA | Meh  |       | Hyper|  NUM   | | ||||
|  *                                        |`/Meh | Media|       | NUM | ´/Hyper | | ||||
|  *                                 ,------|------|------|       |------+--------+------. | ||||
|  *                                 |      |      | Home |       | PgUp |        |      | | ||||
|  *                                 | Back-|  Del |------|       |------|  Enter | Space| | ||||
| @ -53,21 +55,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| // Otherwise, it needs KC_*
 | ||||
| [BASE] = KEYMAP(  // layer 0 : default
 | ||||
|         // left hand
 | ||||
|         KC_ESC,                  DE_1,         DE_2,   DE_3,   DE_4,   DE_5,   M(M_CTRL_CMDV), | ||||
|         KC_TAB,                  DE_Q,         DE_W,   DE_E,   DE_R,   DE_T,   KC_LGUI, | ||||
|         KC_LALT,                   DE_A,         DE_S,   DE_D,   DE_F,   DE_G, | ||||
|         KC_LSFT,                 CTL_T(DE_Y),  DE_X,   DE_C,   DE_V,   DE_B,   KC_LALT, | ||||
|         LT(SYMB,DE_LESS),        M(M_DE_CIRC_CTRLCMD),      M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT),  LGUI(KC_LSFT), | ||||
|                                                			  	M(M_MEH_SH_ACUT), 	TG(2), | ||||
|         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_OSX_Q,         DE_OSX_W,   DE_OSX_E,   DE_OSX_R,   DE_OSX_T,   KC_LGUI, | ||||
|         KC_LALT,                 DE_OSX_A,         DE_OSX_S,   DE_OSX_D,   DE_OSX_F,   DE_OSX_G, | ||||
|         KC_LSFT,                 CTL_T(DE_OSX_Y),  DE_OSX_X,   DE_OSX_C,   DE_OSX_V,   DE_OSX_B,   KC_LALT, | ||||
|         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(MDIA), | ||||
|                                                               					KC_HOME, | ||||
|                                                				KC_BSPC,KC_DEL,		LT(SMLY,KC_END), | ||||
|         // right hand
 | ||||
|              M(M_CTRL_CMDC),  DE_6,   DE_7,   DE_8,   DE_9,   DE_0,     	DE_SS, | ||||
|              KC_RGUI,     DE_Z,   DE_U,   DE_I,   DE_O,   DE_P,         	DE_UE, | ||||
|                           DE_H,   DE_J,   DE_K,   DE_L,   DE_OE,		ALT_T(DE_AE), | ||||
|              KC_RALT,	  DE_N,   DE_M,   DE_COMM,DE_DOT, CTL_T(DE_MINS),   	KC_RSFT, | ||||
|                                   KC_LEFT,  KC_UP,KC_DOWN,KC_RIGHT,        LT(SYMB,DE_HASH), | ||||
|              TG(4),	  ALL_T(DE_ACUT), | ||||
|              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_OSX_Z,   DE_OSX_U,   DE_OSX_I,   DE_OSX_O,   DE_OSX_P,         	DE_OSX_UE, | ||||
|                           DE_OSX_H,   DE_OSX_J,   DE_OSX_K,   DE_OSX_L,   DE_OSX_OE,		ALT_T(DE_OSX_AE), | ||||
|              KC_RALT,	  DE_OSX_N,   DE_OSX_M,   DE_OSX_COMM,DE_OSX_DOT, CTL_T(DE_OSX_MINS),   	KC_RSFT, | ||||
|                                   KC_LEFT,  KC_RIGHT,LGUI(KC_LSFT),LALT(KC_LSFT),        LT(SYMB,DE_OSX_PLUS), | ||||
|              TG(NUMB),	  ALL_T(DE_OSX_ACUT), | ||||
|              KC_PGUP, | ||||
|              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  | | ||||
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|  * |        |  <   |  >   |   !  |  ?   |      |      |           |      |   \  |   [  |   ]  |   |  |   #  |   F12  | | ||||
|  * |        |  <   |  >   |   !  |  ?   |      |      |           |      |   \  |   [  |   ]  |   <  |   >  |   !    | | ||||
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|  * |        |   #  |   $  |   \  |   /  |   .  |------|           |------|   /  |   (  |   )  |   {  |   }  |        | | ||||
|  * |        |   #  |   $  |   \  |   /  |   .  |------|           |------|   /  |   (  |   )  |   {  |   }  |   #    | | ||||
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|  * |        |      |   ^  |   %  |   |  |   ~  |      |           |      |   &  |   <  |   >  |   "  |   '  |    ?   | | ||||
|  * |        |      |   ^  |   %  |   |  |   ~  |      |           |      |   |  |   ~  |  ^   |   UP |      |   $    | | ||||
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|  *   |      |      |      |      |      |                                       |      |      |   .  |   !  |      | | ||||
|  *   |      |      |      |      |      |                                       |   '  |  LEFT| DOWN  | RIGHT |    | | ||||
|  *   `----------------------------------'                                       `----------------------------------' | ||||
|  *                                        ,-------------.       ,-------------. | ||||
|  *                                        |      |      |       |      |      | | ||||
|  *                                        |      |      |       | F13  |  F12 | | ||||
|  *                                 ,------|------|------|       |------+------+------. | ||||
|  *                                 |      |      |      |       |      |      |      | | ||||
|  *                                 |      |      |      |       | F14  |      |      | | ||||
|  *                                 |      |      |------|       |------|      |      | | ||||
|  *                                 |      |      |      |       |      |      |      | | ||||
|  *                                 |      |      |      |       | F15  |      |      | | ||||
|  *                                 `--------------------'       `--------------------' | ||||
|  */ | ||||
| // SYMBOLS
 | ||||
| [SYMB] = KEYMAP( | ||||
|        // left hand
 | ||||
|        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_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT, | ||||
|        KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS, | ||||
|        KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS, | ||||
|        KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT, | ||||
|        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_DEL,KC_TRNS, | ||||
|        // right hand
 | ||||
|        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, | ||||
|                 DE_SLSH,   DE_LPRN,   DE_RPRN,    LALT(KC_8),    LALT(KC_9), KC_TRNS, | ||||
|        KC_TRNS, DE_AMPR, KC_GRV,   LSFT(KC_GRV),    DE_DQOT,    DE_QUOT, DE_QST, | ||||
|                          KC_TRNS,KC_DOT,  KC_EXLM,    KC_TRNS,  KC_TRNS, | ||||
|        KC_TRNS, KC_TRNS, | ||||
|        KC_TRNS, | ||||
|        KC_TRNS, KC_TRNS, KC_TRNS | ||||
|        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),    DE_OSX_LESS,    DE_OSX_MORE, DE_OSX_EXLM, | ||||
|                 DE_OSX_SLSH,              DE_OSX_LPRN,   DE_OSX_RPRN,    LALT(KC_8),    LALT(KC_9),  DE_OSX_HASH, | ||||
|        KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD,  DE_OSX_CIRC,    KC_UP, DE_OSX_MINS,  LSFT(KC_4), | ||||
|                          DE_OSX_QUOT,   KC_LEFT,  KC_DOWN,    KC_RIGHT,  KC_TRNS, | ||||
|        KC_F13, KC_F12, | ||||
|        KC_F14, | ||||
|        KC_F15, KC_TRNS, KC_TRNS | ||||
| ), | ||||
| /* Keymap 2: Media and mouse keys
 | ||||
|  * | ||||
| @ -135,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|  *                                 `--------------------'       `--------------------' | ||||
|  */ | ||||
| // 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_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, | ||||
| @ -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, | ||||
| @ -197,7 +199,7 @@ KEYMAP( | ||||
|        KC_TRNS, KC_TRNS, KC_TRNS | ||||
| ), | ||||
| //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_UP, KC_TRNS, KC_TRNS, KC_TRNS, | ||||
|        KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, | ||||
| @ -209,9 +211,9 @@ KEYMAP( | ||||
|        // right hand
 | ||||
|        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_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_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 | ||||
| @ -238,7 +240,7 @@ KEYMAP( | ||||
|  *                                 |      |      |  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_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){ | ||||
| 				return MACRO(U(LCTRL),U(LSFT),U(LALT),END); | ||||
| 			} 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; | ||||
| 	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) { | ||||
| 			start = timer_read(); | ||||
| 			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; | ||||
| 	case M_DE_PLUS_CTRLALT: | ||||
| 	case M_DE_OSX_PLUS_CTRLALT: | ||||
| 		if (record->event.pressed) { | ||||
| 			start = timer_read(); | ||||
| 			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
 | ||||
| # 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 | ||||
| # MIDI_ENABLE = YES 		# MIDI controls
 | ||||
| # AUDIO_ENABLE = YES 		# Audio output on port C6
 | ||||
| MIDI_ENABLE = YES 		# MIDI controls | ||||
| AUDIO_ENABLE = YES 		# Audio output on port C6 | ||||
| # UNICODE_ENABLE = YES 		# Unicode
 | ||||
| # 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.
 | ||||
|  | ||||
| @ -88,7 +88,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||||
|     return MACRO_NONE; | ||||
| }; | ||||
| 
 | ||||
| void * matrix_init_user(void) { | ||||
| void matrix_init_user(void) { | ||||
| #ifdef AUDIO_ENABLE | ||||
|     init_notes(); | ||||
|     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; | ||||
| }; | ||||
| 
 | ||||
| void * matrix_init_user(void) { | ||||
| void matrix_init_user(void) { | ||||
|     init_notes(); | ||||
|     play_notes(&start_up, 9, false); | ||||
| } | ||||
|  | ||||
| @ -1,16 +1,16 @@ | ||||
| #include "preonic.h" | ||||
| 
 | ||||
| __attribute__ ((weak)) | ||||
| void * matrix_init_user(void) { | ||||
| void matrix_init_user(void) { | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| __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 | ||||
|     	backlight_init_ports(); | ||||
| 	#endif | ||||
| @ -24,13 +24,9 @@ void * matrix_init_kb(void) { | ||||
|     DDRE |= (1<<6); | ||||
|     PORTE |= (1<<6); | ||||
| 
 | ||||
| 	if (matrix_init_user) { | ||||
| 		(*matrix_init_user)(); | ||||
| 	} | ||||
| 	matrix_init_user(); | ||||
| }; | ||||
| 
 | ||||
| void * matrix_scan_kb(void) { | ||||
| 	if (matrix_scan_user) { | ||||
| 		(*matrix_scan_user)(); | ||||
| 	} | ||||
| void matrix_scan_kb(void) { | ||||
| 	matrix_scan_user(); | ||||
| }; | ||||
|  | ||||
| @ -44,7 +44,7 @@ | ||||
| 	{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ | ||||
| } | ||||
| 
 | ||||
| void * matrix_init_user(void); | ||||
| void * matrix_scan_user(void); | ||||
| void matrix_init_user(void); | ||||
| void matrix_scan_user(void); | ||||
| 
 | ||||
| #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
 | ||||
| 
 | ||||
| // normal characters
 | ||||
| #define DE_Z KC_Y | ||||
| #define DE_Y KC_Z | ||||
| #define DE_OSX_Z KC_Y | ||||
| #define DE_OSX_Y KC_Z | ||||
| 
 | ||||
| #define DE_A KC_A | ||||
| #define DE_B KC_B | ||||
| #define DE_C KC_C | ||||
| #define DE_D KC_D | ||||
| #define DE_E KC_E | ||||
| #define DE_F KC_F | ||||
| #define DE_G KC_G | ||||
| #define DE_H KC_H | ||||
| #define DE_I KC_I | ||||
| #define DE_J KC_J | ||||
| #define DE_K KC_K | ||||
| #define DE_L KC_L | ||||
| #define DE_M KC_M | ||||
| #define DE_N KC_N | ||||
| #define DE_O KC_O | ||||
| #define DE_P KC_P | ||||
| #define DE_Q KC_Q | ||||
| #define DE_R KC_R | ||||
| #define DE_S KC_S | ||||
| #define DE_T KC_T | ||||
| #define DE_U KC_U | ||||
| #define DE_V KC_V | ||||
| #define DE_W KC_W | ||||
| #define DE_X KC_X | ||||
| #define DE_OSX_A KC_A | ||||
| #define DE_OSX_B KC_B | ||||
| #define DE_OSX_C KC_C | ||||
| #define DE_OSX_D KC_D | ||||
| #define DE_OSX_E KC_E | ||||
| #define DE_OSX_F KC_F | ||||
| #define DE_OSX_G KC_G | ||||
| #define DE_OSX_H KC_H | ||||
| #define DE_OSX_I KC_I | ||||
| #define DE_OSX_J KC_J | ||||
| #define DE_OSX_K KC_K | ||||
| #define DE_OSX_L KC_L | ||||
| #define DE_OSX_M KC_M | ||||
| #define DE_OSX_N KC_N | ||||
| #define DE_OSX_O KC_O | ||||
| #define DE_OSX_P KC_P | ||||
| #define DE_OSX_Q KC_Q | ||||
| #define DE_OSX_R KC_R | ||||
| #define DE_OSX_S KC_S | ||||
| #define DE_OSX_T KC_T | ||||
| #define DE_OSX_U KC_U | ||||
| #define DE_OSX_V KC_V | ||||
| #define DE_OSX_W KC_W | ||||
| #define DE_OSX_X KC_X | ||||
| 
 | ||||
| #define DE_0 KC_0 | ||||
| #define DE_1 KC_1 | ||||
| #define DE_2 KC_2 | ||||
| #define DE_3 KC_3 | ||||
| #define DE_4 KC_4 | ||||
| #define DE_5 KC_5 | ||||
| #define DE_6 KC_6 | ||||
| #define DE_7 KC_7 | ||||
| #define DE_8 KC_8 | ||||
| #define DE_9 KC_9 | ||||
| #define DE_OSX_0 KC_0 | ||||
| #define DE_OSX_1 KC_1 | ||||
| #define DE_OSX_2 KC_2 | ||||
| #define DE_OSX_3 KC_3 | ||||
| #define DE_OSX_4 KC_4 | ||||
| #define DE_OSX_5 KC_5 | ||||
| #define DE_OSX_6 KC_6 | ||||
| #define DE_OSX_7 KC_7 | ||||
| #define DE_OSX_8 KC_8 | ||||
| #define DE_OSX_9 KC_9 | ||||
| 
 | ||||
| #define DE_DOT KC_DOT | ||||
| #define DE_COMM KC_COMM | ||||
| #define DE_OSX_DOT KC_DOT | ||||
| #define DE_OSX_COMM KC_COMM | ||||
| 
 | ||||
| #define DE_SS KC_MINS | ||||
| #define DE_AE KC_QUOT | ||||
| #define DE_UE KC_LBRC | ||||
| #define DE_OE KC_SCLN | ||||
| #define DE_OSX_SS KC_MINS | ||||
| #define DE_OSX_AE KC_QUOT | ||||
| #define DE_OSX_UE KC_LBRC | ||||
| #define DE_OSX_OE KC_SCLN | ||||
| 
 | ||||
| #define DE_CIRC KC_NUBS // accent circumflex ^ and ring °
 | ||||
| #define DE_ACUT KC_EQL // accent acute ´ and grave `
 | ||||
| #define DE_PLUS KC_RBRC // + and * and ~
 | ||||
| #define DE_HASH KC_BSLS // # and '
 | ||||
| #define DE_LESS KC_GRV // < and > and |
 | ||||
| #define DE_MINS KC_SLSH // - and _
 | ||||
| #define DE_OSX_CIRC KC_NUBS // accent circumflex ^ and ring °
 | ||||
| #define DE_OSX_ACUT KC_EQL // accent acute ´ and grave `
 | ||||
| #define DE_OSX_PLUS KC_RBRC // + and * and ~
 | ||||
| #define DE_OSX_HASH KC_BSLS // # and '
 | ||||
| #define DE_OSX_LESS KC_GRV // < and > and |
 | ||||
| #define DE_OSX_MINS KC_SLSH // - and _
 | ||||
| 
 | ||||
| // shifted characters
 | ||||
| #define DE_RING LSFT(DE_CIRC) // °
 | ||||
| #define DE_EXLM LSFT(KC_1) // !
 | ||||
| #define DE_DQOT LSFT(KC_2) // "
 | ||||
| #define DE_PARA LSFT(KC_3) // §
 | ||||
| #define DE_DLR  LSFT(KC_4) // $
 | ||||
| #define DE_PERC LSFT(KC_5) // %
 | ||||
| #define DE_AMPR LSFT(KC_6) // &
 | ||||
| #define DE_SLSH LSFT(KC_7) // /
 | ||||
| #define DE_LPRN LSFT(KC_8) // (
 | ||||
| #define DE_RPRN LSFT(KC_9) // )
 | ||||
| #define DE_EQL  LSFT(KC_0) // =
 | ||||
| #define DE_QST  LSFT(DE_SS) // ?
 | ||||
| #define DE_GRV  LSFT(DE_ACUT) // `
 | ||||
| #define DE_ASTR LSFT(DE_PLUS) // *
 | ||||
| #define DE_QUOT LSFT(DE_HASH) // '
 | ||||
| #define DE_MORE LSFT(DE_LESS) // >
 | ||||
| #define DE_COLN LSFT(KC_DOT) // :
 | ||||
| #define DE_SCLN LSFT(KC_COMM) // ;
 | ||||
| #define DE_UNDS LSFT(DE_MINS) // _
 | ||||
| #define DE_OSX_RING LSFT(DE_OSX_CIRC) // °
 | ||||
| #define DE_OSX_EXLM LSFT(KC_1) // !
 | ||||
| #define DE_OSX_DQOT LSFT(KC_2) // "
 | ||||
| #define DE_OSX_PARA LSFT(KC_3) // §
 | ||||
| #define DE_OSX_DLR  LSFT(KC_4) // $
 | ||||
| #define DE_OSX_PERC LSFT(KC_5) // %
 | ||||
| #define DE_OSX_AMPR LSFT(KC_6) // &
 | ||||
| #define DE_OSX_SLSH LSFT(KC_7) // /
 | ||||
| #define DE_OSX_LPRN LSFT(KC_8) // (
 | ||||
| #define DE_OSX_RPRN LSFT(KC_9) // )
 | ||||
| #define DE_OSX_EQL  LSFT(KC_0) // =
 | ||||
| #define DE_OSX_QST  LSFT(DE_OSX_SS) // ?
 | ||||
| #define DE_OSX_GRV  LSFT(DE_OSX_ACUT) // `
 | ||||
| #define DE_OSX_ASTR LSFT(DE_OSX_PLUS) // *
 | ||||
| #define DE_OSX_QUOT LSFT(DE_OSX_HASH) // '
 | ||||
| #define DE_OSX_MORE LSFT(DE_OSX_LESS) // >
 | ||||
| #define DE_OSX_COLN LSFT(KC_DOT) // :
 | ||||
| #define DE_OSX_SCLN LSFT(KC_COMM) // ;
 | ||||
| #define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
 | ||||
| 
 | ||||
| // Alt-ed characters
 | ||||
| #define DE_SQ2 LALT(KC_2) // ²
 | ||||
| #define DE_SQ3 LALT(KC_3) // ³
 | ||||
| #define DE_LCBR LALT(KC_8) // {
 | ||||
| #define DE_LBRC LALT(KC_5) // [
 | ||||
| #define DE_RBRC LALT(KC_6) // ]
 | ||||
| #define DE_RCBR LALT(KC_9) // }
 | ||||
| #define DE_BSLS LALT(LSFT(KC_7)) // backslash
 | ||||
| #define DE_AT  LALT(DE_L) // @
 | ||||
| #define DE_EURO LALT(KC_E) // €
 | ||||
| #define DE_TILD LALT(DE_N) // ~
 | ||||
| #define DE_PIPE LALT(DE_7) // |
 | ||||
| #define DE_OSX_SQ2 LALT(KC_2) // ²
 | ||||
| #define DE_OSX_SQ3 LALT(KC_3) // ³
 | ||||
| #define DE_OSX_LCBR LALT(KC_8) // {
 | ||||
| #define DE_OSX_LBRC LALT(KC_5) // [
 | ||||
| #define DE_OSX_RBRC LALT(KC_6) // ]
 | ||||
| #define DE_OSX_RCBR LALT(KC_9) // }
 | ||||
| #define DE_OSX_BSLS LALT(LSFT(KC_7)) // backslash
 | ||||
| #define DE_OSX_AT  LALT(DE_OSX_L) // @
 | ||||
| #define DE_OSX_EURO LALT(KC_E) // €
 | ||||
| #define DE_OSX_TILD LALT(DE_OSX_N) // ~
 | ||||
| #define DE_OSX_PIPE LALT(DE_OSX_7) // |
 | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 tak3over
						tak3over