README.md (7611B)
1 # keymap_beautifier.py 2 3 ## About 4 This Python 3 script, by [Tsan-Kuang Lee](https://github.com/tsankuanglee) takes the keymap.c downloaded from [ErgoDox EZ Configurator](https://configure.ergodox-ez.com/) and beautifies it for easier customization, allowing one to quickly draft a layout to build upon. 5 6 ## Features 7 For example, the original `keymap.c` looks like 8 9 ``` 10 [0] = LAYOUT_ergodox(KC_EQUAL,KC_1,KC_2,KC_3,KC_4,KC_5,LCTL(KC_MINUS),KC_DELETE,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_LBRC,KC_BSPC,KC_A,KC_S,KC_D,KC_F,KC_G,SC_LSPO,CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,HYPR_T(KC_NO),LT(1,KC_GRAVE),KC_QUOTE,LALT(KC_LSFT),KC_LEFT,KC_RIGHT,ALT_T(KC_APPLICATION),KC_LGUI,KC_HOME,KC_SPACE,KC_UNDS,KC_END,LCTL(KC_EQUAL),KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,KC_RBRC,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLS,KC_H,ALT_T(KC_J),KC_K,KC_L,LT(2,KC_SCLN),GUI_T(KC_QUOTE),MEH_T(KC_NO),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SC_RSPC,KC_UP,KC_DOWN,KC_LBRC,KC_RBRC,TT(1),KC_LALT,CTL_T(KC_ESCAPE),KC_PGUP,KC_PGDN,LT(1,KC_TAB),KC_ENTER), 11 ``` 12 13 The beautifier parses it and outputs: 14 15 ``` 16 [0] = LAYOUT_ergodox( 17 // left hand 18 19 KC_EQUAL , KC_1 , KC_2 , KC_3 , KC_4 , KC_5, LCTL(KC_MINUS), 20 KC_DELETE , KC_Q , KC_W , KC_E , KC_R , KC_T, KC_LBRC , 21 KC_BSPC , KC_A , KC_S , KC_D , KC_F , KC_G, 22 SC_LSPO , CTL_T(KC_Z), KC_X , KC_C , KC_V , KC_B, HYPR_T(KC_NO) , 23 LT(1,KC_GRAVE), KC_QUOTE , LALT(KC_LSFT) , KC_LEFT, KC_RIGHT, 24 25 // left thumb 26 27 ALT_T(KC_APPLICATION), KC_LGUI, 28 KC_HOME, 29 KC_SPACE, KC_UNDS , KC_END , 30 31 // right hand 32 33 LCTL(KC_EQUAL), KC_6, KC_7 , KC_8 , KC_9 , KC_0 , KC_MINUS , 34 KC_RBRC , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSLS , 35 KC_H, ALT_T(KC_J), KC_K , KC_L , LT(2,KC_SCLN) , GUI_T(KC_QUOTE), 36 MEH_T(KC_NO) , KC_N, KC_M , KC_COMMA, KC_DOT , CTL_T(KC_SLASH), SC_RSPC , 37 KC_UP , KC_DOWN , KC_LBRC, KC_RBRC , TT(1) , 38 39 // right thumb 40 41 KC_LALT , CTL_T(KC_ESCAPE), 42 KC_PGUP , 43 KC_PGDN, LT(1,KC_TAB) , KC_ENTER 44 ) 45 ``` 46 47 Optionally, it can also render [LAYOUT_ergodox_pretty](https://github.com/qmk/qmk_firmware/blob/ee700b2e831067bdb7584425569b61bc6329247b/keyboards/ergodox_ez/keymaps/bpruitt-goddard/keymap.c#L49-L57): 48 ``` 49 [0] = LAYOUT_ergodox_pretty( 50 KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, QK_LEAD, QK_LEAD, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC , 51 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HYPR, KC_HYPR, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS , 52 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOTE , 53 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, SH_MON, SH_MON , KC_N , KC_M , KC_COMMA , KC_DOT , KC_SLASH , KC_RSFT , 54 LT(6,KC_NO), LT(7,KC_NO), KC_LCTL, KC_LGUI, KC_LALT, ALGR_T(KC_MINUS), RGUI_T(KC_EQUAL), RCTL_T(KC_LBRC), LT(10,KC_RBRC), LT(6,KC_APPLICATION), 55 56 LT(6,KC_GRAVE), MEH_T(KC_NO), KC_LEFT, KC_RIGHT , 57 LT(10,KC_DELETE), KC_UP , 58 KC_SPACE, LT(8,KC_ENTER), LT(7,KC_BSPC), KC_DOWN, LT(7,KC_SPACE), LT(8,KC_ENTER) 59 ) 60 ``` 61 62 We can also align everythng t othe left (easier editing in my opinon): 63 ``` 64 [0] = LAYOUT_ergodox_pretty( 65 KC_ESCAPE , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , QK_LEAD , QK_LEAD, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC , 66 KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_HYPR , KC_HYPR, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS , 67 KC_LCTL , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOTE , 68 KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , SH_MON , SH_MON , KC_N , KC_M , KC_COMMA , KC_DOT , KC_SLASH , KC_RSFT , 69 LT(6,KC_NO), LT(7,KC_NO), KC_LCTL , KC_LGUI, KC_LALT , ALGR_T(KC_MINUS), RGUI_T(KC_EQUAL), RCTL_T(KC_LBRC), LT(10,KC_RBRC), LT(6,KC_APPLICATION), 70 71 LT(6,KC_GRAVE), MEH_T(KC_NO) , KC_LEFT, KC_RIGHT , 72 LT(10,KC_DELETE), KC_UP , 73 KC_SPACE, LT(8,KC_ENTER), LT(7,KC_BSPC) , KC_DOWN, LT(7,KC_SPACE), LT(8,KC_ENTER) 74 ) 75 ``` 76 77 ## Usage 78 79 ### With docker 80 This is the cleaner way. `Docker` is the only requirement. The program executes within a container that has all dependencies installed. 81 82 First build the images. (Run once) 83 ``` 84 cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier 85 docker build -t keymapbeautifier:1.0 . 86 ``` 87 Run it 88 ``` 89 cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier 90 cp PATH_TO_YOUR_C_SOURCE_FILE.c input.c 91 ./docker_run.sh input.c -p -c -o output.c 92 ``` 93 The prettified file is written to `output.c`. See the section Tweaks for non-default settings. 94 95 ### Without docker 96 Requirements: 97 * python3 (tested on 3.7.4) 98 * python module `pycparser` installed (with `pip install pycparser`) 99 100 To run: 101 ``` 102 cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier 103 cp PATH_TO_YOUR_C_SOURCE_FILE.c input.c 104 ./KeymapBeautifier.py input.c -p -c -o output.c 105 ``` 106 The prettified file is written to `output.c`. See the section Tweaks for non-default settings. 107 108 ## Tweaks 109 ``` 110 usage: KeymapBeautifier.py [-h] [-o OUTPUT_FILENAME] [-p] [-c] input_filename 111 112 Beautify keymap.c downloaded from ErgoDox-Ez Configurator for easier 113 customization. 114 115 positional arguments: 116 input_filename input file: c source code file that has the layer 117 keymaps 118 119 optional arguments: 120 -h, --help show this help message and exit 121 -o OUTPUT_FILENAME, --output-filename OUTPUT_FILENAME 122 output file: beautified c filename. If not given, 123 output to STDOUT. 124 -p, --pretty-output-layout 125 use LAYOUT_ergodox_pretty for output instead of 126 LAYOUT_ergodox 127 -c, --justify-toward-center 128 for LAYOUT_ergodox_pretty, align right for the left 129 half, and align left for the right half. Default is 130 align left for both halves. 131 ``` 132 For example, 133 ``` 134 ./docker_run.sh input.c -p -c -o output.c 135 # or if you don't want to use docker: 136 #./KeymapBeautifier.py input.c -p -c -o output.c 137 ``` 138 will read `input.c`, and produce `output.c` with LAYOUT_ergodox_pretty, and have the key symbols gravitating toward the center. 139