Cleanup and Adding more overrides
- Updated documentation and standardize identation formatting - Added numpad key overrides to get function keys - got rid of function layer
This commit is contained in:
		
							parent
							
								
									7c923a5c4a
								
							
						
					
					
						commit
						fdfc997c28
					
				
					 19 changed files with 143 additions and 394 deletions
				
			
		
							
								
								
									
										23
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -4,11 +4,10 @@ My userspace for building QMK firmware via GitHub Actions. This does not require
 | 
			
		|||
 | 
			
		||||
## Layout
 | 
			
		||||
 | 
			
		||||
The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku), took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/), and trying to achieve [Callum's Minimal Layout](https://github.com/qmk/qmk_firmware/tree/user-keymaps-still-present/users/callum). The keymap designed for split 3x5, two thumbs keys, dual encoders, and combined with a Ploopy Nano trackball mouse. Design themes:
 | 
			
		||||
The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku) and took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/). The keymap designed for split 3x5, two thumbs keys, dual encoders, and combined with a Ploopy Nano trackball mouse. Design themes:
 | 
			
		||||
 | 
			
		||||
- Releasing all keys always brings you back to base layer
 | 
			
		||||
- Keeping certain keys consistent on all layers for better muscle memory
 | 
			
		||||
- Numbers and function keys are positioned similarly
 | 
			
		||||
- Patterns to layout design to reduce learning curve (e.g., Shortcuts in same place on multiple layers)
 | 
			
		||||
- Symbols important for powershell / writing are positioned under stronger fingers
 | 
			
		||||
- Game keymap that doesn't require massive game key bind changes. Tested on Resident Evil 4 Remake
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,11 +32,11 @@ In this userspace, the base split 3x5_3 layout can be adapted for other split ke
 | 
			
		|||
 | 
			
		||||
### Tri-Layer
 | 
			
		||||
 | 
			
		||||
Hold both thumb momentary layer keys `NAVIGATION` and `SYMBOL` to access the `NUMBER` layer
 | 
			
		||||
Hold both thumb momentary layer keys `NAVIGATION` and `NUMBER` to access the `SYMBOL` layer
 | 
			
		||||
 | 
			
		||||
### One Shot Mods
 | 
			
		||||
 | 
			
		||||
One Shot Mods is here to minimize holding and simplify layers as mods are not required on every layer. Here we have bi-lateral(ish) GACS mods.
 | 
			
		||||
One Shot Mods is here to minimize holding, simplify layers, and avoid misfires from having Home Row Mods. Here we have bi-lateral(ish) GACS mods.
 | 
			
		||||
 | 
			
		||||
### Caps Word
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,23 +56,21 @@ Certain keys have different behaviors when held vs tapped allowing commonly type
 | 
			
		|||
| `TR_LBRC` | `[`         | `[]` with cursor inside |                                   |
 | 
			
		||||
| `TR_LABK` | `<`         | `<>` with cursor inside |                                   |
 | 
			
		||||
| `TR_LPRN` | `(`         | `()` with cursor inside |                                   |
 | 
			
		||||
| `TR_SQUO` | `"`         | `""` with cursor inside |                                   |
 | 
			
		||||
| `TR_SQUO` | `'`         | `''` with cursor inside |                                   |
 | 
			
		||||
| `TR_EQL`  | `=`         | `==`                    |                                   |
 | 
			
		||||
| `TR_EXLM` | `!`         | `$`                     |                                   |
 | 
			
		||||
| `TR_BSLS` | `\`         | `\\`                    |                                   |
 | 
			
		||||
| `TR_SLSH` | `/`         | `//`                    |                                   |
 | 
			
		||||
| `TR_PIPE` | `\|`        | `\|\|`                  |                                   |
 | 
			
		||||
| `TR_COMM` | `,`         | `(`                     | enables parenthesis on base layer |
 | 
			
		||||
| `TR_DOT`  | `.`         | `)`                     |                                   |
 | 
			
		||||
| `TR_PERC` | `%`         | `^`                     |                                   |
 | 
			
		||||
| `TR_EQL`  | `=`         | `+`                     |                                   |
 | 
			
		||||
| `TR_MINS` | `-`         | `_`                     |                                   |
 | 
			
		||||
| `TR_GRV`  | `backtick`  | `~`                     |                                   |
 | 
			
		||||
| `TR_SCLN` | `;`         | `:`                     |                                   |
 | 
			
		||||
| `TR_QUOT` | `'`         | `"`                     |                                   |
 | 
			
		||||
| `TR_AT`   | `@`         | `&`                     |                                   |
 | 
			
		||||
| `TR_EXLM` | `!`         | `$`                     |                                   |
 | 
			
		||||
 | 
			
		||||
Opted to implement overrides here instead of using built-in Key Override functionality because
 | 
			
		||||
 | 
			
		||||
- Not required to press/hold shift to get the alternate key
 | 
			
		||||
- Key Overrides would enable holding to repeat keycodes but hard to justify that for the symbols, even for programming
 | 
			
		||||
Opted to implement overrides here instead of using built-in Key Override functionality because this implementation does not require pressing/holding shift to get the alternate key
 | 
			
		||||
 | 
			
		||||
### Combos
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  [_NAVIGATION] = ROLLOW(LAYER_NAVIGATION),
 | 
			
		||||
  [_NUMBER]     = ROLLOW(LAYER_NUMBER),
 | 
			
		||||
  [_SYMBOL]     = ROLLOW(LAYER_SYMBOL),
 | 
			
		||||
  [_FUNCTION]   = ROLLOW(LAYER_FUNCTION),
 | 
			
		||||
  //[_FUNCTION]   = ROLLOW(LAYER_FUNCTION),
 | 
			
		||||
  [_CONFIG]     = ROLLOW(LAYER_CONFIG)
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
 | 
			
		|||
  [_NAVIGATION] = { ENCODER_CCW_CW(ZOOMIN,  ZOOMOUT), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_NUMBER]     = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT)  },
 | 
			
		||||
  [_SYMBOL]     = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_FUNCTION]   = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  //[_FUNCTION]   = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_CONFIG]     = { ENCODER_CCW_CW(BASELYR, RBSELYR), ENCODER_CCW_CW(TR_RMOD, TR_RRMD)  }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  [_NAVIGATION] = CNANO(LAYER_NAVIGATION),
 | 
			
		||||
  [_NUMBER]     = CNANO(LAYER_NUMBER),
 | 
			
		||||
  [_SYMBOL]     = CNANO(LAYER_SYMBOL),
 | 
			
		||||
  [_FUNCTION]   = CNANO(LAYER_FUNCTION),
 | 
			
		||||
  //[_FUNCTION]   = CNANO(LAYER_FUNCTION),
 | 
			
		||||
  [_CONFIG]     = CNANO(LAYER_CONFIG)
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  [_NAVIGATION] = SWOOP(LAYER_NAVIGATION),
 | 
			
		||||
  [_NUMBER]     = SWOOP(LAYER_NUMBER),
 | 
			
		||||
  [_SYMBOL]     = SWOOP(LAYER_SYMBOL),
 | 
			
		||||
  [_FUNCTION]   = SWOOP(LAYER_FUNCTION),
 | 
			
		||||
  //[_FUNCTION]   = SWOOP(LAYER_FUNCTION),
 | 
			
		||||
  [_CONFIG]     = SWOOP(LAYER_CONFIG)
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
 | 
			
		|||
  [_NAVIGATION] = { ENCODER_CCW_CW(ZOOMOUT, ZOOMIN),  ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_NUMBER]     = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)  },
 | 
			
		||||
  [_SYMBOL]     = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_FUNCTION]   = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  //[_FUNCTION]   = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___)  },
 | 
			
		||||
  [_CONFIG]     = { ENCODER_CCW_CW(RBSELYR, BASELYR), ENCODER_CCW_CW(TR_RRMD, TR_RMOD)  }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  [_NAVIGATION] = CRKBD(LAYER_NAVIGATION),
 | 
			
		||||
  [_NUMBER]     = CRKBD(LAYER_NUMBER),
 | 
			
		||||
  [_SYMBOL]     = CRKBD(LAYER_SYMBOL),
 | 
			
		||||
  [_FUNCTION]   = CRKBD(LAYER_FUNCTION),
 | 
			
		||||
  //[_FUNCTION]   = CRKBD(LAYER_FUNCTION),
 | 
			
		||||
  [_CONFIG]     = CRKBD(LAYER_CONFIG)
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  [_NAVIGATION] = PLANCK(LAYER_NAVIGATION),
 | 
			
		||||
  [_NUMBER]     = PLANCK(LAYER_NUMBER),
 | 
			
		||||
  [_SYMBOL]     = PLANCK(LAYER_SYMBOL),
 | 
			
		||||
  [_FUNCTION]   = PLANCK(LAYER_FUNCTION),
 | 
			
		||||
  //[_FUNCTION]   = PLANCK(LAYER_FUNCTION),
 | 
			
		||||
  [_CONFIG]     = PLANCK(LAYER_CONFIG)
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -4,8 +4,8 @@ layout:
 | 
			
		|||
layers:
 | 
			
		||||
  base_QWERTY:
 | 
			
		||||
    - [Q, W, E, R, T, Y, U, I ,O, P]
 | 
			
		||||
    - [A, S, D, F, G, H, J, K ,L, {h: '"', t: ''''}]
 | 
			
		||||
    - [Z, X, C, V, B, N, M, {h: '(', t: ','} , {h: ')', t: '.'}, {h: '_', t: '-'}]
 | 
			
		||||
    - [A, S, D, F, G, H, J, K ,L, {h: "\"", t: "'"}]
 | 
			
		||||
    - [Z, X, C, V, B, N, M, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}]
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
    - NUM
 | 
			
		||||
    - Shift
 | 
			
		||||
| 
						 | 
				
			
			@ -13,9 +13,9 @@ layers:
 | 
			
		|||
    - NAV
 | 
			
		||||
    - {t: Mute, type: ghost}
 | 
			
		||||
  base_COLEMAK_DH:
 | 
			
		||||
    - [Q, W, F, P, B, J, L, U ,Y, {h: '"', t: ''''}]
 | 
			
		||||
    - [Q, W, F, P, B, J, L, U ,Y, {h: "\"", t: "'"}]
 | 
			
		||||
    - [A, R, S, T, G, M, N, E ,I, O]
 | 
			
		||||
    - [Z, X, C, D, V, K, H, {h: '(', t: ','} , {h: ')', t: '.'}, {h: '_', t: '-'}]
 | 
			
		||||
    - [Z, X, C, D, V, K, H, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}]
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
    - NUM
 | 
			
		||||
    - Shift
 | 
			
		||||
| 
						 | 
				
			
			@ -23,39 +23,39 @@ layers:
 | 
			
		|||
    - NAV
 | 
			
		||||
    - {t: Mute, type: ghost}
 | 
			
		||||
  base_GAME:
 | 
			
		||||
    - [Tab, Q, W, E, R, T, '7', '8' ,'9', Esc]
 | 
			
		||||
    - [Ctrl, A, S, D, F, G, '4', '5' ,'6', '`']
 | 
			
		||||
    - [Z, X, C, V, B, Alt, '1', '2' ,'3', Combo Toggle]
 | 
			
		||||
    - [Tab, Q, W, E, R, T, "7", "8" ,"9", Esc]
 | 
			
		||||
    - [Ctrl, A, S, D, F, G, "4", "5" ,"6", {s: "~", t: "`"}]
 | 
			
		||||
    - [Z, X, C, V, B, Alt, "1", "2" ,"3", Combo Toggle]
 | 
			
		||||
    - {t: Enter, type: ghost}
 | 
			
		||||
    - Space
 | 
			
		||||
    - Shift
 | 
			
		||||
    - Space
 | 
			
		||||
    - NAV
 | 
			
		||||
    - {h: "NAV", t: "0"}
 | 
			
		||||
    - {t: Mute, type: ghost}
 | 
			
		||||
  NAV:
 | 
			
		||||
    - [null, Home, ▲, End, Page Up, null, null, Caps Lock, Print Screen, CONFIG ]
 | 
			
		||||
    - [null, ◄, ▼, ►, Page Down, null, Shift, Ctrl, Alt, Gui ]
 | 
			
		||||
    - [Undo, Cut, Copy, Paste, Redo, null, App, Sniper Toggle, Sniper DPI, Pointer DPI ]
 | 
			
		||||
    - [Esc, Home, ▲, End, Page Up, Vol+, Next, Play Pause, null, CONFIG ]
 | 
			
		||||
    - [null, ◄, ▼, ►, Page Down, Vol-, Shift, Ctrl, Alt, Gui ]
 | 
			
		||||
    - [Undo, Cut, Copy, Paste, Redo, Mute, App, Sniper Toggle, Sniper DPI, Pointer DPI ]
 | 
			
		||||
    - {t: Zoom Reset, type: ghost}
 | 
			
		||||
    - NUM
 | 
			
		||||
    - Space
 | 
			
		||||
    - Ent
 | 
			
		||||
    - null
 | 
			
		||||
    - {type: held}
 | 
			
		||||
    - null
 | 
			
		||||
  NUM:
 | 
			
		||||
    - [Esc, Mouse 3, Mouse 2, Mouse 1, Print Screen, null, "7", "8" ,"9", {s: "<", t: ","} ]
 | 
			
		||||
    - [Gui, Alt, Ctrl, Shift, null, null, "4", "5" ,"6", {s: ">", t: "."}]
 | 
			
		||||
    - [Undo, Cut, Copy, Paste, Redo, null, "1", "2" ,"3", {h: "_", t: "-"}]
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
    - {type: held}
 | 
			
		||||
    - null
 | 
			
		||||
    - Space
 | 
			
		||||
    - {h: "NAV", t: "0"}
 | 
			
		||||
    - {t: Mute, type: ghost}
 | 
			
		||||
  SYM:
 | 
			
		||||
    - [Esc, Mouse 3, Mouse 2, Mouse 1, {h: '~', t: '`'}, {h: '==', t: '='}, '#', {h: '<>', t: '<'}, '>', {h: '^', t: '%'}]
 | 
			
		||||
    - [Gui, Alt, Ctrl, Shift, {h: ':', t: ';'}, {h: '&', t: '@'}, {h: '*', t: '?'}, {h: '[]', t: '['}, ']', {h: '''''', t: ''''}]
 | 
			
		||||
    - [Undo, Cut, Copy, Paste, Redo, {h: '\\', t: "\\"}, {h: '//', t: '/'}, {h: '()', t: '('}, ')', {h: '_', t: '-'}]
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
    - {type: held}
 | 
			
		||||
    - null
 | 
			
		||||
    - {h: '$', t: '!'}
 | 
			
		||||
    - NAV
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
  NUM:
 | 
			
		||||
    - [F7, F5, F3, F1, F9, F8, F10, F2, F4, F6]
 | 
			
		||||
    - ['7', '5', '3', '1', '9', '8', '0', '2' , '4', '6' ]
 | 
			
		||||
    - [Mute, Vol-, Vol+, Next, Play Pause, F11, F12, {h: '(', t: ','} , {h: ')', t: '.'}, {h: '_', t: '-'}]
 | 
			
		||||
    - [null, null, "&", {h: "%", t: "^"}, {h: "~", t: "`"}, {h: "+", t: "="}, "#", "*", null, {h: "\"\"", t: "\""}]
 | 
			
		||||
    - [Caps Lock, {h: "{}", t: "{"}, "}", "!", {h: ":", t: ";"}, "@", "?", {h: "[]", t: "]"}, "]", {h: "''", t: "'"}]
 | 
			
		||||
    - [null, {h: "<>", t: "<"}, ">", {h: "\\\\", t: "\\"}, {h: "||", t: "|"}, "$", {h: "//", t: "/"}, {h: "()", t: "("}, ")", {h: "_", t: "-"}]
 | 
			
		||||
    - {type: ghost}
 | 
			
		||||
    - {type: held}
 | 
			
		||||
    - null
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								my_keymap.png
									
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								my_keymap.png
									
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 132 KiB  | 
| 
						 | 
				
			
			@ -3,9 +3,12 @@
 | 
			
		|||
//static bool caps_word_state = false;
 | 
			
		||||
 | 
			
		||||
bool caps_word_press_user(uint16_t keycode) {
 | 
			
		||||
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
 | 
			
		||||
    // Keycodes that continue Caps Word, with shift applied.
 | 
			
		||||
    case KC_A ... KC_Z:
 | 
			
		||||
 | 
			
		||||
    case KC_MINS:
 | 
			
		||||
      add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
 | 
			
		||||
      return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -19,5 +22,7 @@ bool caps_word_press_user(uint16_t keycode) {
 | 
			
		|||
 | 
			
		||||
    default:
 | 
			
		||||
      return false;  // Deactivate Caps Word.
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -17,30 +17,24 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) {
 | 
			
		|||
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
 | 
			
		||||
  // disable all combos on config layer
 | 
			
		||||
  if ( get_highest_layer(layer_state) == _CONFIG ) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  if ( get_highest_layer(layer_state) == _CONFIG ) return false;
 | 
			
		||||
 | 
			
		||||
  switch (combo_index) {
 | 
			
		||||
 | 
			
		||||
    case KEY_ENT:
 | 
			
		||||
      if ( get_highest_layer(layer_state) == _SYMBOL ) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
      if ( get_highest_layer(layer_state) == _SYMBOL )  return false;
 | 
			
		||||
 | 
			
		||||
    case KEY_TAB:
 | 
			
		||||
      if (  get_highest_layer(layer_state) == _NAVIGATION ||
 | 
			
		||||
            get_highest_layer(layer_state) == _SYMBOL ) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
            get_highest_layer(layer_state) == _SYMBOL ) return false;
 | 
			
		||||
 | 
			
		||||
    case MOUSE_BUTTON1:
 | 
			
		||||
    case MOUSE_BUTTON2:
 | 
			
		||||
| 
						 | 
				
			
			@ -48,10 +42,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
 | 
			
		|||
    case MOUSE_BUTTON4:
 | 
			
		||||
    case MOUSE_BUTTON5:
 | 
			
		||||
    case MOUSE_DRGTOG:
 | 
			
		||||
      if (  get_highest_layer(layer_state) > _DEFAULT_LAYER_1 ) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
      if ( get_highest_layer(layer_state) > _DEFAULT_LAYER_1 ) return false;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@ enum combos {
 | 
			
		|||
  KEY_BSPC,
 | 
			
		||||
 | 
			
		||||
  COMBO_LENGTH
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,10 +15,35 @@ Intentionally did not convert all the override/autoshit tap holds to this format
 | 
			
		|||
const key_override_t delete_override     = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DEL);
 | 
			
		||||
const key_override_t media_next_override = ko_make_basic(MOD_MASK_SHIFT, KC_MNXT, KC_MPRV);
 | 
			
		||||
 | 
			
		||||
const key_override_t **key_overrides = (const key_override_t *[]){
 | 
			
		||||
const key_override_t f1_override         = ko_make_with_layers(MOD_MASK_CSA, KC_1,    KC_F1,  _NUMBER);
 | 
			
		||||
const key_override_t f2_override         = ko_make_with_layers(MOD_MASK_CSA, KC_2,    KC_F2,  _NUMBER);
 | 
			
		||||
const key_override_t f3_override         = ko_make_with_layers(MOD_MASK_CSA, KC_3,    KC_F3,  _NUMBER);
 | 
			
		||||
const key_override_t f4_override         = ko_make_with_layers(MOD_MASK_CSA, KC_4,    KC_F4,  _NUMBER);
 | 
			
		||||
const key_override_t f5_override         = ko_make_with_layers(MOD_MASK_CSA, KC_5,    KC_F5,  _NUMBER);
 | 
			
		||||
const key_override_t f6_override         = ko_make_with_layers(MOD_MASK_CSA, KC_6,    KC_F6,  _NUMBER);
 | 
			
		||||
const key_override_t f7_override         = ko_make_with_layers(MOD_MASK_CSA, KC_7,    KC_F7,  _NUMBER);
 | 
			
		||||
const key_override_t f8_override         = ko_make_with_layers(MOD_MASK_CSA, KC_8,    KC_F8,  _NUMBER);
 | 
			
		||||
const key_override_t f9_override         = ko_make_with_layers(MOD_MASK_CSA, KC_9,    KC_F9,  _NUMBER);
 | 
			
		||||
const key_override_t f10_override        = ko_make_with_layers(MOD_MASK_CSA, KC_COMM, KC_F10, _NUMBER);
 | 
			
		||||
const key_override_t f11_override        = ko_make_with_layers(MOD_MASK_CSA, KC_DOT,  KC_F11, _NUMBER);
 | 
			
		||||
const key_override_t f12_override        = ko_make_with_layers(MOD_MASK_CSA, TR_MINS, KC_F12, _NUMBER);
 | 
			
		||||
 | 
			
		||||
const key_override_t **key_overrides = (const key_override_t *[]) {
 | 
			
		||||
 | 
			
		||||
  &delete_override,
 | 
			
		||||
  &media_next_override,
 | 
			
		||||
  &f1_override,
 | 
			
		||||
  &f2_override,
 | 
			
		||||
  &f3_override,
 | 
			
		||||
  &f4_override,
 | 
			
		||||
  &f5_override,
 | 
			
		||||
  &f6_override,
 | 
			
		||||
  &f7_override,
 | 
			
		||||
  &f8_override,
 | 
			
		||||
  &f9_override,
 | 
			
		||||
  &f10_override,
 | 
			
		||||
  &f11_override,
 | 
			
		||||
  &f12_override,
 | 
			
		||||
  NULL // Null terminate the array of overrides!
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,27 @@
 | 
			
		|||
#include "oled.h"
 | 
			
		||||
 | 
			
		||||
void render_crkbd_logo(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_P(crkbd_logo, false);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_rollow_logo(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_raw_P(rollow_logo, sizeof(rollow_logo));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_qmk_logo(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_raw_P(qmk_logo, sizeof(qmk_logo));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_default_layer_state(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
 | 
			
		||||
 | 
			
		||||
  switch (get_highest_layer(default_layer_state)) {
 | 
			
		||||
 | 
			
		||||
    case _QWERTY:
 | 
			
		||||
| 
						 | 
				
			
			@ -27,32 +35,38 @@ void render_default_layer_state(void) {
 | 
			
		|||
    case _GAME:
 | 
			
		||||
      oled_write_P(PSTR(OLED_RENDER_LAYOUT_GAME), false);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void render_layer_state(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_NAME),       false);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_BASE),       get_highest_layer(layer_state) == FIRST_DEFAULT_LAYER);  
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_NAVIGATION), get_highest_layer(layer_state) == _NAVIGATION);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_NUMBER),     get_highest_layer(layer_state) == _NUMBER);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_SYMBOL),     get_highest_layer(layer_state) == _SYMBOL);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_FUNCTION),   get_highest_layer(layer_state) == _FUNCTION);
 | 
			
		||||
  //oled_write_P(PSTR(OLED_RENDER_LAYER_FUNCTION),   get_highest_layer(layer_state) == _FUNCTION);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_CONFIG),     get_highest_layer(layer_state) == _CONFIG);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void render_keylock_status(void) {
 | 
			
		||||
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_KEYLOCK_NAME), false);
 | 
			
		||||
  oled_write_P(PSTR(" "), false);
 | 
			
		||||
  oled_write_P(PSTR("N"), host_keyboard_led_state().num_lock);
 | 
			
		||||
  oled_write_P(PSTR("C"), host_keyboard_led_state().caps_lock || is_caps_word_on() );
 | 
			
		||||
  oled_write_ln_P(PSTR("S"), host_keyboard_led_state().scroll_lock );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void render_mod_status(void) {
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  uint8_t current_mod = get_mods();
 | 
			
		||||
  uint8_t current_osm = get_oneshot_mods();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +82,7 @@ void render_mod_status(void) {
 | 
			
		|||
  oled_write_P(PSTR("C"), isCtrl );
 | 
			
		||||
  oled_write_P(PSTR("A"), isAlt );
 | 
			
		||||
  oled_write_P(PSTR("G"), isGUI );  
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -82,26 +97,39 @@ void render_oled_main(void) {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
bool oled_task_user(void) {
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if (is_keyboard_master()) {
 | 
			
		||||
 | 
			
		||||
    render_oled_main();  // Renders the current keyboard state (layer, lock, caps, scroll, etc)
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
#if defined( KEYBOARD_barbellboards_rollow )
 | 
			
		||||
 | 
			
		||||
#if defined(KEYBOARD_barbellboards_rollow)
 | 
			
		||||
    render_rollow_logo();
 | 
			
		||||
#elif defined( KEYBOARD_crkbd )
 | 
			
		||||
#elif defined(KEYBOARD_crkbd)
 | 
			
		||||
    render_crkbd_logo();
 | 
			
		||||
#else
 | 
			
		||||
    render_qmk_logo();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return false;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
 | 
			
		||||
  if (is_keyboard_master()) {
 | 
			
		||||
 | 
			
		||||
    return OLED_ROTATION_270;
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    return OLED_ROTATION_0;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +15,7 @@
 | 
			
		|||
#define OLED_RENDER_LAYER_NAVIGATION  " Nav "
 | 
			
		||||
#define OLED_RENDER_LAYER_NUMBER      " Num "
 | 
			
		||||
#define OLED_RENDER_LAYER_SYMBOL      " Sym "
 | 
			
		||||
#define OLED_RENDER_LAYER_FUNCTION    " Fun "
 | 
			
		||||
//#define OLED_RENDER_LAYER_FUNCTION    " Fun "
 | 
			
		||||
#define OLED_RENDER_LAYER_CONFIG      " Cfg "
 | 
			
		||||
 | 
			
		||||
void              render_crkbd_logo(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,33 +1,5 @@
 | 
			
		|||
#include "taphold.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
void single_tap(uint16_t key, uint16_t altkey, bool isHold) {
 | 
			
		||||
  isHold ? tap_code16(altkey) : tap_code16(key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void double_tap(uint16_t key, uint16_t altkey, uint32_t ms) {
 | 
			
		||||
  bool isShift = ( (get_mods() & MOD_BIT(KC_LSFT)) || (get_oneshot_mods() & MOD_BIT(KC_LSFT)) );
 | 
			
		||||
  
 | 
			
		||||
  isShift ? tap_code16(LSFT(key)) : tap_code16(key);
 | 
			
		||||
  wait_ms(ms);
 | 
			
		||||
  isShift ? tap_code16(LSFT(altkey)) : tap_code16(altkey);
 | 
			
		||||
 | 
			
		||||
void insert_brackets(uint16_t left, uint16_t right, uint32_t ms) {
 | 
			
		||||
  bool isShift = ( (get_mods() & MOD_BIT(KC_LSFT)) || (get_oneshot_mods() & MOD_BIT(KC_LSFT)) );
 | 
			
		||||
 | 
			
		||||
  isShift ? tap_code16(LSFT(left)) : tap_code16(left);
 | 
			
		||||
  wait_ms(ms);
 | 
			
		||||
  isShift ? tap_code16(LSFT(right)) : tap_code16(right);
 | 
			
		||||
  wait_ms(ms);
 | 
			
		||||
  tap_code16(KC_LEFT);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
void single_tap(uint16_t key) {
 | 
			
		||||
 | 
			
		||||
  tap_code16(key);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void double_tap(uint16_t key, uint32_t ms) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,9 +21,6 @@ void insert_brackets(uint16_t left, uint16_t right, uint32_t ms) {
 | 
			
		|||
 | 
			
		||||
bool process_tap_hold_key(keyrecord_t* record, uint16_t tap_keycode, uint16_t hold_keycode, int mode) {
 | 
			
		||||
 | 
			
		||||
  // https://getreuer.info/posts/keyboards/triggers/index.html#tap-vs.-long-press
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if (record->tap.count > 0) { // Key is being tapped
 | 
			
		||||
 | 
			
		||||
    // register on press, unregister on release
 | 
			
		||||
| 
						 | 
				
			
			@ -78,131 +47,3 @@ bool process_tap_hold_key(keyrecord_t* record, uint16_t tap_keycode, uint16_t ho
 | 
			
		|||
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
// here we can have the holds be more complex, like sending "" when you hold "
 | 
			
		||||
bool process_tap_hold_key(keyrecord_t* record, uint16_t keycode) {
 | 
			
		||||
 | 
			
		||||
  // tap is record->tap.count && record->event.pressed
 | 
			
		||||
  // hold is record->event.pressed
 | 
			
		||||
 | 
			
		||||
  // just saving this to handle mods
 | 
			
		||||
  // bool isShift = ( (get_mods() & MOD_BIT(KC_LSFT)) || (get_oneshot_mods() & MOD_BIT(KC_LSFT)) );
 | 
			
		||||
  // isShift ? insert_brackets(LSFT(key), LSFT(altkey)) : insert_brackets(key, altkey);
 | 
			
		||||
 | 
			
		||||
  bool isHold = false;
 | 
			
		||||
 | 
			
		||||
  if (record->tap.count && record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
    switch(keycode) {
 | 
			
		||||
 | 
			
		||||
      case TR_LCBR:
 | 
			
		||||
        single_tap(TAPHOLD_LCBR, isHold); break;
 | 
			
		||||
      case TR_LABK:
 | 
			
		||||
        single_tap(TAPHOLD_LABK, isHold); break;
 | 
			
		||||
      case TR_LBRC:
 | 
			
		||||
        single_tap(TAPHOLD_LBRC, isHold); break;
 | 
			
		||||
      case TR_LPRN:
 | 
			
		||||
        single_tap(TAPHOLD_LPRN, isHold); break;
 | 
			
		||||
      case TR_DQUO:
 | 
			
		||||
        single_tap(TAPHOLD_DQUO, isHold); break;
 | 
			
		||||
      case TR_SQUO:
 | 
			
		||||
        single_tap(TAPHOLD_SQUO, isHold); break;
 | 
			
		||||
 | 
			
		||||
      case TR_BSLS:
 | 
			
		||||
        single_tap(TAPHOLD_BSLS, isHold); break;
 | 
			
		||||
      case TR_SLSH:
 | 
			
		||||
        single_tap(TAPHOLD_SLSH, isHold); break;
 | 
			
		||||
      case TR_PIPE:
 | 
			
		||||
        single_tap(TAPHOLD_PIPE, isHold); break;
 | 
			
		||||
 | 
			
		||||
      case TR_COMM:
 | 
			
		||||
        single_tap(TAPHOLD_COMM, isHold); break;
 | 
			
		||||
      case TR_DOT:
 | 
			
		||||
        single_tap(TAPHOLD_DOT, isHold); break;
 | 
			
		||||
      case TR_PERC:
 | 
			
		||||
        single_tap(TAPHOLD_PERC, isHold); break;
 | 
			
		||||
 | 
			
		||||
      case TR_EQL:
 | 
			
		||||
        single_tap(TAPHOLD_EQL, isHold); break;
 | 
			
		||||
      case TR_MINS:
 | 
			
		||||
        single_tap(TAPHOLD_MINS, isHold); break;
 | 
			
		||||
      case TR_GRV:
 | 
			
		||||
        single_tap(TAPHOLD_GRV, isHold); break;
 | 
			
		||||
      case TR_SCLN:
 | 
			
		||||
        single_tap(TAPHOLD_SCLN, isHold); break;
 | 
			
		||||
      case TR_QUOT:
 | 
			
		||||
        single_tap(TAPHOLD_QUOT, isHold); break;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  } else if (record->tap.count == 0 && record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
    isHold = true;
 | 
			
		||||
 | 
			
		||||
    switch(keycode) {
 | 
			
		||||
 | 
			
		||||
      // Brackets: open and close brackets and put the cursor inside
 | 
			
		||||
      case TR_LCBR:
 | 
			
		||||
        insert_brackets(TAPHOLD_LCBR, WAIT_DELAY); break;
 | 
			
		||||
      case TR_LABK:
 | 
			
		||||
        insert_brackets(TAPHOLD_LABK, WAIT_DELAY); break;
 | 
			
		||||
      case TR_LBRC:
 | 
			
		||||
        insert_brackets(TAPHOLD_LBRC, WAIT_DELAY); break;
 | 
			
		||||
      case TR_LPRN:
 | 
			
		||||
        insert_brackets(TAPHOLD_LPRN, WAIT_DELAY); break;
 | 
			
		||||
      case TR_DQUO:
 | 
			
		||||
        insert_brackets(TAPHOLD_DQUO, WAIT_DELAY); break;
 | 
			
		||||
      case TR_SQUO:
 | 
			
		||||
        insert_brackets(TAPHOLD_SQUO, WAIT_DELAY); break;
 | 
			
		||||
 | 
			
		||||
      // double tap
 | 
			
		||||
      case TR_BSLS:
 | 
			
		||||
        double_tap(TAPHOLD_BSLS, WAIT_DELAY); break;
 | 
			
		||||
      case TR_SLSH:
 | 
			
		||||
        double_tap(TAPHOLD_SLSH, WAIT_DELAY); break;
 | 
			
		||||
      case TR_PIPE:
 | 
			
		||||
        double_tap(TAPHOLD_PIPE, WAIT_DELAY); break;
 | 
			
		||||
 | 
			
		||||
      // custom override without holding shift
 | 
			
		||||
      case TR_COMM:
 | 
			
		||||
        single_tap(TAPHOLD_COMM, isHold); break;
 | 
			
		||||
      case TR_DOT:
 | 
			
		||||
        single_tap(TAPHOLD_DOT, isHold); break;
 | 
			
		||||
      case TR_PERC:
 | 
			
		||||
        single_tap(TAPHOLD_PERC, isHold); break;
 | 
			
		||||
 | 
			
		||||
      // simulates auto-shift
 | 
			
		||||
      case TR_EQL:
 | 
			
		||||
        single_tap(TAPHOLD_EQL, isHold); break;
 | 
			
		||||
      case TR_MINS:
 | 
			
		||||
        single_tap(TAPHOLD_MINS, isHold); break;
 | 
			
		||||
      case TR_GRV:
 | 
			
		||||
        single_tap(TAPHOLD_GRV, isHold); break;
 | 
			
		||||
      case TR_SCLN:
 | 
			
		||||
        single_tap(TAPHOLD_SCLN, isHold); break;
 | 
			
		||||
      case TR_QUOT:
 | 
			
		||||
        single_tap(TAPHOLD_QUOT, isHold); break;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return true;  // Continue default handling.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -1,52 +1,7 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
#include "t4corun.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
void single_tap(uint16_t key, uint16_t altkey, bool isHold);
 | 
			
		||||
void double_tap(uint16_t key, uint16_t altkey, uint32_t ms);
 | 
			
		||||
void insert_brackets(uint16_t left, uint16_t right, uint32_t ms);
 | 
			
		||||
void insert_brackets(uint16_t left, uint16_t right, uint32_t ms);
 | 
			
		||||
bool process_tap_hold_key(keyrecord_t* record, uint16_t keycode);
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
void single_tap(uint16_t key);
 | 
			
		||||
void double_tap(uint16_t key, uint32_t ms);
 | 
			
		||||
void insert_brackets(uint16_t left, uint16_t right, uint32_t ms);
 | 
			
		||||
bool process_tap_hold_key(keyrecord_t* record, uint16_t tap_keycode, uint16_t hold_keycode, int mode);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* the first element is the alt key (tap action)
 | 
			
		||||
 * the second is altkey (hold action usually)
 | 
			
		||||
 * 
 | 
			
		||||
 * I was doing a switch statement to assign these each time, but this is faster
 | 
			
		||||
 *    and easier to maintain
 | 
			
		||||
*/ 
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
// Brackets: open and close brackets and put the cursor inside
 | 
			
		||||
#define TAPHOLD_LCBR KC_LCBR, KC_RCBR
 | 
			
		||||
#define TAPHOLD_LABK KC_LABK, KC_RABK
 | 
			
		||||
#define TAPHOLD_LBRC KC_LBRC, KC_RBRC
 | 
			
		||||
#define TAPHOLD_LPRN KC_LPRN, KC_RPRN
 | 
			
		||||
#define TAPHOLD_DQUO KC_DQUO, KC_DQUO
 | 
			
		||||
#define TAPHOLD_SQUO KC_QUOT, KC_QUOT
 | 
			
		||||
 | 
			
		||||
// double tap
 | 
			
		||||
#define TAPHOLD_BSLS KC_BSLS, KC_BSLS
 | 
			
		||||
#define TAPHOLD_SLSH KC_SLSH, KC_SLSH
 | 
			
		||||
#define TAPHOLD_PIPE KC_PIPE, KC_PIPE
 | 
			
		||||
 | 
			
		||||
// Custom override without holding shift
 | 
			
		||||
#define TAPHOLD_COMM KC_COMM, KC_LPRN
 | 
			
		||||
#define TAPHOLD_DOT  KC_DOT,  KC_RPRN
 | 
			
		||||
#define TAPHOLD_PERC KC_PERC, KC_CIRC
 | 
			
		||||
 | 
			
		||||
// auto shift
 | 
			
		||||
#define TAPHOLD_EQL  KC_EQL,  KC_PLUS
 | 
			
		||||
#define TAPHOLD_MINS KC_MINS, KC_UNDS
 | 
			
		||||
#define TAPHOLD_GRV  KC_GRV,  KC_TILD
 | 
			
		||||
#define TAPHOLD_SCLN KC_SCLN, KC_COLN
 | 
			
		||||
#define TAPHOLD_QUOT KC_QUOT, KC_DQUO
 | 
			
		||||
*/
 | 
			
		||||
bool process_tap_hold_key(keyrecord_t* record, uint16_t tap_keycode, uint16_t hold_keycode, int mode);
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +8,6 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
      return TAPPING_TERM + 60;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      //uprintf("tapping term: %d \n", TAPPING_TERM);
 | 
			
		||||
      return TAPPING_TERM;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,23 +12,30 @@ layer_state_t layer_state_set_user(layer_state_t  state) {
 | 
			
		|||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    case BASELYR:
 | 
			
		||||
      if (record->event.pressed) { 
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
        current_base_layer = (current_base_layer + 1) % NUM_BASE_LAYER; 
 | 
			
		||||
        set_single_persistent_default_layer(current_base_layer);
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    case RBSELYR:
 | 
			
		||||
      if (record->event.pressed) { 
 | 
			
		||||
 | 
			
		||||
        current_base_layer = (current_base_layer - 1) % NUM_BASE_LAYER; 
 | 
			
		||||
        set_single_persistent_default_layer(current_base_layer);
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    case PN_DRGS:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
        //tap numlock twice to toggle ploopy nano drag scroll
 | 
			
		||||
        // double_tap(KC_NUM, KC_NUM, WAIT_DELAY);
 | 
			
		||||
        double_tap(KC_NUM, WAIT_DELAY);
 | 
			
		||||
| 
						 | 
				
			
			@ -36,91 +43,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    case PN_PDPI:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
        //tap capslock twice to cycle ploopy nano pointer DPI
 | 
			
		||||
        //double_tap(KC_CAPS, KC_CAPS, WAIT_DELAY);
 | 
			
		||||
        double_tap(KC_CAPS, WAIT_DELAY);
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
    case KC_BSPC: {
 | 
			
		||||
      //https://docs.qmk.fm/#/feature_advanced_keycodes?id=shift-backspace-for-delete
 | 
			
		||||
 | 
			
		||||
      // Initialize a boolean variable that keeps track
 | 
			
		||||
      // of the delete key status: registered or not?
 | 
			
		||||
      static bool delkey_registered = false;
 | 
			
		||||
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
 | 
			
		||||
        uint8_t current_mod = get_mods();
 | 
			
		||||
        uint8_t current_osm = get_oneshot_mods();
 | 
			
		||||
 | 
			
		||||
        // Detect the activation of either shift keys
 | 
			
		||||
        if ((current_mod | current_osm) & MOD_MASK_SHIFT) {
 | 
			
		||||
 | 
			
		||||
          // First temporarily canceling both shifts so that
 | 
			
		||||
          // shift isn't applied to the KC_DEL keycode
 | 
			
		||||
          del_mods(MOD_MASK_SHIFT);
 | 
			
		||||
          del_oneshot_mods(MOD_MASK_SHIFT);
 | 
			
		||||
 | 
			
		||||
          // Press delete and keep track that key press
 | 
			
		||||
          register_code(KC_DEL);
 | 
			
		||||
          delkey_registered = true;
 | 
			
		||||
 | 
			
		||||
          // Reapplying modifier state so that the held shift key(s)
 | 
			
		||||
          // still work even after having tapped the Backspace/Delete key
 | 
			
		||||
          set_mods(current_mod);
 | 
			
		||||
          set_oneshot_mods(current_osm);
 | 
			
		||||
 | 
			
		||||
          return false;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      } else { // on release of KC_BSPC
 | 
			
		||||
 | 
			
		||||
        if(delkey_registered) {
 | 
			
		||||
 | 
			
		||||
          unregister_code(KC_DEL);
 | 
			
		||||
          delkey_registered = false;
 | 
			
		||||
          return false;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // QMK will process Backspace instead
 | 
			
		||||
      // if the shift modifier is not detected
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    //https://docs.qmk.fm/#/mod_tap?id=changing-both-tasp-and-hold
 | 
			
		||||
    //https://getreuer.info/posts/keyboards/triggers/index.html#tap-vs.-long-press
 | 
			
		||||
    //https://www.jonashietala.se/series/t-34/ he focuses on a keymap for programming/VIM
 | 
			
		||||
/*
 | 
			
		||||
    case TR_LCBR:
 | 
			
		||||
    case TR_LABK:
 | 
			
		||||
    case TR_LBRC:
 | 
			
		||||
    case TR_LPRN:
 | 
			
		||||
    case TR_SQUO:
 | 
			
		||||
    case TR_EQL:
 | 
			
		||||
    case TR_BSLS:
 | 
			
		||||
    case TR_SLSH:
 | 
			
		||||
    case TR_COMM:
 | 
			
		||||
    case TR_DOT:
 | 
			
		||||
    case TR_PERC:
 | 
			
		||||
    case TR_EXLM:
 | 
			
		||||
    case TR_AT: 
 | 
			
		||||
    case TR_QUES:
 | 
			
		||||
    case TR_MINS:
 | 
			
		||||
    case TR_GRV:
 | 
			
		||||
    case TR_SCLN:
 | 
			
		||||
    case TR_QUOT:
 | 
			
		||||
      return process_tap_hold_key(record, keycode);
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    // Brackets: open and close brackets and put the cursor inside
 | 
			
		||||
    case TR_LCBR:
 | 
			
		||||
      return process_tap_hold_key(record, KC_LCBR, KC_RCBR, HOLD_BRACKETS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ enum layers {
 | 
			
		|||
  _NAVIGATION,
 | 
			
		||||
  _NUMBER,
 | 
			
		||||
  _SYMBOL,
 | 
			
		||||
  _FUNCTION,
 | 
			
		||||
  //_FUNCTION,
 | 
			
		||||
  _CONFIG
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ enum keycodes {
 | 
			
		|||
#define NAV        MO(_NAVIGATION)
 | 
			
		||||
#define NAV_0      LT(_NAVIGATION, KC_0)
 | 
			
		||||
#define NUM        MO(_NUMBER)
 | 
			
		||||
#define FUNC       MO(_FUNCTION)
 | 
			
		||||
//f#define FUNC       MO(_FUNCTION)
 | 
			
		||||
#define CONFIG     MO(_CONFIG)
 | 
			
		||||
 | 
			
		||||
// Windows Shortcuts
 | 
			
		||||
| 
						 | 
				
			
			@ -85,61 +85,32 @@ enum keycodes {
 | 
			
		|||
// Brackets: open and close brackets and put the cursor inside
 | 
			
		||||
#define TR_LCBR  LT(_DEFAULT_LAYER_1, TH_LCBR)
 | 
			
		||||
#define TR_LABK  LT(_DEFAULT_LAYER_1, TH_LABK)
 | 
			
		||||
#define TR_LBRC  LT(_DEFAULT_LAYER_1, TH_LBRC) //
 | 
			
		||||
#define TR_LBRC  LT(_DEFAULT_LAYER_1, TH_LBRC)
 | 
			
		||||
#define TR_LPRN  LT(_DEFAULT_LAYER_1, TH_LPRN)
 | 
			
		||||
#define TR_DQUO  LT(_DEFAULT_LAYER_1, TH_DQUO)
 | 
			
		||||
#define TR_SQUO  LT(_DEFAULT_LAYER_1, TH_SQUO) 
 | 
			
		||||
#define TR_SQUO  LT(_DEFAULT_LAYER_1, TH_SQUO)
 | 
			
		||||
 | 
			
		||||
// double tap
 | 
			
		||||
#define TR_BSLS  LT(_DEFAULT_LAYER_1, TH_BSLS) //
 | 
			
		||||
#define TR_SLSH  LT(_DEFAULT_LAYER_1, TH_SLSH) //
 | 
			
		||||
#define TR_BSLS  LT(_DEFAULT_LAYER_1, TH_BSLS)
 | 
			
		||||
#define TR_SLSH  LT(_DEFAULT_LAYER_1, TH_SLSH)
 | 
			
		||||
#define TR_PIPE  LT(_DEFAULT_LAYER_1, TH_PIPE)
 | 
			
		||||
 | 
			
		||||
// Custom override without holding shift
 | 
			
		||||
#define TR_COMM  LT(_DEFAULT_LAYER_1, TH_COMM) //
 | 
			
		||||
#define TR_DOT   LT(_DEFAULT_LAYER_1, TH_DOT)  //
 | 
			
		||||
#define TR_COMM  LT(_DEFAULT_LAYER_1, TH_COMM)
 | 
			
		||||
#define TR_DOT   LT(_DEFAULT_LAYER_1, TH_DOT)
 | 
			
		||||
#define TR_PERC  LT(_DEFAULT_LAYER_1, TH_PERC)
 | 
			
		||||
 | 
			
		||||
// auto shift
 | 
			
		||||
#define TR_EQL   LT(_DEFAULT_LAYER_1, TH_EQL)  //
 | 
			
		||||
#define TR_MINS  LT(_DEFAULT_LAYER_1, TH_MINS) //
 | 
			
		||||
#define TR_GRV   LT(_DEFAULT_LAYER_1, TH_GRV)  //
 | 
			
		||||
#define TR_SCLN  LT(_DEFAULT_LAYER_1, TH_SCLN) //
 | 
			
		||||
#define TR_QUOT  LT(_DEFAULT_LAYER_1, TH_QUOT) //
 | 
			
		||||
#define TR_EQL   LT(_DEFAULT_LAYER_1, TH_EQL)
 | 
			
		||||
#define TR_MINS  LT(_DEFAULT_LAYER_1, TH_MINS)
 | 
			
		||||
#define TR_GRV   LT(_DEFAULT_LAYER_1, TH_GRV)
 | 
			
		||||
#define TR_SCLN  LT(_DEFAULT_LAYER_1, TH_SCLN)
 | 
			
		||||
#define TR_QUOT  LT(_DEFAULT_LAYER_1, TH_QUOT)
 | 
			
		||||
 | 
			
		||||
#define HOLD_SINGLETP 0
 | 
			
		||||
#define HOLD_DOUBLETP 1
 | 
			
		||||
#define HOLD_BRACKETS 2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
// tap hoLd. These will be intercepted and overridden. The LT will be ignored
 | 
			
		||||
// Brackets: open and close brackets and put the cursor inside
 | 
			
		||||
#define TR_LCBR  LT(_DEFAULT_LAYER_1, TH_LCBR)
 | 
			
		||||
#define TR_LABK  LT(_DEFAULT_LAYER_1, TH_LABK)
 | 
			
		||||
#define TR_LBRC  LT(_DEFAULT_LAYER_1, TH_LBRC) //
 | 
			
		||||
#define TR_LPRN  LT(_DEFAULT_LAYER_1, TH_LPRN)
 | 
			
		||||
#define TR_DQUO  LT(_DEFAULT_LAYER_1, TH_DQUO)
 | 
			
		||||
#define TR_SQUO  LT(_DEFAULT_LAYER_1, TH_SQUO) 
 | 
			
		||||
 | 
			
		||||
// double tap
 | 
			
		||||
#define TR_BSLS  LT(_DEFAULT_LAYER_1, TH_BSLS) //
 | 
			
		||||
#define TR_SLSH  LT(_DEFAULT_LAYER_1, TH_SLSH) //
 | 
			
		||||
#define TR_PIPE  LT(_DEFAULT_LAYER_1, TH_PIPE)
 | 
			
		||||
 | 
			
		||||
// Custom override without holding shift
 | 
			
		||||
#define TR_COMM  LT(_DEFAULT_LAYER_1, TH_COMM) //
 | 
			
		||||
#define TR_DOT   LT(_DEFAULT_LAYER_1, TH_DOT)  //
 | 
			
		||||
#define TR_PERC  LT(_DEFAULT_LAYER_1, TH_PERC)
 | 
			
		||||
 | 
			
		||||
// auto shift
 | 
			
		||||
#define TR_EQL   LT(_DEFAULT_LAYER_1, TH_EQL)  //
 | 
			
		||||
#define TR_MINS  LT(_DEFAULT_LAYER_1, TH_MINS) //
 | 
			
		||||
#define TR_GRV   LT(_DEFAULT_LAYER_1, TH_GRV)  //
 | 
			
		||||
#define TR_SCLN  LT(_DEFAULT_LAYER_1, TH_SCLN) //
 | 
			
		||||
#define TR_QUOT  LT(_DEFAULT_LAYER_1, TH_QUOT) //
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if defined(KEYBOARD_bastardkb_charybdis_3x5)
 | 
			
		||||
//these mouse codes are defined in charybdis.h
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +203,7 @@ enum keycodes {
 | 
			
		|||
 | 
			
		||||
#define LAYER_NUMBER                                                                        \
 | 
			
		||||
  KC_ESC,  KC_BTN3, KC_BTN2, KC_BTN1, KC_PSCR, ___x___, KC_7,    KC_8,    KC_9,    KC_COMM, \
 | 
			
		||||
  _GACS_MODS________________________, FUNC,    ___x___, KC_4,    KC_5,    KC_6,    KC_DOT,  \
 | 
			
		||||
  _GACS_MODS________________________, ___x___, ___x___, KC_4,    KC_5,    KC_6,    KC_DOT,  \
 | 
			
		||||
  _UCCPR_L___________________________________, ___x___, KC_1,    KC_2,    KC_3,    TR_MINS, \
 | 
			
		||||
                    _LAYER_TRANS_____________, _BASE_R4_ZERO____________
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -243,13 +214,13 @@ enum keycodes {
 | 
			
		|||
  ___x___, TR_LABK, KC_RABK, TR_BSLS, TR_PIPE, KC_DLR,  TR_SLSH, TR_LPRN, KC_RPRN, TR_MINS, \
 | 
			
		||||
                    _LAYER_TRANS_____________, _LAYER_TRANS_____________
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
#define LAYER_FUNCTION                                                                      \
 | 
			
		||||
  _NONE_5____________________________________, ___x___, KC_F7,   KC_F8,   KC_F9,   KC_F10,  \
 | 
			
		||||
  ___x___, ___x___, ___x___, ___x___, _______, KC_CAPS, KC_F4,   KC_F5,   KC_F6,   KC_F11,  \
 | 
			
		||||
  _NONE_5____________________________________, ___x___, KC_F1,   KC_F2,   KC_F3,   KC_F12,  \
 | 
			
		||||
                    _LAYER_TRANS_____________, _NONE_3__________________
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define LAYER_CONFIG                                                                        \
 | 
			
		||||
  _NONE_5____________________________________, ___x___, ___x___, EE_CLR,  QK_BOOT, _______, \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue