mirror of
				https://github.com/qmk/qmk_userspace.git
				synced 2025-11-03 18:30:07 -05:00 
			
		
		
		
	NUM_ODK
This commit is contained in:
		
					parent
					
						
							
								033a8ce672
							
						
					
				
			
			
				commit
				
					
						191a0bb949
					
				
			
		
					 20 changed files with 267 additions and 251 deletions
				
			
		| 
						 | 
				
			
			@ -22,6 +22,7 @@
 | 
			
		|||
void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		||||
 | 
			
		||||
  uint16_t prev_keycode = recent[RECENT_SIZE - 1];
 | 
			
		||||
  //static bool is_shifted = false;
 | 
			
		||||
 | 
			
		||||
    // Inversion du point et de la virgule
 | 
			
		||||
    static bool inversion = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +44,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
    apostrophe = false;
 | 
			
		||||
 | 
			
		||||
    // Apostrophe
 | 
			
		||||
    switch (*next_keycode) {
 | 
			
		||||
    if (is_followed_by_apos(*next_keycode, prev_keycode)) {
 | 
			
		||||
      set_last_keycode(PG_APOS);
 | 
			
		||||
      apostrophe = true;
 | 
			
		||||
    }
 | 
			
		||||
/*     switch (*next_keycode) {
 | 
			
		||||
      case PG_Q:
 | 
			
		||||
        set_last_keycode(PG_APOS);
 | 
			
		||||
        apostrophe = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,15 +62,15 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      case PG_M:
 | 
			
		||||
      case PG_Y:
 | 
			
		||||
      case PG_J:
 | 
			
		||||
        //if (!isLetter(prev_keycode)) { set_last_keycode(PG_APOS); }
 | 
			
		||||
        if (!isLetter(prev_keycode)) {
 | 
			
		||||
        //if (!is_letter(prev_keycode)) { set_last_keycode(PG_APOS); }
 | 
			
		||||
        if (!is_letter(prev_keycode)) {
 | 
			
		||||
          set_last_keycode(PG_APOS);
 | 
			
		||||
          apostrophe = true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    } */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if (isLetter(*next_keycode) || isSendStringMacro(*next_keycode)) {
 | 
			
		||||
    if (is_letter(*next_keycode) || is_send_string_macro(*next_keycode)) {
 | 
			
		||||
      switch (prev_keycode) {
 | 
			
		||||
          case PG_EXCL:
 | 
			
		||||
          case PG_QUES:
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +78,13 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          case PG_2PTS:
 | 
			
		||||
            // Add space between punctuation and letters.
 | 
			
		||||
            invoke_key(KC_SPC, record);
 | 
			
		||||
            
 | 
			
		||||
            if (is_followed_by_apos(*next_keycode, prev_keycode)) {
 | 
			
		||||
              set_last_keycode(PG_APOS);
 | 
			
		||||
              apostrophe = true;
 | 
			
		||||
            } else {
 | 
			
		||||
              set_last_keycode(*next_keycode);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          case KC_SPC:
 | 
			
		||||
            switch (recent[RECENT_SIZE - 2]) {
 | 
			
		||||
| 
						 | 
				
			
			@ -105,37 +116,25 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          set_last_keycode(*next_keycode);
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        // Raccourci pour "quelq"
 | 
			
		||||
/*         case PG_Q:
 | 
			
		||||
          process_word((uint16_t[]) {PG_U, PG_E, PG_L}, 3, record);
 | 
			
		||||
          break; */
 | 
			
		||||
 | 
			
		||||
        // Raccourci pour "quoi", ça évite un aller-retour sur la main gauche.
 | 
			
		||||
        case PG_Z:
 | 
			
		||||
        // Raccourci pour "quoi"
 | 
			
		||||
        case PG_H:
 | 
			
		||||
          finish_word((uint16_t[]) {PG_U, PG_O, PG_I}, 3, next_keycode, record);
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        // Raccourci pour "quand"
 | 
			
		||||
        case PG_D:
 | 
			
		||||
          process_word((uint16_t[]) {PG_U, PG_A, PG_N}, 3, record);
 | 
			
		||||
          set_last_keycode(*next_keycode);
 | 
			
		||||
          break;
 | 
			
		||||
        case PG_N:
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_U, PG_A, PG_N, PG_D}, 4, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PG_P:
 | 
			
		||||
      switch (*next_keycode) {        
 | 
			
		||||
 | 
			
		||||
        case PG_M:
 | 
			
		||||
          // "par"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_A, PG_R}, 2, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_C:
 | 
			
		||||
          // "pas"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_A, PG_S}, 2, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_J:
 | 
			
		||||
          if (!isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
          if (!is_letter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
            // "pour"
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_O, PG_U, PG_R}, 3, next_keycode, record);
 | 
			
		||||
          }
 | 
			
		||||
| 
						 | 
				
			
			@ -155,17 +154,29 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
    case PG_EXCL:
 | 
			
		||||
      // On ajoute un espace insécable s'il n'a pas été entré avant le point d'exclamation.
 | 
			
		||||
      // Il ne faut pas tester cette fonctionnalité avec Word, qui ajoute cet espace automatiquement.
 | 
			
		||||
      if (isLetter(recent[RECENT_SIZE - 1])) {
 | 
			
		||||
      if (is_letter(recent[RECENT_SIZE - 1])) {
 | 
			
		||||
        invoke_key(KC_SPC, record);
 | 
			
		||||
        return replace_ongoing_key(*next_keycode, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case MAGIC:
 | 
			
		||||
/*       if (!isLetter(prev_keycode)) {
 | 
			
		||||
          // "je"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_J, PG_E}, 2, next_keycode, record);
 | 
			
		||||
      } */
 | 
			
		||||
      if (!is_letter(prev_keycode)) {
 | 
			
		||||
          // "à"
 | 
			
		||||
          bool is_shifted = (get_mods() | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
 | 
			
		||||
          if (is_shifted) {
 | 
			
		||||
              del_weak_mods(MOD_MASK_SHIFT);
 | 
			
		||||
              del_oneshot_mods(MOD_MASK_SHIFT);
 | 
			
		||||
              unregister_mods(MOD_MASK_SHIFT);
 | 
			
		||||
          }
 | 
			
		||||
          process_key(PG_ODK,record);
 | 
			
		||||
 | 
			
		||||
          if (is_shifted) {
 | 
			
		||||
              //is_shifted = false;
 | 
			
		||||
              set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
			
		||||
          }
 | 
			
		||||
          return replace_ongoing_key(PG_A, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      switch (prev_keycode) {
 | 
			
		||||
        case PG_O:
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +184,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          invoke_key(PG_U, record);
 | 
			
		||||
        case PG_U:
 | 
			
		||||
          // ui SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_I, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_L:
 | 
			
		||||
| 
						 | 
				
			
			@ -182,40 +193,49 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
 | 
			
		||||
        case PG_EACU:
 | 
			
		||||
          // éa SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_A, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_S:
 | 
			
		||||
          // sc SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_C, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_C:
 | 
			
		||||
          // cs SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_S, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_N:
 | 
			
		||||
          // n. SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_POIN, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_P:
 | 
			
		||||
          // ph SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_H, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_G:
 | 
			
		||||
          // gt SFB
 | 
			
		||||
          //bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_T, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_Q:
 | 
			
		||||
          // qué scissor
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_U, PG_EACU}, 2, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_Y:
 | 
			
		||||
          // you bad redirection
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_O, PG_U}, 2, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_T:
 | 
			
		||||
          invoke_key(PG_I, record);
 | 
			
		||||
        case PG_I:
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_O, PG_N}, 2, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_M:
 | 
			
		||||
          if (isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
          if (is_letter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
            // "ment"
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_E, PG_N, PG_T}, 3, next_keycode, record);
 | 
			
		||||
          } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -224,16 +244,19 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          }
 | 
			
		||||
 | 
			
		||||
        case PG_B:
 | 
			
		||||
          // "b@" -> "beaucoup"
 | 
			
		||||
          //layer_off(_ODK);
 | 
			
		||||
          // "beaucoup"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_E, PG_A, PG_U, PG_C, PG_O, PG_U, PG_P}, 7, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_D:
 | 
			
		||||
          // "déjà"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_EACU, PG_J, PG_ODK, PG_A}, 4, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        default:
 | 
			
		||||
          return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    case PG_AROB:
 | 
			
		||||
      if (!isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
      if (!is_letter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
        switch (prev_keycode) {
 | 
			
		||||
 | 
			
		||||
          case PG_P:
 | 
			
		||||
| 
						 | 
				
			
			@ -244,18 +267,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          case PG_A:
 | 
			
		||||
            // "a@" -> "aujourd'hui"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            apostrophe = true;
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_U, PG_J, PG_O, PG_U, PG_R, PG_D, PG_APOS, PG_H, PG_U, PG_I}, 10, next_keycode, record);
 | 
			
		||||
          
 | 
			
		||||
/*           case PG_B:
 | 
			
		||||
            // "b@" -> "beaucoup"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_E, PG_A, PG_U, PG_C, PG_O, PG_U, PG_P}, 7, next_keycode, record); */
 | 
			
		||||
          
 | 
			
		||||
          case PG_D:
 | 
			
		||||
            // "d@" -> "déjà"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_EACU, PG_J, PG_ODK, PG_A}, 4, next_keycode, record);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
| 
						 | 
				
			
			@ -268,6 +280,14 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PG_H:
 | 
			
		||||
      if (prev_keycode == PG_M) {
 | 
			
		||||
        // "mh" -> "mb"
 | 
			
		||||
        bkspc_countdown = 0;
 | 
			
		||||
        return replace_ongoing_key(PG_B, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
/*     case PG_R:
 | 
			
		||||
      if (prev_keycode == PG_L) {
 | 
			
		||||
          // "lr" -> "l" + 1DK
 | 
			
		||||
| 
						 | 
				
			
			@ -276,24 +296,6 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      }
 | 
			
		||||
      break; */
 | 
			
		||||
 | 
			
		||||
/*     case PG_A:
 | 
			
		||||
      //if (prev_keycode == PG_O && !isCaps) {
 | 
			
		||||
      if (prev_keycode == PG_O) {
 | 
			
		||||
        // "oa" -> "oi"
 | 
			
		||||
        bkspc_countdown = 0;
 | 
			
		||||
        return replace_ongoing_key(PG_I, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PG_I:
 | 
			
		||||
      //if (prev_keycode == PG_O && !isCaps && recent[RECENT_SIZE - 3] != PG_Q) {
 | 
			
		||||
      if (prev_keycode == PG_O && recent[RECENT_SIZE - 3] != PG_Q) {
 | 
			
		||||
        // "oi" -> "oa", for "keyboard"
 | 
			
		||||
        bkspc_countdown = 0;
 | 
			
		||||
        return replace_ongoing_key(PG_A, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break; */
 | 
			
		||||
 | 
			
		||||
    case OU_GRV:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_O, PG_ODK, PG_N}, 3, next_keycode, record);
 | 
			
		||||
| 
						 | 
				
			
			@ -306,19 +308,9 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_J, PG_APOS}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
/*     case L_APOS:
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_L, PG_APOS}, 2, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
    case D_APOS:
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_D, PG_APOS}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
    case PG_APOS:
 | 
			
		||||
      if (is_apos_dr) { return replace_ongoing_key(PG_APOD, next_keycode, record); }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
/*     case AGRV_SPC:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_AGR, KC_SPC}, 2, next_keycode, record); */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ bool process_clever_keys(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
    uint16_t prev_keycode = recent[RECENT_SIZE - 1];
 | 
			
		||||
    //const uint8_t mods = get_mods();
 | 
			
		||||
 | 
			
		||||
    if (isLetter(next_keycode) || next_keycode == E_CIRC) {
 | 
			
		||||
    if (is_letter(next_keycode) || next_keycode == E_CIRC) {
 | 
			
		||||
      switch (prev_keycode) {
 | 
			
		||||
          case PG_EXCL:
 | 
			
		||||
          case PG_QUES:
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ bool process_clever_keys(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    } else if (next_keycode == PG_AROB && !isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
    } else if (next_keycode == PG_AROB && !is_letter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
        switch (prev_keycode) {
 | 
			
		||||
 | 
			
		||||
          case PG_N:
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ bool process_clever_keys(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
            return finish_word((uint16_t[]) {PG_A, PG_R}, 2, record);
 | 
			
		||||
          
 | 
			
		||||
          case PG_X:
 | 
			
		||||
            if (!isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
            if (!is_letter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
              // "pour"
 | 
			
		||||
              return finish_word((uint16_t[]) {PG_O, PG_L, PG_R}, 3, record);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +129,7 @@ bool process_clever_keys(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
      case PG_EXCL:
 | 
			
		||||
        // On ajoute un espace insécable s'il n'a pas été entré avant le point d'exclamation.
 | 
			
		||||
        // Il ne faut pas tester cette fonctionnalité avec Word, qui ajoute cet espace automatiquement.
 | 
			
		||||
        if (isLetter(recent[RECENT_SIZE - 1])) {
 | 
			
		||||
        if (is_letter(recent[RECENT_SIZE - 1])) {
 | 
			
		||||
          
 | 
			
		||||
          if ((mods | get_oneshot_mods() | get_weak_mods()) & MOD_MASK_SHIFT) {
 | 
			
		||||
            del_weak_mods(MOD_MASK_SHIFT);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  // Handles custom keycodes.
 | 
			
		||||
  if (isSendStringMacro(keycode)) { return keycode; }
 | 
			
		||||
  if (is_send_string_macro(keycode)) { return keycode; }
 | 
			
		||||
  //if (keycode == PG_CCED) { return PG_CCED; }
 | 
			
		||||
  if (IS_LAYER_ON(_ODK)) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
    case KC_A ... KC_SLASH:  // These keys type letters, digits, symbols.
 | 
			
		||||
    case PG_E:
 | 
			
		||||
 | 
			
		||||
      if (isLetter(basic_keycode) && (mods & ~MOD_BIT(KC_ALGR))) {
 | 
			
		||||
      if (is_letter(basic_keycode) && (mods & ~MOD_BIT(KC_ALGR))) {
 | 
			
		||||
          // Shift doesn't matter for letters.
 | 
			
		||||
          return basic_keycode;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,8 +33,7 @@ enum combos {
 | 
			
		|||
  PANIC,
 | 
			
		||||
  NUMWRD,
 | 
			
		||||
  ALTTAB,
 | 
			
		||||
/*   L_APOST,
 | 
			
		||||
  D_APOST, */
 | 
			
		||||
  ALTESC
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM del_combo_d[] = {PG_T, PG_S, COMBO_END};
 | 
			
		||||
| 
						 | 
				
			
			@ -51,8 +50,7 @@ const uint16_t PROGMEM help_combo[] = {PG_EACU, PG_J, COMBO_END};
 | 
			
		|||
const uint16_t PROGMEM panic_combo[] = {PG_U, PG_C, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM numword_combo[] = {PG_T, PG_R, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM alttab_combo[] = {PG_H, PG_Y, COMBO_END};
 | 
			
		||||
/* const uint16_t PROGMEM l_apost_combo[] = {PG_X, PG_APOS, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM d_apost_combo[] = {PG_D, PG_F, COMBO_END}; */
 | 
			
		||||
const uint16_t PROGMEM altesc_combo[] = {PG_A, PG_I, PG_N, COMBO_END};
 | 
			
		||||
 | 
			
		||||
combo_t key_combos[] = {
 | 
			
		||||
    [R_BKSPC] = COMBO(bkspc_combo_d, KC_BSPC),
 | 
			
		||||
| 
						 | 
				
			
			@ -69,8 +67,7 @@ combo_t key_combos[] = {
 | 
			
		|||
    [PANIC] = COMBO(panic_combo, RAZ),
 | 
			
		||||
    [NUMWRD] = COMBO(numword_combo, NUMWORD),
 | 
			
		||||
    [ALTTAB] = COMBO(alttab_combo, KC_NO),
 | 
			
		||||
/*     [L_APOST] = COMBO(l_apost_combo, L_APOS),
 | 
			
		||||
    [D_APOST] = COMBO(d_apost_combo, D_APOS) */
 | 
			
		||||
    [ALTESC] = COMBO(altesc_combo, LALT(KC_ESC))
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
/* uint16_t get_combo_term(uint16_t combo_index, combo_t *combo) {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,8 +92,6 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
 | 
			
		|||
        case ENTER:
 | 
			
		||||
        case HOME:
 | 
			
		||||
        case END:
 | 
			
		||||
/*         case L_APOST:
 | 
			
		||||
        case D_APOST: */
 | 
			
		||||
          return true;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ bool is_apos_dr = false;
 | 
			
		|||
 | 
			
		||||
bool process_macros(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    //const uint8_t mods = get_mods();
 | 
			
		||||
    //static bool is_shifted = false;
 | 
			
		||||
 | 
			
		||||
    if (record->event.pressed) {    // Handling of other macros (on press).
 | 
			
		||||
        switch (keycode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +71,21 @@ bool process_macros(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
            case TG_APOS:
 | 
			
		||||
                is_apos_dr = !is_apos_dr;
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            case NUM_ODK:
 | 
			
		||||
                bool is_shifted = (get_mods() | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
 | 
			
		||||
                if (is_shifted) {
 | 
			
		||||
                    del_weak_mods(MOD_MASK_SHIFT);
 | 
			
		||||
                    del_oneshot_mods(MOD_MASK_SHIFT);
 | 
			
		||||
                    unregister_mods(MOD_MASK_SHIFT);
 | 
			
		||||
                }
 | 
			
		||||
                tap_code(PG_ODK);
 | 
			
		||||
 | 
			
		||||
                if (is_shifted) {
 | 
			
		||||
                    //is_shifted = false;
 | 
			
		||||
                    set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return true; // Process all other keycodes normally
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,14 +52,8 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
                case PG_K:
 | 
			
		||||
                case PG_B:
 | 
			
		||||
                case PG_APOS:
 | 
			
		||||
                //case PG_BL:
 | 
			
		||||
                //case PG_ECIR:
 | 
			
		||||
                //case J_APOS:
 | 
			
		||||
                case OU_GRV:
 | 
			
		||||
                //case PG_CCED:
 | 
			
		||||
 | 
			
		||||
                case KC_SPC:    // When space is added by Clever Keys
 | 
			
		||||
                
 | 
			
		||||
                case CNL_ODK:
 | 
			
		||||
                    break;
 | 
			
		||||
          
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
 | 
			
		||||
bool is_caps_lock_on(void) { return host_keyboard_led_state().caps_lock; }
 | 
			
		||||
 | 
			
		||||
bool isLetter(uint16_t keycode) {
 | 
			
		||||
bool is_letter(uint16_t keycode) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case KC_A ... KC_F:
 | 
			
		||||
    case KC_H ... KC_N:
 | 
			
		||||
| 
						 | 
				
			
			@ -36,14 +36,9 @@ bool isLetter(uint16_t keycode) {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool isSendStringMacro(uint16_t keycode) {
 | 
			
		||||
bool is_send_string_macro(uint16_t keycode) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    //case AGRV_SPC:
 | 
			
		||||
    //case CA_CED:
 | 
			
		||||
/*     case L_APOS:
 | 
			
		||||
    case D_APOS: */
 | 
			
		||||
    case OU_GRV:
 | 
			
		||||
    //case J_APOS:
 | 
			
		||||
    //case PG_BL:
 | 
			
		||||
    case MAGIC:
 | 
			
		||||
      return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -53,6 +48,25 @@ bool isSendStringMacro(uint16_t keycode) {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool is_followed_by_apos(uint16_t keycode, uint16_t prev_keycode) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case PG_Q:
 | 
			
		||||
      return true;
 | 
			
		||||
      
 | 
			
		||||
    case PG_L:
 | 
			
		||||
    case PG_T:
 | 
			
		||||
    case PG_D:
 | 
			
		||||
    case PG_C:
 | 
			
		||||
    case PG_N:
 | 
			
		||||
    case PG_S:
 | 
			
		||||
    case PG_M:
 | 
			
		||||
    case PG_Y:
 | 
			
		||||
    case PG_J:
 | 
			
		||||
      if (!is_letter(prev_keycode)) { return true; }
 | 
			
		||||
  }
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This function extracts the base keycode of MT and LT,
 | 
			
		||||
// even if the tap/hold key is a custom one, with non-basic tap keycode.
 | 
			
		||||
uint16_t tap_hold_extractor(uint16_t keycode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +118,7 @@ bool caps_word_press_user(uint16_t keycode) {
 | 
			
		|||
 | 
			
		||||
  // Keycodes that continue Caps Word, with shift applied.
 | 
			
		||||
  // @ must be shifted, bc of CleverKeys using it.
 | 
			
		||||
  if (isLetter(keycode) || isSendStringMacro(keycode) || keycode == PG_AROB) {
 | 
			
		||||
  if (is_letter(keycode) || is_send_string_macro(keycode) || keycode == PG_AROB) {
 | 
			
		||||
    add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
 | 
			
		||||
    return true;
 | 
			
		||||
  } 
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +157,8 @@ bool os4a_layer_changer(uint16_t keycode) {
 | 
			
		|||
    case OS_FA:
 | 
			
		||||
    case NUMWORD:
 | 
			
		||||
    case TT_FA:
 | 
			
		||||
    //case TG_APOD:
 | 
			
		||||
    case OS_RSA:
 | 
			
		||||
    case NUM_ODK:
 | 
			
		||||
      return true;
 | 
			
		||||
    default:
 | 
			
		||||
      return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -180,9 +195,9 @@ bool is_oneshot_ignored_key(uint16_t keycode) {
 | 
			
		|||
  // Alt-gr et shift s'appliquent à la touche typo, pour permettre de faire les majuscules plus facilement ainsi que ] avec.
 | 
			
		||||
  // Autrement, la touche typo est ignorée par les Callum mods.
 | 
			
		||||
  // Ça permet de transmettre les mods à la touche suivante, par ex pour faire Ctrl + K. 
 | 
			
		||||
  uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods();
 | 
			
		||||
  //uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods();
 | 
			
		||||
  //if (keycode == OS_ODK && (mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_ALGR)))) { return true; }
 | 
			
		||||
  if (keycode == OS_ODK && (mods & ~MOD_BIT(KC_ALGR))) { return true;}
 | 
			
		||||
  //if (keycode == OS_ODK && (mods & ~MOD_BIT(KC_ALGR))) { return true; }
 | 
			
		||||
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    //case OS_ODK:  /!\ A ne pas remettre, sous peine de ne pas pouvoir faire shift + typo + touche de l'autre côté
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +211,8 @@ bool is_oneshot_ignored_key(uint16_t keycode) {
 | 
			
		|||
    case OS_FA:
 | 
			
		||||
    case NUMWORD:
 | 
			
		||||
    case TT_FA:
 | 
			
		||||
    case PG_ODK:
 | 
			
		||||
    case NUM_ODK:
 | 
			
		||||
    //case PG_ODK:
 | 
			
		||||
        return true;
 | 
			
		||||
    default:
 | 
			
		||||
        return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +247,7 @@ uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
 | 
			
		|||
  if (recent[RECENT_SIZE - 1] != KC_NO) { return MAGIC; }
 | 
			
		||||
 | 
			
		||||
/*   keycode = tap_hold_extractor(keycode);
 | 
			
		||||
  if (isLetter(keycode)) { return MAGIC; }
 | 
			
		||||
  if (is_letter(keycode)) { return MAGIC; }
 | 
			
		||||
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
  case PG_APOS:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,8 +19,9 @@
 | 
			
		|||
#include "quantum.h"
 | 
			
		||||
#include "keymap.h"
 | 
			
		||||
 | 
			
		||||
bool isLetter(uint16_t keycode);
 | 
			
		||||
bool isSendStringMacro(uint16_t keycode);
 | 
			
		||||
bool is_letter(uint16_t keycode);
 | 
			
		||||
bool is_send_string_macro(uint16_t keycode);
 | 
			
		||||
bool is_followed_by_apos(uint16_t keycode, uint16_t prev_keycode);
 | 
			
		||||
bool is_caps_lock_on(void);
 | 
			
		||||
uint16_t tap_hold_extractor(uint16_t keycode);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
 | 
			
		||||
bool is_caps_lock_on(void) { return host_keyboard_led_state().caps_lock; }
 | 
			
		||||
 | 
			
		||||
bool isLetter(uint16_t keycode) {
 | 
			
		||||
bool is_letter(uint16_t keycode) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case KC_A ... KC_L:
 | 
			
		||||
    case PG_M:
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ bool achordion_eager_mod(uint8_t mod) {
 | 
			
		|||
 | 
			
		||||
bool caps_word_press_user(uint16_t keycode) {
 | 
			
		||||
  // Keycodes that continue Caps Word, with shift applied.
 | 
			
		||||
  if (isLetter(keycode)) {
 | 
			
		||||
  if (is_letter(keycode)) {
 | 
			
		||||
    add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
 | 
			
		||||
    return true;
 | 
			
		||||
  } else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 */
 | 
			
		||||
    [_L_MODS] = LAYOUT(
 | 
			
		||||
      KC_NO, KC_NO,   KC_NO,  OS_WIN,  KC_RGUI, KC_NO,                                        _______, _______, _______, _______, _______, _______,
 | 
			
		||||
      KC_NO, OS_RALT, OS_FA,  OS_CTRL, OS_SHFT, KC_NO,                                        _______, _______, _______, _______, _______, _______,
 | 
			
		||||
      KC_NO, OS_RSA,  OS_FA,  OS_CTRL, OS_SHFT, KC_NO,                                        _______, _______, _______, _______, _______, _______,
 | 
			
		||||
      KC_NO, OS_LALT, KC_NO,  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   _______,  _______, _______, _______, _______, _______, _______, _______,
 | 
			
		||||
                              KC_NO,   KC_NO,   _______, _______, _______, CAPSWORD, _______, KC_CAPS, _______, _______
 | 
			
		||||
    ),
 | 
			
		||||
| 
						 | 
				
			
			@ -180,10 +180,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 *                        `----------------------------------'  `----------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
    [_R_MODS] = LAYOUT(
 | 
			
		||||
      _______, _______, _______, _______, _______, _______,                                     KC_NO,   KC_RGUI, OS_WIN,  TG_APOS, KC_NO,   KC_NO,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______,                                     TT_FA,   OS_SHFT, OS_CTRL, NUMWORD, PG_ODK,  KC_NO,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______,                                     KC_NO,   KC_RGUI, OS_WIN,  KC_NO,   KC_NO,   KC_NO,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______,                                     TT_FA,   OS_SHFT, OS_CTRL, NUMWORD, NUM_ODK,  KC_NO,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   OS_FA,   OS_LALT, KC_NO,
 | 
			
		||||
                                 _______, _______, _______, _______, _______, _______, _______, _______, KC_NO,   KC_NO
 | 
			
		||||
                                 _______, _______, _______, _______, _______, TG_APOS, _______, _______, KC_NO,   KC_NO
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 *                        `----------------------------------'  `----------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
    [_SYMBOLS] = LAYOUT(
 | 
			
		||||
      _______, PG_ACIR,    PG_LCBR, PG_RCBR, PG_DLR,  PG_HASH,                                           PG_PERC, PG_DQUO, PG_EGAL, ALGR(PG_APOS), PG_GRV,  _______,
 | 
			
		||||
      _______, PG_ACIR,    PG_LCBR, PG_RCBR, PG_DLR,  PG_PERC,                                           PG_HASH, PG_DQUO, PG_EGAL, ALGR(PG_APOS), PG_GRV,  _______,
 | 
			
		||||
      _______, ALGR(PG_O), PG_LPRN, PG_RPRN, PG_PVIR, ALGR(PG_VIRG),                                     PG_BSLS, MT_SLSH, PG_MOIN, PG_PLUS,       PG_ASTX, _______,
 | 
			
		||||
      _______, PG_INF,     PG_LSBR, PG_RSBR, PG_SUP,  _______,       _______, _______, _______, _______, _______, PG_APOD, PG_ESPR, PG_PIPE,       PG_TILD, _______,
 | 
			
		||||
                                    _______, _______, _______,       PG_UNDS, KC_SPC,  PG_APOS, _______, _______, _______, _______
 | 
			
		||||
| 
						 | 
				
			
			@ -224,9 +224,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 *                        `----------------------------------'  `----------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
    [_NUMBERS] = LAYOUT(
 | 
			
		||||
       _______, PG_DLR,  PG_MOIN, PG_PLUS, KC_7,    S(PG_ACIR),                                        PG_PERC, _______, PG_EGAL, PG_ASTX, _______, _______,
 | 
			
		||||
       _______, KC_4,    KC_3,    KC_2,    MT_1,    PG_CARN,                                           _______, MT_SLSH, KC_6,    KC_7,    KC_8,    _______,
 | 
			
		||||
       _______, _______, _______, _______, KC_5,    _______,    _______, _______,    _______, _______, _______, KC_9,    KC_6,    _______, PG_ODK,  _______,
 | 
			
		||||
       _______, PG_DLR,  PG_MOIN, PG_PLUS, KC_7,    PG_PERC,                                           SAGR(PG_POIN), _______, PG_EGAL, PG_ASTX, _______, _______,
 | 
			
		||||
       _______, KC_4,    KC_3,    KC_2,    MT_1,    ALGR(PG_VIRG),                                     PG_CARN,       MT_SLSH, KC_6,    KC_7,    KC_8,    _______,
 | 
			
		||||
       _______, _______, _______, PG_H,    KC_5,    _______,    _______, _______,    _______, _______, _______,       KC_9,    _______, _______, PG_ODK,  _______,
 | 
			
		||||
                                  _______, _______, KC_PDOT,    KC_0   , LT_NUMWORD, LT_REPT, KC_SPC,  KC_PDOT,       _______, _______
 | 
			
		||||
     ),
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,8 +247,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 */
 | 
			
		||||
    [_ODK] = LAYOUT(
 | 
			
		||||
       _______, _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______, _______,
 | 
			
		||||
       _______, OU_GRV,  PG_R,    _______, PG_T,    _______,                                     _______, PG_A,    _______, PG_AROB, _______, _______,
 | 
			
		||||
       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, PG_K,    CNL_ODK, _______,
 | 
			
		||||
       _______, OU_GRV,  _______, _______, PG_T,    _______,                                     _______, PG_K,    _______, _______, _______, _______,
 | 
			
		||||
       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, PG_AROB, CNL_ODK, _______,
 | 
			
		||||
                                  _______, _______, _______, _______, PG_O,    PG_APOS, PG_B,    _______, _______, _______
 | 
			
		||||
     ),
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,6 @@
 | 
			
		|||
 | 
			
		||||
enum layers {
 | 
			
		||||
    _BASE = 0,
 | 
			
		||||
    //_APOS_DR,
 | 
			
		||||
    // OS4A layers should be as closed as base layer as possible
 | 
			
		||||
    _L_MODS,
 | 
			
		||||
    _R_MODS,
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +51,6 @@ enum custom_keycodes {
 | 
			
		|||
  RAZ,
 | 
			
		||||
  CAPSWORD,
 | 
			
		||||
  OU_GRV,
 | 
			
		||||
  //J_APOS,
 | 
			
		||||
  //E_CIRC,
 | 
			
		||||
/*  I_CIRC,
 | 
			
		||||
  A_CIRC,
 | 
			
		||||
| 
						 | 
				
			
			@ -67,10 +65,8 @@ enum custom_keycodes {
 | 
			
		|||
  OS_WIN,
 | 
			
		||||
  //OS_ODK,
 | 
			
		||||
  CNL_ODK,
 | 
			
		||||
  TG_APOS,
 | 
			
		||||
  //PG_BL
 | 
			
		||||
/*   L_APOS,
 | 
			
		||||
  D_APOS */
 | 
			
		||||
  TG_APOS
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Layer taps
 | 
			
		||||
| 
						 | 
				
			
			@ -80,12 +76,13 @@ enum custom_keycodes {
 | 
			
		|||
#define LT_MGC LT(_SHORTNAV, KC_1)
 | 
			
		||||
#define OS_FA OSL(_FUNCAPPS)
 | 
			
		||||
#define TT_FA TT(_FUNCAPPS)
 | 
			
		||||
//#define TG_APOD TG(_APOS_DR)
 | 
			
		||||
#define MT_SLSH SFT_T(PG_SLSH)
 | 
			
		||||
#define MT_1 SFT_T(KC_1)
 | 
			
		||||
#define LT_NUMWORD LT(_SHORTNAV, NUMWORD)
 | 
			
		||||
#define E_CIRC S(FG_0)
 | 
			
		||||
#define OS_ODK OSL(_ODK)
 | 
			
		||||
#define OS_RSA OSM(MOD_RALT | MOD_LSFT)
 | 
			
		||||
#define NUM_ODK OSL(_NUMBERS)
 | 
			
		||||
 | 
			
		||||
// One shot mods
 | 
			
		||||
#define L_OS4A LSFT_T(OS4A)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -206,7 +206,7 @@
 | 
			
		|||
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 #define PG_CARN S(ALGR(PG_X)) // ˇ (dead)
 | 
			
		||||
 #define PG_CARN S(ALGR(PG_O)) // ˇ (dead)
 | 
			
		||||
/* // Row 1
 | 
			
		||||
#define PG_IBRV S(ALGR(PG_AROB))   //  ̑ (dead)
 | 
			
		||||
#define PG_HACU S(ALGR(PG_LPRN)) // ˝ (dead)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,10 +32,21 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
    if (inversion == false && *next_keycode == PG_VIRG) { replace_ongoing_key(PG_POIN, next_keycode, record); }
 | 
			
		||||
    inversion = false;
 | 
			
		||||
 | 
			
		||||
    static bool apostrophe = false;
 | 
			
		||||
    if (IS_LAYER_ON(_BASE) && *next_keycode == PG_APOS) {
 | 
			
		||||
      if (apostrophe) {
 | 
			
		||||
        apostrophe = false;
 | 
			
		||||
      } else {
 | 
			
		||||
        replace_ongoing_key(PG_MOIN, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    apostrophe = false;
 | 
			
		||||
 | 
			
		||||
    // Apostrophe
 | 
			
		||||
    switch (*next_keycode) {
 | 
			
		||||
      case PG_Q:
 | 
			
		||||
        set_last_keycode(PG_APOS);
 | 
			
		||||
        apostrophe = true;
 | 
			
		||||
        break;
 | 
			
		||||
      case PG_L:
 | 
			
		||||
      case PG_T:
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +56,12 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      case PG_S:
 | 
			
		||||
      case PG_M:
 | 
			
		||||
      case PG_Y:
 | 
			
		||||
        if (!isLetter(prev_keycode)) { set_last_keycode(PG_APOS); }
 | 
			
		||||
      case PG_J:
 | 
			
		||||
        //if (!isLetter(prev_keycode)) { set_last_keycode(PG_APOS); }
 | 
			
		||||
        if (!isLetter(prev_keycode)) {
 | 
			
		||||
          set_last_keycode(PG_APOS);
 | 
			
		||||
          apostrophe = true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,10 +116,10 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          break;
 | 
			
		||||
 | 
			
		||||
        // Raccourci pour "quand"
 | 
			
		||||
        case PG_D:
 | 
			
		||||
          process_word((uint16_t[]) {PG_U, PG_A, PG_N}, 3, record);
 | 
			
		||||
          set_last_keycode(*next_keycode);
 | 
			
		||||
          break;
 | 
			
		||||
        case PG_N:
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_U, PG_A, PG_N, PG_D}, 4, next_keycode, record);
 | 
			
		||||
          //set_last_keycode(*next_keycode);
 | 
			
		||||
          //break;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +134,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          // "pas"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_A, PG_S}, 2, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_APOS:
 | 
			
		||||
        case PG_J:
 | 
			
		||||
          if (!isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
            // "pour"
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_O, PG_U, PG_R}, 3, next_keycode, record);
 | 
			
		||||
| 
						 | 
				
			
			@ -130,13 +146,6 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          return finish_word((uint16_t[]) {PG_L, PG_U, PG_S}, 3, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    
 | 
			
		||||
/*     case PG_CCED:
 | 
			
		||||
      if (!isLetter(*next_keycode)) {
 | 
			
		||||
        invoke_key(PG_A, record);
 | 
			
		||||
        set_last_keycode(*next_keycode);
 | 
			
		||||
      }
 | 
			
		||||
      break; */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			@ -153,6 +162,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      break;
 | 
			
		||||
 | 
			
		||||
    case MAGIC:
 | 
			
		||||
/*       if (!isLetter(prev_keycode)) {
 | 
			
		||||
          // "je"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_J, PG_E}, 2, next_keycode, record);
 | 
			
		||||
      } */
 | 
			
		||||
 | 
			
		||||
      switch (prev_keycode) {
 | 
			
		||||
        case PG_O:
 | 
			
		||||
          // oui
 | 
			
		||||
| 
						 | 
				
			
			@ -176,6 +190,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_C, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_C:
 | 
			
		||||
          // cs SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_S, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_N:
 | 
			
		||||
          // n. SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -186,6 +205,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
          bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_H, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_G:
 | 
			
		||||
          // gt SFB
 | 
			
		||||
          bkspc_countdown = 0;
 | 
			
		||||
          return replace_ongoing_key(PG_T, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_Q:
 | 
			
		||||
          // qué scissor
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_U, PG_EACU}, 2, next_keycode, record);
 | 
			
		||||
| 
						 | 
				
			
			@ -195,30 +219,6 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
        case PG_I:
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_O, PG_N}, 2, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
/*         case PG_D:
 | 
			
		||||
          // "c’est" 
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_APOS, PG_E, PG_T, PG_N}, 4, next_keycode, record); 
 | 
			
		||||
        
 | 
			
		||||
        case PG_H:
 | 
			
		||||
          // "dans"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_A, PG_S, PG_T}, 3, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_P:
 | 
			
		||||
          // "plus"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_C, PG_L, PG_T}, 3, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_A:
 | 
			
		||||
          // "avec"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_G, PG_E, PG_D}, 3, next_keycode, record); */
 | 
			
		||||
        
 | 
			
		||||
/*         case PG_B:
 | 
			
		||||
          // "bonjour"
 | 
			
		||||
          process_word((uint16_t[]) {PG_O, PG_S, PG_J}, 3, record);
 | 
			
		||||
        
 | 
			
		||||
        case PG_J:
 | 
			
		||||
          // "jour"
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_O, PG_L, PG_R}, 3, next_keycode, record); */
 | 
			
		||||
        
 | 
			
		||||
        case PG_M:
 | 
			
		||||
          if (isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
            // "ment"
 | 
			
		||||
| 
						 | 
				
			
			@ -228,6 +228,16 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
            return finish_word((uint16_t[]) {PG_ODK, PG_O, PG_M, PG_E}, 4, next_keycode, record);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
        case PG_B:
 | 
			
		||||
          // "beaucoup"
 | 
			
		||||
          //layer_off(_ODK);
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_E, PG_A, PG_U, PG_C, PG_O, PG_U, PG_P}, 7, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
        case PG_D:
 | 
			
		||||
          // "déjà"
 | 
			
		||||
          //layer_off(_ODK);
 | 
			
		||||
          return finish_word((uint16_t[]) {PG_EACU, PG_J, PG_ODK, PG_A}, 4, next_keycode, record);
 | 
			
		||||
        
 | 
			
		||||
        default:
 | 
			
		||||
          return;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -236,48 +246,19 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      if (!isLetter(recent[RECENT_SIZE - 2])) {
 | 
			
		||||
        switch (prev_keycode) {
 | 
			
		||||
 | 
			
		||||
/*           case PG_T:
 | 
			
		||||
            // "t@" -> "toujours"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_O, PG_L, PG_J, PG_O, PG_L, PG_R, PG_T}, 7, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
          case PG_P:
 | 
			
		||||
            // "p@" -> "peut-être"
 | 
			
		||||
            // "p@" -> "problème"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_E, PG_U, PG_T, PG_MOIN, PG_ODK, PG_O, PG_T, PG_R, PG_E}, 9, next_keycode, record);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_R, PG_O, PG_B, PG_L, PG_ODK, PG_E, PG_M, PG_E}, 8, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
          case PG_A:
 | 
			
		||||
            // "a@" -> "aujourd'hui"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_U, PG_J, PG_O, PG_U, PG_R, PG_D, PG_APOS, PG_H, PG_U, PG_I}, 10, next_keycode, record);
 | 
			
		||||
          
 | 
			
		||||
          case PG_B:
 | 
			
		||||
            // "b@" -> "beaucoup"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_E, PG_A, PG_U, PG_C, PG_O, PG_U, PG_P}, 7, next_keycode, record);
 | 
			
		||||
          
 | 
			
		||||
/*           case PG_E:
 | 
			
		||||
            // "e@" -> "est-ce qu"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_T, PG_N, PG_MOIN, PG_D, PG_E, KC_SPC, PG_Q}, 7, next_keycode, record); */
 | 
			
		||||
          
 | 
			
		||||
          case PG_D:
 | 
			
		||||
            // "d@" -> "déjà"
 | 
			
		||||
            layer_off(_ODK);
 | 
			
		||||
            return finish_word((uint16_t[]) {PG_EACU, PG_J, PG_ODK, PG_A}, 4, next_keycode, record);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
/*     case PG_Q:
 | 
			
		||||
      if (prev_keycode == PG_J) {
 | 
			
		||||
          // "jq" -> "jusqu"
 | 
			
		||||
          process_word((uint16_t[]) {PG_U, PG_S}, 2, record);
 | 
			
		||||
          set_last_keycode(*next_keycode);
 | 
			
		||||
          return;
 | 
			
		||||
      }
 | 
			
		||||
      break; */
 | 
			
		||||
 | 
			
		||||
    case PG_M:
 | 
			
		||||
      if (prev_keycode == PG_C) {
 | 
			
		||||
        // "cm" -> "ch"
 | 
			
		||||
| 
						 | 
				
			
			@ -286,6 +267,14 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PG_H:
 | 
			
		||||
      if (prev_keycode == PG_M) {
 | 
			
		||||
        // "mh" -> "mb"
 | 
			
		||||
        bkspc_countdown = 0;
 | 
			
		||||
        return replace_ongoing_key(PG_B, next_keycode, record);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
/*     case PG_R:
 | 
			
		||||
      if (prev_keycode == PG_L) {
 | 
			
		||||
          // "lr" -> "l" + 1DK
 | 
			
		||||
| 
						 | 
				
			
			@ -316,28 +305,27 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) {
 | 
			
		|||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_O, PG_ODK, PG_N}, 3, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
    case J_APOS:
 | 
			
		||||
/*      case PG_BL:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_J, PG_APOS}, 2, next_keycode, record);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_B, PG_L}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
    case L_APOS:
 | 
			
		||||
/*     case J_APOS:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_J, PG_APOS}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
/*     case L_APOS:
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_L, PG_APOS}, 2, next_keycode, record);
 | 
			
		||||
 | 
			
		||||
    case D_APOS:
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_D, PG_APOS}, 2, next_keycode, record);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_D, PG_APOS}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
    case PG_APOS:
 | 
			
		||||
      if (is_apos_dr) { return replace_ongoing_key(PG_APOD, next_keycode, record); }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
/*     case CA_CED:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_CCED, PG_A}, 2, next_keycode, record); */
 | 
			
		||||
 | 
			
		||||
/*     case AGRV_SPC:
 | 
			
		||||
      layer_off(_ODK);
 | 
			
		||||
      return finish_word((uint16_t[]) {PG_AGR, KC_SPC}, 2, next_keycode, record); */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //return KC_NO; // Process next keycode normally
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
 | 
			
		||||
// combo
 | 
			
		||||
#define COMBO_TERM 50
 | 
			
		||||
#define COMBO_TERM_PER_COMBO
 | 
			
		||||
//#define COMBO_TERM_PER_COMBO
 | 
			
		||||
#define COMBO_ONLY_FROM_LAYER 0
 | 
			
		||||
#define COMBO_SHOULD_TRIGGER
 | 
			
		||||
#define COMBO_PROCESS_KEY_REPRESS 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) {
 | 
			
		|||
  if (IS_LAYER_ON(_ODK)) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
      case PG_K:
 | 
			
		||||
      case PG_J:
 | 
			
		||||
      case PG_B:
 | 
			
		||||
      case PG_AROB:
 | 
			
		||||
      case PG_3PTS:
 | 
			
		||||
      case KC_SPC:  // In order to uppercase J after '?' for ex.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,26 +33,28 @@ enum combos {
 | 
			
		|||
  PANIC,
 | 
			
		||||
  NUMWRD,
 | 
			
		||||
  ALTTAB,
 | 
			
		||||
  L_APOST,
 | 
			
		||||
  D_APOST,
 | 
			
		||||
  ALTESC
 | 
			
		||||
/*   L_APOST,
 | 
			
		||||
  D_APOST, */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM del_combo_d[] = {PG_T, PG_S, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM bkspc_combo_d[] = {PG_S, PG_R, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM del_word_combo[] = {PG_M, PG_C, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM bk_word_combo[] = {PG_C, PG_APOS, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM bk_word_combo[] = {PG_C, PG_J, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM enter_combo[] = {PG_P, PG_U, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM tab_combo[] = {PG_N, PG_I, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM esc_combo[] = {PG_N, PG_A, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM bkspc_combo_g[] = {PG_A, PG_I, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM home_combo[] = {PG_Z, PG_Y, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM end_combo[] = {PG_U, PG_EACU, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM help_combo[] = {PG_EACU, PG_APOS, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM help_combo[] = {PG_EACU, PG_J, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM panic_combo[] = {PG_U, PG_C, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM numword_combo[] = {PG_T, PG_R, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM alttab_combo[] = {PG_H, PG_Y, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM l_apost_combo[] = {PG_X, PG_APOS, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM d_apost_combo[] = {PG_D, PG_F, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM altesc_combo[] = {PG_A, PG_I, PG_N, COMBO_END};
 | 
			
		||||
/* const uint16_t PROGMEM l_apost_combo[] = {PG_X, PG_APOS, COMBO_END};
 | 
			
		||||
const uint16_t PROGMEM d_apost_combo[] = {PG_D, PG_F, COMBO_END}; */
 | 
			
		||||
 | 
			
		||||
combo_t key_combos[] = {
 | 
			
		||||
    [R_BKSPC] = COMBO(bkspc_combo_d, KC_BSPC),
 | 
			
		||||
| 
						 | 
				
			
			@ -69,11 +71,12 @@ combo_t key_combos[] = {
 | 
			
		|||
    [PANIC] = COMBO(panic_combo, RAZ),
 | 
			
		||||
    [NUMWRD] = COMBO(numword_combo, NUMWORD),
 | 
			
		||||
    [ALTTAB] = COMBO(alttab_combo, KC_NO),
 | 
			
		||||
    [L_APOST] = COMBO(l_apost_combo, L_APOS),
 | 
			
		||||
    [D_APOST] = COMBO(d_apost_combo, D_APOS)
 | 
			
		||||
    [ALTESC] = COMBO(altesc_combo, LALT(KC_ESC))
 | 
			
		||||
/*     [L_APOST] = COMBO(l_apost_combo, L_APOS),
 | 
			
		||||
    [D_APOST] = COMBO(d_apost_combo, D_APOS) */
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
uint16_t get_combo_term(uint16_t combo_index, combo_t *combo) {
 | 
			
		||||
/* uint16_t get_combo_term(uint16_t combo_index, combo_t *combo) {
 | 
			
		||||
    switch (combo_index) {
 | 
			
		||||
        case L_APOST:
 | 
			
		||||
        case D_APOST:
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +84,7 @@ uint16_t get_combo_term(uint16_t combo_index, combo_t *combo) {
 | 
			
		|||
        default:
 | 
			
		||||
            return COMBO_TERM;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
} */
 | 
			
		||||
 | 
			
		||||
bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    // Chorded mods shouldn't be considered as combos.
 | 
			
		||||
| 
						 | 
				
			
			@ -95,8 +98,8 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
 | 
			
		|||
        case ENTER:
 | 
			
		||||
        case HOME:
 | 
			
		||||
        case END:
 | 
			
		||||
        case L_APOST:
 | 
			
		||||
        case D_APOST:
 | 
			
		||||
/*         case L_APOST:
 | 
			
		||||
        case D_APOST: */
 | 
			
		||||
          return true;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,9 +50,11 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
                case PG_3PTS:   // For Clever Keys
 | 
			
		||||
                case PG_AROB:
 | 
			
		||||
                case PG_K:
 | 
			
		||||
                case PG_J:
 | 
			
		||||
                case PG_B:
 | 
			
		||||
                case PG_APOS:
 | 
			
		||||
                //case PG_BL:
 | 
			
		||||
                //case PG_ECIR:
 | 
			
		||||
                case J_APOS:
 | 
			
		||||
                //case J_APOS:
 | 
			
		||||
                case OU_GRV:
 | 
			
		||||
                //case PG_CCED:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,10 +40,11 @@ bool isSendStringMacro(uint16_t keycode) {
 | 
			
		|||
  switch (keycode) {
 | 
			
		||||
    //case AGRV_SPC:
 | 
			
		||||
    //case CA_CED:
 | 
			
		||||
    case L_APOS:
 | 
			
		||||
    case D_APOS:
 | 
			
		||||
/*     case L_APOS:
 | 
			
		||||
    case D_APOS: */
 | 
			
		||||
    case OU_GRV:
 | 
			
		||||
    case J_APOS:
 | 
			
		||||
    //case J_APOS:
 | 
			
		||||
    //case PG_BL:
 | 
			
		||||
    case MAGIC:
 | 
			
		||||
      return true;
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +73,7 @@ bool caps_word_press_user(uint16_t keycode) {
 | 
			
		|||
  if ((get_mods() & MOD_BIT(KC_ALGR))) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
      case PG_E:
 | 
			
		||||
      case PG_N:
 | 
			
		||||
      case PG_T:
 | 
			
		||||
        return true;
 | 
			
		||||
      default:
 | 
			
		||||
        return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,19 +83,20 @@ bool caps_word_press_user(uint16_t keycode) {
 | 
			
		|||
  if (IS_LAYER_ON(_ODK)) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
      case PG_EACU:
 | 
			
		||||
      case PG_B:
 | 
			
		||||
        add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
 | 
			
		||||
        return true;
 | 
			
		||||
      case PG_I:
 | 
			
		||||
      case PG_F:
 | 
			
		||||
      case PG_T:
 | 
			
		||||
        return true;
 | 
			
		||||
      case PG_L:
 | 
			
		||||
      case PG_H:
 | 
			
		||||
      case PG_VIRG:
 | 
			
		||||
      case PG_B:
 | 
			
		||||
      case PG_V:
 | 
			
		||||
      case PG_M:
 | 
			
		||||
      case PG_C:
 | 
			
		||||
      case PG_T:
 | 
			
		||||
      //case PG_T:
 | 
			
		||||
      case PG_S:
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -226,8 +228,17 @@ uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
 | 
			
		|||
    return KC_SPC;
 | 
			
		||||
  }  */
 | 
			
		||||
 | 
			
		||||
  keycode = tap_hold_extractor(keycode);
 | 
			
		||||
  if (isLetter(keycode) || keycode == PG_APOS) { return MAGIC; }
 | 
			
		||||
  if (recent[RECENT_SIZE - 1] != KC_NO) { return MAGIC; }
 | 
			
		||||
 | 
			
		||||
/*   keycode = tap_hold_extractor(keycode);
 | 
			
		||||
  if (isLetter(keycode)) { return MAGIC; }
 | 
			
		||||
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
  case PG_APOS:
 | 
			
		||||
  case KC_SPC:
 | 
			
		||||
  case 
 | 
			
		||||
 | 
			
		||||
  } */
 | 
			
		||||
 | 
			
		||||
  return KC_TRNS;  // Defer to default definitions.
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 *                        `----------------------------------'  `----------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
    [_BASE] = LAYOUT(
 | 
			
		||||
      KC_NO, PG_POIN, PG_EACU, PG_U,  PG_P,   PG_B,                                    PG_V,   PG_M,    PG_C, PG_APOS, PG_X,   KC_NO,
 | 
			
		||||
      KC_NO, PG_POIN, PG_EACU, PG_U,  PG_P,   PG_APOS,                                 PG_V,   PG_M,    PG_C, PG_J,    PG_X,   KC_NO,
 | 
			
		||||
      KC_NO, PG_O,    PG_A,    PG_I,  PG_N,   PG_VIRG,                                 PG_G,   PG_T,    PG_S, PG_R,    PG_L,   KC_NO,
 | 
			
		||||
      KC_NO, PG_Q,    PG_Z,    PG_Y,  PG_H,   KC_NO,   KC_NO, KC_NO,  KC_NO,   KC_NO,  KC_NO,  PG_D,    PG_F, PG_W,    OS_ODK, KC_NO,
 | 
			
		||||
                               KC_NO, KC_SPC, L_OS4A,  LT_E,  LT_MGC, LT_REPT, LT_SPC, R_OS4A, KC_RGUI, KC_NO
 | 
			
		||||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
      _______, PG_ACIR,    PG_LCBR, PG_RCBR, PG_DLR,  PG_HASH,                                           PG_PERC, PG_DQUO, PG_EGAL, ALGR(PG_APOS), PG_GRV,  _______,
 | 
			
		||||
      _______, ALGR(PG_O), PG_LPRN, PG_RPRN, PG_PVIR, ALGR(PG_VIRG),                                     PG_BSLS, MT_SLSH, PG_MOIN, PG_PLUS,       PG_ASTX, _______,
 | 
			
		||||
      _______, PG_INF,     PG_LSBR, PG_RSBR, PG_SUP,  _______,       _______, _______, _______, _______, _______, PG_APOD, PG_ESPR, PG_PIPE,       PG_TILD, _______,
 | 
			
		||||
                                    _______, _______, _______,       PG_UNDS, KC_SPC,  _______, _______, _______, _______, _______
 | 
			
		||||
                                    _______, _______, _______,       PG_UNDS, KC_SPC,  PG_APOS, _______, _______, _______, _______
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,9 +247,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 */
 | 
			
		||||
    [_ODK] = LAYOUT(
 | 
			
		||||
       _______, _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______, _______,
 | 
			
		||||
       _______, OU_GRV,  PG_R,    _______, PG_T,    _______,                                     _______, PG_A,    _______, PG_AROB, _______, _______,
 | 
			
		||||
       _______, OU_GRV,  _______, _______, PG_T,    _______,                                     _______, PG_R,    _______, PG_AROB, _______, _______,
 | 
			
		||||
       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, PG_K,    CNL_ODK, _______,
 | 
			
		||||
                                  _______, _______, _______, _______, PG_O,    J_APOS,  PG_J,    _______, _______, _______
 | 
			
		||||
                                  _______, _______, _______, _______, PG_O,    PG_APOS, PG_B,    _______, _______, _______
 | 
			
		||||
     ),
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ enum custom_keycodes {
 | 
			
		|||
  RAZ,
 | 
			
		||||
  CAPSWORD,
 | 
			
		||||
  OU_GRV,
 | 
			
		||||
  J_APOS,
 | 
			
		||||
  //J_APOS,
 | 
			
		||||
  //E_CIRC,
 | 
			
		||||
/*  I_CIRC,
 | 
			
		||||
  A_CIRC,
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +68,9 @@ enum custom_keycodes {
 | 
			
		|||
  //OS_ODK,
 | 
			
		||||
  CNL_ODK,
 | 
			
		||||
  TG_APOS,
 | 
			
		||||
  L_APOS,
 | 
			
		||||
  D_APOS
 | 
			
		||||
  //PG_BL
 | 
			
		||||
/*   L_APOS,
 | 
			
		||||
  D_APOS */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Layer taps
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue