Commit 252b771656e7

Vincent Demeester <vincent@sbr.pm>
2025-10-09 22:02:45
keyboards/moonlander: implement É È and À on bépo layer.
It is sooooo good and relatively easy to do. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 7cbcfc5
Changed files (2)
keyboards
moonlander
keyboards/moonlander/config/config.h
@@ -26,8 +26,8 @@
 #define QUICK_TAP_TERM 0 // 175
 #define COMBO_TERM 40
 
-#define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD 1
-#define CAPS_WORD_INVERT_ON_SHIFT 1
+/* #define DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD 1 */
+/* #define CAPS_WORD_INVERT_ON_SHIFT 1 */
 
 // Left-hand home row mods
 #define HM_GUI_A LGUI_T(KC_A) // Qwerty and Bépo
@@ -55,8 +55,11 @@
 // French accents
 #define FR_QUOT_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_QUOTE) SS_DELAY(50) SS_TAP(X_SPACE) 
 #define FR_E_AIGU_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_QUOTE) SS_DELAY(50) SS_TAP(X_E)           // é
+#define FR_E_AIGU_CAPS_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_QUOTE) SS_DELAY(50) SS_RSFT(SS_TAP(X_E))        // É
 #define FR_E_GRAVE_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_GRAVE) SS_DELAY(50) SS_TAP(X_E)          // è
+#define FR_E_GRAVE_CAPS_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_GRAVE) SS_DELAY(50) SS_RSFT(SS_TAP(X_E)) // È
 #define FR_A_GRAVE_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_GRAVE) SS_DELAY(50) SS_TAP(X_A)          // à
+#define FR_A_GRAVE_CAPS_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_GRAVE) SS_DELAY(50) SS_RSFT(SS_TAP(X_A))          // À
 #define FR_U_GRAVE_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_GRAVE) SS_DELAY(50) SS_TAP(X_U)          // ù
 #define FR_C_CEDILLE_M SS_TAP(X_RALT) SS_DELAY(50) SS_TAP(X_COMMA) SS_DELAY(50) SS_TAP(X_C)        // ç
 #define FR_A_CIRONFL_M SS_TAP(X_RALT) SS_DELAY(50) SS_RSFT(SS_TAP(X_6)) SS_DELAY(50) SS_TAP(X_A)   // â
keyboards/moonlander/config/keymap.c
@@ -37,8 +37,11 @@ enum custom_keycodes {
     VRSN = SAFE_RANGE,
     FR_QUOT,
     FR_E_AIGU,
+    FR_E_AIGU_CAPS,
     FR_E_GRAVE,
+    FR_E_GRAVE_CAPS,
     FR_A_GRAVE,
+    FR_A_GRAVE_CAPS,
 };
 
 const key_override_t circ_exclamation_override = ko_make_with_layers(MOD_MASK_SHIFT, KC_CIRC, KC_EXLM, 1 << BEPO);
@@ -191,17 +194,54 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 	  break;
 	case FR_E_AIGU:
 	  if (record->event.pressed) {
-	    SEND_STRING(FR_E_AIGU_M);
+	    if (get_mods() & MOD_MASK_SHIFT) {
+	      // É
+	      del_mods(MOD_MASK_SHIFT);
+	      SEND_STRING(FR_E_AIGU_CAPS_M);
+	    } else {
+	      // é
+	      SEND_STRING(FR_E_AIGU_M);
+	    }
+	  }
+	  break;
+	case FR_E_AIGU_CAPS:
+	  if (record->event.pressed) {
+	    SEND_STRING(FR_E_AIGU_CAPS_M);
 	  }
 	  break;
 	case FR_E_GRAVE:
 	  if (record->event.pressed) {
-	    SEND_STRING(FR_E_GRAVE_M);
+	    if (get_mods() & MOD_MASK_SHIFT) {
+	      // 
+	      del_mods(MOD_MASK_SHIFT);
+	      SEND_STRING(FR_E_GRAVE_CAPS_M); 
+	    } else {
+	      // è
+	      SEND_STRING(FR_E_GRAVE_M); 
+	    }
+	  }
+	  break;
+	case FR_E_GRAVE_CAPS:
+	  if (record->event.pressed) {
+	    SEND_STRING(FR_E_GRAVE_CAPS_M);
 	  }
 	  break;
 	case FR_A_GRAVE:
 	  if (record->event.pressed) {
-	    SEND_STRING(FR_A_GRAVE_M);
+	    
+	    if (get_mods() & MOD_MASK_SHIFT) {
+	      // 
+	      del_mods(MOD_MASK_SHIFT);
+	      SEND_STRING(FR_A_GRAVE_CAPS_M);
+	    } else {
+	      // à
+	      SEND_STRING(FR_A_GRAVE_M); 
+	    }
+	  }
+	  break;
+	case FR_A_GRAVE_CAPS:
+	  if (record->event.pressed) {
+	    SEND_STRING(FR_A_GRAVE_CAPS_M);
 	  }
 	  break;
 	}