Utilisateur:Ewen goisot

De Disposition de clavier bépo

(Cette page est en cours d'édition, d'autres changement peuvent apparaître dans quelques jours).

Résumé de ma démarche: Je passe beaucoup de temps à écrire, souvent pour de la programmation (notamment bash, zsh, C++), et j'ai vite été frustré par la difficulté d'accès des caractères spéciaux, la sur utilisation des auriculaires… bref comme tout le monde ici je crois^^. Je suis rapidement passé en bépo, puis en ai profité pour regarder quel clavier serait plus adapté. Après un temps de recherche, j'ai finalement opté pour le clavier Ergodox EZ, mais sa forme différente des claviers classiques a fait que j'ai tenté de créer une disposition de clavier optimisée pour les claviers ergonomiques de ce type, ayant notamment plusieurs touches sur chaque pouce.

Caractéristiques du clavier Ergodox

Le clavier Ergodox a 6 touches accessibles sous chaque pouce au lieu d'une seule, au moins 3 par pouce sont très faciles d'accès.

C'est un clavier orthogonal et splitté.

3 touches en plus par index, moins de touches sur les auriculaires, pas de pavé numérique, pas de touches F1 … F12, mais 5 touches sur une ligne en dessous.

Le clavier est programmable.

Disposition de clavier, partie traîtée par l'ordinateur

En résumé

Voici la disposition que j'utilise la plupart du temps.

 ┌─────┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬─────┐
 │  -  │ ! │ ? │ : │ " │Num│Supr │Ins│ Ù │ ( │ ) │ < │ > │  =  │
 ├─────┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼─────┤
 │  Z  │ È │ É │ P │ ' │ Y │   │ │   │ B │ C │ M │ L │ F │  Ç  │
 ├─────┼───┼───┼───┼───┼───┤Bks│ │Tab├───┼───┼───┼───┼───┼─────┤
 │  Ê  │ O │ A │ I │ U │ H ├───┤ ├───┤ G │ T │ S │ N │ R │  ^  │
 ├─────┼───┼───┼───┼───┼───┤   │ │   ├───┼───┼───┼───┼───┼─────┤
 │Group│ X │ À │ . │ , │ / │ [ │ │ ] │ Q │ D │ V │ J │ W │  K  │
 └─┬───┼───┼───┼───┼───┼───┴───┘ └───┴───┼───┼───┼───┼───┼───┬─┘
   │Imp│ s+│ s-│ ↑ │ ↓ │                 │ ← │ → │F11│F13│F14│  
   └───┴───┴───┴───┴───┘                 └───┴───┴───┴───┴───┘  
                       ┌───┬───┐ ┌───┬───┐                      
                       │←←←│→→→│ │↑↑↑│TT3│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │tmux │↓↓↓│   │   │                  
                   │ E │Esc├───┤ ├───┤Ent│Esp│                  
                   │   │   │TT1│ │TT2│rée│ace│                  
                   └───┴───┴───┘ └───┴───┴───┘                  


Comme pour la disposition Bépo ou Dvorak, les lettres les plus fréquentes sont sur la ligne du milieu.

Beaucoup de lettres ont un placement proche de celui de Bépo, il y a cependant plusieurs différences, les principales sont: J'ai mis la lettre E sur l'un des pouces, car il s'agit de loin de la lettre la plus fréquente en français. Déplacé le M pour éviter de surcharger l'auriculaire droit. Rendu plus accessibles des lettres utiles en anglais, notamment le W, H et Y sans pour autant prendre des places trop importantes car peu utiles en français. Rendu le digramme CH fréquent en français pour la lettre H, plus facile. Éviter les déplacements latéraux pour les lettres fréquentes comme C M , en bépo.

La ligne du bas sert à (de gauche à droite) : [screenshot] [volume -] [volume +] [flèche haut] [flèche bas] [flèche gauche] [flèche droite] [F11: plein écran] [F13: afficher un terminal] [F14: afficher le presse papier]. Donc 2 touches directionnelles et 3 touches spéciales (nécessitant certains logiciels pour bien fonctionner) par main. Ces touches sont dures d'accès en repliant les doigts, mais on les atteinds facilement avec le milieu du doigt ou avec le pouce pour les touces directionnelles.

Touches à double fonction

C'est une particularité de l'ergodox: une touche à double fonction permet d'agir comme un modifieur (majuscule, ctrl, alt, altgr… ) si on la garde appuyée et qu'on appuie sur une autre touche pendant ce temps, ou comme une touche normale (espace, enter, lettre, chiffre, suppr, flèches… ) si on l'appuie et la lâche juste après. Cela permettrais en théorie de doubler virtuellement le nombre de touches du clavier, c'est en réalité un peu moins que ça étant donné qu'il existe moins de modifieurs que de lettres.

J'ai choisi de mettre mes modifieurs sur les pouces, et de faire en sorte que les racourcis clavier (par exemple Ctrl+T) soient faits avec un pouce (Ctrl) et un doigt autre (par exemple T est fait avec l'index), si possible de l'autre main.

                       ┌───┬───┐ ┌sup┬───┐                      
                       │alt│meh│ │ er│TT3│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │maj| │ctgr   │   │                  
                   │alt│sup├───┤ ├───┤ctr│maj│                  
                   │ gr│ er│TT1│ │TT2│  l│   │                  
                   └───┴───┴───┘ └───┴───┴───┘                  

Pouce gauche: -altgr (alt droite) sert à saisir des caractères spéciaux tels que * ~ \ | @ $ fréquents en programmation (la plupart sont des caractères ASCII). -super (appellée $mod dans mon fichier de configuration i3wm) est la touche ayant parfois un logo Windows dessus, elle me sert à de nombreux racourcis permettant de se déplacer vers une autre fenêtre, de redimentionner, d'ouvrir les logiciels que j'utilise le plus etc. -alt sert pour certains racourcis clavier, mais je m'en sers assez peu. -meh est une idée provenant d'ergodox, envoyant plusieurs modifieurs à la fois (pour définir des racourcis clavier qui ont peu de chance d'être pris par d'autres logiciels). -maj, mais je me sers généralement de celui du pouce droit.

Pouce droit: -maj (ou shift), plus facile d'accès que celui de gauche, c'est celui que j'utilise la plupart du temps, sauf pour les quelques racourcis clavier du style Ctrl+Maj+… ou si les majuscules sont trop souvent juste après des espaces (ce n'est pas toujours le cas en programmation). -ctrl -ctgr est la touche Ctrl de droite, qui a une fonction similaire au Altgr (Altgr est un ISO_Level3_Shift, et Ctgr est un ISO_Level5_Shift) permettant de taper des caractères spéciaux différents de Altgr. Étant donné qu'on peut appuyer sur Altgr et/ou Maj et/ou Ctgr, cela laisse la possibilité d'avoir jusqu'à 8 caractères différents sur la même touche (ceux nécessitant l'appui simultané de deux ou trois modifieurs étant plus lents à taper, c'est réservé à des caractères rares). Notons que toutes les combinaisons à un ou deux modifieurs (+ une lettre n'étant pas sur un pouce) peuvent s'effectuer à l'aide des deux pouces.

Caractères spéciaux et VerrNum

Sur la plupart des claviers, il y a à droite un pavé numérique (ainsi que des touches pour les opérations mathématiques les plus simples), et une touche VerrNum permettant de désactiver les chiffres et d'obtenir d'autres touches à la place (servant surtout à effectuer des déplacements, souvent redondants avec d'autres touches du clavier).

Ici,

-Si VerrNum est désactivé, les chiffres sont en accès direct sur la ligne du haut au lieu des caractères -!?:" ()<>= on aura les caractères 54321 09876 (j'ai choisi cet ordre pour donner un accès facile aux chiffres 1 et 2 qui sont très fréquents principalement à cause de la loi de Benford https://fr.wikipedia.org/wiki/Loi_de_Benford , ainsi que 0 utile pour les nombres plus petits que 1, et 9 peut s'avérer fréquent dans certains cas (dans un logiciel comme Vim, il me sera plus rapide de dire 99l pour se déplacer de 99 caractères dans la version par défaut, que 100l, et généralement les deux mènent au même résultat: on arrive en fin de ligne, et j'ai également voulu garder un ordre logique entre les chiffres d'une même main). La plupart des caractères spéciaux courants (ASCII) sont accessibles avec Altgr+lettre.

-SI VerrNum est activé, les caractères -!?:" ()<>= sont en accès direct, et en appuyant sur Altgr+chiffre on obtient les chiffres, et pour éviter une trop forte redondance avec d'autres caractères spéciaux (présents notamment sur les touches xà., tsnr), le fait d'appuyer sur Altgr+[xà.,tsnr] donne un accès plus facile aux flèches, PageUp, PageDown, début et fin de ligne.

Pour obtenir de tels effets, sur Ubuntu, j'ai dû modifier le fichier /usr/share/X11/xkb/types/level5 (sur une autre distribution GNU/Linux, ce sera certainement un fichier de nom semblable, voire le même), et lui ajouter les lignes:


    // pour les chiffres
    type "EIGHT_LEVEL_NUMERICAL_ERGODOX" {
        modifiers = Shift + LevelThree + NumLock + LevelFive;

        map[None]                                    = Level1; // 4 premiers cas: normaux
        map[Shift]                                   = Level2;
        map[LevelThree]                              = Level3;
        map[LevelThree+Shift]                        = Level4;

        map[LevelFive]                               = Level5;
        map[LevelFive+Shift]                         = Level6;
        map[LevelFive+LevelThree]                    = Level2; // utile pour ergodox, mode 1 (maths)
        map[LevelFive+LevelThree+Shift]              = Level8;

        map[NumLock]                                 = Level7; // VerrNum: le niveau 7 est en accès direct au lieu du 1
        map[NumLock+Shift]                           = Level2;
        map[NumLock+LevelThree]                      = Level3;
        map[NumLock+LevelThree+Shift]                = Level4;

        map[NumLock+LevelFive]                       = Level5;
        map[NumLock+LevelFive+Shift]                 = Level6;
        map[NumLock+LevelFive+LevelThree]            = Level2;
        map[NumLock+LevelFive+LevelThree+Shift]      = Level8;
        preserve[LevelFive+Shift] = Shift;
        preserve[NumLock+Shift] = Shift;
        //preserve[Lock+LevelFive+Shift] = Shift;
        //preserve[Lock+NumLock+Shift] = Shift;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt Base";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "X";
        level_name[Level6] = "X Shift";
        level_name[Level7] = "X Alt Base";
        level_name[Level8] = "X Shift Alt";
    };

    type "EIGHT_LEVEL_LETTER_ERGODOX" {
        modifiers = Shift + LevelThree + NumLock + LevelFive;

        map[None]                                    = Level1;
        map[Shift]                                   = Level2;
        map[LevelThree]                              = Level3;
        map[LevelThree+Shift]                        = Level4;

        map[LevelFive]                               = Level5;
        map[LevelFive+Shift]                         = Level6;
        map[LevelFive+LevelThree]                    = Level3; // Ctgr+Altgr permet d'avoir des caractères indépendant de VerrNum
        map[LevelFive+LevelThree+Shift]              = Level4;

        map[NumLock]                                 = Level1;
        map[NumLock+Shift]                           = Level2;
        map[NumLock+LevelThree]                      = Level8; // avec VerrNum: un changement sur Altgr
        map[NumLock+LevelThree+Shift]                = Level4;

        map[NumLock+LevelFive]                       = Level5;
        map[NumLock+LevelFive+Shift]                 = Level7;
        map[NumLock+LevelFive+LevelThree]            = Level3;
        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt Base";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "X";
        level_name[Level6] = "X Shift";
        level_name[Level7] = "X Alt Base";
        level_name[Level8] = "X Shift Alt";
    };

qui en contrepartie réduit le nombre de niveaux utiles par touche (mais qui reste plus que 4).

Caractères spéciaux

Étant donné que la touche la plus fréquente pour l'accès aux caractères spéciaux, Altgr, est sur le pouce gauche, j'ai mis des caractères un peu plus fréquents sur la main droite, en tentant également de donner une certaine cohérance, en mettant () <> {} côte à côte, tous les signes mathématique %+=-* ensemble, et sur la main gauche, le reste: `@$#~\|&!?:" (certains de ces caractères ne sont plus en accès avec Altgr si VerrNum est activé). Certains caractères très fréquents à la fois en langue et en programmation comme .,/' sont mis en accès direct.

Je précise dans les schémas ci-dessous les caractères accessibles avec

rien maj

altgr altgr+maj

et ne précise pas ceux avec Ctgr ici (ils seront néanmoins précisé dans le code source plus bas).

Cela donne donc, sans VerrNum: on a deux fois l'accès aux chiffres, mais donnant des code différents: en accès direct ce sera KP_2, et en Altgr, 2, reconnus différemment dans certains logiciels.

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  5˘  ║ 4¯ │ 3~ │ 2´ │ 1` │Num │Supr│ │Inse│ ùÙ │ 0µ │ 9ˇ │ 8̉  │ 7̣  ║  6˙  ║ (maj+chiffre: touche morte)
 ║  5g  ║ 4h │ 3i │ 2j │ 1k │lock│    │ │rt  │  Ð │ 0p │ 9o │ 8n │ 7m ║  6l  ║
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  zZ  ║ èÈ │ éÉ │ pP │ '  │ yY ║Back║ ║Tabu║ bB │ cC │ mM │ lL │ fF ║  çÇ  ║
 ║  æÆ  ║ `′ │ @  │ $¶ │ #§ │ ¤· ║spa ║ ║lati║ ¤÷ │ +≠ │ =± │ -– │ *× ║  †‡  ║
 ╠══════╣────┼────┼────┼────┼────╢ce  ║ ║on  ╟────┼────┼────┼────┼────╠══════╣
 ║  êÊ  ║ oO │ aA │ iI │ uU │ hH ╠════╣ ╠════╣ gG │ tT │ sS │ nN │ rR ║  ^¨  ║
 ║  œŒ  ║ ~√ │ \∞ │ |¦ │ &∂ │  ¡ ║    ║ ║    ║ %‰ │ (⟦ │ )⟧ │ <≤ │ >≥ ║  ^   ║
 ╠══════╣────┼────┼────┼────┼────╢ [« ║ ║ ]» ╟────┼────┼────┼────┼────╠══════╣
 ║Group ║ xX │ àÀ │ .° │ ,′ │ /″ ║    ║ ║    ║ qQ │ dD │ vV │ jJ │ wW ║  kK  ║
 ║      ║ !¡ │ ?¿ │ :‽ │ "⸮ │ ″¿ ║Hyp ║ ║Hyp ║ €ſ │ {ß │ }þ │ ;Þ │ əƏ ║  ijIJ  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │Imp │Son↓│Son↑│ ↑  │ ↓  │                     │ ←  │ →  │F11 │F13 │F14 │
   │Écr │    │    │    │    │                     │    │    │full│Guake Copyq
   └────┴────┴────┴────┴────┘                     └────┴────┴screen───┴────┘
                            ┌────┬────┐ ┌────┬────┐
                            │←←← │→→→ │ │↑↑↑ │TT3 │
                            │Alt │Meh │ │Super    │
                       ┌────┼────┼────┤ ├────┼────┼────┐
                       │    │    │□tmux │↓↓↓ │    │    │
                       │ eE │Esc │Maj │ │Ctgr│Entr│Espace
                       │    │    ├────┤ ├────┤    │_   │
                       │Alt │Sup │TT1 │ │TT2 │Ctrl│    │
                       │gr  │er  │    │ │    │    │Maj │
                       └────┴────┴────┘ └────┴────┴────┘ 

Avec VerrNum:

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  -˘  ║ !¯ │ ?~ │ :´ │ "` │Num │Supr│ │Inse│ ùÙ │ (µ │ )ˇ │ <  │ >  ║  =˙  ║ (maj+chiffre: touche morte)
 ║  5g  ║ 4h │ 3i │ 2j │ ×k │lock│    │ │rt  │  Ð │ 0p │ 9o │ 8n │ 7m ║  6l  ║ (caractères spéciaux en accès direct)
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  zZ  ║ èÈ │ éÉ │ pP │ '  │ yY ║Back║ ║Tabu║ bB │ cC │ mM │ lL │ fF ║  çÇ  ║
 ║  æÆ  ║ `′ │ @  │ $¶ │ #§ │ ¤· ║spa ║ ║lati║ ¤÷ │ +≠ │ =± │ -– │ *× ║  †‡  ║
 ╠══════╣────┼────┼────┼────┼────╢ce  ║ ║on  ╟────┼────┼────┼────┼────╠══════╣
 ║  êÊ  ║ oO │ aA │ iI │ uU │ hH ╠════╣ ╠════╣ gG │ tT │ sS │ nN │ rR ║  ^¨  ║
 ║  œŒ  ║ ~√ │ \∞ │ |¦ │ &∂ │  ¡ ║    ║ ║    ║ %‰ │ ←⟦ │ ↑⟧ │ ↓≤ │ →≥ ║  ^   ║ (flèches en altgr)
 ╠══════╣────┼────┼────┼────┼────╢ [« ║ ║ ]» ╟────┼────┼────┼────┼────╠══════╣
 ║Group ║ xX │ àÀ │ .° │ ,′ │ /″ ║    ║ ║    ║ qQ │ dD │ vV │ jJ │ wW ║  kK  ║
 ║      ←←←¡ ↑↑↑¿ ↓↓↓‽ →→→⸮ │ ″¿ ║Hyp ║ ║Hyp ║ €ſ │ {ß │ }þ │ ;Þ │ əƏ ║  ijIJ  ║ (grands déplacements en altgr)
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │Imp │Son↑│Son↓│ ↑  │ ↓  │                     │ ←  │ →  │F11 │F13 │F14 │
   │Écr │    │    │    │    │                     │    │    │full│Guake Copyq
   └────┴────┴────┴────┴────┘                     └────┴────┴screen───┴────┘
                            ┌────┬────┐ ┌────┬────┐
                            │←←← │→→→ │ │↑↑↑ │TT3 │
                            │Alt │Meh │ │Super    │
                       ┌────┼────┼────┤ ├────┼────┼────┐
                       │    │    │□tmux │↓↓↓ │    │    │
                       │ eE │Esc │Maj │ │Ctgr│Entr│Espace
                       │    │    ├────┤ ├────┤    │_   │
                       │Alt │Sup │TT1 │ │TT2 │Ctrl│    │
                       │gr  │er  │    │ │    │    │Maj │
                       └────┴────┴────┘ └────┴────┴────┘

Code source

Le code source ci-dessous est à mettre dans /usr/share/X11/xkb/symbols/oo (j'ai choisi le nom "oo" car il est court est ce nom n'était pas déjà pris), et d'entrer dans un terminal la commande `setxkbmap oo -variant ergo`:


xkb_symbols "ergo" {

 augment "level5"
 include "keypad(oss)"
 name[Group1]="french ergodox dual_num";

key.type[Group1] = "ONE_LEVEL";
key <RALT>{[ ISO_Level3_Shift ]};
key <RCTL>{[ ISO_Level5_Shift ]};
key <CAPS>{[ caps ]};

key.type[Group1] = "EIGHT_LEVEL_NUMERICAL_ERGODOX";// Chiffres, accès direct différent avec Altgr, certaines lettres en accès indirect pour le Mode 2 de l'ergodox.
key <KP1>{[ KP_1,    dead_grave, 1, k, a, a,   quotedbl ]};
key <KP2>{[ KP_2,    dead_acute, 2, j, a, a,      colon ]};
key <KP3>{[ KP_3,    dead_tilde, 3, i, a, a,   question ]};
key <KP4>{[ KP_4,   dead_macron, 4, h, a, a,     exclam ]};
key <KP5>{[ KP_5,    dead_breve, 5, g, a, a,      minus ]};
key <KP6>{[ KP_6, dead_abovedot, 6, l, a, a,       plus ]};
key <KP7>{[ KP_7, dead_belowdot, 7, m, a, a,    greater ]};
key <KP8>{[ KP_8,     dead_hook, 8, n, a, a,       less ]};
key <KP9>{[ KP_9,    dead_caron, 9, o, a, a, parenright ]};
key <KP0>{[ KP_0,    dead_greek, 0, p, a, a,  parenleft ]};

key.type[Group1] = "EIGHT_LEVEL";
key <TLDE>{[ dead_grave, a, grave ]};
key <AE11>{[ minus, underscore, hyphen, endash ]};
key <AE12>{[ equal, plus ]};
key <AE01>{[ U25A1, ISO_Level3_Lock, ISO_Next_Group, ISO_Level5_Lock, w, ISO_Level5_Lock, p, ISO_Level3_Lock ]};


key.type[Group1] = "EIGHT_LEVEL";// Lettres normales
key <AB01>{[         z,         Z,         ae,       AE, U2205 ]};
key <AE04>{[    egrave,    Egrave,      grave,    U2032, U2115 ]};
key <AE03>{[    eacute,    Eacute,         at,    U203B, U2124 ]};
key <AD10>{[         p,         P,     dollar,    U00B6, U211A ]};
key <AC11>{[apostrophe,  ellipsis, numbersign,  section, U211D ]};
key <AD06>{[         y,        Y, U00A4, periodcentered, U2102 ]};
// z Z æ Æ ∅
// è È ` ′ ℕ
// é É @ ※ ℤ
// p P $ ¶ ℚ
// ' … # § ℝ
// y Y t § ℂ

key <AE02>{[ecircumflex, Ecircumflex, oe, OE, U2201 ]};
key <AD09>{[ o,  O,  asciitilde,       U221A, U2229 ]};
key <AC01>{[ a,  A,   backslash,       U221E, U222A ]};
key <AD08>{[ i,  I,         bar,   brokenbar, U2203 ]};
key <AD07>{[ u,  U,   ampersand,       U2202, U2200 ]};
key <AC06>{[ h,  H,       U202F,  exclamdown, U2208 ]};
// ê Ê œ Œ ∁
// o O ~ √ ∩
// a A \ ∞ ∪
// i I | ¦ ∃
// u U & ∂ ∀
// h H   ¡ ∈

key.type[Group1] = "EIGHT_LEVEL_LETTER_ERGODOX";// Lettres, +autre fonction en VerrNum+Altgr
key <AB02>{[     x,      X,   exclam, exclamdown,  U1F12F, a, a, Home]};
key <AE05>{[agrave, Agrave, question, questiondown, U00A9, a, a,Prior]};
key <AB09>{[period, degree,    colon, U203D,        U00AE, a, a, Next]};
key <AB08>{[comma, minutes, quotedbl, U2E2E,        U2122, a, a,  End]};
key.type[Group1] = "EIGHT_LEVEL";//
key <AB10>{[slash, seconds,  seconds, questiondown, U2212 ]};
// x X ! ¡ 🄯
// à À ? ¿ ©
// . ° : ‽ ®
// , ′ " ⸮ ™
// / ″ ″ ¿ −

key <AE08>{[ ugrave, Ugrave, eth,       ETH ]};
key <AB05>{[ b, B, dead_currency,  division, U2248 ]};
key <AB03>{[ c, C,          plus,  notequal, U230A ]};
key <AB07>{[ m, M,         equal, plusminus, U230B ]};
key <AC09>{[ l, L,         minus,    endash, U2308 ]};
key <AC04>{[ f, F,      asterisk,     U00D7, U2309 ]};
key <AE07>{[ ccedilla, Ccedilla, dagger, doubledagger, U221D]};
// ù Ù ð Ð
// b B ¤ ÷ ≈
// c C + ≠ ⌊
// m M = ± ⌋
// l L - – ⌈
// f F * × ⌉
// ç Ç † ‡ ∝

key <AC05>{[ g, G,    percent, U2030, U27C2 ]};
key.type[Group1] = "EIGHT_LEVEL_LETTER_ERGODOX";//
key <AD05>{[ t, T,  parenleft, U27E6, U220F, a, a,  Left ]};
key <AC02>{[ s, S, parenright, U27E7, U2211, a, a,    Up ]};
key <AB06>{[ n, N,       less, U2264, U2228, a, a,  Down ]};
key <AD04>{[ r, R,    greater, U2265, U2227, a, a, Right ]};
//division
// g G % ‰ ⟂
// t T ( ⟦ ∏
// s S ) ⟧ ∑
// n N < ≤ ∨
// r R > ≥ ∧

key.type[Group1] = "EIGHT_LEVEL";//
key <AD01>{[ q, Q,   EuroSign,  U017F ]};
key <AC03>{[ d, D,  braceleft, ssharp ]};
key <AB04>{[ v, V, braceright,  thorn ]};
key <AC07>{[ j, J,  semicolon,  THORN ]};
key <AD02>{[ w, W,      schwa,  SCHWA ]};
key <AC08>{[ k, K,      U0133,  U0132, notsign ]};
// q Q € ſ
// d D { ß
// v V } þ
// j J ; Þ
// w W ə Ə
// k K ij IJ

key <AD03>{[ e, E, e, E ]};
key <AD11>{[ bracketleft,  guillemotleft,  a,  leftdoublequotemark]};
key <AD12>{[ bracketright, guillemotright, a, rightdoublequotemark]};
key <SPCE>{[ space, space, underscore, underscore ]};
key <AE06>{[ dead_circumflex, dead_diaeresis, asciicircum ]};
//key<RTRN>{[ m, M, Delete, Delete, percent]};
 

key <AC10>{[ semicolon, colon ]};
key <BKSL>{[ backslash, bar ]};

key <AE09>{[ ISO_Next_Group]};
key <AE10>{[ dead_grave]};
key <KPAD>{[ CodeInput ]};
key <KPEN>{[ e, b, c, d, e, f ]};
key <KPSU>{[ e]};
key <KPDL>{[ e]};
key <KPMU>{[ e]};

};

8 modes de clavier, partie traîtée par l'Ergodox

Ma configuration complète de l'Ergodox est disponible sur ce site: https://configure.ergodox-ez.com/layouts/5zNY/latest/0 indiquant à la fois l'apparence visuelle, le fichier .hex à mettre sur le clavier, et le code source pour ceux qui souhaitent en faire une version améliorée (sachant que c'est aussi possible sur le site d'ergodox ez).

Le clavier Ergodox a l'avantage d'être programmable, c'est à dire que certaines fonctions (la position des touches mais pas que) sont gérées en dehors de l'ordinateur. En résumé, j'utilise:

Mode 0: lettres. C'est le mode que j'utilise le plus souvent, pour du texte, pour divers racourcis clavier, une partie du temps en programmation.

Mode 1: maths. Contient les chiffres TOUJOURS en accès direct (que verr num soit activé ou pas), tous les caractères spéciaux ASCII utiles en programmation, les 6 premières lettres en accès direct (pour l'hexadécimal), et 10 lettres de plus en majuscule.

Mode 2: souris. Je n'ai plus besoin d'une souris physique, ce mode peut diriger le pointeur de la souris, scroller, cliquer comme une souris. Il y a aussi de nombreux racourcis clavier faciles d'accès dessus servant notamment pour la navigation sur internet (changer d'onglet, fermet/ouvrir/recharger un onglet… ), également utiles sur d'autres logiciels une fois ceux ci bien configurés.

Mode 3 à 7: spéciaux / pour une main sur le clavier et une sur la souris / pour deux mains sur le clavier dont une émulant la souris et l'autre tapant des lettres:

Mode 3: spécial. Contient les touches F1 à F24 pour des fonctions supplémentaires, tous les modifieurs, ou plusieurs en une touche, d'autres touches absentes des autres modes, et un accès à tous les modes sauf le 8 (servant aux lettres rares).

Mode 4: chiffres+souris. La main gauche contient tous les chiffres, et plusieurs fonctions dont on peut avoir besoin si on tient une vraie souris de l'autre main (sauf certains comme le changement d'onglet que je peux déjà faire soit avec ma souris soit avec le clavier en mode souris), et la main droite contient un condensé des fonctions les plus utiles des deux mains du mode 2.

Transitions

Entre les modes 0 1 et 2, les transitions se font avec les touches des pouces, situées les plus en bas. Gauche: 0->1 1->0 2->1 Droite: 0->2 2->0 1->2 Ce choix donne un rôle prédominant au 0 (d'ailleurs, les touches sont marquées TT sur le site depuis ce mode, c'est à dire qu'en gardant………)

Pour aller au mode 3 (qui donne accès à d'autres), on appuie sur une autre touche du pouce droit depuis le mode 0.

Entre les modes 4, 5, 6, il y a également deux touches permettant d'aller de l'un à l'autre. Ces modes ont chacun une composante par main, parmi [souris] [chiffres] [lettres fréquentes], de manière à ce que chaque main puisse avoir n'importe laquelle de ces composantes, et que dans chacun de ces modes, les deux mains aient un rôle différent. Le fait d'appuyer sur la touche de transition sur la main A va assigner à la main A l'ancien rôle de la main B, et à la main B le troisième rôle, qui n'était à aucune main avant (c'est dans l'idée que ce soit la main B qui fasse une action, ainsi, on évite d'utiliser deux fois la même main). 4: [chiffres->6] [souris->5] 5: [lettres->4] [chiffres->6] 6: [souris->5] [lettres->4]


Par ailleurs, les modes [lettres] 5 et 6, ont un OSL (transition ne durant qu'une lettre) vers le mode 7 (lettres rares), les modes [chiffres] 4 et 5 ont un TO7 permettant d'entrer éventuellement plusieurs lettres rares d'affilée (bien que ce besoin soit rare), et le mode 7 permet de retourner (TO) vers le mode 0 (normal).

L'idée étant à la fois de chercher une forme de cohérence entre les transitions, et trouver un juste milieu quant à leur quantité (trop de transition serait au détriment d'autres touches utiles, et trop peu rendrait le changement de mode long et désagréable).

Mode 0: Normal

C'est de ce mode dont je parle la plupart du temps au dessus, c'est celui qui permet d'écrire le plus vite en français. Sa principale particularité est d'avoir des touches à double fonction sur les pouces et sur les "[" "]" accessibles avec les index. La plupart des caractères sont accessibles, sauf VerrNum qui se trouve dans le mode 1, ou certaines combinaisons de touches nécessitant Ctrl/Alt + des flèches, ne sont pas faciles à faire, nécessitant parfois d'appuyer sur deux touches à la fois avec le même pouce (par exemple Ctrl+PageUp pour changer d'onglet actif dans la plupart des navigateurs web), celle-ci sont donc présentes dans le mode 2 pour la plupart, et quelques autres dans le mode 1.

Mode 1: Maths

Dans ce mode, les chiffres sont toujours en accès direct, indépendemment de l'état de VerrNum. En dessous, se situent les six premières lettres de l'alphabet, pour écrire de l'hexadécimal. Tous les caractères spéciaux ASCII sont également en accès direct, et leur position est indépendante de l'état de VerrNum, cela permet donc d'effectuer une opération mathématique facilement en restant dans ce mode. Il arrive que dans un langage de programmation il y ait majoritairement ces caractères, mais aussi quelques autres lettres. Dans ce cas, la plupart de lettres sont accessibles avec Maj+chiffre (encore une fois, quel que soit l'état de VerrNum, qui n'intervient pour ainsi dire jamais dans ce mode).

Certaines autres combinaisons de touches comme Ctrl+gauche/droite/suppr/backspace sont en accès direct (il suffit d'appuyer sur UNE touche pour effectuer ces combinaisons de normalemet plusieurs touches, c'est l'une des possibilités qu'offre les claviers programmables tels que l'Ergodox. C'est ce dont je me sers pour pouvoir taper les chiffres indépendemment de VerrNum. Je ne me sers de cette possibilité nulle part dans le mode 1_normal).

 ┌─────┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬─────┐
 │  ;  │ % │ @ │ $ │ # │ { │Supr │Ins│ } │ & │ | │ \ │ ~ │  "  │
 ├─────┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼─────┤
 │  `  │ < │ > │ ( │ ) │ . │   │ │   │ ' │ + │ = │ - │ * │  ^  │ ( ` et ^ sont des touches mortes sur cette ligne)
 ├─────┼───┼───┼───┼───┼───┤Bks│ │Tab├───┼───┼───┼───┼───┼─────┤
 │  `  │ 4 │ 3 │ 2 │ 1 │ , ├───┤ ├───┤C← │ 0 │ 9 │ 8 │ 7 │  ^  │ ( ` et ^ sont des caractères sur cette ligne)
 ├─────┼───┼───┼───┼───┼───┤   │ │   ├───┼───┼───┼───┼───┼─────┤
 │  _  │ c │ b │ a │ 5 │ / │ [ │ │ ] │C→ │ 6 │ f │ e │ d │  ?  │
 └─┬───┼───┼───┼───┼───┼───┴───┘ └───┴───┼───┼───┼───┼───┼───┬─┘
   │Imp│ s+│ s-│ ↑ │ ↓ │                 │ ← │ → │F11│F13│F14│  (cette ligne est comme sur les modes 0 et 2)
   └───┴───┴───┴───┴───┘                 └───┴───┴───┴───┴───┘  
                       ┌───┬───┐ ┌───┬───┐                      
                       │ ! │ : │ │Num│Cap│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │tmux │ x │sup│bksp   (les deux dernières touches du pouce droit sont faites avec             
                   │Esp│Ent├───┤ ├───┤lig│lig│   ctrl+maj+suppr/backspace, et servent à supprimer respectivement
                   │ace│rée│TO0│ │TO2│ne │ne │   jusqu'à la fin, et jusqu'au début de la ligne sur plusieurs logiciels)
                   └───┴───┴───┘ └───┴───┴───┘    

Avec maj+chiffres, on obtient ici les 10 lettres allant de G à P, ce qui, avec le X fait un total de 17 lettres dont 7 en accès direct. Plusieurs touches des pouces sont à double fonction (j'exclu des doubles fonctions la touche altgr puisqu'elle est déjà appuyée avec la plupart des lettres ici pour avoir accès aux caractères spéciaux et aux chiffres).

Le pouce droit permettant des raccourcis clavier pour supprimer une ligne entière, c'est sur le gauche que sont les touches espace et entrée.

Beaucoup de caractères spéciaux présents ici suivent une logique proche de celle du mode 1 pour les rendre plus simples à retenir, tout en mettant les plus fréquents (fréquents dans cet usage, pas quand on tape du texte, c'est pourquoi le point d'interrogation, par exemple, est loin d'être la touche la plus simple à utiliser) à des emplacements faciles d'accès.

Mode 2: Souris

C'est une autre possibilité que j'aime beaucoup sur l'Ergodox: il est possible de diriger le pointeur de la souris directement à partir du clavier, ainsi que de cliquer ou d'émuler la molette de la souris (ou même une molette horizontale, moins souvent présete sur les souris). L'un de mes objectifs étant d'éviter les transitions trop fréquentes entre les différents modes, celui-ci contient plusieurs actions que l'on risque de faire pendant l'usage de la souris: la souris me servais surtout pour la navigation web (pour écrire du texte, j'utilise Vim, et maintenant NeoVim, où tout peut se faire au clavier, et sans perte de temps bien au contraire), donc tout ce qui concerne les onglets (ouvrir/fermer/recharger/afficher un autre onglet) ou les touches F1 … F12 que j'utilise moins dans un terminal.

Voici les principales fonctions que fourni ce mode

Main gauche:

-Diriger le pointeur de la souris. -Afficher un autre onglet. -Revenir en avant/arrière dans l'historique, ou réouvrir le dernier onglet fermé (Ctrl+Maj+T). -Changer de fenêtre ou de bureau virtuel (configurés pour le gestionnaire de bureau I3WM surtout). - (index gauche, ligne du bord) Tout sélectionner, copier, replacer le pointeur de la souris au centre (script utilisant xdotool).

Pouce gauche:

-Les 3 principaux clics. -Aller au mode 1.

Main droite:

-Molette/scroller, dans 4 directions -Focus parent/child pour I3WM (la structure de données contenant les fenêtres présentes est un arbre, cela permet donc de sélectionner plusieurs fenêtres d'un coup, et permet parfois de changer de fenêtre focalisée en gardant le même affichage lorsque plusieurs fenêtres sont visibles en même temps à l'écran). -Ouvrir/recharger/fermer un onglet (+ le raccourci Alt+Home, permettant de faire une nouvelle recherche dans l'onglet courant). -Coller - (index droit, ligne du bord) Modifier la vitesse de déplacement de la souris (je m'en sers peu, en général la vitesse par défaut me convient).

Pouce droit:

-Zoom -Suppr/Enter/Backspace. -Retourner au mode 0.

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  F1  ║ F2 │ F3 │ F4 │ F5 │ F6 │tout│ │acc1│ F7 │ F8 │ F9 │F10 │↑↑↑ ║ F12  ║ (4 "dual function keys" de chaque côté sur cette ligne)
 ║      ║    │maj │ctrl│alt │SCMD│sélect│    │SCMD│alt │ctrl│maj │    ║      ║ (F11 n'est pas représenté ici car déjà sur la ligne du bas)
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║↑fenêt║←bur│→bur│↑sou│←fen│→fen║copi║ ║    ║ongl│rech│↑scr│alt │↓↓↓ ║web   ║
 ║ re   ║ eau│ eau│ ris│être│être║er  ║ ║acc0║et +│arge│ oll│home│    ║précédant
 ╠══════╣────┼────┼────┼────┼────╢Cins║ ║    ╟────┼────┼────┼────┼────╠══════╣
 ║↓fenêt║A←  │←sou│↓sou│→sou│←ong╠════╣ ╠════╣coll│←scr│↓scr│→scr│C↑  ║web   ║ (déplacer la souris ou scroller se fait surtout avec
 ║ re   ║    │ ris│ ris│ ris│ let║souris║    ║er  │ oll│ oll│ oll│    ║suivant  la ligne du milieu)
 ╠══════╣────┼────┼────┼────┼────╢au  ║ ║acc2╟────┼────┼────┼────┼────╠══════╣
 ║ctrl+ ║A→  │ E  │Tab │Esc │→ong║centre║    ║ongl│espa│chil│pare│C↓  ║ alt  ║
 ║maj+T ║    │    │    │    │ let║    ║ ║    ║et -│ce  │d   │nt  │    ║ end  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │impr│son↑│son↓│↑   │↓   │                     │←   │→   │F11 │F13 │F14 │  
   │écr │    │    │    │    │                     │    │    │full│gua │copy│  
   └────┴────┴────┴────┴────┘                     └────┴────┴scr─┴ke──┴q───┘  
                            ┌────┬────┐ ┌────┬────┐                           
                            │←←← │→→→ │ │Supr│back│                           
                            super│meh │ │    │space                           
                       ┌────┼────┼────┤ ├────┼────┼────┐                      
                       │    │    │clic│ │Ent │zoom│zoom│                      
                       │clic│clic│droit │er  │-   │+   │                      
                       │gauc│mili├────┤ ├────┤    │    │                      
                       │he  │eu  │    │ │    │(ctr│(ctr│                      
                       │    │    │TO 1│ │TO 0│l -)│l =)│                      
                       └────┴────┴────┘ └────┴────┴────┘    

Mode 3: Spécial

La position des touches de celui-ci n'est pas définitive. Pour l'instant il me sert essentiellement à passer d'un mode à l'autre ou à faire des tests sur le fonctionnement de caracères rares, comme les touches F15 à F24, ou les caractères spéciaux du pavé numérique.

Mode 4: Chiffres+Souris

Les deux mains ont des fonctions très différentes: la gauche pour le mode "chiffres, une main" et la droite pour le mode "souris, une main". Ce mode peut donc soit être utilisé à une main (en utilisant les transitions avec les modes 5 et 6) sans rien faire de l'autre, soit pour avoir une souris dans la main droite et des touches complémentaires dans la gauche, soit des deux mains pour un logiciel nécessitant de fréquentes transitions entre clavier et souris (parfois plus rapide que d'effectuer de nombreux passages entre les modes 0 et 2).

La main gauche contient donc les chiffres, des racourcis clavier pour le zoom, pour annuler ou refaire une action, le scroll dans 4 directions (bien que le scroll vertical soit redondant avec celui de la souris, il ne fonctionne pas exactement pareil: le scroll du clavier fonctionne tant que la touche est appuyée, ce qui le rends plus agréable pour les grands déplacements, et moins agréable pour les petits déplacements, que le scroll de la souris), les 4 flèches, une transition vers le mode 6 (récupérer la souris sur la main gauche, supposant que la prochaine action sera faite par la main droite), le mode 7 (qui sers peu, mais je souhaitais au moins un moyen de taper plusieurs touches dans ce mode) et quelques autres fonctions plus rarement utilisées.

La main droite contient un condensé des fonctions plus utiles des deux mains du mode 2 (souris) et très peu de nouvelles fonctions. Il a donc des touches pour déplacer le pointeur, scroller mais seulement verticalement, les 3 clics, changer d'onglet, de fenêtre, bureau ou naviguer dans l'historique. Ce qu'il n'a pas et que le mode 2 a: zoom, scroll horizontal, touches F1 à F14, accès aux modes 0 et 1, flèches, d'autres fonctions moins souvent utiles, et l'accès à certaines fonctions est moins direct. Ce qu'il y a en plus: accès au mode 5 mettant les chiffres sur la main droite, fermer une fenêtre, lettres x y z (utiles pour certains logiciels tels que Blender).

apparence:

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  6   ║ 7  │ 8  │ 9  │ 0  │zoom│ CA │ │Esc │←fen│→fen│←bur│→bur│ongl║alt   ║
 ║ Meh  ║    │    │    │SCMD│ +  │    │ │meh │être│être│ eau│ eau│et +║home  ║
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  5   ║ 4  │ 3  │ 2  │ 1  │zoom║    ║ ║copi║←ong│→ong│↑sou│rech│ongl║fermer║
 ║Hyper ║    │    │    │Super -  ║ [  ║ ║er  ║ let│ let│ ris│arge│et -║fenêtre
 ╠══════╣────┼────┼────┼────┼────╢    ║ ║Cins╟────┼────┼────┼────┼────╠══════╣
 ║annule║←scr│↑scr│↓scr│→scr│↑↑↑ ╠════╣ ╠════╣↑scr│←sou│↓sou│→sou│ E  ║↑fen  ║
 ║Cz    ║ oll│ oll│ oll│ oll│    ║    ║ ║coll║ oll│ ris│ ris│ ris│    ║être  ║
 ╠══════╣────┼────┼────┼────┼────╢ ]  ║ ║er  ╟────┼────┼────┼────┼────╠══════╣
 ║refait║ ←  │ ↑  │ ↓  │ →  │↓↓↓ ║    ║ ║Sins║↓scr│Entr│A←  │A→  │espa║↓fen  ║
 ║CMz   ║    │    │    │    │    ║    ║ ║    ║ oll│ée  │    │    │ce  ║être  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │ =  │ctgr│ \  │TO7 │TO6 │                     │TO5 │sris│son↑│son↓│impr│  
   │altgr    │    │    │    │                     │    │centr    │    │écr │  
   └────┴────┴────┴────┴────┘                     └────┴────┴────┴────┴────┘  
                            ┌────┬────┐ ┌────┬────┐                     
                            │ /  │ CS │ │ Y  │ X  │                           
                            │alt │    │ │alt │ctrl│                           
                       ┌────┼────┼────┤ ├────┼────┼────┐                      
                       │    │    │ -  │ │ Z  │    │    │                      
                       │ .  │Entr│super │maj │clic│clic│                      
                       │    │ée  ├────┤ ├────┤mili│gauc│                      
                       │    │    │ .  │ │clic│eu  │he  │                      
                       │ctrl│maj │    │ │droit    │    │                      
                       └────┴────┴────┘ └────┴────┴────┘          

Mode 5: Lettres+Chiffres

Le sous mode [chiffres] est le même que celui de la main gauche du mode 4 (mais symétrisé bien entendu), et le mode [lettres] contient un condensé des lettres les plus fréquentes du mode 0, c'est à dire toutes les lettres françaises les plus fréquentes, soit celles des pouces, de la ligne du milieu du mode normal, et quelques autres. Le pouce permet des modifieurs, l'auriculaire et l'index permettent surtout de faire plusieurs modifieurs sur une seule touche. Le pouce sers également à aller au mode 7 quand il y a des lettres rares à taper (environ 10% du temps). Ce mode peut donc servir soit à taper un court texte (quelques mots ou commandes) d'une main, soit à faire des raccourcis clavier (et même avec Ctrl+Alt, Ctrl+Maj, Alt+Maj si nécessaire).

Voici la disposition pour la main gauche: la main droite étant semblable à la main gauche du mode 4. Sur l'auriculaire, CA CM AM signifient [ctrl+alt] [ctrl+maj] [alt+maj], deux modifieurs en une touche.

 ┌─────┬───┬───┬───┬───┬───┬───┐
 │ →→→ │F5 │F4 │F3 │F2 │F1 │Enter
 ├─────┼───┼───┼───┼───┼───┼───┤
 │ CA  │ O │ N │ U │ S │ D │   │
 ├─────┼───┼───┼───┼───┼───┤Tab│
 │ CM  │ A │ R │ I │ T │ H ├───┤
 ├─────┼───┼───┼───┼───┼───┤   │
 │ AM  │ H │ M │ P │ C │ G │bks│
 └─┬───┼───┼───┼───┼───┼───┴───┘
   │Supr B │ L │ F │TO4│      
   └───┴───┴───┴───┴───┘   
                       ┌───┬───┐
                       │F13│F11│
                   ┌───┼───┼───┤
                   │   │   │caps
                   │ E │OSL├───┤
                   │   │ 7 │ ' │
                   └───┴───┴───┘

Mode 6: Souris+Lettres

La main gauche contrôle la souris (comme la droite du mode 4), et la main droite contrôle les lettres les plus fréquentes (comme la gauche du mode 5). C'est le mode qui a le plus de chances de servir pour un usage à deux mains, par exemple dans un jeu nécessitant à la fois l'usage fréquent de la souris, et permettant de nombreux raccourcis clavier. Cela peut aussi concerner certains logiciels comme Blender (pour le dessin 3D) où les actions au clavier sont également très fréquentes.

Mode 7: Caractères rares

Ce mode est semblable au sous mode [lettres] au niveau de la forme et des modifieurs. Contrairement aux modes 4 à 6, ici les deux mains ont le même rôle, la seule différence est le TO4 de la main gauche devenant TO5 à droite: dans les deux cas cela sers à retourner au mode [chiffres] de la main correspondante.

 ┌─────┬───┬───┬───┬───┬───┬───┐
 │ ←←← │F10│F9 │F8 │F7 │F6 │ ; │
 ├─────┼───┼───┼───┼───┼───┼───┤
 │ CA  │ Ç │ K │ J │ W │ \ │tmux
 ├─────┼───┼───┼───┼───┼───┤ □ │
 │ CM  │ Q │ V │TO4│ É │ ( ├───┤
 ├─────┼───┼───┼───┼───┼───┤   │
 │ AM  │ Z │ Y │ X │ , │ ) │ Ù │
 └─┬───┼───┼───┼───┼───┼───┴───┘
   │ins│ Ê │ È │ À │ ^ │      
   └───┴───┴───┴───┴───┘   
                       ┌───┬───┐
                       │F15│F12│
                   ┌───┼───┼───┤
                   │   │   │ ` │
                   │TO0│   ├───┤
                   │   │   │F14│
                   └───┴───┴───┘

Code source

config.h :

/*
  Set any config.h overrides for your specific keymap here.
  See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
*/
#undef DEBOUNCE
#define DEBOUNCE 30

#undef TAPPING_TERM
#define TAPPING_TERM 152

#define RETRO_TAPPING

#undef ONESHOT_TIMEOUT
#define ONESHOT_TIMEOUT 1000

#define PERMISSIVE_HOLD

#undef MOUSEKEY_INTERVAL
#define MOUSEKEY_INTERVAL 16

#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 40

#undef MOUSEKEY_MAX_SPEED
#define MOUSEKEY_MAX_SPEED 4

#undef MOUSEKEY_TIME_TO_MAX
#define MOUSEKEY_TIME_TO_MAX 40

#undef MOUSEKEY_WHEEL_MAX_SPEED
#define MOUSEKEY_WHEEL_MAX_SPEED 13

#undef MOUSEKEY_WHEEL_TIME_TO_MAX
#define MOUSEKEY_WHEEL_TIME_TO_MAX 60

rules.mk :

# Set any rules.mk overrides for your specific keymap here.
# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
COMMAND_ENABLE = no
RGBLIGHT_ENABLE = no

keymap.c :

#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "version.h"
#include "keymap_german.h"
#include "keymap_nordic.h"
#include "keymap_french.h"
#include "keymap_spanish.h"

enum custom_keycodes {
  PLACEHOLDER = SAFE_RANGE, // can always be here
  EPRM,
  RGB_SLD,
  
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT_ergodox(KC_KP_5,KC_KP_4,KC_KP_3,KC_KP_2,KC_KP_1,KC_NUMLOCK,KC_DELETE,KC_Z,KC_4,KC_3,KC_P,KC_QUOTE,KC_Y,KC_BSPACE,KC_2,KC_O,KC_A,KC_I,KC_U,KC_H,KC_9,KC_X,KC_5,KC_DOT,KC_COMMA,KC_SLASH,MT(MOD_HYPR, KC_LBRACKET),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,LALT_T(KC_HOME),MT(MOD_MEH, KC_END),RSFT_T(KC_1),RALT_T(KC_E),LGUI_T(KC_ESCAPE),TT(1),KC_INSERT,KC_8,KC_KP_0,KC_KP_9,KC_KP_8,KC_KP_7,KC_KP_6,KC_TAB,KC_B,KC_C,KC_M,KC_L,KC_F,KC_7,KC_G,KC_T,KC_S,KC_N,KC_R,KC_6,MT(MOD_HYPR, KC_RBRACKET),KC_Q,KC_D,KC_V,KC_J,KC_W,KC_K,KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,RGUI_T(KC_PGUP),TT(3),RCTL_T(KC_PGDOWN),TT(2),LCTL_T(KC_ENTER),LSFT_T(KC_SPACE)),

  [1] = LAYOUT_ergodox(RALT(KC_J),RALT(KC_G),RALT(KC_3),RALT(KC_P),RALT(KC_QUOTE),RALT(KC_D),KC_DELETE,KC_GRAVE,RALT(RCTL(KC_N)),RALT(RCTL(KC_R)),RALT(RCTL(KC_T)),RALT(RCTL(KC_S)),KC_DOT,KC_BSPACE,RALT(KC_GRAVE),RALT(KC_KP_4),RALT(KC_KP_3),RALT(KC_KP_2),RALT(KC_KP_1),KC_COMMA,RALT(KC_SPACE),KC_C,KC_B,KC_A,RALT(KC_KP_5),KC_SLASH,MT(MOD_HYPR, KC_LBRACKET),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,RALT(RCTL(KC_DOT)),RALT(RCTL(KC_X)),LGUI_T(KC_1),LSFT_T(KC_SPACE),LCTL_T(KC_ENTER),TO(0),KC_INSERT,RALT(KC_V),RALT(KC_U),RALT(KC_I),RALT(KC_A),RALT(KC_O),RALT(RCTL(KC_COMMA)),KC_TAB,KC_QUOTE,RALT(KC_C),RALT(KC_M),RALT(KC_L),RALT(KC_F),KC_6,LCTL(KC_LEFT),RALT(KC_KP_0),RALT(KC_KP_9),RALT(KC_KP_8),RALT(KC_KP_7),RALT(KC_6),MT(MOD_HYPR, KC_RBRACKET),LCTL(KC_RIGHT),RALT(KC_KP_6),KC_F,KC_E,KC_D,RALT(RCTL(KC_5)),KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,KC_NUMLOCK,LALT_T(KC_CAPSLOCK),RCTL_T(KC_X),TO(2),LCTL(LSFT(KC_DELETE)),LCTL(LSFT(KC_BSPACE))),

  [2] = LAYOUT_ergodox(KC_F1,KC_F2,LSFT_T(KC_F3),LCTL_T(KC_F4),LALT_T(KC_F5),SCMD_T(KC_F6),LCTL(KC_A),LGUI(KC_T),LGUI(KC_3),LGUI(KC_P),KC_MS_UP,LGUI(KC_S),LGUI(KC_N),LCTL(KC_INSERT),LGUI(KC_R),LALT(KC_LEFT),KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,LCTL(KC_PGUP),LCTL(LSFT(KC_T)),LALT(KC_RIGHT),KC_E,KC_TAB,KC_ESCAPE,LCTL(KC_PGDOWN),LGUI(KC_E),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,LGUI_T(KC_HOME),MT(MOD_MEH, KC_END),KC_MS_BTN2,KC_MS_BTN1,KC_MS_BTN3,TO(1),KC_MS_ACCEL1,SCMD_T(KC_F7),LALT_T(KC_F8),LCTL_T(KC_F9),LSFT_T(KC_F10),KC_PGUP,KC_F12,KC_MS_ACCEL0,LCTL(KC_T),LCTL(KC_R),KC_MS_WH_UP,LALT(KC_HOME),KC_PGDOWN,KC_WWW_BACK,LSFT(KC_INSERT),KC_MS_WH_LEFT,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,LCTL(KC_UP),KC_WWW_FORWARD,KC_MS_ACCEL2,LCTL(KC_W),KC_SPACE,LGUI(KC_4),LGUI(KC_QUOTE),LCTL(KC_DOWN),LALT(KC_END),KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,KC_DELETE,KC_BSPACE,KC_ENTER,TO(0),LCTL(KC_MINUS),LCTL(KC_EQUAL)),

  [3] = LAYOUT_ergodox(KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_LGUI,KC_F13,KC_F14,KC_F15,KC_F16,KC_F17,KC_F18,LALT(LCTL(KC_LGUI)),KC_SCROLLLOCK,KC_KP_DOT,KC_LGUI,KC_LSHIFT,LSFT(KC_LGUI),LSFT(KC_LALT),KC_TRANSPARENT,KC_KP_ENTER,KC_KP_ASTERISK,KC_KP_PLUS,KC_HYPR,LSFT(KC_LCTRL),KC_MEH,KC_TRANSPARENT,KC_KP_MINUS,KC_KP_COMMA,KC_KP_SLASH,KC_KP_0,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,TO(0),TO(1),TO(2),KC_RGUI,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,LALT(LSFT(KC_LGUI)),KC_F19,KC_F20,KC_F21,KC_F22,KC_F23,KC_F24,LCTL(KC_LGUI),LCTL(KC_LALT),KC_LCTRL,KC_LALT,KC_APPLICATION,EPRM,LCTL(LSFT(KC_LGUI)),LALT(KC_LGUI),KC_HYPR,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_SYSTEM_SLEEP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_NO,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,TO(4),TO(5),TO(6)),

  [4] = LAYOUT_ergodox(MT(MOD_MEH, KC_KP_6),KC_KP_7,KC_KP_8,KC_KP_9,SCMD_T(KC_KP_0),LCTL(KC_EQUAL),LCTL(KC_LALT),MT(MOD_HYPR, KC_KP_5),KC_KP_4,KC_KP_3,KC_KP_2,RGUI_T(KC_KP_1),LCTL(KC_MINUS),KC_LBRACKET,LCTL(KC_Z),KC_MS_WH_LEFT,KC_MS_WH_LEFT,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,KC_PGUP,LCTL(LSFT(KC_Z)),KC_LEFT,KC_UP,KC_DOWN,KC_RIGHT,KC_PGDOWN,KC_RBRACKET,RALT_T(KC_EQUAL),RCTL_T(KC_NO),KC_NONUS_BSLASH,TO(7),TO(6),LALT_T(KC_SLASH),LCTL(KC_LSHIFT),LGUI_T(KC_MINUS),LCTL_T(KC_DOT),LSFT_T(KC_ENTER),KC_KP_DOT,LCTL(KC_T),LGUI(KC_S),LGUI(KC_N),LGUI(KC_3),LGUI(KC_P),LCTL(KC_T),LALT(KC_HOME),LCTL(KC_INSERT),LCTL(KC_PGUP),LCTL(KC_PGDOWN),KC_MS_UP,LCTL(KC_R),LCTL(KC_W),LGUI(KC_G),KC_MS_WH_UP,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_E,LGUI(KC_T),LSFT(KC_INSERT),KC_MS_WH_DOWN,KC_KP_ENTER,LALT(KC_LEFT),LALT(KC_RIGHT),KC_SPACE,LGUI(KC_R),TO(5),LGUI(KC_E),KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_PSCREEN,LALT_T(KC_Y),LCTL_T(KC_X),LSFT_T(KC_Z),KC_MS_BTN2,KC_MS_BTN3,KC_MS_BTN1),

  [5] = LAYOUT_ergodox(KC_END,RGUI_T(KC_F5),KC_F4,KC_F3,RCTL_T(KC_F2),SCMD_T(KC_F1),MT(MOD_MEH, KC_ENTER),LCTL(KC_LALT),KC_O,KC_N,KC_U,KC_S,KC_D,LGUI_T(KC_TAB),LCTL(KC_LSHIFT),KC_A,KC_R,KC_I,KC_T,KC_SPACE,LALT(KC_LSHIFT),KC_H,KC_M,KC_P,KC_C,KC_G,MT(MOD_HYPR, KC_BSPACE),KC_DELETE,KC_B,KC_L,KC_F,TO(4),LALT_T(KC_F13),RALT_T(KC_F11),LSFT_T(KC_CAPSLOCK),KC_E,OSL(7),LCTL_T(KC_QUOTE),LCTL(KC_LALT),LCTL(KC_EQUAL),SCMD_T(KC_KP_0),KC_KP_9,KC_KP_8,KC_KP_7,MT(MOD_MEH, KC_KP_6),KC_LBRACKET,LCTL(KC_MINUS),RGUI_T(KC_KP_1),KC_KP_2,KC_KP_3,KC_KP_4,MT(MOD_HYPR, KC_KP_5),KC_PGUP,KC_MS_WH_LEFT,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,LCTL(KC_Z),KC_RBRACKET,KC_PGDOWN,KC_LEFT,KC_UP,KC_DOWN,KC_RIGHT,LCTL(LSFT(KC_Z)),TO(6),TO(7),KC_NONUS_BSLASH,RCTL_T(KC_NO),RALT_T(KC_EQUAL),LCTL(KC_LSHIFT),LALT_T(KC_SLASH),LGUI_T(KC_MINUS),KC_KP_DOT,LSFT_T(KC_ENTER),LCTL_T(KC_DOT)),

  [6] = LAYOUT_ergodox(LALT(KC_HOME),LCTL(KC_T),LGUI(KC_3),LGUI(KC_P),LGUI(KC_S),LGUI(KC_N),MT(MOD_MEH, KC_ESCAPE),LGUI(KC_G),LCTL(KC_W),LCTL(KC_R),KC_MS_UP,LCTL(KC_PGUP),LCTL(KC_PGDOWN),LCTL(KC_INSERT),LGUI(KC_T),KC_E,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_MS_WH_UP,LGUI(KC_R),KC_SPACE,LALT(KC_LEFT),LALT(KC_RIGHT),KC_KP_ENTER,KC_MS_WH_DOWN,LSFT(KC_INSERT),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,LGUI(KC_E),TO(5),LCTL_T(KC_X),LALT_T(KC_Y),LSFT_T(KC_Z),KC_MS_BTN1,KC_MS_BTN3,KC_MS_BTN2,MT(MOD_MEH, KC_ENTER),SCMD_T(KC_F1),RCTL_T(KC_F2),KC_F3,KC_F4,RGUI_T(KC_F5),KC_END,LGUI_T(KC_TAB),KC_D,KC_S,KC_U,KC_N,KC_O,LCTL(KC_LALT),KC_SPACE,KC_T,KC_I,KC_R,KC_A,LCTL(KC_LSHIFT),MT(MOD_HYPR, KC_BSPACE),KC_G,KC_C,KC_P,KC_M,KC_H,LALT(KC_LSHIFT),TO(4),KC_F,KC_L,KC_B,KC_DELETE,RALT_T(KC_F11),LALT_T(KC_F13),LSFT_T(KC_CAPSLOCK),LCTL_T(KC_QUOTE),OSL(7),KC_E),

  [7] = LAYOUT_ergodox(KC_HOME,RGUI_T(KC_F10),KC_F9,KC_F8,RCTL_T(KC_F7),SCMD_T(KC_F6),MT(MOD_MEH, KC_SCOLON),LCTL(KC_LALT),KC_KP_7,KC_K,KC_J,KC_W,KC_BSLASH,LGUI_T(KC_1),LCTL(KC_LSHIFT),KC_Q,KC_V,TO(4),KC_3,RALT(RCTL(KC_T)),LALT(KC_LSHIFT),KC_Z,KC_Y,KC_X,KC_COMMA,RALT(RCTL(KC_S)),MT(MOD_HYPR, KC_8),KC_INSERT,KC_2,KC_4,KC_5,KC_6,LALT_T(KC_F15),RALT_T(KC_F12),LSFT_T(KC_GRAVE),TO(0),KC_TRANSPARENT,LCTL_T(KC_F14),MT(MOD_MEH, KC_SCOLON),SCMD_T(KC_F6),RCTL_T(KC_F7),KC_F8,KC_F9,RGUI_T(KC_F10),KC_HOME,LGUI_T(KC_1),KC_BSLASH,KC_W,KC_J,KC_K,KC_KP_7,LCTL(KC_LALT),RALT(RCTL(KC_T)),KC_3,TO(5),KC_V,KC_Q,LCTL(KC_LSHIFT),MT(MOD_HYPR, KC_8),RALT(RCTL(KC_S)),KC_COMMA,KC_X,KC_Y,KC_Z,LALT(KC_LSHIFT),KC_6,KC_5,KC_4,KC_2,KC_INSERT,RALT_T(KC_F12),LALT_T(KC_F15),LSFT_T(KC_GRAVE),LCTL_T(KC_F14),KC_TRANSPARENT,TO(0)),

};

bool suspended = false;
const uint16_t PROGMEM fn_actions[] = {
  [1] = ACTION_LAYER_TAP_TOGGLE(1)
};

// leaving this in place for compatibilty with old keymaps cloned and re-compiled.
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
      switch(id) {
        case 0:
        if (record->event.pressed) {
          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
        }
        break;
      }
    return MACRO_NONE;
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    // dynamically generate these.
    case EPRM:
      if (record->event.pressed) {
        eeconfig_init();
      }
      return false;
      break;
  }
  return true;
}

uint32_t layer_state_set_user(uint32_t state) {

    uint8_t layer = biton32(state);

    ergodox_board_led_off();
    ergodox_right_led_1_off();
    ergodox_right_led_2_off();
    ergodox_right_led_3_off();
    switch (layer) {
      case 1:
        ergodox_right_led_1_on();
        break;
      case 2:
        ergodox_right_led_2_on();
        break;
      case 3:
        ergodox_right_led_3_on();
        break;
      case 4:
        ergodox_right_led_1_on();
        ergodox_right_led_2_on();
        break;
      case 5:
        ergodox_right_led_1_on();
        ergodox_right_led_3_on();
        break;
      case 6:
        ergodox_right_led_2_on();
        ergodox_right_led_3_on();
        break;
      case 7:
        ergodox_right_led_1_on();
        ergodox_right_led_2_on();
        ergodox_right_led_3_on();
        break;
      default:
        break;
    }
    return state;

};

Compatibilité avec des logiciels

La plupart des logiciels sont par défaut prévus pour un usage d'un clavier QWERTY (éventuellement AZERTY), et/ou un usage intensif de la souris, ce qui peut s'avérer plus lent (le fait de devoir constamment déplacer un bras vers la souris et revenir, ou le fait de devoir cliquer dans plusieurs sous menus, ou viser la toute petite croix pour fermer une fenêtre https://fr.wikipedia.org/wiki/Loi_de_Fitts , sachant que cela reste rapide dans le cas ou la croix est dans un angle de l'écran cela reste raisonnable), à l'exception de l'écriture qui a été conçue avant les claviers (à quelques mots près), il est nécessaire d'adapter certains logiciels à la nouvelle position des lettres.

Heureusement, de nombreux logiciels permettent de changer les raccourcis clavier (parfois même au delà d'une simple permutation de lettres).

I3WM

I3WM est un gestionnaire de bureau prévu pour GNU/Linux et BSD, https://i3wm.org/docs/userguide.html . Il s'agit d'un "tiling window manager" https://en.wikipedia.org/wiki/Tiling_window_manager (une page wikipédia francophone existe sur le même sujet mais est peu remplie), c'est-à-dire que par défaut les fenêtres vont remplir la totalité de l'écran, que ce soit une fenêtre en plein écran ou un écran divisé en plusieurs parties, mais dans tous les cas, les fenêtres "tiled" sont à un instant quelconque, soit entièrement visibles, soit entièrement masquées, par opposition aux fenêtres "floating" (flottantes, c'est ce qu'on voit sur un ordinateur ayant une configuration plus classique), où chaque fenêtre peut être déplacée librement quitte à en recouvrir d'autres (cette notion est également envisageable dans I3WM mais n'est pas la plus recommandée).

Ce gestionnaire de bureau est très configurable, il est possible: -d'affecter à chaque raccourci clavier (une lettre, ou des modifieurs+une lettre par exemple [ctrl+super+x]) une fonction ou une suite de fonction (on peut rester sur une lettre = une commande, mais il est tout à fait permis d'avoir une commande pour "fermer une fenêtre + ouvrir un navigateur web + se déplacer vers la droite + agrandir la fenêtre courante" si cela a un sens pour son usage, ou d'exécuter des commandes shell). -de créer plusieurs modes (un peu comme ceux de Vim), et pour chaque mode, définir un fonctionnement différent des raccourcis clavier (par exemple faire un mode dans lequel les lettres servent à se déplacer et pas à écrire). -gérer l'affichage du titre des fenêtres, de la barre en haut/bas de l'écran, et d'autres fonctions.

Les raccourcis étant initialement faits pour QWERTY, voici les miens:

TODO (Cette page est en cours d'édition, d'autres changement peuvent apparaître dans quelques jours).

Résumé de ma démarche: Je passe beaucoup de temps à écrire, souvent pour de la programmation (notamment bash, zsh, C++), et j'ai vite été frustré par la difficulté d'accès des caractères spéciaux, la sur utilisation des auriculaires… bref comme tout le monde ici je crois^^. Je suis rapidement passé en bépo, puis en ai profité pour regarder quel clavier serait plus adapté. Après un temps de recherche, j'ai finalement opté pour le clavier Ergodox EZ, mais sa forme différente des claviers classiques a fait que j'ai tenté de créer une disposition de clavier optimisée pour les claviers ergonomiques de ce type, ayant notamment plusieurs touches sur chaque pouce.

Caractéristiques du clavier Ergodox

Le clavier Ergodox a 6 touches accessibles sous chaque pouce au lieu d'une seule, au moins 3 par pouce sont très faciles d'accès.

C'est un clavier orthogonal et splitté.

3 touches en plus par index, moins de touches sur les auriculaires, pas de pavé numérique, pas de touches F1 … F12, mais 5 touches sur une ligne en dessous.

Le clavier est programmable.

Disposition de clavier, partie traîtée par l'ordinateur

En résumé

Voici la disposition que j'utilise la plupart du temps.

 ┌─────┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬─────┐
 │  -  │ ! │ ? │ : │ " │Num│Supr │Ins│ Ù │ ( │ ) │ < │ > │  =  │
 ├─────┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼─────┤
 │  Z  │ È │ É │ P │ ' │ Y │   │ │   │ B │ C │ M │ L │ F │  Ç  │
 ├─────┼───┼───┼───┼───┼───┤Bks│ │Tab├───┼───┼───┼───┼───┼─────┤
 │  Ê  │ O │ A │ I │ U │ H ├───┤ ├───┤ G │ T │ S │ N │ R │  ^  │
 ├─────┼───┼───┼───┼───┼───┤   │ │   ├───┼───┼───┼───┼───┼─────┤
 │Group│ X │ À │ . │ , │ / │ [ │ │ ] │ Q │ D │ V │ J │ W │  K  │
 └─┬───┼───┼───┼───┼───┼───┴───┘ └───┴───┼───┼───┼───┼───┼───┬─┘
   │Imp│ s+│ s-│ ↑ │ ↓ │                 │ ← │ → │F11│F13│F14│  
   └───┴───┴───┴───┴───┘                 └───┴───┴───┴───┴───┘  
                       ┌───┬───┐ ┌───┬───┐                      
                       │←←←│→→→│ │↑↑↑│TT3│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │tmux │↓↓↓│   │   │                  
                   │ E │Esc├───┤ ├───┤ent│esp│                  
                   │   │   │TT1│ │TT2│rée│ace│                  
                   └───┴───┴───┘ └───┴───┴───┘                  


Comme pour la disposition Bépo ou Dvorak, les lettres les plus fréquentes sont sur la ligne du milieu.

Beaucoup de lettres ont un placement proche de celui de Bépo, il y a cependant plusieurs différences, les principales sont: J'ai mis la lettre E sur l'un des pouces, car il s'agit de loin de la lettre la plus fréquente en français. Déplacé le M pour éviter de surcharger l'auriculaire droit. Rendu plus accessibles des lettres utiles en anglais, notamment le W, H et Y sans pour autant prendre des places trop importantes car peu utiles en français. Rendu le digramme CH fréquent en français pour la lettre H, plus facile. Éviter les déplacements latéraux pour les lettres fréquentes comme C M , en bépo.

La ligne du bas sert à (de gauche à droite) : [screenshot] [volume -] [volume +] [flèche haut] [flèche bas] [flèche gauche] [flèche droite] [F11: plein écran] [F13: afficher un terminal] [F14: afficher le presse papier]. Donc 2 touches directionnelles et 3 touches spéciales (nécessitant certains logiciels pour bien fonctionner) par main. Ces touches sont dures d'accès en repliant les doigts, mais on les atteinds facilement avec le milieu du doigt ou avec le pouce pour les touces directionnelles.

Touches à double fonction

C'est une particularité de l'ergodox: une touche à double fonction permet d'agir comme un modifieur (majuscule, ctrl, alt, altgr… ) si on la garde appuyée et qu'on appuie sur une autre touche pendant ce temps, ou comme une touche normale (espace, enter, lettre, chiffre, suppr, flèches… ) si on l'appuie et la lâche juste après. Cela permettrais en théorie de doubler virtuellement le nombre de touches du clavier, c'est en réalité un peu moins que ça étant donné qu'il existe moins de modifieurs que de lettres.

J'ai choisi de mettre mes modifieurs sur les pouces, et de faire en sorte que les racourcis clavier (par exemple Ctrl+T) soient faits avec un pouce (Ctrl) et un doigt autre (par exemple T est fait avec l'index), si possible de l'autre main.

                       ┌───┬───┐ ┌sup┬───┐                      
                       │alt│meh│ │ er│TT3│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │maj| │ctgr   │   │                  
                   │alt│sup├───┤ ├───┤ctr│maj│                  
                   │ gr│ er│TT1│ │TT2│  l│   │                  
                   └───┴───┴───┘ └───┴───┴───┘                  

Pouce gauche: -altgr (alt droite) sert à saisir des caractères spéciaux tels que * ~ \ | @ $ fréquents en programmation (la plupart sont des caractères ASCII). -super (appellée $mod dans mon fichier de configuration i3wm) est la touche ayant parfois un logo Windows dessus, elle me sert à de nombreux racourcis permettant de se déplacer vers une autre fenêtre, de redimentionner, d'ouvrir les logiciels que j'utilise le plus etc. -alt sert pour certains racourcis clavier, mais je m'en sers assez peu. -meh est une idée provenant d'ergodox, envoyant plusieurs modifieurs à la fois (pour définir des racourcis clavier qui ont peu de chance d'être pris par d'autres logiciels). -maj, mais je me sers généralement de celui du pouce droit.

Pouce droit: -maj (ou shift), plus facile d'accès que celui de gauche, c'est celui que j'utilise la plupart du temps, sauf pour les quelques racourcis clavier du style Ctrl+Maj+… ou si les majuscules sont trop souvent juste après des espaces (ce n'est pas toujours le cas en programmation). -ctrl -ctgr est la touche Ctrl de droite, qui a une fonction similaire au Altgr (Altgr est un ISO_Level3_Shift, et Ctgr est un ISO_Level5_Shift) permettant de taper des caractères spéciaux différents de Altgr. Étant donné qu'on peut appuyer sur Altgr et/ou Maj et/ou Ctgr, cela laisse la possibilité d'avoir jusqu'à 8 caractères différents sur la même touche (ceux nécessitant l'appui simultané de deux ou trois modifieurs étant plus lents à taper, c'est réservé à des caractères rares). Notons que toutes les combinaisons à un ou deux modifieurs (+ une lettre n'étant pas sur un pouce) peuvent s'effectuer à l'aide des deux pouces.

Caractères spéciaux et VerrNum

Sur la plupart des claviers, il y a à droite un pavé numérique (ainsi que des touches pour les opérations mathématiques les plus simples), et une touche VerrNum permettant de désactiver les chiffres et d'obtenir d'autres touches à la place (servant surtout à effectuer des déplacements, souvent redondants avec d'autres touches du clavier).

Ici,

-Si VerrNum est désactivé, les chiffres sont en accès direct sur la ligne du haut au lieu des caractères -!?:" ()<>= on aura les caractères 54321 09876 (j'ai choisi cet ordre pour donner un accès facile aux chiffres 1 et 2 qui sont très fréquents principalement à cause de la loi de Benford https://fr.wikipedia.org/wiki/Loi_de_Benford , ainsi que 0 utile pour les nombres plus petits que 1, et 9 peut s'avérer fréquent dans certains cas (dans un logiciel comme Vim, il me sera plus rapide de dire 99l pour se déplacer de 99 caractères dans la version par défaut, que 100l, et généralement les deux mènent au même résultat: on arrive en fin de ligne, et j'ai également voulu garder un ordre logique entre les chiffres d'une même main). La plupart des caractères spéciaux courants (ASCII) sont accessibles avec Altgr+lettre.

-SI VerrNum est activé, les caractères -!?:" ()<>= sont en accès direct, et en appuyant sur Altgr+chiffre on obtient les chiffres, et pour éviter une trop forte redondance avec d'autres caractères spéciaux (présents notamment sur les touches xà., tsnr), le fait d'appuyer sur Altgr+[xà.,tsnr] donne un accès plus facile aux flèches, PageUp, PageDown, début et fin de ligne.

Pour obtenir de tels effets, sur Ubuntu, j'ai dû modifier le fichier /usr/share/X11/xkb/types/level5 (sur une autre distribution GNU/Linux, ce sera certainement un fichier de nom semblable, voire le même), et lui ajouter les lignes:


    // pour les chiffres
    type "EIGHT_LEVEL_NUMERICAL_ERGODOX" {
        modifiers = Shift + LevelThree + NumLock + LevelFive;

        map[None]                                    = Level1; // 4 premiers cas: normaux
        map[Shift]                                   = Level2;
        map[LevelThree]                              = Level3;
        map[LevelThree+Shift]                        = Level4;

        map[LevelFive]                               = Level5;
        map[LevelFive+Shift]                         = Level6;
        map[LevelFive+LevelThree]                    = Level2; // utile pour ergodox, mode 1 (maths)
        map[LevelFive+LevelThree+Shift]              = Level8;

        map[NumLock]                                 = Level7; // VerrNum: le niveau 7 est en accès direct au lieu du 1
        map[NumLock+Shift]                           = Level2;
        map[NumLock+LevelThree]                      = Level3;
        map[NumLock+LevelThree+Shift]                = Level4;

        map[NumLock+LevelFive]                       = Level5;
        map[NumLock+LevelFive+Shift]                 = Level6;
        map[NumLock+LevelFive+LevelThree]            = Level2;
        map[NumLock+LevelFive+LevelThree+Shift]      = Level8;
        preserve[LevelFive+Shift] = Shift;
        preserve[NumLock+Shift] = Shift;
        //preserve[Lock+LevelFive+Shift] = Shift;
        //preserve[Lock+NumLock+Shift] = Shift;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt Base";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "X";
        level_name[Level6] = "X Shift";
        level_name[Level7] = "X Alt Base";
        level_name[Level8] = "X Shift Alt";
    };

    type "EIGHT_LEVEL_LETTER_ERGODOX" {
        modifiers = Shift + LevelThree + NumLock + LevelFive;

        map[None]                                    = Level1;
        map[Shift]                                   = Level2;
        map[LevelThree]                              = Level3;
        map[LevelThree+Shift]                        = Level4;

        map[LevelFive]                               = Level5;
        map[LevelFive+Shift]                         = Level6;
        map[LevelFive+LevelThree]                    = Level3; // Ctgr+Altgr permet d'avoir des caractères indépendant de VerrNum
        map[LevelFive+LevelThree+Shift]              = Level4;

        map[NumLock]                                 = Level1;
        map[NumLock+Shift]                           = Level2;
        map[NumLock+LevelThree]                      = Level8; // avec VerrNum: un changement sur Altgr
        map[NumLock+LevelThree+Shift]                = Level4;

        map[NumLock+LevelFive]                       = Level5;
        map[NumLock+LevelFive+Shift]                 = Level7;
        map[NumLock+LevelFive+LevelThree]            = Level3;
        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt Base";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "X";
        level_name[Level6] = "X Shift";
        level_name[Level7] = "X Alt Base";
        level_name[Level8] = "X Shift Alt";
    };

qui en contrepartie réduit le nombre de niveaux utiles par touche (mais qui reste plus que 4).

Caractères spéciaux

Étant donné que la touche la plus fréquente pour l'accès aux caractères spéciaux, Altgr, est sur le pouce gauche, j'ai mis des caractères un peu plus fréquents sur la main droite, en tentant également de donner une certaine cohérance, en mettant () <> {} côte à côte, tous les signes mathématique %+=-* ensemble, et sur la main gauche, le reste: `@$#~\|&!?:" (certains de ces caractères ne sont plus en accès avec Altgr si VerrNum est activé). Certains caractères très fréquents à la fois en langue et en programmation comme .,/' sont mis en accès direct.

Je précise dans les schémas ci-dessous les caractères accessibles avec

rien maj

altgr altgr+maj

et ne précise pas ceux avec Ctgr ici (ils seront néanmoins précisé dans le code source plus bas).

Cela donne donc, sans VerrNum: on a deux fois l'accès aux chiffres, mais donnant des code différents: en accès direct ce sera KP_2, et en Altgr, 2, reconnus différemment dans certains logiciels.

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  5˘  ║ 4¯ │ 3~ │ 2´ │ 1` │Num │Supr│ │Inse│ ùÙ │ 0µ │ 9ˇ │ 8̉  │ 7̣  ║  6˙  ║ (maj+chiffre: touche morte)
 ║  5g  ║ 4h │ 3i │ 2j │ 1k │lock│    │ │rt  │  Ð │ 0p │ 9o │ 8n │ 7m ║  6l  ║
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  zZ  ║ èÈ │ éÉ │ pP │ '  │ yY ║Back║ ║Tabu║ bB │ cC │ mM │ lL │ fF ║  çÇ  ║
 ║  æÆ  ║ `′ │ @  │ $¶ │ #§ │ ¤· ║spa ║ ║lati║ ¤÷ │ +≠ │ =± │ -– │ *× ║  †‡  ║
 ╠══════╣────┼────┼────┼────┼────╢ce  ║ ║on  ╟────┼────┼────┼────┼────╠══════╣
 ║  êÊ  ║ oO │ aA │ iI │ uU │ hH ╠════╣ ╠════╣ gG │ tT │ sS │ nN │ rR ║  ^¨  ║
 ║  œŒ  ║ ~√ │ \∞ │ |¦ │ &∂ │  ¡ ║    ║ ║    ║ %‰ │ (⟦ │ )⟧ │ <≤ │ >≥ ║  ^   ║
 ╠══════╣────┼────┼────┼────┼────╢ [« ║ ║ ]» ╟────┼────┼────┼────┼────╠══════╣
 ║Group ║ xX │ àÀ │ .° │ ,′ │ /″ ║    ║ ║    ║ qQ │ dD │ vV │ jJ │ wW ║  kK  ║
 ║      ║ !¡ │ ?¿ │ :‽ │ "⸮ │ ″¿ ║Hyp ║ ║Hyp ║ €ſ │ {ß │ }þ │ ;Þ │ əƏ ║  ijIJ  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │Imp │Vol │Vol │ ↑  │ ↓  │                     │ ←  │ →  │F11 │F13 │F14 │
   │Écr │Up  │Down│    │    │                     │    │    │full│Guake Copyq
   └────┴────┴────┴────┴────┘                     └────┴────┴screen───┴────┘
                            ┌────┬────┐ ┌────┬────┐
                            │←←← │→→→ │ │↑↑↑ │TT3 │
                            │Alt │Meh │ │Super    │
                       ┌────┼────┼────┤ ├────┼────┼────┐
                       │    │    │□tmux │↓↓↓ │    │    │
                       │ eE │Esc │Maj │ │Ctgr│Entr│Espace
                       │    │    ├────┤ ├────┤    │_   │
                       │Alt │Sup │TT1 │ │TT2 │Ctrl│    │
                       │gr  │er  │    │ │    │    │Maj │
                       └────┴────┴────┘ └────┴────┴────┘ 

Avec VerrNum:

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  -˘  ║ !¯ │ ?~ │ :´ │ "` │Num │Supr│ │Inse│ ùÙ │ (µ │ )ˇ │ <  │ >  ║  =˙  ║ (maj+chiffre: touche morte)
 ║  5g  ║ 4h │ 3i │ 2j │ ×k │lock│    │ │rt  │  Ð │ 0p │ 9o │ 8n │ 7m ║  6l  ║ (caractères spéciaux en accès direct)
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  zZ  ║ èÈ │ éÉ │ pP │ '  │ yY ║Back║ ║Tabu║ bB │ cC │ mM │ lL │ fF ║  çÇ  ║
 ║  æÆ  ║ `′ │ @  │ $¶ │ #§ │ ¤· ║spa ║ ║lati║ ¤÷ │ +≠ │ =± │ -– │ *× ║  †‡  ║
 ╠══════╣────┼────┼────┼────┼────╢ce  ║ ║on  ╟────┼────┼────┼────┼────╠══════╣
 ║  êÊ  ║ oO │ aA │ iI │ uU │ hH ╠════╣ ╠════╣ gG │ tT │ sS │ nN │ rR ║  ^¨  ║
 ║  œŒ  ║ ~√ │ \∞ │ |¦ │ &∂ │  ¡ ║    ║ ║    ║ %‰ │ ←⟦ │ ↑⟧ │ ↓≤ │ →≥ ║  ^   ║ (flèches en altgr)
 ╠══════╣────┼────┼────┼────┼────╢ [« ║ ║ ]» ╟────┼────┼────┼────┼────╠══════╣
 ║Group ║ xX │ àÀ │ .° │ ,′ │ /″ ║    ║ ║    ║ qQ │ dD │ vV │ jJ │ wW ║  kK  ║
 ║      ←←←¡ ↑↑↑¿ ↓↓↓‽ →→→⸮ │ ″¿ ║Hyp ║ ║Hyp ║ €ſ │ {ß │ }þ │ ;Þ │ əƏ ║  ijIJ  ║ (grands déplacements en altgr)
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │Imp │Vol │Vol │ ↑  │ ↓  │                     │ ←  │ →  │F11 │F13 │F14 │
   │Écr │Up  │Down│    │    │                     │    │    │full│Guake Copyq
   └────┴────┴────┴────┴────┘                     └────┴────┴screen───┴────┘
                            ┌────┬────┐ ┌────┬────┐
                            │←←← │→→→ │ │↑↑↑ │TT3 │
                            │Alt │Meh │ │Super    │
                       ┌────┼────┼────┤ ├────┼────┼────┐
                       │    │    │□tmux │↓↓↓ │    │    │
                       │ eE │Esc │Maj │ │Ctgr│Entr│Espace
                       │    │    ├────┤ ├────┤    │_   │
                       │Alt │Sup │TT1 │ │TT2 │Ctrl│    │
                       │gr  │er  │    │ │    │    │Maj │
                       └────┴────┴────┘ └────┴────┴────┘

Code source

Le code source ci-dessous est à mettre dans /usr/share/X11/xkb/symbols/oo (j'ai choisi le nom "oo" car il est court est ce nom n'était pas déjà pris), et d'entrer dans un terminal la commande `setxkbmap oo -variant ergo`:


xkb_symbols "ergo" {

 augment "level5"
 include "keypad(oss)"
 name[Group1]="french ergodox dual_num";

key.type[Group1] = "ONE_LEVEL";
key <RALT>{[ ISO_Level3_Shift ]};
key <RCTL>{[ ISO_Level5_Shift ]};
key <CAPS>{[ caps ]};

key.type[Group1] = "EIGHT_LEVEL_NUMERICAL_ERGODOX";// Chiffres, accès direct différent avec Altgr, certaines lettres en accès indirect pour le Mode 2 de l'ergodox.
key <KP1>{[ KP_1,    dead_grave, 1, k, a, a,   quotedbl ]};
key <KP2>{[ KP_2,    dead_acute, 2, j, a, a,      colon ]};
key <KP3>{[ KP_3,    dead_tilde, 3, i, a, a,   question ]};
key <KP4>{[ KP_4,   dead_macron, 4, h, a, a,     exclam ]};
key <KP5>{[ KP_5,    dead_breve, 5, g, a, a,      minus ]};
key <KP6>{[ KP_6, dead_abovedot, 6, l, a, a,       plus ]};
key <KP7>{[ KP_7, dead_belowdot, 7, m, a, a,    greater ]};
key <KP8>{[ KP_8,     dead_hook, 8, n, a, a,       less ]};
key <KP9>{[ KP_9,    dead_caron, 9, o, a, a, parenright ]};
key <KP0>{[ KP_0,    dead_greek, 0, p, a, a,  parenleft ]};

key.type[Group1] = "EIGHT_LEVEL";
key <TLDE>{[ dead_grave, a, grave ]};
key <AE11>{[ minus, underscore, hyphen, endash ]};
key <AE12>{[ equal, plus ]};
key <AE01>{[ U25A1, ISO_Level3_Lock, ISO_Next_Group, ISO_Level5_Lock, w, ISO_Level5_Lock, p, ISO_Level3_Lock ]};


key.type[Group1] = "EIGHT_LEVEL";// Lettres normales
key <AB01>{[         z,         Z,         ae,       AE, U2205 ]};
key <AE04>{[    egrave,    Egrave,      grave,    U2032, U2115 ]};
key <AE03>{[    eacute,    Eacute,         at,    U203B, U2124 ]};
key <AD10>{[         p,         P,     dollar,    U00B6, U211A ]};
key <AC11>{[apostrophe,  ellipsis, numbersign,  section, U211D ]};
key <AD06>{[         y,        Y, U00A4, periodcentered, U2102 ]};
// z Z æ Æ ∅
// è È ` ′ ℕ
// é É @ ※ ℤ
// p P $ ¶ ℚ
// ' … # § ℝ
// y Y t § ℂ

key <AE02>{[ecircumflex, Ecircumflex, oe, OE, U2201 ]};
key <AD09>{[ o,  O,  asciitilde,       U221A, U2229 ]};
key <AC01>{[ a,  A,   backslash,       U221E, U222A ]};
key <AD08>{[ i,  I,         bar,   brokenbar, U2203 ]};
key <AD07>{[ u,  U,   ampersand,       U2202, U2200 ]};
key <AC06>{[ h,  H,       U202F,  exclamdown, U2208 ]};
// ê Ê œ Œ ∁
// o O ~ √ ∩
// a A \ ∞ ∪
// i I | ¦ ∃
// u U & ∂ ∀
// h H   ¡ ∈

key.type[Group1] = "EIGHT_LEVEL_LETTER_ERGODOX";// Lettres, +autre fonction en VerrNum+Altgr
key <AB02>{[     x,      X,   exclam, exclamdown,  U1F12F, a, a, Home]};
key <AE05>{[agrave, Agrave, question, questiondown, U00A9, a, a,Prior]};
key <AB09>{[period, degree,    colon, U203D,        U00AE, a, a, Next]};
key <AB08>{[comma, minutes, quotedbl, U2E2E,        U2122, a, a,  End]};
key.type[Group1] = "EIGHT_LEVEL";//
key <AB10>{[slash, seconds,  seconds, questiondown, U2212 ]};
// x X ! ¡ 🄯
// à À ? ¿ ©
// . ° : ‽ ®
// , ′ " ⸮ ™
// / ″ ″ ¿ −

key <AE08>{[ ugrave, Ugrave, eth,       ETH ]};
key <AB05>{[ b, B, dead_currency,  division, U2248 ]};
key <AB03>{[ c, C,          plus,  notequal, U230A ]};
key <AB07>{[ m, M,         equal, plusminus, U230B ]};
key <AC09>{[ l, L,         minus,    endash, U2308 ]};
key <AC04>{[ f, F,      asterisk,     U00D7, U2309 ]};
key <AE07>{[ ccedilla, Ccedilla, dagger, doubledagger, U221D]};
// ù Ù ð Ð
// b B ¤ ÷ ≈
// c C + ≠ ⌊
// m M = ± ⌋
// l L - – ⌈
// f F * × ⌉
// ç Ç † ‡ ∝

key <AC05>{[ g, G,    percent, U2030, U27C2 ]};
key.type[Group1] = "EIGHT_LEVEL_LETTER_ERGODOX";//
key <AD05>{[ t, T,  parenleft, U27E6, U220F, a, a,  Left ]};
key <AC02>{[ s, S, parenright, U27E7, U2211, a, a,    Up ]};
key <AB06>{[ n, N,       less, U2264, U2228, a, a,  Down ]};
key <AD04>{[ r, R,    greater, U2265, U2227, a, a, Right ]};
//division
// g G % ‰ ⟂
// t T ( ⟦ ∏
// s S ) ⟧ ∑
// n N < ≤ ∨
// r R > ≥ ∧

key.type[Group1] = "EIGHT_LEVEL";//
key <AD01>{[ q, Q,   EuroSign,  U017F ]};
key <AC03>{[ d, D,  braceleft, ssharp ]};
key <AB04>{[ v, V, braceright,  thorn ]};
key <AC07>{[ j, J,  semicolon,  THORN ]};
key <AD02>{[ w, W,      schwa,  SCHWA ]};
key <AC08>{[ k, K,      U0133,  U0132, notsign ]};
// q Q € ſ
// d D { ß
// v V } þ
// j J ; Þ
// w W ə Ə
// k K ij IJ

key <AD03>{[ e, E, e, E ]};
key <AD11>{[ bracketleft,  guillemotleft,  a,  leftdoublequotemark]};
key <AD12>{[ bracketright, guillemotright, a, rightdoublequotemark]};
key <SPCE>{[ space, space, underscore, underscore ]};
key <AE06>{[ dead_circumflex, dead_diaeresis, asciicircum ]};
//key<RTRN>{[ m, M, Delete, Delete, percent]};
 

key <AC10>{[ semicolon, colon ]};
key <BKSL>{[ backslash, bar ]};

key <AE09>{[ ISO_Next_Group]};
key <AE10>{[ dead_grave]};
key <KPAD>{[ CodeInput ]};
key <KPEN>{[ e, b, c, d, e, f ]};
key <KPSU>{[ e]};
key <KPDL>{[ e]};
key <KPMU>{[ e]};

};

8 modes de clavier, partie traîtée par l'Ergodox

Ma configuration complète de l'Ergodox est disponible sur ce site: https://configure.ergodox-ez.com/layouts/5zNY/latest/0 indiquant à la fois l'apparence visuelle, le fichier .hex à mettre sur le clavier, et le code source pour ceux qui souhaitent en faire une version améliorée (sachant que c'est aussi possible sur le site d'ergodox ez).

Le clavier Ergodox a l'avantage d'être programmable, c'est à dire que certaines fonctions (la position des touches mais pas que) sont gérées en dehors de l'ordinateur. En résumé, j'utilise:

Mode 0: lettres. C'est le mode que j'utilise le plus souvent, pour du texte, pour divers racourcis clavier, une partie du temps en programmation.

Mode 1: maths. Contient les chiffres TOUJOURS en accès direct (que verr num soit activé ou pas), tous les caractères spéciaux ASCII utiles en programmation, les 6 premières lettres en accès direct (pour l'hexadécimal), et 10 lettres de plus en majuscule.

Mode 2: souris. Je n'ai plus besoin d'une souris physique, ce mode peut diriger le pointeur de la souris, scroller, cliquer comme une souris. Il y a aussi de nombreux racourcis clavier faciles d'accès dessus servant notamment pour la navigation sur internet (changer d'onglet, fermet/ouvrir/recharger un onglet… ), également utiles sur d'autres logiciels une fois ceux ci bien configurés.

Mode 3 à 7: spéciaux / pour une main sur le clavier et une sur la souris / pour deux mains sur le clavier dont une émulant la souris et l'autre tapant des lettres:

Mode 3: spécial. Contient les touches F1 à F24 pour des fonctions supplémentaires, tous les modifieurs, ou plusieurs en une touche, d'autres touches absentes des autres modes, et un accès à tous les modes sauf le 8 (servant aux lettres rares).

Mode 4: chiffres+souris. La main gauche contient tous les chiffres, et plusieurs fonctions dont on peut avoir besoin si on tient une vraie souris de l'autre main (sauf certains comme le changement d'onglet que je peux déjà faire soit avec ma souris soit avec le clavier en mode souris), et la main droite contient un condensé des fonctions les plus utiles des deux mains du mode 2.

Transitions

Entre les modes 0 1 et 2, les transitions se font avec les touches des pouces, situées les plus en bas. Gauche: 0->1 1->0 2->1 Droite: 0->2 2->0 1->2 Ce choix donne un rôle prédominant au 0 (d'ailleurs, les touches sont marquées TT sur le site depuis ce mode, c'est à dire qu'en gardant………)

Pour aller au mode 3 (qui donne accès à d'autres), on appuie sur une autre touche du pouce droit depuis le mode 0.

Entre les modes 4, 5, 6, il y a également deux touches permettant d'aller de l'un à l'autre. Ces modes ont chacun une composante par main, parmi [souris] [chiffres] [lettres fréquentes], de manière à ce que chaque main puisse avoir n'importe laquelle de ces composantes, et que dans chacun de ces modes, les deux mains aient un rôle différent. Le fait d'appuyer sur la touche de transition sur la main A va assigner à la main A l'ancien rôle de la main B, et à la main B le troisième rôle, qui n'était à aucune main avant (c'est dans l'idée que ce soit la main B qui fasse une action, ainsi, on évite d'utiliser deux fois la même main). 4: [chiffres->6] [souris->5] 5: [lettres->4] [chiffres->6] 6: [souris->5] [lettres->4]


Par ailleurs, les modes [lettres] 5 et 6, ont un OSL (transition ne durant qu'une lettre) vers le mode 7 (lettres rares), les modes [chiffres] 4 et 5 ont un TO7 permettant d'entrer éventuellement plusieurs lettres rares d'affilée (bien que ce besoin soit rare), et le mode 7 permet de retourner (TO) vers le mode 0 (normal).

L'idée étant à la fois de chercher une forme de cohérence entre les transitions, et trouver un juste milieu quant à leur quantité (trop de transition serait au détriment d'autres touches utiles, et trop peu rendrait le changement de mode long et désagréable).

Mode 0: Normal

C'est de ce mode dont je parle la plupart du temps au dessus, c'est celui qui permet d'écrire le plus vite en français. Sa principale particularité est d'avoir des touches à double fonction sur les pouces et sur les "[" "]" accessibles avec les index. La plupart des caractères sont accessibles, sauf VerrNum qui se trouve dans le mode 1, ou certaines combinaisons de touches nécessitant Ctrl/Alt + des flèches, ne sont pas faciles à faire, nécessitant parfois d'appuyer sur deux touches à la fois avec le même pouce (par exemple Ctrl+PageUp pour changer d'onglet actif dans la plupart des navigateurs web), celle-ci sont donc présentes dans le mode 2 pour la plupart, et quelques autres dans le mode 1.

Mode 1: Maths

Dans ce mode, les chiffres sont toujours en accès direct, indépendemment de l'état de VerrNum. En dessous, se situent les six premières lettres de l'alphabet, pour écrire de l'hexadécimal. Tous les caractères spéciaux ASCII sont également en accès direct, et leur position est indépendante de l'état de VerrNum, cela permet donc d'effectuer une opération mathématique facilement en restant dans ce mode. Il arrive que dans un langage de programmation il y ait majoritairement ces caractères, mais aussi quelques autres lettres. Dans ce cas, la plupart de lettres sont accessibles avec Maj+chiffre (encore une fois, quel que soit l'état de VerrNum, qui n'intervient pour ainsi dire jamais dans ce mode).

Certaines autres combinaisons de touches comme Ctrl+gauche/droite/suppr/backspace sont en accès direct (il suffit d'appuyer sur UNE touche pour effectuer ces combinaisons de normalemet plusieurs touches, c'est l'une des possibilités qu'offre les claviers programmables tels que l'Ergodox. C'est ce dont je me sers pour pouvoir taper les chiffres indépendemment de VerrNum. Je ne me sers de cette possibilité nulle part dans le mode 1_normal).

 ┌─────┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬─────┐
 │  ;  │ % │ @ │ $ │ # │ { │Supr │Ins│ } │ & │ | │ \ │ ~ │  "  │
 ├─────┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼─────┤
 │  `  │ < │ > │ ( │ ) │ . │   │ │   │ ' │ + │ = │ - │ * │  ^  │ ( ` et ^ sont des touches mortes sur cette ligne)
 ├─────┼───┼───┼───┼───┼───┤Bks│ │Tab├───┼───┼───┼───┼───┼─────┤
 │  `  │ 4 │ 3 │ 2 │ 1 │ , ├───┤ ├───┤C← │ 0 │ 9 │ 8 │ 7 │  ^  │ ( ` et ^ sont des caractères sur cette ligne)
 ├─────┼───┼───┼───┼───┼───┤   │ │   ├───┼───┼───┼───┼───┼─────┤
 │  _  │ c │ b │ a │ 5 │ / │ [ │ │ ] │C→ │ 6 │ f │ e │ d │  ?  │
 └─┬───┼───┼───┼───┼───┼───┴───┘ └───┴───┼───┼───┼───┼───┼───┬─┘
   │Imp│ s+│ s-│ ↑ │ ↓ │                 │ ← │ → │F11│F13│F14│  (cette ligne est comme sur les modes 0 et 2)
   └───┴───┴───┴───┴───┘                 └───┴───┴───┴───┴───┘  
                       ┌───┬───┐ ┌───┬───┐                      
                       │ ! │ : │ │Num│Cap│                      
                   ┌───┼───┼───┤ ├───┼───┼───┐                  
                   │   │   │tmux │ x │sup│bksp   (les deux dernières touches du pouce droit sont faites avec             
                   │Esp│Ent├───┤ ├───┤lig│lig│   ctrl+maj+suppr/backspace, et servent à supprimer respectivement
                   │ace│rée│TO0│ │TO2│ne │ne │   jusqu'à la fin, et jusqu'au début de la ligne sur plusieurs logiciels)
                   └───┴───┴───┘ └───┴───┴───┘    

Avec maj+chiffres, on obtient ici les 10 lettres allant de G à P, ce qui, avec le X fait un total de 17 lettres dont 7 en accès direct. Plusieurs touches des pouces sont à double fonction (j'exclu des doubles fonctions la touche altgr puisqu'elle est déjà appuyée avec la plupart des lettres ici pour avoir accès aux caractères spéciaux et aux chiffres).

Le pouce droit permettant des raccourcis clavier pour supprimer une ligne entière, c'est sur le gauche que sont les touches espace et entrée.

Beaucoup de caractères spéciaux présents ici suivent une logique proche de celle du mode 1 pour les rendre plus simples à retenir, tout en mettant les plus fréquents (fréquents dans cet usage, pas quand on tape du texte, c'est pourquoi le point d'interrogation, par exemple, est loin d'être la touche la plus simple à utiliser) à des emplacements faciles d'accès.

Mode 2: Souris

C'est une autre possibilité que j'aime beaucoup sur l'Ergodox: il est possible de diriger le pointeur de la souris directement à partir du clavier, ainsi que de cliquer ou d'émuler la molette de la souris (ou même une molette horizontale, moins souvent présete sur les souris). L'un de mes objectifs étant d'éviter les transitions trop fréquentes entre les différents modes, celui-ci contient plusieurs actions que l'on risque de faire pendant l'usage de la souris: la souris me servais surtout pour la navigation web (pour écrire du texte, j'utilise Vim, et maintenant NeoVim, où tout peut se faire au clavier, et sans perte de temps bien au contraire), donc tout ce qui concerne les onglets (ouvrir/fermer/recharger/afficher un autre onglet) ou les touches F1 … F12 que j'utilise moins dans un terminal.

Voici les principales fonctions que fourni ce mode

Main gauche:

-Diriger le pointeur de la souris. -Afficher un autre onglet. -Revenir en avant/arrière dans l'historique, ou réouvrir le dernier onglet fermé (Ctrl+Maj+T). -Changer de fenêtre ou de bureau virtuel (configurés pour le gestionnaire de bureau I3WM surtout). - (index gauche, ligne du bord) Tout sélectionner, copier, replacer le pointeur de la souris au centre (script utilisant xdotool).

Pouce gauche:

-Les 3 principaux clics. -Aller au mode 1.

Main droite:

-Molette/scroller, dans 4 directions -Focus parent/child pour I3WM (la structure de données contenant les fenêtres présentes est un arbre, cela permet donc de sélectionner plusieurs fenêtres d'un coup, et permet parfois de changer de fenêtre focalisée en gardant le même affichage lorsque plusieurs fenêtres sont visibles en même temps à l'écran). -Ouvrir/recharger/fermer un onglet (+ le raccourci Alt+Home, permettant de faire une nouvelle recherche dans l'onglet courant). -Coller - (index droit, ligne du bord) Modifier la vitesse de déplacement de la souris (je m'en sers peu, en général la vitesse par défaut me convient).

Pouce droit:

-Zoom -Suppr/Enter/Backspace. -Retourner au mode 0.

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  F1  ║ F2 │ F3 │ F4 │ F5 │ F6 │tout│ │acc1│ F7 │ F8 │ F9 │F10 │↑↑↑ ║ F12  ║ (4 "dual function keys" de chaque côté sur cette ligne)
 ║      ║    │maj │ctrl│alt │SCMD│sélect│    │SCMD│alt │ctrl│maj │    ║      ║ (F11 n'est pas représenté ici car déjà sur la ligne du bas)
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║↑fenêt║←bur│→bur│↑sou│←fen│→fen║copi║ ║    ║ongl│rech│↑scr│alt │↓↓↓ ║web   ║
 ║ re   ║ eau│ eau│ ris│être│être║er  ║ ║acc0║et +│arge│ oll│home│    ║précédant
 ╠══════╣────┼────┼────┼────┼────╢Cins║ ║    ╟────┼────┼────┼────┼────╠══════╣
 ║↓fenêt║A←  │←sou│↓sou│→sou│←ong╠════╣ ╠════╣coll│←scr│↓scr│→scr│C↑  ║web   ║ (déplacer la souris ou scroller se fait surtout avec
 ║ re   ║    │ ris│ ris│ ris│ let║souris║    ║er  │ oll│ oll│ oll│    ║suivant  la ligne du milieu)
 ╠══════╣────┼────┼────┼────┼────╢au  ║ ║acc2╟────┼────┼────┼────┼────╠══════╣
 ║ctrl+ ║A→  │ E  │Tab │Esc │→ong║centre║    ║ongl│espa│chil│pare│C↓  ║ alt  ║
 ║maj+T ║    │    │    │    │ let║    ║ ║    ║et -│ce  │d   │nt  │    ║ end  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │impr│son↑│son↓│↑   │↓   │                     │←   │→   │F11 │F13 │F14 │  
   │écr │    │    │    │    │                     │    │    │full│gua │copy│  
   └────┴────┴────┴────┴────┘                     └────┴────┴scr─┴ke──┴q───┘  
                            ┌────┬────┐ ┌────┬────┐                           
                            │←←← │→→→ │ │Supr│back│                           
                            super│meh │ │    │space                           
                       ┌────┼────┼────┤ ├────┼────┼────┐                      
                       │    │    │clic│ │Ent │zoom│zoom│                      
                       │clic│clic│droit │er  │-   │+   │                      
                       │gauc│mili├────┤ ├────┤    │    │                      
                       │he  │eu  │    │ │    │(ctr│(ctr│                      
                       │    │    │TO 1│ │TO 0│l -)│l =)│                      
                       └────┴────┴────┘ └────┴────┴────┘    

Mode 3: Spécial

La position des touches de celui-ci n'est pas définitive. Pour l'instant il me sert essentiellement à passer d'un mode à l'autre ou à faire des tests sur le fonctionnement de caracères rares, comme les touches F15 à F24, ou les caractères spéciaux du pavé numérique.

Mode 4: Chiffres+Souris

Les deux mains ont des fonctions très différentes: la gauche pour le mode "chiffres, une main" et la droite pour le mode "souris, une main". Ce mode peut donc soit être utilisé à une main (en utilisant les transitions avec les modes 5 et 6) sans rien faire de l'autre, soit pour avoir une souris dans la main droite et des touches complémentaires dans la gauche, soit des deux mains pour un logiciel nécessitant de fréquentes transitions entre clavier et souris (parfois plus rapide que d'effectuer de nombreux passages entre les modes 0 et 2).

La main gauche contient donc les chiffres, des racourcis clavier pour le zoom, pour annuler ou refaire une action, le scroll dans 4 directions (bien que le scroll vertical soit redondant avec celui de la souris, il ne fonctionne pas exactement pareil: le scroll du clavier fonctionne tant que la touche est appuyée, ce qui le rends plus agréable pour les grands déplacements, et moins agréable pour les petits déplacements, que le scroll de la souris), les 4 flèches, une transition vers le mode 6 (récupérer la souris sur la main gauche, supposant que la prochaine action sera faite par la main droite), le mode 7 (qui sers peu, mais je souhaitais au moins un moyen de taper plusieurs touches dans ce mode) et quelques autres fonctions plus rarement utilisées.

La main droite contient un condensé des fonctions plus utiles des deux mains du mode 2 (souris) et très peu de nouvelles fonctions. Il a donc des touches pour déplacer le pointeur, scroller mais seulement verticalement, les 3 clics, changer d'onglet, de fenêtre, bureau ou naviguer dans l'historique. Ce qu'il n'a pas et que le mode 2 a: zoom, scroll horizontal, touches F1 à F14, accès aux modes 0 et 1, flèches, d'autres fonctions moins souvent utiles, et l'accès à certaines fonctions est moins direct. Ce qu'il y a en plus: accès au mode 5 mettant les chiffres sur la main droite, fermer une fenêtre, lettres x y z (utiles pour certains logiciels tels que Blender).

apparence:

 ╔══════╗────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────╔══════╗
 ║  6   ║ 7  │ 8  │ 9  │ 0  │zoom│ CA │ │esc │←fen│→fen│←bur│→bur│ongl║alt   ║
 ║ Meh  ║    │    │    │SCMD│ +  │    │ │meh │être│être│ eau│ eau│et +║home  ║
 ╠══════╣────┼────┼────┼────┼────╔════╗ ╔════╗────┼────┼────┼────┼────╠══════╣
 ║  5   ║ 4  │ 3  │ 2  │ 1  │zoom║    ║ ║copi║←ong│→ong│↑sou│rech│ongl║fermer║
 ║Hyper ║    │    │    │Super -  ║ [  ║ ║er  ║ let│ let│ ris│arge│et -║fenêtre
 ╠══════╣────┼────┼────┼────┼────╢    ║ ║Cins╟────┼────┼────┼────┼────╠══════╣
 ║annule║←scr│↑scr│↓scr│→scr│↑↑↑ ╠════╣ ╠════╣↑scr│←sou│↓sou│→sou│ E  ║↑fen  ║
 ║Cz    ║ oll│ oll│ oll│ oll│    ║    ║ ║coll║ oll│ ris│ ris│ ris│    ║être  ║
 ╠══════╣────┼────┼────┼────┼────╢ ]  ║ ║er  ╟────┼────┼────┼────┼────╠══════╣
 ║refait║ ←  │ ↑  │ ↓  │ →  │↓↓↓ ║    ║ ║Sins║↓scr│entr│A←  │A→  │espa║↓fen  ║
 ║CMz   ║    │    │    │    │    ║    ║ ║    ║ oll│ée  │    │    │ce  ║être  ║
 ╚══════╝────┴────┼────┼────┼────╚════╝ ╚════╝────┼────┼────┼────┼────╚══════╝
   │ =  │ctgr│ \  │TO7 │TO6 │                     │TO5 │sris│son↓│son↑│impr│  
   │altgr    │    │    │    │                     │    │centr    │    │écr │  
   └────┴────┴────┴────┴────┘                     └────┴────┴────┴────┴────┘  
                            ┌────┬────┐ ┌────┬────┐                     
                            │ /  │ CS │ │ Y  │ X  │                           
                            │alt │    │ │alt │ctrl│                           
                       ┌────┼────┼────┤ ├────┼────┼────┐                      
                       │    │    │ -  │ │ Z  │    │    │                      
                       │ .  │entr│super │maj │clic│clic│                      
                       │    │ée  ├────┤ ├────┤mili│gauc│                      
                       │    │    │ .  │ │clic│eu  │he  │                      
                       │ctrl│maj │    │ │droit    │    │                      
                       └────┴────┴────┘ └────┴────┴────┘          

Mode 5: Lettres+Chiffres

Le sous mode [chiffres] est le même que celui de la main gauche du mode 4 (mais symétrisé bien entendu), et le mode [lettres] contient un condensé des lettres les plus fréquentes du mode 0, c'est à dire toutes les lettres françaises les plus fréquentes, soit celles des pouces, de la ligne du milieu du mode normal, et quelques autres. Le pouce permet des modifieurs, l'auriculaire et l'index permettent surtout de faire plusieurs modifieurs sur une seule touche. Le pouce sers également à aller au mode 7 quand il y a des lettres rares à taper (environ 10% du temps). Ce mode peut donc servir soit à taper un court texte (quelques mots ou commandes) d'une main, soit à faire des raccourcis clavier (et même avec Ctrl+Alt, Ctrl+Maj, Alt+Maj si nécessaire).

Voici la disposition pour la main gauche: la main droite étant semblable à la main gauche du mode 4. Sur l'auriculaire, CA CM AM signifient [ctrl+alt] [ctrl+maj] [alt+maj], deux modifieurs en une touche.

 ┌─────┬───┬───┬───┬───┬───┬───┐
 │ →→→ │F5 │F4 │F3 │F2 │F1 │enter
 ├─────┼───┼───┼───┼───┼───┼───┤
 │ CA  │ O │ N │ U │ S │ D │   │
 ├─────┼───┼───┼───┼───┼───┤tab│
 │ CM  │ A │ R │ I │ T │ H ├───┤
 ├─────┼───┼───┼───┼───┼───┤   │
 │ AM  │ H │ M │ P │ C │ G │bks│
 └─┬───┼───┼───┼───┼───┼───┴───┘
   │Supr B │ L │ F │TO4│      
   └───┴───┴───┴───┴───┘   
                       ┌───┬───┐
                       │F13│F11│
                   ┌───┼───┼───┤
                   │   │   │caps
                   │ E │OSL├───┤
                   │   │ 7 │ ' │
                   └───┴───┴───┘

Mode 6: Souris+Lettres

La main gauche contrôle la souris (comme la droite du mode 4), et la main droite contrôle les lettres les plus fréquentes (comme la gauche du mode 5). C'est le mode qui a le plus de chances de servir pour un usage à deux mains, par exemple dans un jeu nécessitant à la fois l'usage fréquent de la souris, et permettant de nombreux raccourcis clavier. Cela peut aussi concerner certains logiciels comme Blender (pour le dessin 3D) où les actions au clavier sont également très fréquentes.

Mode 7: Caractères rares

Ce mode est semblable au sous mode [lettres] au niveau de la forme et des modifieurs. Contrairement aux modes 4 à 6, ici les deux mains ont le même rôle, la seule différence est le TO4 de la main gauche devenant TO5 à droite: dans les deux cas cela sers à retourner au mode [chiffres] de la main correspondante.

 ┌─────┬───┬───┬───┬───┬───┬───┐
 │ ←←← │F10│F9 │F8 │F7 │F6 │ ; │
 ├─────┼───┼───┼───┼───┼───┼───┤
 │ CA  │ Ç │ K │ J │ W │ \ │tmux
 ├─────┼───┼───┼───┼───┼───┤ □ │
 │ CM  │ Q │ V │TO4│ É │ ( ├───┤
 ├─────┼───┼───┼───┼───┼───┤   │
 │ AM  │ Z │ Y │ X │ , │ ) │ Ù │
 └─┬───┼───┼───┼───┼───┼───┴───┘
   │ins│ Ê │ È │ À │ ^ │      
   └───┴───┴───┴───┴───┘   
                       ┌───┬───┐
                       │F15│F12│
                   ┌───┼───┼───┤
                   │   │   │ ` │
                   │TO0│   ├───┤
                   │   │   │F14│
                   └───┴───┴───┘

Code source

config.h :

/*
  Set any config.h overrides for your specific keymap here.
  See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
*/
#undef DEBOUNCE
#define DEBOUNCE 30

#undef TAPPING_TERM
#define TAPPING_TERM 152

#define RETRO_TAPPING

#undef ONESHOT_TIMEOUT
#define ONESHOT_TIMEOUT 1000

#define PERMISSIVE_HOLD

#undef MOUSEKEY_INTERVAL
#define MOUSEKEY_INTERVAL 16

#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 40

#undef MOUSEKEY_MAX_SPEED
#define MOUSEKEY_MAX_SPEED 4

#undef MOUSEKEY_TIME_TO_MAX
#define MOUSEKEY_TIME_TO_MAX 40

#undef MOUSEKEY_WHEEL_MAX_SPEED
#define MOUSEKEY_WHEEL_MAX_SPEED 13

#undef MOUSEKEY_WHEEL_TIME_TO_MAX
#define MOUSEKEY_WHEEL_TIME_TO_MAX 60

rules.mk :

# Set any rules.mk overrides for your specific keymap here.
# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
COMMAND_ENABLE = no
RGBLIGHT_ENABLE = no

keymap.c :

#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "version.h"
#include "keymap_german.h"
#include "keymap_nordic.h"
#include "keymap_french.h"
#include "keymap_spanish.h"

enum custom_keycodes {
  PLACEHOLDER = SAFE_RANGE, // can always be here
  EPRM,
  RGB_SLD,
  
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT_ergodox(KC_KP_5,KC_KP_4,KC_KP_3,KC_KP_2,KC_KP_1,KC_NUMLOCK,KC_DELETE,KC_Z,KC_4,KC_3,KC_P,KC_QUOTE,KC_Y,KC_BSPACE,KC_2,KC_O,KC_A,KC_I,KC_U,KC_H,KC_9,KC_X,KC_5,KC_DOT,KC_COMMA,KC_SLASH,MT(MOD_HYPR, KC_LBRACKET),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,LALT_T(KC_HOME),MT(MOD_MEH, KC_END),RSFT_T(KC_1),RALT_T(KC_E),LGUI_T(KC_ESCAPE),TT(1),KC_INSERT,KC_8,KC_KP_0,KC_KP_9,KC_KP_8,KC_KP_7,KC_KP_6,KC_TAB,KC_B,KC_C,KC_M,KC_L,KC_F,KC_7,KC_G,KC_T,KC_S,KC_N,KC_R,KC_6,MT(MOD_HYPR, KC_RBRACKET),KC_Q,KC_D,KC_V,KC_J,KC_W,KC_K,KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,RGUI_T(KC_PGUP),TT(3),RCTL_T(KC_PGDOWN),TT(2),LCTL_T(KC_ENTER),LSFT_T(KC_SPACE)),

  [1] = LAYOUT_ergodox(RALT(KC_J),RALT(KC_G),RALT(KC_3),RALT(KC_P),RALT(KC_QUOTE),RALT(KC_D),KC_DELETE,KC_GRAVE,RALT(RCTL(KC_N)),RALT(RCTL(KC_R)),RALT(RCTL(KC_T)),RALT(RCTL(KC_S)),KC_DOT,KC_BSPACE,RALT(KC_GRAVE),RALT(KC_KP_4),RALT(KC_KP_3),RALT(KC_KP_2),RALT(KC_KP_1),KC_COMMA,RALT(KC_SPACE),KC_C,KC_B,KC_A,RALT(KC_KP_5),KC_SLASH,MT(MOD_HYPR, KC_LBRACKET),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,RALT(RCTL(KC_DOT)),RALT(RCTL(KC_X)),LGUI_T(KC_1),LSFT_T(KC_SPACE),LCTL_T(KC_ENTER),TO(0),KC_INSERT,RALT(KC_V),RALT(KC_U),RALT(KC_I),RALT(KC_A),RALT(KC_O),RALT(RCTL(KC_COMMA)),KC_TAB,KC_QUOTE,RALT(KC_C),RALT(KC_M),RALT(KC_L),RALT(KC_F),KC_6,LCTL(KC_LEFT),RALT(KC_KP_0),RALT(KC_KP_9),RALT(KC_KP_8),RALT(KC_KP_7),RALT(KC_6),MT(MOD_HYPR, KC_RBRACKET),LCTL(KC_RIGHT),RALT(KC_KP_6),KC_F,KC_E,KC_D,RALT(RCTL(KC_5)),KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,KC_NUMLOCK,LALT_T(KC_CAPSLOCK),RCTL_T(KC_X),TO(2),LCTL(LSFT(KC_DELETE)),LCTL(LSFT(KC_BSPACE))),

  [2] = LAYOUT_ergodox(KC_F1,KC_F2,LSFT_T(KC_F3),LCTL_T(KC_F4),LALT_T(KC_F5),SCMD_T(KC_F6),LCTL(KC_A),LGUI(KC_T),LGUI(KC_3),LGUI(KC_P),KC_MS_UP,LGUI(KC_S),LGUI(KC_N),LCTL(KC_INSERT),LGUI(KC_R),LALT(KC_LEFT),KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,LCTL(KC_PGUP),LCTL(LSFT(KC_T)),LALT(KC_RIGHT),KC_E,KC_TAB,KC_ESCAPE,LCTL(KC_PGDOWN),LGUI(KC_E),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_UP,KC_DOWN,LGUI_T(KC_HOME),MT(MOD_MEH, KC_END),KC_MS_BTN2,KC_MS_BTN1,KC_MS_BTN3,TO(1),KC_MS_ACCEL1,SCMD_T(KC_F7),LALT_T(KC_F8),LCTL_T(KC_F9),LSFT_T(KC_F10),KC_PGUP,KC_F12,KC_MS_ACCEL0,LCTL(KC_T),LCTL(KC_R),KC_MS_WH_UP,LALT(KC_HOME),KC_PGDOWN,KC_WWW_BACK,LSFT(KC_INSERT),KC_MS_WH_LEFT,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,LCTL(KC_UP),KC_WWW_FORWARD,KC_MS_ACCEL2,LCTL(KC_W),KC_SPACE,LGUI(KC_4),LGUI(KC_QUOTE),LCTL(KC_DOWN),LALT(KC_END),KC_LEFT,KC_RIGHT,KC_F11,KC_F13,KC_F14,KC_DELETE,KC_BSPACE,KC_ENTER,TO(0),LCTL(KC_MINUS),LCTL(KC_EQUAL)),

  [3] = LAYOUT_ergodox(KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_LGUI,KC_F13,KC_F14,KC_F15,KC_F16,KC_F17,KC_F18,LALT(LCTL(KC_LGUI)),KC_SCROLLLOCK,KC_KP_DOT,KC_LGUI,KC_LSHIFT,LSFT(KC_LGUI),LSFT(KC_LALT),KC_TRANSPARENT,KC_KP_ENTER,KC_KP_ASTERISK,KC_KP_PLUS,KC_HYPR,LSFT(KC_LCTRL),KC_MEH,KC_TRANSPARENT,KC_KP_MINUS,KC_KP_COMMA,KC_KP_SLASH,KC_KP_0,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,TO(0),TO(1),TO(2),KC_RGUI,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,LALT(LSFT(KC_LGUI)),KC_F19,KC_F20,KC_F21,KC_F22,KC_F23,KC_F24,LCTL(KC_LGUI),LCTL(KC_LALT),KC_LCTRL,KC_LALT,KC_APPLICATION,EPRM,LCTL(LSFT(KC_LGUI)),LALT(KC_LGUI),KC_HYPR,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_SYSTEM_SLEEP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_NO,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,TO(4),TO(5),TO(6)),

  [4] = LAYOUT_ergodox(MT(MOD_MEH, KC_KP_6),KC_KP_7,KC_KP_8,KC_KP_9,SCMD_T(KC_KP_0),LCTL(KC_EQUAL),LCTL(KC_LALT),MT(MOD_HYPR, KC_KP_5),KC_KP_4,KC_KP_3,KC_KP_2,RGUI_T(KC_KP_1),LCTL(KC_MINUS),KC_LBRACKET,LCTL(KC_Z),KC_MS_WH_LEFT,KC_MS_WH_LEFT,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,KC_PGUP,LCTL(LSFT(KC_Z)),KC_LEFT,KC_UP,KC_DOWN,KC_RIGHT,KC_PGDOWN,KC_RBRACKET,RALT_T(KC_EQUAL),RCTL_T(KC_NO),KC_NONUS_BSLASH,TO(7),TO(6),LALT_T(KC_SLASH),LCTL(KC_LSHIFT),LGUI_T(KC_MINUS),LCTL_T(KC_DOT),LSFT_T(KC_ENTER),KC_KP_DOT,LCTL(KC_T),LGUI(KC_S),LGUI(KC_N),LGUI(KC_3),LGUI(KC_P),LCTL(KC_T),LALT(KC_HOME),LCTL(KC_INSERT),LCTL(KC_PGUP),LCTL(KC_PGDOWN),KC_MS_UP,LCTL(KC_R),LCTL(KC_W),LGUI(KC_G),KC_MS_WH_UP,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_E,LGUI(KC_T),LSFT(KC_INSERT),KC_MS_WH_DOWN,KC_KP_ENTER,LALT(KC_LEFT),LALT(KC_RIGHT),KC_SPACE,LGUI(KC_R),TO(5),LGUI(KC_E),KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_PSCREEN,LALT_T(KC_Y),LCTL_T(KC_X),LSFT_T(KC_Z),KC_MS_BTN2,KC_MS_BTN3,KC_MS_BTN1),

  [5] = LAYOUT_ergodox(KC_END,RGUI_T(KC_F5),KC_F4,KC_F3,RCTL_T(KC_F2),SCMD_T(KC_F1),MT(MOD_MEH, KC_ENTER),LCTL(KC_LALT),KC_O,KC_N,KC_U,KC_S,KC_D,LGUI_T(KC_TAB),LCTL(KC_LSHIFT),KC_A,KC_R,KC_I,KC_T,KC_SPACE,LALT(KC_LSHIFT),KC_H,KC_M,KC_P,KC_C,KC_G,MT(MOD_HYPR, KC_BSPACE),KC_DELETE,KC_B,KC_L,KC_F,TO(4),LALT_T(KC_F13),RALT_T(KC_F11),LSFT_T(KC_CAPSLOCK),KC_E,OSL(7),LCTL_T(KC_QUOTE),LCTL(KC_LALT),LCTL(KC_EQUAL),SCMD_T(KC_KP_0),KC_KP_9,KC_KP_8,KC_KP_7,MT(MOD_MEH, KC_KP_6),KC_LBRACKET,LCTL(KC_MINUS),RGUI_T(KC_KP_1),KC_KP_2,KC_KP_3,KC_KP_4,MT(MOD_HYPR, KC_KP_5),KC_PGUP,KC_MS_WH_LEFT,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_WH_RIGHT,LCTL(KC_Z),KC_RBRACKET,KC_PGDOWN,KC_LEFT,KC_UP,KC_DOWN,KC_RIGHT,LCTL(LSFT(KC_Z)),TO(6),TO(7),KC_NONUS_BSLASH,RCTL_T(KC_NO),RALT_T(KC_EQUAL),LCTL(KC_LSHIFT),LALT_T(KC_SLASH),LGUI_T(KC_MINUS),KC_KP_DOT,LSFT_T(KC_ENTER),LCTL_T(KC_DOT)),

  [6] = LAYOUT_ergodox(LALT(KC_HOME),LCTL(KC_T),LGUI(KC_3),LGUI(KC_P),LGUI(KC_S),LGUI(KC_N),MT(MOD_MEH, KC_ESCAPE),LGUI(KC_G),LCTL(KC_W),LCTL(KC_R),KC_MS_UP,LCTL(KC_PGUP),LCTL(KC_PGDOWN),LCTL(KC_INSERT),LGUI(KC_T),KC_E,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_MS_WH_UP,LGUI(KC_R),KC_SPACE,LALT(KC_LEFT),LALT(KC_RIGHT),KC_KP_ENTER,KC_MS_WH_DOWN,LSFT(KC_INSERT),KC_PSCREEN,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,LGUI(KC_E),TO(5),LCTL_T(KC_X),LALT_T(KC_Y),LSFT_T(KC_Z),KC_MS_BTN1,KC_MS_BTN3,KC_MS_BTN2,MT(MOD_MEH, KC_ENTER),SCMD_T(KC_F1),RCTL_T(KC_F2),KC_F3,KC_F4,RGUI_T(KC_F5),KC_END,LGUI_T(KC_TAB),KC_D,KC_S,KC_U,KC_N,KC_O,LCTL(KC_LALT),KC_SPACE,KC_T,KC_I,KC_R,KC_A,LCTL(KC_LSHIFT),MT(MOD_HYPR, KC_BSPACE),KC_G,KC_C,KC_P,KC_M,KC_H,LALT(KC_LSHIFT),TO(4),KC_F,KC_L,KC_B,KC_DELETE,RALT_T(KC_F11),LALT_T(KC_F13),LSFT_T(KC_CAPSLOCK),LCTL_T(KC_QUOTE),OSL(7),KC_E),

  [7] = LAYOUT_ergodox(KC_HOME,RGUI_T(KC_F10),KC_F9,KC_F8,RCTL_T(KC_F7),SCMD_T(KC_F6),MT(MOD_MEH, KC_SCOLON),LCTL(KC_LALT),KC_KP_7,KC_K,KC_J,KC_W,KC_BSLASH,LGUI_T(KC_1),LCTL(KC_LSHIFT),KC_Q,KC_V,TO(4),KC_3,RALT(RCTL(KC_T)),LALT(KC_LSHIFT),KC_Z,KC_Y,KC_X,KC_COMMA,RALT(RCTL(KC_S)),MT(MOD_HYPR, KC_8),KC_INSERT,KC_2,KC_4,KC_5,KC_6,LALT_T(KC_F15),RALT_T(KC_F12),LSFT_T(KC_GRAVE),TO(0),KC_TRANSPARENT,LCTL_T(KC_F14),MT(MOD_MEH, KC_SCOLON),SCMD_T(KC_F6),RCTL_T(KC_F7),KC_F8,KC_F9,RGUI_T(KC_F10),KC_HOME,LGUI_T(KC_1),KC_BSLASH,KC_W,KC_J,KC_K,KC_KP_7,LCTL(KC_LALT),RALT(RCTL(KC_T)),KC_3,TO(5),KC_V,KC_Q,LCTL(KC_LSHIFT),MT(MOD_HYPR, KC_8),RALT(RCTL(KC_S)),KC_COMMA,KC_X,KC_Y,KC_Z,LALT(KC_LSHIFT),KC_6,KC_5,KC_4,KC_2,KC_INSERT,RALT_T(KC_F12),LALT_T(KC_F15),LSFT_T(KC_GRAVE),LCTL_T(KC_F14),KC_TRANSPARENT,TO(0)),

};

bool suspended = false;
const uint16_t PROGMEM fn_actions[] = {
  [1] = ACTION_LAYER_TAP_TOGGLE(1)
};

// leaving this in place for compatibilty with old keymaps cloned and re-compiled.
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
      switch(id) {
        case 0:
        if (record->event.pressed) {
          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
        }
        break;
      }
    return MACRO_NONE;
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    // dynamically generate these.
    case EPRM:
      if (record->event.pressed) {
        eeconfig_init();
      }
      return false;
      break;
  }
  return true;
}

uint32_t layer_state_set_user(uint32_t state) {

    uint8_t layer = biton32(state);

    ergodox_board_led_off();
    ergodox_right_led_1_off();
    ergodox_right_led_2_off();
    ergodox_right_led_3_off();
    switch (layer) {
      case 1:
        ergodox_right_led_1_on();
        break;
      case 2:
        ergodox_right_led_2_on();
        break;
      case 3:
        ergodox_right_led_3_on();
        break;
      case 4:
        ergodox_right_led_1_on();
        ergodox_right_led_2_on();
        break;
      case 5:
        ergodox_right_led_1_on();
        ergodox_right_led_3_on();
        break;
      case 6:
        ergodox_right_led_2_on();
        ergodox_right_led_3_on();
        break;
      case 7:
        ergodox_right_led_1_on();
        ergodox_right_led_2_on();
        ergodox_right_led_3_on();
        break;
      default:
        break;
    }
    return state;

};

Compatibilité avec des logiciels

La plupart des logiciels sont par défaut prévus pour un usage d'un clavier QWERTY (éventuellement AZERTY), et/ou un usage intensif de la souris, ce qui peut s'avérer plus lent (le fait de devoir constamment déplacer un bras vers la souris et revenir, ou le fait de devoir cliquer dans plusieurs sous menus, ou viser la toute petite croix pour fermer une fenêtre https://fr.wikipedia.org/wiki/Loi_de_Fitts , sachant que cela reste rapide dans le cas ou la croix est dans un angle de l'écran cela reste raisonnable), à l'exception de l'écriture qui a été conçue avant les claviers (à quelques mots près), il est nécessaire d'adapter certains logiciels à la nouvelle position des lettres.

Heureusement, de nombreux logiciels permettent de changer les raccourcis clavier (parfois même au delà d'une simple permutation de lettres).

I3WM

I3WM est un gestionnaire de bureau prévu pour GNU/Linux et BSD, https://i3wm.org/docs/userguide.html . Il s'agit d'un "tiling window manager" https://en.wikipedia.org/wiki/Tiling_window_manager (une page wikipédia francophone existe sur le même sujet mais est peu remplie), c'est-à-dire que par défaut les fenêtres vont remplir la totalité de l'écran, que ce soit une fenêtre en plein écran ou un écran divisé en plusieurs parties, mais dans tous les cas, les fenêtres "tiled" sont à un instant quelconque, soit entièrement visibles, soit entièrement masquées, par opposition aux fenêtres "floating" (flottantes, c'est ce qu'on voit sur un ordinateur ayant une configuration plus classique), où chaque fenêtre peut être déplacée librement quitte à en recouvrir d'autres (cette notion est également envisageable dans I3WM mais n'est pas la plus recommandée).

Ce gestionnaire de bureau est très configurable, il est possible: -d'affecter à chaque raccourci clavier (une lettre, ou des modifieurs+une lettre par exemple [ctrl+super+x]) une fonction ou une suite de fonction (on peut rester sur une lettre = une commande, mais il est tout à fait permis d'avoir une commande pour "fermer une fenêtre + ouvrir un navigateur web + se déplacer vers la droite + agrandir la fenêtre courante" si cela a un sens pour son usage, ou d'exécuter des commandes shell). -de créer plusieurs modes (un peu comme ceux de Vim), et pour chaque mode, définir un fonctionnement différent des raccourcis clavier (par exemple faire un mode dans lequel les lettres servent à se déplacer et pas à écrire). -gérer l'affichage du titre des fenêtres, de la barre en haut/bas de l'écran, et d'autres fonctions.

Les raccourcis étant initialement faits pour QWERTY, voici les miens:

TODO