Bonjour,

voici ma situation :
- utilisation de mon clavier à la maison et au bureau
- sous Windows
- besoin bureautique et codage
- français et un peu anglais (codage)
- je ne suis pas un expert en typographie
- quelques majuscules accentuées pour écrire plus proprement, quelques unicodes (Ø, ►, ...)
- je compte sur Word ou Outlook pour me corriger boeuf en bœuf automatiquement
- pas de droits admins au bureau (pas d'install de driver, pas de modification de clef de registre, pas de logiciel même portable (PKL, autoHotKey...))
- utilisation avec un PC portable : je veux pouvoir me dépanner d'une touche ou d'un raccourci avec le clavier intégré

donc avec mon clavier custom sur base RP2040, voici ce à quoi je suis arrivé :
- conserver une langue AZERTY FR
- sans modif de registre Windows, pas d'envoi de caractère unicode possible
- je simulerai donc une succession de frappes Alt down, tap 0, tap2, tap 0, tap 1, Alt up pour une dizaine de codes
- le délai n'est pas discernable selon moi
- je peux utiliser mon clavier standard en //

J'ai codé sous QMK mais j'ai pris le chemin Vial-QMK car étant dans la phase d'ajustement de ma disposition et de mes couches, la facilité de mise à jour avec VIAL en temps réel sans recompiler est géniale.

Voici un conseil si vous avez un clavier splitté : prévoir en test une touche du côté maître (É) ça permet de ne flasher qu'un côté ! c'est plus rapide que de déposer le fichier .uf2 de chaque côté, brancher, débrancher, rebrancher...
quand tout est stabilisé (majuscules diacritiques, tap mod, Smart shift ...), on peut flasher les 2 côtés :-)

Le code :
► rules.mk
rien

► vial.json : personnalisation des étiquettes des USER DEFINED
{
    "name": "Scylla",
    "vendorId": "0xA8F8",
    "productId": "0x1829",
   [color=#ed5821] "customKeycodes": [
    {
     "name": "EAcnA",
     "title": "E accent aigü",
     "shortName": "EACUTE"
    },
	{
     "name": "EAcnG",
     "title": "E accent grave",
     "shortName": "EAGRAV"
    },  
	{
     "name": "AAcnG",
     "title": "A accent grave",
     "shortName": "AAGRAV"
    },
  	{
     "name": "Ccedi",
     "title": "C cédille",
     "shortName": "CCEDIL"
    },  
    {
     "name": "Puce 1",
     "title": "Puce triangle 1",
     "shortName": "PUCE1"
    }
	],[/color]
    "lighting": "vialrgb",
    "matrix": {
        "rows": 10,
        "cols": 6
    },
► config.h
pas besoin de définir un #define TAP_CODE_DELAY pour ralentir la succession des frappes

► keymap.c
#include <keymap_french.h>

enum custom_keycodes {
#if defined(VIAL_ENABLED)
    EACUTE = USER00,  
	EAGRAV,
	AAGRAV,
	CCEDIL,
	PUCE1 
#else
    EACUTE = SAFE_RANGE,  
	EAGRAV ,  
	AAGRAV ,
	CCEDIL ,
	PUCE1  
#endif
}; 
dans la disposition saisir ces codes :
    KC_TAB,  AAGRAV, FR_B, EAGRAV, FR_DOT, FR_MINS,
puis
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case EACUTE:
            if (record->event.pressed) {
                if (get_mods() & MOD_MASK_SHIFT) {
                    register_code(KC_LALT);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_2);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_1);
                    unregister_code(KC_LALT);
                } else {
                    tap_code(FR_EACU);
                }
			}
            break;
        case EAGRAV:
            if (record->event.pressed) {
                if (get_mods() & MOD_MASK_SHIFT) {
                    register_code(KC_LALT);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_2);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_0);
                    unregister_code(KC_LALT);
                } else {
                    tap_code(FR_EGRV);
                }
			}
            break;
       case AAGRAV:
            if (record->event.pressed) {
                if (get_mods() & MOD_MASK_SHIFT) {
                    register_code(KC_LALT);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_1);
                    tap_code(KC_KP_9);
                    tap_code(KC_KP_2);
                    unregister_code(KC_LALT);
                } else {
                    tap_code(FR_AGRV);
                }
			}
            break;
        case CCEDIL:
            if (record->event.pressed) {
                if (get_mods() & MOD_MASK_SHIFT) {
                    register_code(KC_LALT);
                    tap_code(KC_KP_0);
                    tap_code(KC_KP_1);
                    tap_code(KC_KP_9);
                    tap_code(KC_KP_9);
                    unregister_code(KC_LALT);
                } else {
                    tap_code(FR_CCED);
                }
			}
            break;
        case PUCE1: // insère l'unicode ► fdans les deux cas : shift ou pas shift
            if (record->event.pressed) {
                    register_code(KC_LALT);
                    tap_code(KC_KP_1);
                    tap_code(KC_KP_6);
                    unregister_code(KC_LALT);
                }
            break;
    }
    return true;
};
et activer le NUM LOCK au démarrage du clavier sinon cela ne fonctionne pas
// Turn on/off NUM LOCK if current state is different
void activate_numlock(bool turn_on) {
    if (host_keyboard_led_state().num_lock != turn_on) {
        tap_code(KC_NUM_LOCK);
    }
}


// INITIAL STARTUP
void keyboard_post_init_user(void) {
    // turn on Num lock by default so that the numpad layer always has predictable results#ifdef STARTUP_NUMLOCK_ON
        activate_numlock(true); 
}
Voilà ! :-)
Si on n'a pas trop de touches UNICODE ça se fait bien !
► il y avait la possibilité native QMK d'utiliser la fonction XP(i, j) permettant de gérer la lettre de base et la lettre shiftée : très bien pour gérer les claviers avec lettres accentuées
https://github.com/qmk/qmk_firmware/blob/master/docs/feature_unicode.md
mais il y a des limites : il faut modifier une clef de registre Windows

peut-être un contournement ici ? https://www.reddit.com/r/olkb/comments/syj535/qmk_how_to_customize_xpij_function/

► un très bon article sur les possibilités Custom Shift Keys avec les avantages et inconvénients versus Key Overrides
https://getreuer.info/posts/keyboards/custom-shift-keys/

► dans QMK et VIAL on peut utiliser le Key Override mais on ne peut pas y mettre de macro "Alt 0 2 0 1 Alt" donc pas bon dans mon cas.

Et vous ? :-)
Bah le plus dur a été de creuser plusieurs pistes à la fois, de tester et de voir aussi les limitations.
C'est fou que ce sujet ne soit pas plus exposé : j'imagine un tableau avec les contraintes (windows, droits, ...) et les solutions possibles.. Il serait assez simple de faire les bons choix pour un débutant.

Ensuite 5 lettres ou 20, ça pas beaucoup plus compliqué :-)
Il faut activer le pavé numérique pour pouvoir taper Alt 0 2 0 1

Attention avec Windows, s'il y a plusieurs claviers ils rentrent en conflit : le Natural keyboard démarre en num_lock puis le splinky arrive, tape la touche num_lock : le pavé est désactivé
Par contre la LED du Natural reste cohérente et subit l'action du clavier Splinky...
The problem is that the num/caps/scroll lock state is not managed by the keyboard, so all you have to go on is whether the host has told the keyboard to turn on the LED, and the exact behaviour is inconsistent across OSes. On Windows, for example, the state is shared across all keyboards, but macOS treats each keyboard individually and doesn't recognise num lock as num lock anyway.

En attendant d'y voir plus clair, j'affecte un bouton NUM LOCK en plus de la procédure dans le keymap.