]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c
Merge branch 'master' into coderkun_neo2
[qmk_firmware.git] / keyboards / ergodox / keymaps / norwegian_programmer_osx_pc / keymap.c
1 #include "ergodox.h"
2 #include "debug.h"
3 #include "action_layer.h"
4 #include "keymap_norwegian.h"
5
6 #define BASE 0 // default layer
7 #define BASE_MAC 1 // default layer mac
8 #define NUMB_FUNC 2 // numbers and function keys
9
10 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11
12 /* Keymap 0: Basic layer PC
13  *
14  * ,--------------------------------------------------.           ,--------------------------------------------------.
15  * |    *   |   [  |   ]  |   {  |   }  |   ~  |Mac/PC|           |   ^  |   $  |   (  |   )  |   <  |   >  |   @    |
16  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
17  * |    +   |   Q  |   W  |   E  |   R  |   T  |  "   |           |   '  |   Y  |   U  |   I  |   O  |   P  |   Å    |
18  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
19  * |    /   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ø  |   Æ    |
20  * |--------+------+------+------+------+------|  ;   |           |   =  |------+------+------+------+------+--------|
21  * |    -   |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  | RIGHT| DOWN |   UP |   _    |
22  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
23  *   |Alt/esc|  !  |   ?  |   :  | TAB  |                                       | LEFT |  _  |   &   |   |  |Num/fn|
24  *   `----------------------------------'                                       `----------------------------------'
25  *                                        ,-------------.       ,--------------.
26  *                                        |   #  |  `   |       |Insert|   %   |
27  *                                 ,------|------|------|       |------+-------+------.
28  *                                 |      |      |  ´   |       |  Del |       |      |
29  *                                 | Shift|Ctrl/.|------|       |------| Enter |Space |
30  *                                 |      |      |GUI/, |       | Bspc |       |      |
31  *                                 `--------------------'       `---------------------'
32  */
33 [BASE] = KEYMAP(
34         // left hand
35         KC_PAST,       NO_LBRC, NO_RBRC, NO_LCBR,  NO_RCBR, KC_FN2,  TG(1),
36         KC_PPLS,         KC_Q,         KC_W,    KC_E,   KC_R,   KC_T,   NO_QUO2,
37         KC_PSLS,         KC_A,         KC_S,    KC_D,   KC_F,   KC_G,
38         KC_PMNS,        KC_Z,         KC_X,    KC_C,   KC_V,   KC_B,   NO_SCLN,
39         ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
40                                                       KC_HASH, KC_FN7,
41                                                               KC_FN6,
42                                                KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA),
43         // right hand
44              KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
45              NO_APOS,      KC_Y,    KC_U,    KC_I,      KC_O,     KC_P,   NO_AA  ,
46                            KC_H,    KC_J,    KC_K,      KC_L,  NO_OSLH,    NO_AE,
47              NO_EQL,        KC_N,    KC_M, KC_RIGHT,  KC_DOWN,   KC_UP,    NO_BSLS,
48                                   KC_LEFT,  NO_UNDS, NO_AMPR,  NO_PIPE,    OSL(2),
49              KC_INSERT,  KC_PERC,
50              KC_DELT,
51              KC_BSPC,KC_ENT,KC_SPC
52     ),
53 /* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
54  *
55  * ,--------------------------------------------------.           ,--------------------------------------------------.
56  * |   \    |      |      |   {  |   }  |      |      |           |      |   $  |      |      |  <   |   >  |    @   |
57  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
58  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
59  * |--------+------+------+------+------+------|      |           |  '   |------+------+------+------+------+--------|
60  * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
61  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
62  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
63  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
64  *   |      |      |      |      |,/Ctrl|                                       |      |      |  `   |      |Num/fn|
65  *   `----------------------------------'                                       `----------------------------------'
66  *                                        ,-------------.       ,-------------.
67  *                                        |      |  `   |       |      |      |
68  *                                 ,------|------|------|       |------+------+------.
69  *                                 |      |      |   ´  |       |      |      |      |
70  *                                 |      |GUI/. |------|       |------|      |      |
71  *                                 |      |      |crtl/,|       |      |      |      |
72  *                                 `--------------------'       `--------------------'
73  */
74 [BASE_MAC] = KEYMAP(
75        KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
76        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
77        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
78        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
79        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
80                                            KC_TRNS, NO_GRV_MAC,
81                                                     KC_FN10,
82                                   KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
83     // right hand
84        KC_TRNS,  NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
85        NO_APOS_MAC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
86                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
87        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC,
88                           KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2),
89        KC_TRNS, KC_TRNS,
90        KC_TRNS,
91        KC_TRNS, KC_TRNS, KC_TRNS
92 ),
93
94 /* Keymap 2: Number ++´ánd Fn layer
95  *
96  * ,--------------------------------------------------.           ,--------------------------------------------------.
97  * |        |      |      |      |      |      |      |           |      |      |  F9  |  F10 |  F11 |  F12 |        |
98  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
99  * |        |  8   |  7   |  6   |   5  |  9   |      |           |      |      |  F5  |  F6  |  F7  |  F8  |        |
100  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
101  * |        |  4   |  3   |  2   |   1  |  0   |------|           |------|      |  F1  |  F2  |  F3  |  F4  |        |
102  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
103  * |        |      |      |      |      |      |      |           |      |      |      |  END | PGDWN| PGUP |        |
104  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
105  *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
106  *   `----------------------------------'                                       `----------------------------------'
107  *                                        ,-------------.       ,-------------.
108  *                                        |      |      |       |      |      |
109  *                                 ,------|------|------|       |------+------+------.
110  *                                 |      |      |      |       |      |      |      |
111  *                                 |      |      |------|       |------|      |      |
112  *                                 |      |      |      |       |      |      |      |
113  *                                 `--------------------'       `--------------------'
114  */
115 [NUMB_FUNC] = KEYMAP(
116        NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
117        NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
118        NO_SLSH , KC_4   , KC_3   , KC_2   , KC_1   , KC_0,
119        NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
120        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
121                                            KC_TRNS, KC_TRNS,
122                                                     KC_TRNS,
123                                   KC_TRNS, KC_TRNS, KC_TRNS,
124     // right hand
125        KC_TRNS,  KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
126        KC_TRNS,  KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
127                  KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
128        KC_TRNS,  KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
129                           KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
130        KC_TRNS, KC_TRNS,
131        KC_TRNS,
132        KC_TRNS, KC_TRNS, KC_TRNS
133 )
134 };
135
136 enum macro_id {
137     TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO,  GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
138 };
139
140 const uint16_t PROGMEM fn_actions[] = {
141     [1] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
142     [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
143     [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
144     [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
145     [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
146     [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
147     [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
148     [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
149     [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
150     [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
151 };
152
153
154
155 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
156 {
157     keyevent_t event = record->event;
158
159     switch (id) {
160         case TILDE_NO:
161             return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
162         case LESS_NO:
163             return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
164         case GRTR_NO:
165             return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
166         case CIRC_NO:
167             return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
168         case ACUT_NO:
169             return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC),  END ) : MACRO_NONE);
170         case GRV_NO:
171             return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT),  END ) : MACRO_NONE);
172         case LESS_NO_MAC:
173             return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
174         case GRTR_NO_MAC:
175             return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
176         case ACUT_NO_MAC:
177             return (event.pressed ? MACRO( T(EQL), T(SPC),  END ) : MACRO_NONE);
178     }
179     return MACRO_NONE;
180 };