language.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Copyright 2022 David Kristoffersen (@davidkristoffersen)
  2. // SPDX-License-Identifier: GPL-3.0-or-later
  3. #include "macros.h"
  4. bool handle_language(uint16_t keycode) {
  5. #ifdef LAYER_NO
  6. // Handle conversion of English to Norwegian codes
  7. uint16_t org_keycode = keycode;
  8. keycode = get_norwegian_code(keycode);
  9. #endif
  10. #ifndef NO_SPECIAL_SHIFT
  11. // Handle conversion of special shift codes
  12. if (get_mods() & MOD_MASK_SHIFT) {
  13. uint16_t shifted_key = get_special_shifted_code(keycode);
  14. if (shifted_key != keycode) {
  15. // Tap shifted key while shift is disabled
  16. unregister_code(KC_LSFT);
  17. tap_code16(shifted_key);
  18. register_code(KC_LSFT);
  19. return false;
  20. }
  21. }
  22. #endif
  23. #ifdef LAYER_NO
  24. // Tap new language key
  25. if (keycode != org_keycode) {
  26. tap_code16(keycode);
  27. return false;
  28. }
  29. #endif
  30. return true;
  31. }
  32. bool process_language(uint16_t keycode, keyrecord_t* record) {
  33. HANDLE_FALSE(handle_language(keycode));
  34. return true;
  35. }