From 22691de580da46c09ba9024f9543e43e115ce2b6 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Sun, 3 Apr 2016 21:46:32 +0200 Subject: [PATCH 1/2] add indent to generated keymap --- .../keymaps/german-manuneo/compile_keymap.py | 37 +++- .../keymaps/german-manuneo/keymap.c | 178 +++++++++--------- 2 files changed, 123 insertions(+), 92 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py index 3d2667276..7076a6ecb 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py @@ -43,6 +43,9 @@ KEYBOARD_LAYOUTS = { ] } +ROW_INDENTS = { + 'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0] +} BLANK_LAYOUTS = [ # Compact Layout @@ -591,16 +594,43 @@ def unicode_macro_cases(config): ) -def iter_keymap_lines(keymap): +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): @@ -628,11 +658,12 @@ def iter_keymap_parts(config, keymaps): # comment layer_lines = config['layer_lines'][layer_name] prefixed_lines = " * " + " * ".join(layer_lines) - yield "/*\n{}*/\n".format(prefixed_lines) + yield "/*\n{} */\n".format(prefixed_lines) # keymap codes keymap = keymaps[layer_name] - keymap_lines = "".join(iter_keymap_lines(keymap)) + 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" diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c index 92b712bd8..d8911af41 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c @@ -127,22 +127,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * |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, + 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 ), @@ -165,21 +165,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [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, 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, + 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 @@ -203,21 +203,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [L2] = KEYMAP( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + 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, + 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 @@ -241,24 +241,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [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, 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, - 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 + KC_TRNS, KC_TRNS, KC_TRNS ), /* * .------------------------------------.------------------------------------. @@ -279,24 +279,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [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, 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, - 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 + KC_TRNS, KC_TRNS, KC_TRNS ), /* * .------------------------------------.------------------------------------. @@ -317,24 +317,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [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, 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, - 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 + KC_TRNS, KC_TRNS, KC_TRNS ), /* * .------------------------------------.------------------------------------. @@ -355,21 +355,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ! ! !-----! !-----! ! ! * | | | | ! | | | * '-----------------' '-----------------' -*/ + */ [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, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS From a90d68739a29debe93bdf9e26f2c126e8eca46e9 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 3 Apr 2016 16:00:10 -0400 Subject: [PATCH 2/2] music mode file --- keyboard/preonic/Makefile | 4 ++-- keyboard/preonic/keymaps/default/keymap.c | 2 +- keyboard/preonic/keymaps/lock/keymap.c | 2 +- keyboard/preonic/preonic.c | 16 ++++++---------- keyboard/preonic/preonic.h | 4 ++-- keyboard/preonic/preonic_music.hex | Bin 0 -> 77017 bytes 6 files changed, 12 insertions(+), 16 deletions(-) create mode 100644 keyboard/preonic/preonic_music.hex diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 89c48e50a..664aff732 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -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. diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 392197f1d..5099b6581 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -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); diff --git a/keyboard/preonic/keymaps/lock/keymap.c b/keyboard/preonic/keymaps/lock/keymap.c index e253f2581..cfb7f0803 100644 --- a/keyboard/preonic/keymaps/lock/keymap.c +++ b/keyboard/preonic/keymaps/lock/keymap.c @@ -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); } diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c index a678f7b09..e9ececb6d 100644 --- a/keyboard/preonic/preonic.c +++ b/keyboard/preonic/preonic.c @@ -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(); }; diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 42d212329..6cfe14726 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -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 diff --git a/keyboard/preonic/preonic_music.hex b/keyboard/preonic/preonic_music.hex new file mode 100644 index 0000000000000000000000000000000000000000..603693bffb27f29bd205bd34488df04cd71f30b2 GIT binary patch literal 77017 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%0D%`=N~gGjXP{6lJ9^oGc}PDN4#? zI@ftfT>?BBNRq3zd~r3%LX+0$akKhP`pd$>K1Wx-bR zg0jIandKhbnTBUTbA1Wyf@;on2cC%@W%+9dHLg$|=c z)|kW3$(~`#67^k5wzzFA3e9O8)(-_N+Z)Vev+D-P4|1;TXS1_u42=c?JH9rv*Jaa= zm1#JeD8odWx+5|Sdr}S~A{=ZB-6*GgwI^Jci~hyhwGUdiK6v-R^xUN#kxpoTy>A|g zwl-#Oboy(99hZi{Hxl3juLd!vg3sBY&b+WC4jl0-CK6lRIc!_9ifH5|YjZUYZ;Z*D z-_f#)pAFvTdnLXo6MpI#$iadjWvz|z zf2PaxR{hn%zB%xG&wJ?jjK%c0u6@wT3{agnHA(sY;jJj8N_83ov)qrwWt%#CK%B|! zs>Mhbxw;YUEx)ZI29L9XlC5cM^qS90NXE|Mak=FbgPOR$9b;}g-W%(Gx5YIos<-6r zmd8OoC%?7$Q{xp3Np7c!FBDSrm&Th?IT)MYh5>^quJijIy3(p2AgX!wT(7+vV}Czi zY55Qk|35T-zK3RK)zJ~}Ut?yz-_~kbC+EfU^y^<=WX(*NxJv9ldo1uvFrv!oNzRiv zU@59sB*Wzx=@XR zsn1A0hdbYFz)4r{NtC>Lo;`s&_Gasc%1LWKAeuit$J5F!zZYcIUQak!NNJt_mUOzrqJ&&ubb6js4V>cOV7{3SXR*OJ{_e$#^ z`EfJz;s~IWhOZ$)HbGekcv2JROeaR*>Uo^J3aIQg_vZKcr~mgyEUv~Fykk6QIyZ{! R$eF?*CQNv~-K~PN{{!?srg8uP literal 0 HcmV?d00001