logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (23172B)


  1. /* Copyright 2020 Thys de Wet
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. //This keymap is HEAVILY inspired by sofle
  18. enum grandiceps_layers {
  19. _QWERTY,
  20. _COLEMAK,
  21. _LOWER,
  22. _RAISE,
  23. _ADJUST,
  24. };
  25. enum custom_keycodes {
  26. KC_LOWER = SAFE_RANGE,
  27. KC_RAISE,
  28. KC_ADJUST,
  29. KC_PRVWD,
  30. KC_NXTWD,
  31. KC_LSTRT,
  32. KC_LEND,
  33. KC_DLINE,
  34. KC_TEAMS
  35. };
  36. #define KC_QWERTY PDF(_QWERTY)
  37. #define KC_COLEMAK PDF(_COLEMAK)
  38. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  39. /*
  40. * QWERTY
  41. * ,-----------------------------------------. ,-----------------------------------------.
  42. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
  43. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  44. * | DEL | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  45. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  46. * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
  47. * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
  48. * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
  49. * `-----------------------------------------/ / \ \-----------------------------------------'
  50. * | LGUI | LAlt | LCTR |LOWER | /Space / \Enter \ |RAISE | RCTR | RAlt | RGUI |
  51. * | | | | |/ / \ \ | | | | |
  52. * `----------------------------------' '------''---------------------------'
  53. */
  54. [_QWERTY] = LAYOUT(
  55. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  56. KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  57. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  58. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_TEAMS,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  59. KC_LGUI,KC_LALT,KC_LCTL, KC_LOWER, KC_SPC, KC_ENT, KC_RAISE, KC_RCTL, KC_RALT, KC_RGUI
  60. ),
  61. /*
  62. * COLEMAK
  63. * ,-----------------------------------------. ,-----------------------------------------.
  64. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  65. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  66. * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
  67. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  68. * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
  69. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  70. * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift|
  71. * `-----------------------------------------/ / \ \-----------------------------------------'
  72. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  73. * | | | | |/ / \ \ | | | | |
  74. * `----------------------------------' '------''---------------------------'
  75. */
  76. [_COLEMAK] = LAYOUT(
  77. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
  78. KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  79. KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  80. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  81. KC_LGUI,KC_LALT,KC_LCTL,KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTL, KC_RALT, KC_RGUI
  82. ),
  83. /* LOWER
  84. * ,-----------------------------------------. ,-----------------------------------------.
  85. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  86. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  87. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
  88. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  89. * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
  90. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  91. * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
  92. * `-----------------------------------------/ / \ \-----------------------------------------'
  93. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  94. * | | | | |/ / \ \ | | | | |
  95. * `----------------------------------' '------''---------------------------'
  96. */
  97. [_LOWER] = LAYOUT(
  98. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  99. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NUBS,
  100. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
  101. _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
  102. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  103. ),
  104. /* RAISE
  105. * ,----------------------------------------. ,-----------------------------------------.
  106. * | | | | | | | | | | | | | |
  107. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  108. * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
  109. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  110. * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
  111. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  112. * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
  113. * `-----------------------------------------/ / \ \-----------------------------------------'
  114. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  115. * | | | | |/ / \ \ | | | | |
  116. * `----------------------------------' '------''---------------------------'
  117. */
  118. [_RAISE] = LAYOUT(
  119. _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
  120. _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD, KC_DLINE, KC_BSPC,
  121. _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
  122. _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______,
  123. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  124. ),
  125. /* ADJUST
  126. * ,-----------------------------------------. ,-----------------------------------------.
  127. * | | | | | | | | | | | | | |
  128. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  129. * | QK_BOOT| |QWERTY|COLEMAK| | | | | | | | | |
  130. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  131. * | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
  132. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  133. * | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
  134. * `-----------------------------------------/ / \ \-----------------------------------------'
  135. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  136. * | | | | |/ / \ \ | | | | |
  137. * `----------------------------------' '------''---------------------------'
  138. */
  139. [_ADJUST] = LAYOUT(
  140. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, UG_NEXT, UG_VALU, UG_SATU, UG_HUEU, XXXXXXX, UG_TOGG,
  141. QK_BOOT , XXXXXXX, KC_QWERTY,KC_COLEMAK,CG_TOGG, XXXXXXX, UG_PREV, UG_VALD, UG_SATD, UG_HUED, XXXXXXX, XXXXXXX,
  142. XXXXXXX , XXXXXXX, CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
  143. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
  144. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  145. )
  146. };
  147. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  148. switch (keycode) {
  149. case KC_LOWER:
  150. if (record->event.pressed) {
  151. layer_on(_LOWER);
  152. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  153. } else {
  154. layer_off(_LOWER);
  155. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  156. }
  157. return false;
  158. case KC_RAISE:
  159. if (record->event.pressed) {
  160. layer_on(_RAISE);
  161. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  162. } else {
  163. layer_off(_RAISE);
  164. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  165. }
  166. return false;
  167. case KC_ADJUST:
  168. if (record->event.pressed) {
  169. layer_on(_ADJUST);
  170. } else {
  171. layer_off(_ADJUST);
  172. }
  173. return false;
  174. case KC_PRVWD:
  175. if (record->event.pressed) {
  176. if (keymap_config.swap_lctl_lgui) {
  177. register_mods(mod_config(MOD_LALT));
  178. register_code(KC_LEFT);
  179. } else {
  180. register_mods(mod_config(MOD_LCTL));
  181. register_code(KC_LEFT);
  182. }
  183. } else {
  184. if (keymap_config.swap_lctl_lgui) {
  185. unregister_mods(mod_config(MOD_LALT));
  186. unregister_code(KC_LEFT);
  187. } else {
  188. unregister_mods(mod_config(MOD_LCTL));
  189. unregister_code(KC_LEFT);
  190. }
  191. }
  192. break;
  193. case KC_NXTWD:
  194. if (record->event.pressed) {
  195. if (keymap_config.swap_lctl_lgui) {
  196. register_mods(mod_config(MOD_LALT));
  197. register_code(KC_RIGHT);
  198. } else {
  199. register_mods(mod_config(MOD_LCTL));
  200. register_code(KC_RIGHT);
  201. }
  202. } else {
  203. if (keymap_config.swap_lctl_lgui) {
  204. unregister_mods(mod_config(MOD_LALT));
  205. unregister_code(KC_RIGHT);
  206. } else {
  207. unregister_mods(mod_config(MOD_LCTL));
  208. unregister_code(KC_RIGHT);
  209. }
  210. }
  211. break;
  212. case KC_LSTRT:
  213. if (record->event.pressed) {
  214. if (keymap_config.swap_lctl_lgui) {
  215. //CMD-arrow on Mac, but we have CTL and GUI swapped
  216. register_mods(mod_config(MOD_LCTL));
  217. register_code(KC_LEFT);
  218. } else {
  219. register_code(KC_HOME);
  220. }
  221. } else {
  222. if (keymap_config.swap_lctl_lgui) {
  223. unregister_mods(mod_config(MOD_LCTL));
  224. unregister_code(KC_LEFT);
  225. } else {
  226. unregister_code(KC_HOME);
  227. }
  228. }
  229. break;
  230. case KC_LEND:
  231. if (record->event.pressed) {
  232. if (keymap_config.swap_lctl_lgui) {
  233. //CMD-arrow on Mac, but we have CTL and GUI swapped
  234. register_mods(mod_config(MOD_LCTL));
  235. register_code(KC_RIGHT);
  236. } else {
  237. register_code(KC_END);
  238. }
  239. } else {
  240. if (keymap_config.swap_lctl_lgui) {
  241. unregister_mods(mod_config(MOD_LCTL));
  242. unregister_code(KC_RIGHT);
  243. } else {
  244. unregister_code(KC_END);
  245. }
  246. }
  247. break;
  248. case KC_DLINE:
  249. if (record->event.pressed) {
  250. register_mods(mod_config(MOD_LCTL));
  251. register_code(KC_BSPC);
  252. } else {
  253. unregister_mods(mod_config(MOD_LCTL));
  254. unregister_code(KC_BSPC);
  255. }
  256. break;
  257. case KC_COPY:
  258. if (record->event.pressed) {
  259. register_mods(mod_config(MOD_LCTL));
  260. register_code(KC_C);
  261. } else {
  262. unregister_mods(mod_config(MOD_LCTL));
  263. unregister_code(KC_C);
  264. }
  265. return false;
  266. case KC_PASTE:
  267. if (record->event.pressed) {
  268. register_mods(mod_config(MOD_LCTL));
  269. register_code(KC_V);
  270. } else {
  271. unregister_mods(mod_config(MOD_LCTL));
  272. unregister_code(KC_V);
  273. }
  274. return false;
  275. case KC_CUT:
  276. if (record->event.pressed) {
  277. register_mods(mod_config(MOD_LCTL));
  278. register_code(KC_X);
  279. } else {
  280. unregister_mods(mod_config(MOD_LCTL));
  281. unregister_code(KC_X);
  282. }
  283. return false;
  284. break;
  285. case KC_UNDO:
  286. if (record->event.pressed) {
  287. register_mods(mod_config(MOD_LCTL));
  288. register_code(KC_Z);
  289. } else {
  290. unregister_mods(mod_config(MOD_LCTL));
  291. unregister_code(KC_Z);
  292. }
  293. return false;
  294. case KC_TEAMS:
  295. if (record->event.pressed) {
  296. register_mods(mod_config(MOD_LCTL));
  297. register_mods(mod_config(MOD_LSFT));
  298. register_code(KC_M);
  299. } else {
  300. unregister_mods(mod_config(MOD_LCTL));
  301. unregister_mods(mod_config(MOD_LSFT));
  302. unregister_code(KC_M);
  303. }
  304. return false;
  305. }
  306. return true;
  307. }
  308. #ifdef OLED_ENABLE
  309. static void render_logo(void) {
  310. static const char PROGMEM my_logo[] = {
  311. // 'protea', 128x32px
  312. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  313. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  314. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  315. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  316. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x38, 0x1c, 0x0c, 0x06, 0x82, 0x80, 0xc0, 0xc0,
  317. 0x40, 0x00, 0x80, 0x90, 0xd0, 0xd8, 0xc8, 0xc8, 0x44, 0x44, 0x00, 0x88, 0xb8, 0xb8, 0xd8, 0xd8,
  318. 0xc0, 0xc0, 0x80, 0x20, 0x60, 0x60, 0x50, 0xd0, 0xb0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  319. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  320. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  321. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
  322. 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x30,
  323. 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  324. 0x20, 0x20, 0x20, 0x20, 0x20, 0x08, 0x07, 0x01, 0x90, 0x90, 0x90, 0x99, 0x99, 0x90, 0x84, 0x22,
  325. 0x6b, 0xe9, 0xf5, 0xf5, 0xf5, 0xe5, 0xc5, 0x10, 0x1e, 0x1e, 0x4e, 0x60, 0xf1, 0xf9, 0xf9, 0xf9,
  326. 0xf8, 0x78, 0x7a, 0x7b, 0x33, 0x37, 0xc6, 0xee, 0xcc, 0x19, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00,
  327. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  328. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  329. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  330. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  331. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  332. 0x00, 0x01, 0x02, 0x0c, 0x30, 0xc0, 0x80, 0x00, 0x06, 0x0c, 0x18, 0x31, 0x71, 0x61, 0x69, 0x40,
  333. 0x42, 0x86, 0x0d, 0x1d, 0x19, 0x39, 0x31, 0x76, 0x67, 0x6f, 0x4f, 0x0f, 0x0e, 0xce, 0xc0, 0xc0,
  334. 0xd2, 0xd6, 0xd7, 0xb7, 0x37, 0x3b, 0xda, 0xc0, 0xcb, 0x08, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
  335. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  336. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  337. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  338. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  339. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  340. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x06, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
  341. 0x0e, 0x1c, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x06, 0x04, 0x05, 0x01,
  342. 0x01, 0x01, 0x01, 0x05, 0x04, 0x06, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  343. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  344. };
  345. oled_write_raw_P(my_logo, sizeof(my_logo));
  346. }
  347. static void print_status_narrow(void) {
  348. // Print current mode
  349. oled_write_P(PSTR("\n\n"), false);
  350. oled_write_ln_P(PSTR("MODE"), false);
  351. oled_write_ln_P(PSTR("\n"), false);
  352. if (keymap_config.swap_lctl_lgui) {
  353. oled_write_ln_P(PSTR("MAC\n"), false);
  354. } else {
  355. oled_write_ln_P(PSTR("WIN\n"), false);
  356. }
  357. switch (get_highest_layer(default_layer_state)) {
  358. case _QWERTY:
  359. oled_write_ln_P(PSTR("Qwrt"), false);
  360. break;
  361. case _COLEMAK:
  362. oled_write_ln_P(PSTR("Clmk"), false);
  363. break;
  364. default:
  365. oled_write_P(PSTR("Undef"), false);
  366. }
  367. oled_write_P(PSTR("\n\n"), false);
  368. // Print current layer
  369. oled_write_ln_P(PSTR("LAYER"), false);
  370. switch (get_highest_layer(layer_state)) {
  371. case _COLEMAK:
  372. case _QWERTY:
  373. oled_write_P(PSTR("Base\n"), false);
  374. break;
  375. case _RAISE:
  376. oled_write_P(PSTR("Raise"), false);
  377. break;
  378. case _LOWER:
  379. oled_write_P(PSTR("Lower"), false);
  380. break;
  381. case _ADJUST:
  382. oled_write_P(PSTR("Adj\n"), false);
  383. break;
  384. default:
  385. oled_write_ln_P(PSTR("Undef"), false);
  386. }
  387. oled_write_P(PSTR("\n\n"), false);
  388. led_t led_usb_state = host_keyboard_led_state();
  389. oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
  390. oled_write_P(PSTR("\n\n"), false);
  391. }
  392. bool oled_task_user(void) {
  393. if (is_keyboard_master()) {
  394. print_status_narrow();
  395. } else {
  396. render_logo();
  397. }
  398. return false;
  399. }
  400. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  401. if (is_keyboard_master()) {
  402. return OLED_ROTATION_270;
  403. } else {
  404. return rotation;
  405. }
  406. }
  407. #endif
  408. #ifdef ENCODER_ENABLE
  409. bool encoder_update_user(uint8_t index, bool clockwise){
  410. if (index == 0) {
  411. switch (get_highest_layer(layer_state)) {
  412. case _QWERTY:
  413. // Move whole words. Hold shift to select while moving.
  414. if (clockwise) {
  415. tap_code(KC_VOLU);
  416. } else {
  417. tap_code(KC_VOLD);
  418. }
  419. break;
  420. default:
  421. // History scrubbing. For Adobe products, hold shift while moving
  422. // backward to go forward instead.
  423. if (clockwise) {
  424. tap_code16(C(KC_Z));
  425. } else {
  426. tap_code16(C(KC_Y));
  427. }
  428. break;
  429. }
  430. } else if (index == 1) {
  431. switch (get_highest_layer(layer_state)) {
  432. case _QWERTY:
  433. // Scrolling with PageUp and PgDn.
  434. if (!clockwise) {
  435. tap_code16(KC_PGDN);
  436. } else {
  437. tap_code16(KC_PGUP);
  438. }
  439. break;
  440. default:
  441. if (clockwise) {
  442. tap_code16(A(KC_TAB));
  443. } else {
  444. tap_code16(A(S(KC_TAB)));
  445. }
  446. break;
  447. }
  448. }
  449. return true;
  450. }
  451. #endif