- disposition optimisée pour le français et l’anglais
-
-
- couche AltGr optionnelle, optimisée pour l’enchaînement des symboles de programmation
-
-
- conservation des raccourcis usuels :
- Ctrl-{Q,A,S,Z,X,V}
- (Ctrl-C est décalé, mais reste faisable d’une
- main)
-
-
- support de tous les caractères spéciaux utilisés en français
- (diacritiques, majuscules accentuées, lettres entrelacées, symboles de
- ponctuation…)
-
-
chiffres en accès direct
-
-
-
Installation
-
- Voir le dépôt GitHub
- pour les instructions d’installation.
-
-
-
Licence
-
- WTFPL
- – Do What the Fuck You Want to Public License.
-
-
-
Optimisation
-
- L’optimisation d’une disposition de clavier francophone comprend deux
- difficultés :
-
-
-
- le placement des lettres, selon une méthode de type Dvorak ou Colemak ;
-
-
- la gestion des caractères accentués — accès direct, AltGr,
- touche morte ?
-
-
-
- TL;PL: Ergo‑L est une
- disposition optimisée façon Colemak /
- Workman, utilisant une touche
- morte de type Lafayette pour
- les caractères accentués.
-
-
-
- Ergo‑L est meilleur que Bépo pour le Français, meilleur que Dvorak pour
- l’Anglais et meilleur que Qwerty pour la programmation !
-
- Il y a eu plusieurs projets anglo-saxons d’optimisation du clavier, tous
- basés sur un réarrangement des touches du Qwerty visant à :
-
-
-
Maximiser l’alternance des mains lors de la frappe ;
-
Répartir les touches de façon équitable sur les deux mains ;
-
- Utiliser en priorité la rangée centrale, puis haute, puis inférieure ;
-
-
- En cas de non-alternance des mains sur un digramme, diriger la frappe
- vers le centre du clavier ce qui sollicite davantage les doigts les plus
- habiles à savoir l’index et le majeur.
-
-
-
- Le plus connu et le plus ancien (finalisé en 1932) est
- Dvorak.
- Particularité : toutes les voyelles sont sous la main gauche. Mais avec la
- généralisation de la bureautique, les raccourcis claviers
- Ctrl-{Q,A,S,Z,X,C,V}
- sont devenus indispensables et les projets récents d’optimisation de
- disposition clavier ont cherché à les préserver.
-
-
-
- C’est notamment le cas de Colemak,
- qui revendique une meilleure efficacité que Dvorak tout en préservant
- les raccourcis usuels — sauf Ctrl-S, décalé d’une
- colonne.
-
-
- La disposition Workman vise à
- améliorer Colemak, notamment en limitant les mouvements horizontaux des
- doigts. Là encore, les raccourcis sont préservés — sauf
- Ctrl-C,V, décalés d’une colonne.
-
-
-
- Ergo‑L reprend les principes de Colemak et Workman et concerve la plupart
- des raccourcis usuels. Ctrl-C est déplacé mais reste
- accessible d’une main. Nous pensons que le gain en ergonomie justifie ce
- décalage.
-
-
-
Polyvalence français / anglais
-
- Les dispositions Dvorak, Colemak et Workman sont optimisées pour l’anglais
- exclusivement. Les dispositions francophones
- Dvorak-fr et
- Bépo appliquent au français le principe de
- Dvorak (donc sans support des raccourcis claviers usuels), quitte à
- devenir pénalisantes pour l’anglais.
-
-
- Pourtant, à une exception près, les 9 lettres les plus fréquentes sont les
- mêmes en français (ESANITRUO) et en anglais (ETAOHNISR) :
-
-
-
-
-
E
-
S
-
A
-
N
-
I
-
T
-
R
-
U
-
O
-
H
-
-
-
fr
-
14.44 %
-
7.25 %
-
7.14 %
-
6.78 %
-
6.74 %
-
6.74 %
-
6.52 %
-
6.16 %
-
5.29 %
-
1.06 %
-
-
-
en
-
11.72 %
-
6.15 %
-
7.97 %
-
6.63 %
-
6.50 %
-
9.04 %
-
5.33 %
-
2.68 %
-
7.85 %
-
6.71 %
-
-
-
- Ergo‑L place donc ces lettres aux emplacements les plus confortables
- (suivant les principes de Workman) et fait en sorte qu’aucun enchaînement
- fréquent en français ou en anglais ne soit rédhibitoire. On obtient donc
- une efficacité supérieure à Bépo ou Dvorak-fr, sans sacrifier la
- programmation ou l’anglais.
-
-
-
Gestion des accents
-
- Azerty, Dvorak-fr et
- Bépo gèrent les caractères accentués de
- façon assez similaire :
-
-
-
- certaines lettres comme ÉÈÀÇ sont accessibles directement ;
-
-
- l’accent circonflexe et le tréma sont faits avec une touche morte (le
- tréma nécessitant en plusAltGr avec Bépo) ;
-
-
- certains caractères nécessitent la touche AltGr, ce qui
- complique les enchaînements : Œ, Æ, points de suspension… et même Ù pour
- Bépo.
-
-
-
C’est la source de deux défauts majeurs dont Qwerty est exempt :
-
-
- les chiffres nécessitent Shift, ce qui rend fastidieuse la
- saisie de nombres ;
-
-
- certaines lettres ne sont pas accessibles dans la zone confortable des
- 3×10 touches sous les chiffres, ce qui impose des extensions de doigt :
- ÉÈÀÇ pour Azerty,
- ÈZW pour Dvorak-fr, MZWÇÊ pour Bépo.
-
-
-
- Pour éviter cela, Ergo‑L utilise une touche morte de type
- Qwerty-Lafayette pour tous les
- caractères accentués et ponctuations spéciales. Cela occasionne environ
- 4 % de frappes supplémentaires pour un texte francophone, ce qui est
- négligeable comparé au gain de confort que cela apporte. La touche
- AltGr peut ainsi être dédiée aux seuls symboles de
- programmation.
-
-
-
Principes d’ergonomie
-
-
Une approche moderne de la saisie de texte
-
- Il n’y a pas de lettres à l’extérieur des 3×10 touches du centre pour
- éviter le manque de confort et de précision causé par les extensions. Cela
- implique que :
-
-
-
- Les lettres accentuées et ponctuations spéciales soient obtenues avec
- une touche morte :
-
-
- C’est moins intuitif qu’une couche AltGr, mais favorise
- les enchaînements et l’apprentissage en mémoire musculaire.
-
-
- La touche morte ajoute aux voyelles qui suivent un accent grave (ou
- les transforme en leur diacritique principal si elles n’ont pas
- d’accent grave).
-
-
- Les accents circonflexes se font avec une touche à côté de la touche
- de la voyelle, et les trémas avec shift + touche morte, puis la
- voyelle. Ce n’est pas du tout intuitif, mais ça permet de garder
- tous les accents courants en accès rapide.
-
-
- Faire shift + voyelle après la touche morte permet d’avoir
- les lettres accentuées en majuscule. Oubliez vos alt codes !
-
-
- Une exception : le é se fait en touche morte ->
- s pour garder l’enchaînement
- ée efficace.
-
-
-
-
- La couche AltGr (voir ci-dessous) est réservée aux symboles de
- programmation :
-
-
Tous les symboles de programmation sont en AltGr.
-
- Accolades, crochets et parenthèses sont sur les 6 touches les plus
- accessibles.
-
-
- La disposition est optimisée pour les enchaînements fréquents en
- programmation :
- -> => </ /> (0) [0] [''] ("") {} ~/ …
-
-
-
-
-
-
- La touche morte et la couche AltGr rendent la disposition
- compatible avec les claviers ultra compacts (33 touches
- minimum).
-
-
-
-
-
-
-
-
-
-
- Les chiffres sont en accès direct, sans Shift, pour faciliter
- leur enchaînement (= la saisie de nombres). Oubliez votre pavé numérique !
-
-
- Les raccourcis usuels
- Ctrl-{Q,A,S,Z,X,V}
- ont été conservés car le gain marginal d’ergonomie en mettant une autre
- lettre à la place n’est pas suffisant pour compenser la perte de ces
- raccourcis — loin s’en faut (une exception : Ctrl-C
- qui a permis un gain important d’ergonomie, et a été modifié de sorte à
- gêner le moins possible).
-
-
- Beaucoup d’attention a été portée sur les enchaînements de lettres, avec
- la plupart des enchaînements fréquents qui se font soit avec une
- alternance main gauche / main droite, soit avec un roulement intérieur (se
- terminant sur le majeur ou l’index). Les lettres fréquemment doublées
- (e.g. L et M) sont placées sous les index.
- On privilégie le confort sur la vitesse : il est possible
- de taper vite avec n’importe quelle disposition de clavier.
-
-
-
Ergo‑L vs Bépo
-
- Ergo‑L poursuit les mêmes objectifs que
- Bépo pour le français, mais d’une façon
- différente.
-
-
-
- Heatmap :
-
-
- Bépo est typé « Dvorak », i.e. les touches fréquentes sont étalées
- sur toute la home row ;
-
-
- Ergo‑L est typé « Workman », i.e. on évite les deux colonnes du
- centre pour limiter les extensions de l’index.
-
-
-
-
- Charge des doigts :
-
-
- Bépo charge surtout les index et les auriculaires (notamment
- l’auriculaire droit) ;
-
-
- Ergo‑L répartit la charge sur tous les doigts, en mettant plus de
- charge sur les doigts forts (index, majeur) et en allégeant les
- auriculaires — surtout l’auriculaire droit, déjà très sollicité par
- Shift / Entrée / Backspace.
-
-
-
-
- Enchaînements :
-
-
- Bépo privilégie les accès directs et étale les lettres sur tout le
- clavier, quitte à requérir des extensions de doigts (MZWÇÊ) ou l’utilisation
- de AltGr (Ù, tréma, ponctuation…) ;
-
-
- Ergo‑L privilégie la fluidité et ne place aucune lettre hors de la
- zone principale de 3×10 touches ou dans la couche AltGr.
-
-
-
-
- Typographie :
-
-
- Bépo permet une typographie soignée à condition de s’en donner la
- peine (beaucoup de symboles en AltGr) ;
-
-
- Ergo‑L hérite du Qwerty-Lafayette la facilité de soigner la typo —
- les ponctuations spéciales sont toutes derrière la touche morte,
- comme l’apostrophe typographique en touche morte + espace, le point
- médian en touche morte + virgule, le point de suspension en touche
- morte + point, etc.
-
-
-
-
-
- SFU (same finger usage) :
-
-
- Bépo a environ 2.55% de SFU en Français, dont la moitié sont
- retrouvés sur l’index gauche, qui est déjà trop chargé (23% de la
- charge totale), et 0.3% se trouvent sur l’auriculaire gauche, trop
- pour un doigt aussi faible. De plus, une grande partie des touches
- doublées se trouvent sur l’auriculaire droit (et souvent en
- extension !)
-
-
- Ergo‑L n’a que 1.36% de SFU en Français, et aucun doigt ne fait trop
- d’effort. Les auriculaires n’ont pratiquement pas de touches
- doublées.
-
-
-
-
-
-
- Comparaison des charges des doigts entre Ergo‑L et Bépo
- (cliquer sur l’image pour plus d’infos)
-
-
-
-
Ergo‑L
-
Bépo
-
-
-
fr
-
-
-
-
-
-
-
-
-
fr en
-
-
-
-
-
-
-
-
-
en
-
-
-
-
-
-
-
-
-
-
Expériences rejetées et évolutions possibles
-
- Le layout est encore en cours de développement, notamment pour améliorer
- l’efficacité de la couche AltGr. Vous pouvez participer aux travaux en
- rejoignant le
- serveur Discord dédié.
-
-
-
- On a envisagé par le passé de placer le E sous l’index, comme
- en Bépo, parce que c’est la lettre la plus fréquente en français ; mais
- cela ruine l’équilibre de la charge des doigts et complique beaucoup
- d’enchaînements. De même, on a essayé de mettre toutes les voyelles d’un
- côté (comme Dvorak ou Bépo) mais cela engendrait plus de problèmes que
- cela n’en résolvait.
-
-
-
-
-
diff --git a/data/layouts/ISRT.json b/layouts/ISRT.json
similarity index 100%
rename from data/layouts/ISRT.json
rename to layouts/ISRT.json
diff --git a/data/layouts/ISRT.yaml b/layouts/ISRT.yaml
similarity index 100%
rename from data/layouts/ISRT.yaml
rename to layouts/ISRT.yaml
diff --git a/data/layouts/MTGAP.json b/layouts/MTGAP.json
similarity index 100%
rename from data/layouts/MTGAP.json
rename to layouts/MTGAP.json
diff --git a/data/layouts/MTGAP.yaml b/layouts/MTGAP.yaml
similarity index 100%
rename from data/layouts/MTGAP.yaml
rename to layouts/MTGAP.yaml
diff --git a/data/layouts/azerty.json b/layouts/azerty.json
similarity index 100%
rename from data/layouts/azerty.json
rename to layouts/azerty.json
diff --git a/data/layouts/azerty.yaml b/layouts/azerty.yaml
similarity index 100%
rename from data/layouts/azerty.yaml
rename to layouts/azerty.yaml
diff --git a/data/layouts/bepo.json b/layouts/bepo.json
similarity index 100%
rename from data/layouts/bepo.json
rename to layouts/bepo.json
diff --git a/data/layouts/bepo.yaml b/layouts/bepo.yaml
similarity index 100%
rename from data/layouts/bepo.yaml
rename to layouts/bepo.yaml
diff --git a/data/layouts/colemak-dh.json b/layouts/colemak-dh.json
similarity index 100%
rename from data/layouts/colemak-dh.json
rename to layouts/colemak-dh.json
diff --git a/data/layouts/colemak-dh.yaml b/layouts/colemak-dh.yaml
similarity index 100%
rename from data/layouts/colemak-dh.yaml
rename to layouts/colemak-dh.yaml
diff --git a/data/layouts/colemak.json b/layouts/colemak.json
similarity index 100%
rename from data/layouts/colemak.json
rename to layouts/colemak.json
diff --git a/data/layouts/colemak.yaml b/layouts/colemak.yaml
similarity index 100%
rename from data/layouts/colemak.yaml
rename to layouts/colemak.yaml
diff --git a/data/layouts/dvorak.json b/layouts/dvorak.json
similarity index 100%
rename from data/layouts/dvorak.json
rename to layouts/dvorak.json
diff --git a/data/layouts/dvorak.yaml b/layouts/dvorak.yaml
similarity index 100%
rename from data/layouts/dvorak.yaml
rename to layouts/dvorak.yaml
diff --git a/data/layouts/erglace.json b/layouts/erglace.json
similarity index 100%
rename from data/layouts/erglace.json
rename to layouts/erglace.json
diff --git a/data/layouts/erglace.toml b/layouts/erglace.toml
similarity index 100%
rename from data/layouts/erglace.toml
rename to layouts/erglace.toml
diff --git a/data/layouts/ergol.json b/layouts/ergol.json
similarity index 100%
rename from data/layouts/ergol.json
rename to layouts/ergol.json
diff --git a/data/layouts/ergol.toml b/layouts/ergol.toml
similarity index 100%
rename from data/layouts/ergol.toml
rename to layouts/ergol.toml
diff --git a/data/layouts/lafayette.json b/layouts/lafayette.json
similarity index 100%
rename from data/layouts/lafayette.json
rename to layouts/lafayette.json
diff --git a/data/layouts/lafayette.yaml b/layouts/lafayette.yaml
similarity index 100%
rename from data/layouts/lafayette.yaml
rename to layouts/lafayette.yaml
diff --git a/data/layouts/qwerty.json b/layouts/qwerty.json
similarity index 100%
rename from data/layouts/qwerty.json
rename to layouts/qwerty.json
diff --git a/data/layouts/qwerty.yaml b/layouts/qwerty.yaml
similarity index 100%
rename from data/layouts/qwerty.yaml
rename to layouts/qwerty.yaml
diff --git a/data/layouts/sturdy.json b/layouts/sturdy.json
similarity index 100%
rename from data/layouts/sturdy.json
rename to layouts/sturdy.json
diff --git a/data/layouts/sturdy.toml b/layouts/sturdy.toml
similarity index 100%
rename from data/layouts/sturdy.toml
rename to layouts/sturdy.toml
diff --git a/data/layouts/workman.json b/layouts/workman.json
similarity index 100%
rename from data/layouts/workman.json
rename to layouts/workman.json
diff --git a/data/layouts/workman.yaml b/layouts/workman.yaml
similarity index 100%
rename from data/layouts/workman.yaml
rename to layouts/workman.yaml
diff --git a/lts.html b/lts.html
deleted file mode 100644
index eb2bab57..00000000
--- a/lts.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
- Ergo‑L
-
-
-
-
-
-
-
-
- « accueil
-
Ergo‑L
-
Une disposition de clavier ergonomique optimisée pour le français,
- l’anglais et le code.
Enregistrer dans /Library/Keyboard Layouts et relancer
- la session. La disposition de clavier est disponible dans les préférences
- « Langue et Texte », onglet « Méthodes de saisie ».
-
On peut aussi l’enregistrer dans ~/Library/Keyboard Layouts
- (pour le seul utilisateur courant), mais la disposition ne sera pas
- active au login.
-
Il est possible (et recommandé) d’utiliser Karabiner pour inverser les touches
- ⌘ Command et ⌥ Option à droite, afin d’accéder plus
- facilement à la couche de symboles.
La disposition de clavier est disponible dans le gestionnaire de
- préférences du bureau sous un nom générique (« custom layout »,
- « disposition personnalisée », etc.).
- Sous XOrg on peut aussi l’activer directement en ligne de commande :
-
- setxkbmap custom
-
D’autres méthodes d’installation sont possibles, en passant le fichier source à XKalamine.
-
Remarque : avec certains bureaux (Gnome notamment), la touche morte
- ★ ne fonctionne que si Lafayette est définie comme disposition
- de par défaut, i.e. en haut de la liste dans les préférences clavier.
-
-
-
-
-
Licence
-
WTFPL
- – Do What the Fuck You Want to Public License.
- Fréquences de touches obtenues avec le “Don Quichotte” de Cervantès.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cette disposition ne sait pas générer un nombre non-négligeable de
- symboles, les résultats sont peu fiables.
-
-
-
-
Charge des doigts
- /
-
-
-
-
-
-
Digrammes à un doigt
-
-
-
-
-
-
-
Touches doublées
-
-
-
-
-
-
-
-
-
- / / /
-
-
-
-
-
-
-
-
-
-
-
-
- / /
-
-
-
-
-
-
-
-
-
-
- / / /
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/www/.hugo_build.lock b/www/.hugo_build.lock
new file mode 100644
index 00000000..e69de29b
diff --git a/www/archetypes/default.md b/www/archetypes/default.md
new file mode 100644
index 00000000..c6f3fcef
--- /dev/null
+++ b/www/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+date = {{ .Date }}
+draft = true
++++
diff --git a/css/heatmap.css b/www/assets/css/heatmap.css
similarity index 56%
rename from css/heatmap.css
rename to www/assets/css/heatmap.css
index 6fc9afea..de2c221d 100644
--- a/css/heatmap.css
+++ b/www/assets/css/heatmap.css
@@ -1,38 +1,9 @@
-html {
- height: 100%;
- width: 100%;
- font-family: sans-serif;
-}
-
-body {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- padding: 0 25px;
- margin: auto;
- max-width: 51em;
- min-height: calc(100% - 50px);
-}
-
-header {
- font-size: 1rem;
-}
-
-h1 {
- margin-bottom: 0.2em;
- font-size: 1.4rem;
-}
-
-h3 {
- border-bottom: 1px dotted;
-}
-
h3 + small {
text-align: right;
margin-top: -1em;
}
-div {
+main div {
text-align: center;
}
@@ -42,12 +13,22 @@ div {
margin-bottom: -0.75em;
}
+#sticky-select {
+ align-items: center;
+ position: sticky;
+ margin-bottom: 0;
+ top: 0;
+ z-index: 999;
+}
+
input {
box-sizing: border-box;
+ border-radius: 6px;
width: 100%;
- margin-bottom: 0.5em;
+ height: 2em;
text-align: center;
- font-size: 1.3em;
+ font-size: 1.5em;
+ margin-bottom: 1em;
}
canvas {
@@ -81,7 +62,3 @@ th {
.row td {
width: 4em;
}
-
-footer {
- margin-top: 2em;
-}
diff --git a/css/demo.css b/www/assets/css/keyboard.css
similarity index 51%
rename from css/demo.css
rename to www/assets/css/keyboard.css
index 2a62a458..80f7bc12 100644
--- a/css/demo.css
+++ b/www/assets/css/keyboard.css
@@ -29,18 +29,6 @@
display: none;
}
-#sticky-select {
- align-items: center;
- position: sticky;
- margin-bottom: 0;
- top: 0;
- z-index: 999;
-}
-
-dialog::backdrop {
- backdrop-filter: blur(5px);
-}
-
#demo {
max-width: 70em;
width: 100%;
@@ -63,55 +51,6 @@ dialog::backdrop {
margin-bottom: 1em;
}
-h1 .quacks {
- float: right;
- transition: transform 1s;
- user-select: none;
- cursor: grab;
-}
-
-h1.active .quacks {
- transform: translateX(-1000%);
-}
-
-.keyboard #lesson {
- text-align: left;
- font-family: monospace;
- font-size: 2.5em;
- height: 4em;
- line-height: 1.2em;
- margin: 0;
- padding: 0;
- text-wrap: break;
-}
-
-.keyboard #current {
- border-bottom: 2px solid;
-}
-.keyboard span {
- box-sizing: border-box;
- }
-.keyboard #lesson { color: #333; }
-.keyboard .done { color: #999; }
-.keyboard .error { color: red; }
-.keyboard .fixed { color: green; }
-.keyboard .space::before {
- content: "·";
- word-break: break-all;
-}
-
-.key_list kbd {
- font-family: monospace;
- text-transform: uppercase;
- display: inline-block;
- margin: 0 2px;
- cursor: pointer;
-}
-
-.key_list kbd.inactive {
- color: gray;
-}
-
#demo p {
margin: 1em 0;
text-align: right;
@@ -123,21 +62,14 @@ h1.active .quacks {
}
@media (prefers-color-scheme: dark) {
-
+ #demo {
+ background-color: #222;
+ border: 5px solid #0004;
+ }
.keyboard nav a,
.keyboard nav button {
color: #ccc;
background-color: #444;
border: 1px solid #7778;
}
-
- .keyboard #lesson { color: white; }
- .keyboard .error { color: #f44; }
- .keyboard .fixed { color: #9e1; }
-
- #demo {
- background-color: #222;
- border: 5px solid #0004;
- }
-
}
diff --git a/www/assets/css/layout.css b/www/assets/css/layout.css
new file mode 100644
index 00000000..5c582a0d
--- /dev/null
+++ b/www/assets/css/layout.css
@@ -0,0 +1,168 @@
+html {
+ height: 100%;
+ width: 100%;
+ font-family: sans-serif;
+ background-color: #ccc;
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 0 25px;
+ margin: auto;
+ max-width: 58em;
+ min-height: 100%;
+
+ line-height: 1.4em;
+ border-left: 1px solid #aaa;
+ border-right: 1px solid #aaa;
+ box-shadow: 0px 1px 10px #888;
+ background-color: white;
+ color: black;
+}
+
+h2 {
+ color: brown;
+ border-bottom: 1px inset;
+}
+
+h3 {
+ border-bottom: 1px dotted;
+}
+
+h2, h3, footer {
+ margin-top: 2em;
+}
+
+dialog::backdrop {
+ backdrop-filter: blur(5px);
+}
+
+.highlight {
+ max-width: 42em;
+ margin: auto;
+ padding: 1em;
+ border-radius: 1em;
+ background-color: #8882;
+}
+
+img {
+ max-width: 100%;
+}
+
+figure {
+ margin: 2em 0;
+ text-align: center;
+}
+
+dd,
+dt {
+ margin-bottom: 0.5em;
+}
+
+li {
+ margin: 0.2em 0;
+}
+
+table {
+ width: 100%;
+}
+
+table caption {
+ caption-side: bottom;
+}
+
+a {
+ color: brown;
+}
+
+
+/******************************************************************************
+ * Header & Footer
+ */
+
+#banner {
+ margin: 1em 0 0;
+ box-sizing: border-box;
+ background: left center no-repeat url(../favicon.svg);
+ background-size: 50px;
+ min-height: 50px;
+ padding-left: 60px;
+}
+
+#banner p.title {
+ font-size: 2em;
+ font-weight: bold;
+}
+
+#banner p {
+ margin: 0.4em 0 0;
+}
+
+header, header a,
+footer, footer a {
+ color: #544; /* matches the favicon #rocket color */
+ text-decoration: none;
+}
+
+header a:hover,
+footer a:hover {
+ text-decoration: underline;
+}
+
+header h1 {
+ text-align: center;
+ font-size: 2.5em;
+}
+
+header nav {
+ border-top: 1px solid;
+ border-color: #544f; /* matches the favicon #rocket color */
+ text-align: right;
+}
+
+footer {
+ border-top: 1px solid brown;
+ text-align: right;
+ padding: 0.2rem 0 0.5rem;
+}
+
+footer small {
+ float: left;
+}
+
+
+/******************************************************************************
+ * Dark Mode
+ */
+
+input,
+select {
+ color-scheme: light dark;
+}
+
+@media (prefers-color-scheme: dark) {
+ html {
+ background-color: #111;
+ }
+
+ body {
+ background-color: #222;
+ border-color: #111;
+ box-shadow: 0px 1px 10px #111;
+ color: #ccc;
+ }
+
+ header, header a, header nav,
+ footer, footer a, footer nav {
+ /* matches the favicon #rocket color */
+ border-color: #cbb4;
+ color: #cbb;
+ }
+
+ h2, a {
+ color: #f96;
+ border-color: #f96;
+ }
+}
diff --git a/www/assets/js b/www/assets/js
new file mode 120000
index 00000000..d12c3c27
--- /dev/null
+++ b/www/assets/js
@@ -0,0 +1 @@
+../../code
\ No newline at end of file
diff --git a/www/content/_index.md b/www/content/_index.md
new file mode 100644
index 00000000..c83c9bf2
--- /dev/null
+++ b/www/content/_index.md
@@ -0,0 +1,357 @@
++++
+[params]
+cssSheets = ["/css/keyboard.css"]
+jsModules = ["/js/x-keyboard.js"]
+jsScripts = ["/js/demo.js", "/js/svg.js"]
++++
+
+{{< x-keyboard
+ name="Ergo‑L"
+ download="/lts"
+ src="/layouts/ergol.json"
+ image="/img/ergol.svg" >}}
+
+:::{.highlight}
+- [Ergonomique avant tout !]
+ – réduit les extensions de doigt, les déviations ulnaires, l’effort de saisie
+ – compatible avec **tous** les claviers ergonomiques, de 33 à 105 touches
+ – préserve les raccourcis clavier et les chiffres en direct
+- [Plus optimisé que Dvorak et Bépo]
+ deux fois moins de SFU que Bépo en français **et** que Dvorak en anglais
+- [Impeccable en français]
+ une seule touche morte pour produire tous les caractères spéciaux
+- [Efficace en anglais]
+ la première disposition francophone **réellement** optimisée pour l’anglais
+- [Redoutable pour le code]
+ une couche de symboles optionnelle et optimisée pour le code
+:::
+
+
+Ergonomique avant tout !
+--------------------------------------------------------------------------------
+
+### 1DFH, “1u Distance From Home”
+
+Ergo-L intègre l’approche 1DFH, qui consiste à ne pas déplacer ses doigts de
+plus d’une touche par rapport à la position de repos. Cela permet un gain de
+confort important pour la saisie en méthode dactylo, évitant notamment les
+extensions latérales de l’auriculaire droit qui sont typiques de Bépo pour les
+lettres `MZWÇ` (« les quatre cavaliers de l’auriculaire »).
+
+![Ergo‑L sur un clavier compact (OLKB Plank)](img/ergol_1dfh.svg)
+
+C’est pour suivre cette approche que l’immense majorité des claviers
+ergonomiques actuels ne proposent que 6 colonnes de touches par main, ce qui est :
+
+- compliqué avec AZERTY, qui a les touches [ù]{.kbd} et [`^`]{.kbd} en 6e
+ colonne, obligeant à déplacer [Entrée]{.kbd} et [Backspace]{.kbd} ;
+- **très** compliqué avec Bépo, qui a des lettres en 7e colonne à déplacer
+ également ;
+- trivial avec Ergo‑L, qui a été conçu pour ça.
+
+Les claviers ergonomiques modernes cherchent à limiter le nombre total de
+touches, en utilisant différents *layers* pour amener les touches excentrées
+sous les doigts plutôt que l’inverse. Nous avons donc décidé de n’utiliser
+aucune touche en dehors du pavé de 3×10 touches centrales pour les lettres et
+symboles de programation. Ergo‑L est ainsi compatible avec les claviers les
+plus compacts (minimum 33 touches) sans ajustement majeur.
+
+
+### Adapté à la bureautique
+
+Les raccourcis claviers usuels
+[Ctrl]{.kbd}‑[Q]{.kbd}[A]{.kbd}[S]{.kbd}[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd}
+sont devenus indispensables, car ils sont accessibles de la main gauche pendant
+que la main droite utilise la souris. Les approches de type [Dvorak][], très
+antérieures à la généralisation de la bureautique (Dvorak a été finalisé en
+1932), ignorent ces raccourcis clavier en plaçant toutes les voyelles sous la
+main gauche ; mais les approches modernes comme Colemak et Workman permettent de
+conserver ces raccourcis tout en obtenant de meilleures métriques que Dvorak.
+
+Ergo‑L suit cette approche [Colemak][] / [Workman][] et comme eux, s’autorise un
+changement : le [C]{.kbd} est ainsi déplacé pour favoriser les enchaînements,
+mais [Ctrl]{.kbd}‑[C]{.kbd} reste faisable d’une main à gauche.
+
+
+### Réduction de la fatigue de saisie
+
+Ergo‑L veille à réduire autant que possible :
+
+- **les déviations ulnaires**, en proposant une alternative en [AltGr]{.kbd} à
+ tous les symboles placés sur des touches excentrées ;
+- **la charge des doigts faibles**, surtout celle de l’auriculaire droit,
+ responsable de [Entrée]{.kbd} et [Backspace]{.kbd} sur la plupart des
+ claviers ;
+- **le taux de digrammes de même doigt**, un type d’enchaînement très
+ inconfortable, notamment à haute vitesse de saisie.
+
+Ergo‑L privilégie le confort à la vitesse : on peut taper vite avec n’importe
+quel clavier. Mais il est conçu pour que son confort et son ergonomie ne se
+dégradent pas au fur et à mesure que la vitesse de saisie augmente.
+
+
+Plus optimisé que Dvorak et Bépo
+--------------------------------------------------------------------------------
+
+[Dvorak][] est la disposition de clavier optimisée la plus connue. Elle fut
+développée pendant l’entre-deux guerres pour les machines à écrire, qui ont
+d’importantes contraintes physiques dont les claviers modernes sont exemptés :
+typiquement, appuyer sur deux touches côte‑à‑côte est un excellent moyen de
+coincer les marteaux. Cela implique qu’il fallait privilégier les alternances de
+mains aux roulements, alors que
+ces derniers sont très confortables sur un clavier d’ordinateur.
+
+Dvorak était un grand pas en avant, mais se base sur une philosophie qui
+n’est plus pertinente aujourd’hui. Malheureusement, [Bépo][] et ses nombreuses
+variantes la reprend sans chercher à la mettre à jour.
+
+Dvorak et Bépo ne sont optimisés que pour une seule langue (anglais et français,
+respectivement), et sont très inconfortables dans l’autre. Pourtant, à une
+exception près, les 9 lettres les plus fréquentes sont les mêmes en français
+(ESANITRUO) et en anglais (ETAOHNISR) :
+
+:::{}
+| | E | S | A | N | I | T | R | U | O | H |
+| -:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|
+|**fr**| 14.4 % | 7.2 % | 7.1 % | 6.8 % | 6.7 % | 6.7 % | 6.5 % | 6.1 % | 5.3 % | 1.0 % |
+|**en**| 11.7 % | 6.1 % | 8.0 % | 6.6 % | 6.5 % | 9.0 % | 5.3 % | 2.7 % | 7.8 % | 6.7 % |
+: Fréquence des lettres les plus utilisées en français et en anglais.
+:::
+
+Ergo‑L place donc ces lettres aux emplacements les plus confortables (au sens de
+[Workman][]) et fait en sorte qu’aucun enchaînement fréquent en français ou en
+anglais ne soit rédhibitoire. Comme [Colemak][], on cherche à limiter le plus
+possible le taux de digrammes de même doigt, en favorisant les roulements au
+même titre que les alternances de mains.
+
+Malgré le fait qu’il soit optimisé pour les **deux** langues, français **et**
+anglais, Ergo‑L affiche de meilleures métriques d’optimisation, tant sur la
+charge des doigts que sur le taux de digrammes de même doigt :
+
+
+:::{.sfu}
+| | AZERTY | Bépo | Ergo‑L | Dvorak | QWERTY |
+| -:|:--------------------------------:|:------------------------------:|:-------------------------------:|:--------------------------------:|:--------------------------------:|
+|**fr**| [7.97 %](/stats/#/azerty/iso/fr) | [2.55 %](/stats/#/bepo/iso/fr) | [1.23 %](/stats/#/Ergo‑L/iso/fr) | [3.31 %](/stats/#/dvorak/iso/fr) | [7.16 %](/stats/#/qwerty/iso/fr) |
+|**en**| [6.31 %](/stats/#/azerty/iso/en) | [3.01 %](/stats/#/bepo/iso/en) | [1.40 %](/stats/#/Ergo‑L/iso/en) | [2.62 %](/stats/#/dvorak/iso/en) | [5.76 %](/stats/#/qwerty/iso/en) |
+: Taux de digrammes de même doigts en français et anglais, extrait de la [page de comparaison avec Bépo](bepo).
+:::
+
+
+Impeccable en français
+--------------------------------------------------------------------------------
+
+### Caractères accentués
+
+La gestion des accents, diacritiques et symboles typographiques français
+nécessite traditionnellement l’usage de touches excentrées (ce qui irait à
+l’encontre de la philosophie 1DFH d’Ergo‑L) ou de [AltGr]{.kbd} (qui est prone à
+l’erreur à haute vitesse car il faut relâcher la touche au bon moment)
+
+Ergo‑L utilise une touche morte de type [Lafayette][] (notée ★) pour tous les
+caractères accentués, diacritiques et ponctuations spéciales. Actionner cette
+« touche typo » donne accès à **tous** ces symboles dans le pavé de 3×10
+touches **sans** utiliser [AltGr]{.kbd}. Cela occasionne environ 4 % de frappes
+supplémentaires pour un texte francophone, ce qui est négligeable comparé au
+gain de confort que cela apporte.
+
+![La touche morte d’Ergo‑L.](img/ergol_1dk.svg)
+
+Maintenir shift après avoir actionné la touche typo permet de saisir des
+lettres accentuées en majuscule (★ → [Shift]{.kbd} + `a` = `À`). Oubliez vos
+alt codes ! Cette touche typo peut *parfois* donner l’accès à une autre touche
+morte, comme le tréma mort, accessible en double‑cliquant la touche typo (donc
+★ → ★ → `E` = `Ë`)
+
+
+### Placement des lettres
+
+En français, les huit lettres les plus fréquentes (`esanitru`) sont toutes
+réparties sur la position de repos des doigts, et le reste des lettres
+fréquentes sont réparties sur les autres touches faciles d’accès.
+
+Une grande attention à été portée sur les enchaînements de lettres :
+
+- Les voyelles s’enchaînent fréquemment avec toutes les consonnes importantes,
+ donc elles sont soit :
+ - placées sur les auriculaires, avec des consonnes peu fréquentes autour
+ (comme `QAZ` et `FUK`)
+ - empilées sur des doigts forts pour celles qui ne s’enchaînent pas ensemble
+ (comme `EO` et ★`IY`).
+- Le placement des lettres sur les positions de repos maximise les roulements
+ vers l’intérieur et minimise les redirections, qui sont source d’erreur à
+ haute vitesse.
+- Le reste des lettres fréquentes sont placées de sorte à minimiser les
+ digrammes de même doigt (par exemple, `D` et `G` s’enchaînent très souvent
+ avec `N` ou `R`, mais très peu avec `T`)
+- La touche morte est placée sur la main opposée à `EAC`, qui sont les lettres
+ les plus souvent diacritées en français.
+
+Pratiquement aucun enchaînement courant en français ne demande trop d’effort.
+
+:::{ style="text-align: center;" }
+
+![fréquence d’utilisation des touches en français](img/ergol_fr.svg)
+ fréquence d’utilisation des touches en français
+:::
+
+
+### Typographie
+
+Soigner la typographie demande souvent un effort (physique et mental)
+supplémentaire non négligeable. Beaucoup l’ignore, ou laisse leur éditeur de
+texte la gérer pour eux. Ergo‑L permet de soigner la typographie sans aucun
+effort supplémentaire :
+
+- [Shift]{.kbd} + [Espace]{.kbd} = espace insécable fine
+- ★ → [Espace]{.kbd} = apostrophe typographique
+- les guillemets typographiques et ponctuations doublées (`:;?!`) en
+ [Shift]{.kbd} pour faciliter leur enchaînement avec l’insécable fine.
+
+
+Efficace en anglais
+--------------------------------------------------------------------------------
+
+### Même optimisation qu’en français
+
+Ergo‑L porte la même attention au confort de la saisie de texte en anglais qu’en
+français, mais doit faire quelques compromis pour faire cohabiter les deux
+langues. Certaines lettres sont beaucoup plus fréquentes dans une langue que
+l’autre, (comme le [U]{.kbd} et la touche typo en français et le [H]{.kbd} en
+anglais) et les enchaînements courrant peuvent être très différents.
+
+Ergo‑L optimise le plus possible la saisie de texte anglais et français sans
+causer de problèmes rédhibitoires dans une de ces deux langues. Par exemple,
+l’enchaînement `TH` (*le* digramme le plus fréquent en anglais, avec 3.2%
+d’occurences) est très confortable, mais le `H` occupe une place dont on peut
+se dispenser en français. De même, `U` et ★ sont très fréquent en français,
+mais peu fréquent en anglais, ce qui a été pris en compte pour leur placement.
+
+:::{ style="text-align: center;" }
+
+![fréquence d’utilisation des touches en anglais](img/ergol_en.svg)
+ fréquence d’utilisation des touches en anglais
+:::
+
+Ergo‑L a donc une ergonomie comparable en français et en anglais. Bien que de
+nombreuses dispositions dédiés exclusivement à l’anglais soient plus efficace
+qu’Ergo‑L dans cette langue, Ergo‑L est *la première disposition **reéellement**
+optimisée pour le français **et** l’anglais*.
+
+
+### Et les autres langues ?
+
+Ergo‑L est capable de saisir du texte dans presque toutes le langues
+européennes, mais ne cherche pas a optimiser la saisie de texte dans d’autres
+langues que le français et l’anglais. Certains caractères sont disponibles en
+touche typo, comme `ß` ou `ñ`, et il existe de nombreuses touches mortes en
+[AltGr-Shift]{.kbd} : par exemple, `^` étant en [AltGr]{.kbd}[J]{.kbd},
+[Shift]{.kbd}[AltGr]{.kbd}[J]{.kbd} produit un accent circonflexe mort, ce qui
+est suffisant pour la saisie occasionnelle de caractères spéciaux.
+
+Pour des usages plus réguliers, plutôt que de chercher à couvrir tous les cas
+possibles nous avons préféré faire en sorte que la disposition soit **simple à
+modifier**. Le [dépôt github d’Ergo‑L](https://github.com/Nuclear-Squid/ErgoL)
+contient le fichier source de la disposition (un fichier `.toml` facile à lire
+et modifier) ainsi que des instructions pour construire votre disposition
+personnalisée ou évaluer la qualité des enchaînements de votre variante.
+Remplacer les caractères de la touche morte par ceux dont vous avez besoin
+devrait être relativement simple, et le résultat sera bien plus efficace que
+n’importe quelle disposition de clavier cherchant à couvrir toutes les langues !
+
+![Un exemple d’adaptation d’Ergo‑L pour l’allemand](img/ergol_1dk_de.svg)
+
+Si vous voulez adapter Ergo‑L à une langue étrangère, nous vous recommandons de
+concevoir la couche typo uniquement pour cette langue et d’installer votre
+adaptation en même temps qu’Ergo‑L en lui donnant un autre nom (comme
+« ergol-de » pour l’allemand, par exemple). Tous les bureaux modernes proposent
+un raccourci clavier pour basculer d’une langue à l’autre, et vous pourrez ainsi
+basculer d’Ergo‑L à votre variante spécifique en un clin d’œil.
+
+
+Redoutable pour le code
+--------------------------------------------------------------------------------
+
+### Héritage QWERTY-US
+
+La grande majorité des touches en dehors du pavé de 3×10 sont identiques à
+celles de Qwerty‑US. Cela implique que les chiffres sont en accès direct (sans
+[Shift]{.kbd}), ce qui facilite grandement la saisie de nombres.
+
+QWERTY‑US est réputé pour son efficacité dans la saisie de symboles de
+programation, mais elle est perfectible : **tous** les symboles de programmation
+nécessitent au moins un auriculaire et une extension, car ils sont tous sous un
+auriculaire, ou en [Shift]{.kbd}, ou les deux. Ergo‑L a donc à cœur de proposer
+une meilleure alternative.
+
+
+### Couche symboles
+
+Ergo‑L propose une couche [AltGr]{.kbd} optionelle optimisée pour le placement
+et les enchaînements de symboles de programmation.
+
+![La couche AltGr d’Ergo‑L.](img/ergol_altgr.svg)
+
+Cette couche [AltGr]{.kbd} est plutôt simple à mémoriser, car les symboles sont
+regroupés par « blocs ». On y retrouve :
+
+- les délimiteurs `(){}[]<>`
+- les délimiteurs de chaîne de caractères ``'`"``
+- les symboles arithmétiques `+-/*`
+- les ponctuations `!;:?` (de plus, `;:` sont à leur emplacement en Qwerty Européen)
+- `$%^&*` sont à leur position en [Shift]{.kbd} + chiffres, mais une rangée plus bas.
+
+Comme pour l’emplacement des lettres de la disposition, une grande attention à
+été portée au placement des symboles de prog et aux enchaînements courrants. Les
+symboles peu courrants (``~@#%^`|``) sont loins des positions de repos, et la
+grande majorité des enchaînements de symboles de prog se fait soit avec une
+alternance de main (`~/`, `);`, `>`, `+=`, `['']`, …) soit avec un roulement
+(`>=`, `/*`, `";`, `()`, `\"`, …).
+
+Comme pour la saisie de texte en français ou anglais, la couche [AltGr]{.kbd}
+d’Ergo‑L ne contient pratiquement aucun enchaînement inconfortable.
+
+
+### Compatibilité Vim
+
+Pour une utilisation technique, Vim apporte une ergonomie reconnue et de
+nombreux éditeurs de code implémentent un mode de navigation Vim. La couche
+[AltGr]{.kbd} d’Ergo‑L lui permet de conserver les principales commandes de
+déplacement :
+
+- [AltGr]{.kbd} + `jk` donne `+-`, qui est une action très proche de `jk`
+- les sauts verticaux `{}`, `()` et `[]` sont en AltGr + main gauche
+
+À ce jour, nous n’avons pas trouvé de meilleure couche de symboles que celle que
+nous avons développée. Elle a été reprise dans d’autres projets, notamment
+[Lafayette].
+
+
+Licence
+--------------------------------------------------------------------------------
+
+[WTFPL][] – Do What The Fuck You Want To Public License. Bien qu’il existe des
+licences mieux réputées, nous avons choisi d’en utiliser une dont on comprend
+tous les mots.
+
+
+
+[WTFPL]: http://wtfpl.net
+[dvorak]: https://fr.wikipedia.org/wiki/Disposition_Dvorak
+[bépo]: https://bepo.fr
+[workman]: https://workmanlayout.org
+[colemak]: https://colemak.com
+[lafayette]: https://qwerty-lafayette.org/
diff --git a/www/content/bepo/charge_bepo_en.png b/www/content/bepo/charge_bepo_en.png
new file mode 100644
index 00000000..35b1c6f9
Binary files /dev/null and b/www/content/bepo/charge_bepo_en.png differ
diff --git a/www/content/bepo/charge_bepo_en_fr.png b/www/content/bepo/charge_bepo_en_fr.png
new file mode 100644
index 00000000..fec9f37c
Binary files /dev/null and b/www/content/bepo/charge_bepo_en_fr.png differ
diff --git a/www/content/bepo/charge_bepo_fr.png b/www/content/bepo/charge_bepo_fr.png
new file mode 100644
index 00000000..1e4cca2e
Binary files /dev/null and b/www/content/bepo/charge_bepo_fr.png differ
diff --git a/www/content/bepo/charge_ergol_en.png b/www/content/bepo/charge_ergol_en.png
new file mode 100644
index 00000000..1b808990
Binary files /dev/null and b/www/content/bepo/charge_ergol_en.png differ
diff --git a/www/content/bepo/charge_ergol_en_fr.png b/www/content/bepo/charge_ergol_en_fr.png
new file mode 100644
index 00000000..4dc57c81
Binary files /dev/null and b/www/content/bepo/charge_ergol_en_fr.png differ
diff --git a/www/content/bepo/charge_ergol_fr.png b/www/content/bepo/charge_ergol_fr.png
new file mode 100644
index 00000000..ad2e44bb
Binary files /dev/null and b/www/content/bepo/charge_ergol_fr.png differ
diff --git a/www/content/bepo/index.md b/www/content/bepo/index.md
new file mode 100644
index 00000000..dfdefa6b
--- /dev/null
+++ b/www/content/bepo/index.md
@@ -0,0 +1,328 @@
++++
+title = "Ergo‑L ou Bépo ?"
+
+[params]
+cssSheets = ["/css/keyboard.css"]
+jsModules = ["/js/x-keyboard.js"]
+jsScripts = ["/js/demo.js", "/js/svg.js"]
++++
+
+{{< x-keyboard
+ name="Bépo"
+ download="https://bepo.fr"
+ src="/layouts/bepo.json"
+ image="/img/bepo.svg" >}}
+
+:::{.highlight style="max-width: 32em;"}
+- [Ergonomie]
+ une priorité pour Ergo‑L bien plus que pour Bépo
+- [Optimisation]
+ Dvorak pour Bépo, Colemak/Workman pour Ergo‑L
+- [Typographie]
+ deux approches différentes
+- [Programmation]
+ la spécialité d’Ergo‑L
+- [Variantes de Bépo]
+:::
+
+Ergonomie
+--------------------------------------------------------------------------------
+
+### Bépo
+
+Conservant l’approche AZERTY d’avoir certaines lettres accentuées en direct
+(`É`, `È`, `À`, `Ç`), Bépo a manqué de place pour placer toutes les lettres et a
+choisi d’occuper les colonnes excentrées pour des lettres jugées moins
+fréquentes (`M`, `Z`, `W`, `Ç`). Il en résulte une incompatibilité avec la
+plupart des claviers ergonomiques du marché, qui ne proposent que 6 colonnes de
+touches par main pour respecter le principe [1DFH](#dfh-1u-distance-from-home).
+
+Par ailleurs, la charge des doigts est mal répartie :
+
+- la charge de l’index gauche est très élevée (> 23 % en français), et c’est
+ d’autant plus gênant que ce doigt gère à lui seul la moitié des [digrammes de
+ même doigt](#optimisation) ;
+- plus grave, la charge de l’auriculaire droit (> 11 % en français) est bien
+ plus élevée que dans toutes les dispositions de clavier francophones,
+ optimisées ou non ;
+- une grande partie des touches doublées se trouvent sous l’auriculaire droit —
+ et souvent en extension !
+
+C’est notamment le cas du `M` : 13e lettre la plus fréquente en français (2.7 %
+de fréquence, soit plus que tous les caractères accentués cumulés), fréquemment
+doublé (0.2 % du temps) et en extension latérale sur l’auriculaire droit. Cela
+favorise grandement les déviations ulnaires, qui sont la principale cause de
+développement de troubles musculo-squelettiques associés à la saisie au clavier.
+
+Enfin, par inspiration [Dvorak][], Bépo a renoncé aux raccourcis clavier
+positionnels [Ctrl]{.kbd}‑[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd}.
+
+### Ergo‑L
+
+Ergo‑L se veut [ergonomique avant tout](/#ergonomique-avant-tout). À ce titre,
+il suit une approche 1DFH stricte, plaçant les 26 lettres et les 4 principales
+ponctuations dans le pavé central de 3×10 touches, garantissant une
+compatibilité parfaite avec tous les claviers de 33 à 105 touches, ergonomiques
+ou non.
+
+Cette approche permet aussi de garder les chiffres en direct, rendant le pavé
+numérique inutile. On peut ainsi utiliser des claviers compacts qui favorisent
+une meilleure posture de travail, notamment quand on utilise la souris de la
+main droite.
+
+Les auriculaires sont préservés, en particulier le droit qui est en charge des
+touches [Entrée]{.kbd} et [Backspace]{.kbd} sur la plupart des claviers (et qui
+ne sont pas comptées dans ces métriques).
+
+Les lettres fréquemment doublées (e.g. [L]{.kbd}, [N]{.kbd} et [M]{.kbd}) sont
+placées sous les index.
+
+Les raccourcis clavier positionnels [Ctrl]{.kbd}‑[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd}
+ainsi que [Ctrl]{.kbd}‑[Q]{.kbd}[A]{.kbd}[S]{.kbd} sont préservés, mais le
+[C]{.kbd} a été déplacé pour permettre un gain d’optimisation très sensible.
+
+
+
+
+ Comparaison des charges des doigts entre Bépo et Ergo‑L.
+ (cliquer sur l’histogramme pour plus d’infos)
+
+
+
+
Bépo
+
+
Ergo‑L
+
+
+
+
fr
+
+
+
+
+
fr‑en
+
+
+
+
+
en
+
+
+
+
+
+
+
+
9.6 %
+
8.0 %
+
9.7 %
+
23.0 %
+
+
15.2 %
+
12.3 %
+
15.6 %
+
13.7 %
+
+
+
+
max.
+
+
+
+
9.2 %
+
12.0 %
+
19.5 %
+
14.8 %
+
+
18.6 %
+
15.2 %
+
11.1 %
+
6.9 %
+
+
+
+
+
+
+**De notre point de vue** : Bépo a été optimisée au détriment de l’ergonomie,
+notamment en surchargeant beaucoup trop l’auriculaire droit et en s’aliénant la
+plupart des claviers ergonomiques.
+
+
+Optimisation
+--------------------------------------------------------------------------------
+
+### Bépo
+
+Bépo applique une optimisation de type [Dvorak][] au français :
+
+- maximiser l’alternance des mains lors de la frappe ;
+- répartir les touches de façon équitable sur les deux mains ;
+- utiliser en priorité la rangée centrale, puis haute, puis inférieure ;
+- en cas de non-alternance des mains sur un digramme, diriger la frappe vers le
+ centre du clavier ce qui sollicite davantage les doigts les plus habiles à
+ savoir l’index et le majeur.
+
+Bépo cherche également à minimiser le taux de digrammes de même doigt, que nous
+mesurons à 2.6 % en français contre 8.0 % pour l’AZERTY. C’est un score très
+proche de celui obtenu par Dvorak en anglais, là où QWERTY est à 7.2 %.
+
+Cette optimisation est faite au détriment de l’anglais :
+- la charge de l’auriculaire droit grimpe à 13.7 % ;
+- certains digrammes, notamment `WH`, sont rédhibitoires.
+
+
+### Ergo‑L
+
+Ergo‑L reprend les principes ci-dessus mais intègre les inspirations [Colemak][]
+et [Workman][] :
+
+- on privilégie les roulements aux alternances de main :
+ - les alternances de main étaient nécessaires à l’époque des machines à
+ écrire mécaniques pour éviter de coincer les marteaux, mais ne le sont
+ plus aujourd’hui ;
+ - les roulements permettent de faire moins d’erreurs de saisie à haute
+ vitesse, tout en restant très confortables ;
+- on évite les colonnes centrales qui requièrent une extension de l’index ;
+- faute de pouvoir utiliser les positions de repos on privilégie les touches :
+ - de la rangée supérieure pour l’annulaire et le majeur ;
+ - de la rangée inférieure pour l’index ;
+- on fait le choix de conserver les raccourcis clavier positionnels se justifie,
+ tant l’impact sur les métriques d’optimisation est limité.
+
+Malgré ces compromis et le fait qu’il soit optimisé pour les **deux** langues,
+français **et** anglais, Ergo‑L affiche de meilleures métriques d’optimisation,
+tant sur la charge des doigts (voir ci-dessus) que sur le taux de digrammes de
+même doigt :
+
+
+:::{.sfu}
+| | AZERTY | Bépo | Ergo‑L | Dvorak | QWERTY |
+| -:|:--------------------------------:|:------------------------------:|:-------------------------------:|:--------------------------------:|:--------------------------------:|
+|**fr**| [7.97 %](/stats/#/azerty/iso/fr) | [2.55 %](/stats/#/bepo/iso/fr) | [1.23 %](/stats/#/ergol/iso/fr) | [3.31 %](/stats/#/dvorak/iso/fr) | [7.16 %](/stats/#/qwerty/iso/fr) |
+|**en**| [6.31 %](/stats/#/azerty/iso/en) | [3.01 %](/stats/#/bepo/iso/en) | [1.40 %](/stats/#/ergol/iso/en) | [2.62 %](/stats/#/dvorak/iso/en) | [5.76 %](/stats/#/qwerty/iso/en) |
+: Taux de digrammes de même doigts en français et anglais.
+:::
+
+**De notre point de vue** : l’optimisation de Bépo est faite au détriment de
+l’anglais et de l’ergonomie, et elle est (très) inférieure à celle que propose
+Ergo‑L dans les deux langues.
+
+
+Typographie
+--------------------------------------------------------------------------------
+
+### Bépo
+
+Bépo gère les caractères accentués de façon similaire à AZERTY :
+
+- certaines lettres comme [ÉÈÀÇ]{.kbd} sont accessibles directement ;
+- l’accent circonflexe et le tréma sont faits avec une touche morte (le tréma
+ nécessitant *en plus* [AltGr]{.kbd} avec Bépo) ;
+- certains caractères nécessitent la touche [AltGr]{.kbd}, ce qui complique les
+ enchaînements : [Ù]{.kbd}, [Œ]{.kbd}, [Æ]{.kbd}, points de suspension…
+
+De plus, Bépo propose beaucoup de caractères spéciaux (i.e. non liés à la langue
+français ou au code informatique) via la couche AltGr ou des touches mortes, au
+prix d’une certaine complexité des pilotes de clavier :
+
+- les pilotes Windows existent en deux versions, l’une « tronquée » et stable,
+ l’autre « complète » mais dont le comportement est présenté comme moins
+ fiable ;
+- le pilote Linux, théoriquement inclus a XKB, se base sur des définitions de
+ touches mortes qu’il faut ajouter manuellement coté utilisateur.
+
+
+### Ergo‑L
+
+À l’inverse, Ergo‑L utilise une touche morte de type [Qwerty-Lafayette][3] pour
+tous les caractères accentués et ponctuations spéciales : la fluditié des
+enchaînements est préservée, et la touche [AltGr]{.kbd} peut être dédiée aux
+seuls symboles de programmation.
+
+Cette touche morte occasionne des frappes supplémentaires sur un texte francophone :
+
+- 1.0 % pour `È`, `À`, `Ç`, `Œ`, `Æ`
+- 1.5 % pour le seul `É`
+- 1.5 % si on utilise l’apostrophe typographique `’` plutôt que l’apostrophe
+ droite `'`
+
+… soit environ 4 % de frappes supplémentaires. Pour une vitesse de saisie de 60
+mots/minutes, on perd ainsi 2 mots/minute en Ergo‑L.
+
+Le support typographique du français est tout aussi complet que celui de Bépo,
+mais pour les autres caractères spéciaux Ergo‑L se contente des touches mortes
+standard définies dans XKB afin de proposer des pilotes plus robustes.
+Les autres caractères spéciaux sont laissés à la touche Compose.
+
+![La couche Typo d’Ergo‑L.](/img/ergol_1dk.svg)
+
+**De notre point de vue** : la saisie de la plupart des caractères accentués
+est plus intuitive avec Bépo. L’approche d’Ergo‑L permet d’éviter les extensions
+de doigts mais nécessite un apprentissage.
+
+
+Programmation
+--------------------------------------------------------------------------------
+
+Avec son optimisation pour l’anglais et sa couche dédiée aux symboles de
+programmation en [AltGr]{.kbd}, Ergo‑L est de loin la disposition la plus
+adaptée à la programmation. Comme pour les lettres en français et en anglais,
+les symboles sont placés de façon à faciliter les enchaînements et éviter les
+touches répétées sous les auriculaires.
+
+![La couche Symboles d’Ergo‑L.](/img/ergol_altgr.svg)
+
+La touche [AltGr]{.kbd} reste facultative, les symboles étant également
+disponibles aux emplacements du QWERTY ANSI, qui est perçu comme efficace pour
+cet usage.
+
+
+Variantes de Bépo
+--------------------------------------------------------------------------------
+
+De par son ancienneté, Bépo a vu naître beaucoup de variantes qui ont toutes
+repris la philosophie initiale :
+
+- toutes les voyelles à gauche (approche Dvorak) ;
+- les lettres sont étalées sur toutes les colonnes du clavier ;
+- les chiffres restent en Shift.
+
+Et très logiquement, ces variantes présentent les mêmes défauts d’ergonomie :
+
+- compatibilité délicate avec la quasi-totalité des claviers ergonomiques ;
+- surcharge importante de l’auriculaire droit ;
+- perte des raccourcis claviers positionnels.
+
+Optimot est une variante non-libre de Bépo qui l’optimise très nettement : le
+taux de digrammes de même doigt est divisé par deux en anglais et par trois en
+français ! Mais les défauts d’ergonomie restent les mêmes, ou ne sont atténués
+que très marginalement :
+
+- les lettres excentrées posent toujours le même problème de compatibilité avec
+ les claviers ergonomiques ;
+- la charge de l’auriculaire droit est diminuée en anglais mais reste
+ strictement identique pour le français littéraire, et s’accroît dès que l’on
+ utilise des symboles de programmation (dont l’accès recommandé par l’auteur se
+ fait via la touche morte circonflexe, placée sous l’auriculaire en extension).
+
+**De notre point de vue**, les deux dispositions portent bien leur nom :
+
+- Optimot est une **opti**misation de Bépo qui apportera un gain de confort aux
+ utilisateurs satisfaits de Bépo ;
+- Ergo‑L est **ergo**nomique avant tout, et apportera une solution radicale aux
+ personnes qui ont des difficultés avec Bépo.
+
+
+[bépo]: https://bepo.fr
+[dvorak]: https://fr.wikipedia.org/wiki/Disposition_Dvorak
+[workman]: https://workmanlayout.org
+[colemak]: https://colemak.com
diff --git a/data/dicts/LICENSE b/www/content/dactylo/LICENSE
similarity index 100%
rename from data/dicts/LICENSE
rename to www/content/dactylo/LICENSE
diff --git a/data/dicts/README.md b/www/content/dactylo/README.md
similarity index 100%
rename from data/dicts/README.md
rename to www/content/dactylo/README.md
diff --git a/data/dicts/english_10k.json b/www/content/dactylo/english_10k.json
similarity index 100%
rename from data/dicts/english_10k.json
rename to www/content/dactylo/english_10k.json
diff --git a/data/dicts/english_1k.json b/www/content/dactylo/english_1k.json
similarity index 100%
rename from data/dicts/english_1k.json
rename to www/content/dactylo/english_1k.json
diff --git a/data/dicts/french_10k.json b/www/content/dactylo/french_10k.json
similarity index 100%
rename from data/dicts/french_10k.json
rename to www/content/dactylo/french_10k.json
diff --git a/data/dicts/french_1k.json b/www/content/dactylo/french_1k.json
similarity index 100%
rename from data/dicts/french_1k.json
rename to www/content/dactylo/french_1k.json
diff --git a/www/content/dactylo/index.html b/www/content/dactylo/index.html
new file mode 100644
index 00000000..d2653cdb
--- /dev/null
+++ b/www/content/dactylo/index.html
@@ -0,0 +1,120 @@
++++
+title = "Duck Typist"
+
+[params]
+cssSheets = ["/css/keyboard.css"]
+jsModules = ["/js/x-keyboard.js"]
+jsScripts = ["/js/duck-typist.js"]
+
+footer = """
+ powered by [x-keyboard](https://onedeadkey.github.io/x-keyboard),
+ inspired by [keyzen](https://github.com/wwwtyro/keyzen)
+ and [keybr](https://github.com/aradzie/keybr.com),
+ fuelled by [MonkeyType](https://github.com/monkeytypegame/monkeytype)
+"""
++++
+
+
+
+
🦆
+
·
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/quack.wav b/www/content/dactylo/quack.wav
similarity index 100%
rename from quack.wav
rename to www/content/dactylo/quack.wav
diff --git a/www/content/erglace.md b/www/content/erglace.md
new file mode 100644
index 00000000..b755c1db
--- /dev/null
+++ b/www/content/erglace.md
@@ -0,0 +1,178 @@
++++
+title = "Erglace (WiP)"
+
+[params]
+cssSheets = ["/css/keyboard.css"]
+jsModules = ["/js/x-keyboard.js"]
+jsScripts = ["/js/demo.js", "/js/svg.js"]
++++
+
+{{< x-keyboard
+ name="Erglace"
+ download="https://github.com/Lysquid/Erglace"
+ src="/layouts/erglace.json"
+ image="/img/erglace.svg" >}}
+
+
+## Notes de conception
+
+Le point de départ était de faire une disposition avec moins de redirections
+qu’Ergo‑L. Nous nous sommes vite rendu compte qu'il fallait pour cela isoler les
+voyelles de consonnes. Les lettres de la home row sont les lettres les plus
+utilisées du français et de l'anglais.
+
+
+
+Pour l'ordre des consonnes de la home row, nous avons cherché à maximiser les
+roulements, tout en s'assurant d'une bonne répartition de la charge. `t` est un
+bon candidat pour l'index, puisqu'il se combine assez peu avec d'autres
+consonnes comparé aux autres, or l'index à 6 lettres. Les autres ordres testés
+avaient une répartition de charge moins bonne et/ou un SFB plus haut. Cet ordre
+a toutefois le défaut de privilégier les outrolls, et n'est pas celui qui
+minimise les redirects (voir l'ordre de Nerps).
+
+Le raisonnement est similaire pour l'ordre des voyelles. `u` est de loin la
+lettre qui se combine le moins avec les consonnes et les signes de ponctuation,
+il a donc sa place sur l'index, même si c'est une lettre peu courante en
+anglais.
+
+
+Toutefois, `e` est une lettre particulière puisque c'est la plus utilisée et
+elle se combine avec la quasi-totalité des autres lettres, à l'exception de `o`
+et des lettres accentuées. N'ayant pas de touches dédiées aux accents comme
+ErgEAU, j'ai dû me résoudre à mettre `o` au-dessus de `e`. La charge devenant
+trop grande pour l'annulaire, je l'ai mis sur l'index comme en Ergo-L et
+Optimot. `a` est resté sur l'annulaire car il a une charge plus importante que
+`i`. Les enchaînements de cette disposition restent bons, à l'exception du bad
+redirect assez ironique `aie`, équivalent de `sad` en qwerty.
+
+J'ai essayé de laisser `e` sur l'annulaire, d'abord en mettant la touche morte
+au-dessus, ce qui faisait une charge beaucoup trop importante pour l'annulaire,
+ou en mettant une lettre rare, tel que `k` ou `z`, mais le SFB engendré était de
+loin le plus important du layout, et je trouvais dommage de mettre une des
+lettres les plus rares sur un bon emplacement.
+
+Nous avons d'abord cherché à conserver le roulement `th`, digramme le plus
+commun. Mais nous nous sommes rendu compte que `h` allait aussi très bien du
+côté des voyelles avec lesquelles il fait de nombreux roulements, même si ce
+sont des outrolls. Avoir `h` sous `u` permet aussi de charger plus l'index en
+anglais.
+
+Les autres consonnes du côté de voyelles ont été choisies pour minimiser le SFB.
+`j` est en bas pour simplifier l'écriture de `je`, et `f` en haut pour taper
+`of`. `y` en haut permet quant à lui un roulement confortable pour écrire `you`.
+Une attention particulière a été portée sur le LSB, qui reste malgré tout élevé
+à cause des digrammes `e,`, `ez` et `ek`, ce qui est assez inévitable compte
+tenu du placement de `e`.
+
+La charge de l'annulaire est alors plus importante que celle de l'index en
+français. J'ai essayé de mettre la touche morte sur l'index comme en ErgEAU,
+mais comme `e`, `a` se lit à presque toutes les autres lettres. On retrouve donc
+les mêmes problèmes qu'avec `e`, mais cette fois avec une charge trop faible sur
+l'annulaire. Par ailleurs, le touche morte sur l'index réduisait encore la
+charge de ce doigt en anglais.
+
+Le placement des consonnes restantes à droite à fait l'objet de beaucoup de
+variations. `dmlcp` sont celles qui ont le moins bougé, étant les consonnes plus
+fréquentes après celle de la home row, elles occupent les meilleurs emplacements
+sur les colonnes où elles font le moins de SFB. Le placement de `c` et `p` en
+haut permet de garantir de bons enchaînements avec `l`.
+
+Nous avons considéré d'inverser `d` et `p` pour le digramme `ld`. Mais `ld` est
+moins courant que `pl`, et `d` serait plus difficale à atteindre en haut, alors
+qu'il est deux fois plus courant que `p`.
+
+Le cas de `g` est particulier du fait de l'importance des digrammes `ng` et
+`gr`. Le placer en bas l'annulaire rend ces digrammes inconfortables sur un
+clavier split. Pour ne pas avoir un trop gros LSB avec le digramme `ng`, la
+seule position convenable est donc à gauche de `t`.
+
+Les consonnes restantes, `vbwq` peuvent être interchangées facilement, et ont
+fait l'objet d'une mise à jour de la dispositon. Le `v` était initialement placé
+sur l'annulaire en bas, mais l’enchaînement `vr` était alors très inconfortable.
+Le `w` a pris cette place, au détriment de la compatibilité Vim puisque `cw`
+devient un SFB important. Heureusement, `ce` fait le même chose que `cw` sur
+Vim. `q` se retrouve sur l'auriculaire car c'est le moins utilisé.
+
+`v` et `b` sont alors sur l'index et peuvent être facilement inversés. Le choix
+de `b` en bas à été fait pour éviter l'enchaînement `mb` qui est très compliqué
+avec `b` en haut. Cela se fait au détriment de l'enchaînement `bl` qui est deux
+fois plus courant, mais tout de même plus acceptable. Un avantage à avoir `v` en
+haut est de pouvoir enchaîner Ctrl+C et Ctrl+V.
+
+`q` et `x` sur la colonne de l'auriculaire peuvent aussi être intervertis. Mais
+`q` étant beaucoup plus courant, il a la position la plus confortable, en haut.
+Un défaut est l'enchaînement `sq` qui n'est alors pas très confortable.
+
+Un autre digramme problématique est `j'`, un ciseau désagréable. On pourrait
+être tenté d'inverser `j` et `y`, mais cela créerait alors un ciseau pour `you`,
+qui est sinon un très bon roulement, et rend `je` moins confortable. Il a été
+envisagé d'inverser `j` et `x`, mais cela aurait créé des redirections pour
+`eux` et `aux` et un SFB important avec `ix`, particulièrement en anglais
+(digramme potentiellement biaisé dans le corpus: "Don Quixote" en anglais). Le
+mod `jx` reste intéressant pour ceux qui trouvent `j'` vraiment trop
+inconfortable.
+
+Les accents ont ensuite été répartis sur la couche correspondante, de préférence
+proches des lettres correspondantes, dans la limite de la place disponible du
+côté des voyelles. `ê` est sur e, car il y a souvent un autre `e` dans le même
+mot comme dans `même` et `être`.
+
+`a` étant sous la touche morte, ses variantes accentuées ne peuvent pas être sur
+cette colonne sous peine d'un SFB important. `à` et `â` ont donc été placés à
+droite sur les lettres avec lesquelles il fait le plus petit SFB. `œ` a aussi
+été placé à droite par manque de place, ce qui lui donne une place sur la home
+row.
+
+`é` est de loin l'accent le plus important, étant la 15ème lettre la plus
+utilisée en français. Le placer sous `e` rendrait le digramme `ée` lent et
+surchargerait encore plus le majeur. J'ai essayé de le placer sous `r`, colonne
+sur laquelle le SFB est minimal, mais le SKU engendré sur l'annulaire était
+considérable, et se ressentait beaucoup dans des mots comme 'préféré'. J'ai
+finalement opté pour le mettre derrière `u`, ce qui lui donne une place
+confortable sur la home row, et qui s’enchaîne bien avec `e`. Cela permet aussi
+de mieux charger l'index en français. La contre-parti est les digrammes `é,` et
+`éf`, ainsi qu'un décalage nécessaire des variantes accentuées de `u`.
+
+`_` a une place sur la home de la couche 1dk pour pouvoir écrire facilement des
+noms de fichiers et variables où les mots sont espacés d'underscores.
+
+`-` est derrière `e` en shift pour minimiser le SFB. N'importe quel autre
+caractère créé un SFB important avec la colonne `oe`. `,` a une meilleure
+position que `.` car elle est beaucoup plus courante.
+
+J'aurais aimé avoir `'` en accès direct puisque c'est un caractère courant en
+français, anglais et programmation, mais il se lit avec toutes les lettres. Je
+suis resté sur la solution plutôt élégante de Ergo-L, d'avoir `'` derrière la
+touche morte + espace, qui garantit un SFB minimum.
+
+
+
+Dans cette version précédente, `?`, `!` et `_` étaient respectivement derrière
+`,`, `.` et `-` en shift. Nous avons longtemps débattu sur ce sujet, la
+conclusion étant que cela est plutôt une affaire de goût personnel. La solution
+la plus simple a donc été de se caler sur les conventions d'Ergo-L, ce qui
+simplifie la compatibilité avec la couche de symboles.
+
+Sur la page de statistiques du site d'Ergo-L, Erglace a un SFB important en
+anglais a cause des guillemets, comme `.”` qui contribue à lui seul à 0.16%. Je
+considère que ces guillemets sont surreprésentés dans le corpus, et que cet
+enchaînements n'est pas assez courant au quotidien pour essayer de le prendre en
+compte.
+
+En conclusion, la disposition a des défauts et fait un certain nombre de
+compromis. Avec les mêmes contraintes, on peut encore faire mieux. On peut
+remettre en question l'approche visant à minimiser les redirections, car cela
+implique d'avoir peu de roulements, qui sont pourtant agréables et propices à la
+mémoire musculaire. Erglace ne devrait cependant pas connaître de changements
+majeurs, s'il y en a, ce sera une nouvelle disposition.
+
+
+## Ressources utilisées
+
+- [Keyboard Layouts Doc](https://bit.ly/keyboard-layouts-doc), ressource théorique très complète
+- La [page de statistiques](https://lysquid.github.io/Erglace/stats) d'Ergo-L
+- [Layout playground](https://o-x-e-y.github.io/layouts/playground/), pour des statistiques complémentaires (LSB, BadRedirects) et du prototypage rapide
+- Les [statistiques de fréquence](https://github.com/Nuclear-Squid/ergol/tree/master/data/corpus) de Ergo-L pour le français et l'anglais
+- [Heatmap d'effort](https://colemakmods.github.io/mod-dh/model.html) des touches du clavier, développée pour Colmak-DH
+- Les retours sur le [discord d'Ergo-L](https://discord.gg/RH34GjQEgC)
diff --git a/www/content/lafayette.md b/www/content/lafayette.md
new file mode 100644
index 00000000..91778dd3
--- /dev/null
+++ b/www/content/lafayette.md
@@ -0,0 +1,63 @@
++++
+title = "Adaptations type « Lafayette »"
+
+[params]
+cssSheets = ["/css/keyboard.css"]
+jsModules = ["/js/x-keyboard.js"]
+jsScripts = ["/js/demo.js", "/js/svg.js"]
++++
+
+Une série de disposition de clavier été adaptées au français et/ou aux claviers
+compacts via une touche « Typo ».
+
+
+QWERTY-Lafayette
+--------------------------------------------------------------------------------
+
+{{< x-keyboard
+ name="QWERTY-Lafayette"
+ download="https://qwerty-lafayette.org"
+ src="/layouts/lafayette.json"
+ image="/img/ergol.svg" >}}
+
+La disposition de clavier par laquelle tout a commencé !
+
+Publiée en 2010, Lafayette est une simple adaptation du QWERTY ANSI au français.
+Aucune optimisation : on a HJKL sur la homerow et c’est très bien ainsi !
+
+C’est cette disposition qui a introduit l’idée d’une touche morte « à tout
+faire » et d’une couche AltGr entièrement dédiée aux symboles de programmation.
+Cette couche de symboles était longtemps annoncée comme « à personnaliser » :
+chaque utilisateur·ice était sensé·e se l’approprier et l’adapter à son langage
+de programmation de prédilection.
+
+Kalamine a ainsi été développé dans le but de faciliter la personnalisation de
+Lafayette. Puis x-keyboard a suivi, afin de pouvoir tester ces dispositions sans
+avoir à les installer. Et de fil en aiguille…
+
+
+Colemak French Touch
+--------------------------------------------------------------------------------
+
+{{< x-keyboard
+ name="QWERTY-Lafayette"
+ download="https://qwerty-lafayette.org"
+ src="/layouts/lafayette.json"
+ image="/img/ergol.svg" >}}
+
+Une adaptation du Colemak au français :
+
+- inversion O/U
+- touche Typo pour les diacritiques francophones
+
+
+Bepolar
+--------------------------------------------------------------------------------
+
+{{< x-keyboard
+ name="QWERTY-Lafayette"
+ download="https://qwerty-lafayette.org"
+ src="/layouts/lafayette.json"
+ image="/img/ergol.svg" >}}
+
+Une adaptation de Bépo aux claviers compacts.
diff --git a/www/content/lts/index.html b/www/content/lts/index.html
new file mode 100644
index 00000000..eeb4c9cf
--- /dev/null
+++ b/www/content/lts/index.html
@@ -0,0 +1,80 @@
++++
+title = "Ergo‑L v0.7 LTS"
+
+[params]
+jsScripts = ['js/svg.js']
++++
+
+{{< x-keyboard image="img/ergol.svg" >}}
+
+
Enregistrer dans /Library/Keyboard Layouts et relancer
+ la session. La disposition de clavier est disponible dans les préférences
+ « Langue et Texte », onglet « Méthodes de saisie ».
+
On peut aussi l’enregistrer dans ~/Library/Keyboard Layouts
+ (pour le seul utilisateur courant), mais la disposition ne sera pas
+ active au login.
+
Il est possible (et recommandé) d’utiliser Karabiner pour inverser les touches
+ ⌘ Command et ⌥ Option à droite, afin d’accéder plus
+ facilement à la couche de symboles.
La disposition de clavier est disponible dans le gestionnaire de
+ préférences du bureau sous un nom générique (« custom layout »,
+ « disposition personnalisée », etc.).
+ Sous XOrg on peut aussi l’activer directement en ligne de commande :
+
+ setxkbmap custom
+
D’autres méthodes d’installation sont possibles, en passant le fichier source à XKalamine.
+
Remarque : avec certains bureaux (Gnome notamment), la touche morte
+ ★ ne fonctionne que si Lafayette est définie comme disposition
+ de par défaut, i.e. en haut de la liste dans les préférences clavier.
+
+
+
+
+
Licence
+
WTFPL
+ – Do What the Fuck You Want to Public License.
diff --git a/img/karabiner_altgr.png b/www/content/lts/karabiner_settings.png
similarity index 100%
rename from img/karabiner_altgr.png
rename to www/content/lts/karabiner_settings.png
diff --git a/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png b/www/content/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png
rename to www/content/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png
diff --git a/slides/CapitoleDuLibre2023/images/ergol_altgr.png b/www/content/slides/CapitoleDuLibre2023/images/ergol_altgr.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/ergol_altgr.png
rename to www/content/slides/CapitoleDuLibre2023/images/ergol_altgr.png
diff --git a/slides/CapitoleDuLibre2023/images/ergolak.png b/www/content/slides/CapitoleDuLibre2023/images/ergolak.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/ergolak.png
rename to www/content/slides/CapitoleDuLibre2023/images/ergolak.png
diff --git a/slides/CapitoleDuLibre2023/images/ferris2.jpg b/www/content/slides/CapitoleDuLibre2023/images/ferris2.jpg
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/ferris2.jpg
rename to www/content/slides/CapitoleDuLibre2023/images/ferris2.jpg
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_bepo.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_bepo.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_bepo.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_bepo.png
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_colemak.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_colemak.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_colemak.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_colemak.png
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_dvorak.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_mtgap.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_qwerty.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png
diff --git a/slides/CapitoleDuLibre2023/images/heatmap_workman.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_workman.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/heatmap_workman.png
rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_workman.png
diff --git a/slides/CapitoleDuLibre2023/images/jeu_reponse.png b/www/content/slides/CapitoleDuLibre2023/images/jeu_reponse.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/jeu_reponse.png
rename to www/content/slides/CapitoleDuLibre2023/images/jeu_reponse.png
diff --git a/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png b/www/content/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png
rename to www/content/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png
diff --git a/slides/CapitoleDuLibre2023/images/kinesis_contour.png b/www/content/slides/CapitoleDuLibre2023/images/kinesis_contour.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/kinesis_contour.png
rename to www/content/slides/CapitoleDuLibre2023/images/kinesis_contour.png
diff --git a/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg b/www/content/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg
rename to www/content/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg
diff --git a/slides/CapitoleDuLibre2023/images/planck2.png b/www/content/slides/CapitoleDuLibre2023/images/planck2.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/planck2.png
rename to www/content/slides/CapitoleDuLibre2023/images/planck2.png
diff --git a/slides/CapitoleDuLibre2023/images/planck_layers.png b/www/content/slides/CapitoleDuLibre2023/images/planck_layers.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/planck_layers.png
rename to www/content/slides/CapitoleDuLibre2023/images/planck_layers.png
diff --git a/slides/CapitoleDuLibre2023/images/top10letters.png b/www/content/slides/CapitoleDuLibre2023/images/top10letters.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/top10letters.png
rename to www/content/slides/CapitoleDuLibre2023/images/top10letters.png
diff --git a/slides/CapitoleDuLibre2023/images/top10letters_ergol.png b/www/content/slides/CapitoleDuLibre2023/images/top10letters_ergol.png
similarity index 100%
rename from slides/CapitoleDuLibre2023/images/top10letters_ergol.png
rename to www/content/slides/CapitoleDuLibre2023/images/top10letters_ergol.png
diff --git a/slides/CapitoleDuLibre2023/index.html b/www/content/slides/CapitoleDuLibre2023/index.html
similarity index 100%
rename from slides/CapitoleDuLibre2023/index.html
rename to www/content/slides/CapitoleDuLibre2023/index.html
diff --git a/slides/CapitoleDuLibre2023/remark.js b/www/content/slides/CapitoleDuLibre2023/remark.js
similarity index 100%
rename from slides/CapitoleDuLibre2023/remark.js
rename to www/content/slides/CapitoleDuLibre2023/remark.js
diff --git a/slides/CapitoleDuLibre2023/style.css b/www/content/slides/CapitoleDuLibre2023/style.css
similarity index 100%
rename from slides/CapitoleDuLibre2023/style.css
rename to www/content/slides/CapitoleDuLibre2023/style.css
diff --git a/slides/CapitoleDuLibre2023/vimrc b/www/content/slides/CapitoleDuLibre2023/vimrc
similarity index 100%
rename from slides/CapitoleDuLibre2023/vimrc
rename to www/content/slides/CapitoleDuLibre2023/vimrc
diff --git a/slides/HumanTalk2022/images/benchmark_ergol.png b/www/content/slides/HumanTalk2022/images/benchmark_ergol.png
similarity index 100%
rename from slides/HumanTalk2022/images/benchmark_ergol.png
rename to www/content/slides/HumanTalk2022/images/benchmark_ergol.png
diff --git a/slides/HumanTalk2022/images/benchmark_qwerty.png b/www/content/slides/HumanTalk2022/images/benchmark_qwerty.png
similarity index 100%
rename from slides/HumanTalk2022/images/benchmark_qwerty.png
rename to www/content/slides/HumanTalk2022/images/benchmark_qwerty.png
diff --git a/slides/HumanTalk2022/images/benchmark_qwerty.png.svg b/www/content/slides/HumanTalk2022/images/benchmark_qwerty.png.svg
similarity index 100%
rename from slides/HumanTalk2022/images/benchmark_qwerty.png.svg
rename to www/content/slides/HumanTalk2022/images/benchmark_qwerty.png.svg
diff --git a/slides/HumanTalk2022/images/benchmark_workman.png b/www/content/slides/HumanTalk2022/images/benchmark_workman.png
similarity index 100%
rename from slides/HumanTalk2022/images/benchmark_workman.png
rename to www/content/slides/HumanTalk2022/images/benchmark_workman.png
diff --git a/slides/HumanTalk2022/images/benchmarks.png b/www/content/slides/HumanTalk2022/images/benchmarks.png
similarity index 100%
rename from slides/HumanTalk2022/images/benchmarks.png
rename to www/content/slides/HumanTalk2022/images/benchmarks.png
diff --git a/slides/HumanTalk2022/images/charge_doigts_azerty.png b/www/content/slides/HumanTalk2022/images/charge_doigts_azerty.png
similarity index 100%
rename from slides/HumanTalk2022/images/charge_doigts_azerty.png
rename to www/content/slides/HumanTalk2022/images/charge_doigts_azerty.png
diff --git a/slides/HumanTalk2022/images/charge_doigts_bepo.png b/www/content/slides/HumanTalk2022/images/charge_doigts_bepo.png
similarity index 100%
rename from slides/HumanTalk2022/images/charge_doigts_bepo.png
rename to www/content/slides/HumanTalk2022/images/charge_doigts_bepo.png
diff --git a/slides/HumanTalk2022/images/top10letters.png b/www/content/slides/HumanTalk2022/images/top10letters.png
similarity index 100%
rename from slides/HumanTalk2022/images/top10letters.png
rename to www/content/slides/HumanTalk2022/images/top10letters.png
diff --git a/slides/HumanTalk2022/index.html b/www/content/slides/HumanTalk2022/index.html
similarity index 100%
rename from slides/HumanTalk2022/index.html
rename to www/content/slides/HumanTalk2022/index.html
diff --git a/slides/HumanTalk2022/remark.js b/www/content/slides/HumanTalk2022/remark.js
similarity index 100%
rename from slides/HumanTalk2022/remark.js
rename to www/content/slides/HumanTalk2022/remark.js
diff --git a/slides/HumanTalk2022/style.css b/www/content/slides/HumanTalk2022/style.css
similarity index 100%
rename from slides/HumanTalk2022/style.css
rename to www/content/slides/HumanTalk2022/style.css
diff --git a/slides/HumanTalk2022/vimrc b/www/content/slides/HumanTalk2022/vimrc
similarity index 100%
rename from slides/HumanTalk2022/vimrc
rename to www/content/slides/HumanTalk2022/vimrc
diff --git a/slides/jdll2022/images/basic-position.png b/www/content/slides/jdll2022/images/basic-position.png
similarity index 100%
rename from slides/jdll2022/images/basic-position.png
rename to www/content/slides/jdll2022/images/basic-position.png
diff --git a/slides/jdll2022/images/ergol42_layout.png b/www/content/slides/jdll2022/images/ergol42_layout.png
similarity index 100%
rename from slides/jdll2022/images/ergol42_layout.png
rename to www/content/slides/jdll2022/images/ergol42_layout.png
diff --git a/slides/jdll2022/images/ergol42_lower.png b/www/content/slides/jdll2022/images/ergol42_lower.png
similarity index 100%
rename from slides/jdll2022/images/ergol42_lower.png
rename to www/content/slides/jdll2022/images/ergol42_lower.png
diff --git a/slides/jdll2022/images/ergol_top10.png b/www/content/slides/jdll2022/images/ergol_top10.png
similarity index 100%
rename from slides/jdll2022/images/ergol_top10.png
rename to www/content/slides/jdll2022/images/ergol_top10.png
diff --git a/slides/jdll2022/images/ergol_top10.svg b/www/content/slides/jdll2022/images/ergol_top10.svg
similarity index 100%
rename from slides/jdll2022/images/ergol_top10.svg
rename to www/content/slides/jdll2022/images/ergol_top10.svg
diff --git a/slides/jdll2022/images/ergol_vide.png b/www/content/slides/jdll2022/images/ergol_vide.png
similarity index 100%
rename from slides/jdll2022/images/ergol_vide.png
rename to www/content/slides/jdll2022/images/ergol_vide.png
diff --git a/slides/jdll2022/images/ergonomic-basics.png b/www/content/slides/jdll2022/images/ergonomic-basics.png
similarity index 100%
rename from slides/jdll2022/images/ergonomic-basics.png
rename to www/content/slides/jdll2022/images/ergonomic-basics.png
diff --git a/slides/jdll2022/images/heatmap_bepo.png b/www/content/slides/jdll2022/images/heatmap_bepo.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_bepo.png
rename to www/content/slides/jdll2022/images/heatmap_bepo.png
diff --git a/slides/jdll2022/images/heatmap_colemak.png b/www/content/slides/jdll2022/images/heatmap_colemak.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_colemak.png
rename to www/content/slides/jdll2022/images/heatmap_colemak.png
diff --git a/slides/jdll2022/images/heatmap_dvorak.png b/www/content/slides/jdll2022/images/heatmap_dvorak.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_dvorak.png
rename to www/content/slides/jdll2022/images/heatmap_dvorak.png
diff --git a/slides/jdll2022/images/heatmap_ergol.png b/www/content/slides/jdll2022/images/heatmap_ergol.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_ergol.png
rename to www/content/slides/jdll2022/images/heatmap_ergol.png
diff --git a/slides/jdll2022/images/heatmap_lafayette.png b/www/content/slides/jdll2022/images/heatmap_lafayette.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_lafayette.png
rename to www/content/slides/jdll2022/images/heatmap_lafayette.png
diff --git a/slides/jdll2022/images/heatmap_workman.png b/www/content/slides/jdll2022/images/heatmap_workman.png
similarity index 100%
rename from slides/jdll2022/images/heatmap_workman.png
rename to www/content/slides/jdll2022/images/heatmap_workman.png
diff --git a/slides/jdll2022/images/mouse-closer.png b/www/content/slides/jdll2022/images/mouse-closer.png
similarity index 100%
rename from slides/jdll2022/images/mouse-closer.png
rename to www/content/slides/jdll2022/images/mouse-closer.png
diff --git a/slides/jdll2022/images/superduck.jpg b/www/content/slides/jdll2022/images/superduck.jpg
similarity index 100%
rename from slides/jdll2022/images/superduck.jpg
rename to www/content/slides/jdll2022/images/superduck.jpg
diff --git a/slides/jdll2022/images/top10letters.png b/www/content/slides/jdll2022/images/top10letters.png
similarity index 100%
rename from slides/jdll2022/images/top10letters.png
rename to www/content/slides/jdll2022/images/top10letters.png
diff --git a/slides/jdll2022/images/touch-type.png b/www/content/slides/jdll2022/images/touch-type.png
similarity index 100%
rename from slides/jdll2022/images/touch-type.png
rename to www/content/slides/jdll2022/images/touch-type.png
diff --git a/slides/jdll2022/index.html b/www/content/slides/jdll2022/index.html
similarity index 100%
rename from slides/jdll2022/index.html
rename to www/content/slides/jdll2022/index.html
diff --git a/slides/jdll2022/remark.js b/www/content/slides/jdll2022/remark.js
similarity index 100%
rename from slides/jdll2022/remark.js
rename to www/content/slides/jdll2022/remark.js
diff --git a/slides/jdll2022/style.css b/www/content/slides/jdll2022/style.css
similarity index 100%
rename from slides/jdll2022/style.css
rename to www/content/slides/jdll2022/style.css
diff --git a/slides/jdll2022/vimrc b/www/content/slides/jdll2022/vimrc
similarity index 100%
rename from slides/jdll2022/vimrc
rename to www/content/slides/jdll2022/vimrc
diff --git a/www/content/stats.html b/www/content/stats.html
new file mode 100644
index 00000000..c048d5b5
--- /dev/null
+++ b/www/content/stats.html
@@ -0,0 +1,145 @@
++++
+title = "Heatmap"
+
+[params]
+description = "Fréquences de touches obtenues avec le “Don Quichotte” de Cervantès."
+cssSheets = ["/css/heatmap.css"]
+jsModules = ["/js/x-keyboard.js", "/js/collapsable-table.js"]
+jsScripts = ["/js/layout-analyzer.js", "/js/demo.js"]
+footer = "powered by [x-keyboard](https://onedeadkey.github.io/x-keyboard)"
++++
+
+
+
+
+
+
+
+
+
+
+
+
+Cette disposition ne sait pas générer un nombre non-négligeable de
+symboles, les résultats sont peu fiables.
+
+
+
+
Métriques
+
+
Charge des doigts
+ /
+
+
+
+
+
+
Digrammes à un doigt
+
+
+
+
+
+
+
Touches doublées
+
+
+
+
+
+
+
+
+ /
+ /
+ /
+
+
+
+
+
+
+
+
+
+
+ /
+ /
+
+
+
+
+
+
+
+
+
+ /
+ /
+ /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mise en garde
+
Ces métriques ne sont pas des cibles d’optimisation !
+
+
+
Lorsqu'une métrique devient un objectif, elle cesse d'être une bonne métrique.
Les chiffres sont aux analystes ce que les lampadaires sont aux ivrognes :
+ ils fournissent bien plus un appui qu'un éclairage.
+
— Jean Dion
+
+
+
+
Notre recommandation : utilisez ces métriques non pour mesurer les qualités
+d’une disposition de clavier, mais pour essayer d’en évaluer le défaut le plus
+gênant. Puis itérez sur votre layout jusqu’à ce que ce que ce défaut soit
+suffisamment réduit… sans en créer un pire ailleurs.
+
+
Et recommencez. :-)
diff --git a/www/hugo.toml b/www/hugo.toml
new file mode 100644
index 00000000..799a19cc
--- /dev/null
+++ b/www/hugo.toml
@@ -0,0 +1,14 @@
+# baseURL = "https://ergol.org"
+relativeURLs = true
+languageCode = "fr"
+title = "Ergo‑L"
+
+[params]
+subtitle = "Ergonomie optimisée pour le français, l’anglais, le code."
+description = "Une disposition de clavier ergonomique de type Colemak, optimisée pour le français, l’anglais et le code."
+
+[security.exec]
+allow = ["pandoc"]
+
+[markup]
+defaultMarkdownHandler = "pandoc"
diff --git a/www/layouts/_default/baseof.html b/www/layouts/_default/baseof.html
new file mode 100644
index 00000000..ce9613a2
--- /dev/null
+++ b/www/layouts/_default/baseof.html
@@ -0,0 +1,17 @@
+
+
+
+ {{ partial "head.html" . }}
+
+
+
+ {{ partial "header.html" . }}
+
+
+ {{ block "main" . }}{{ end }}
+
+
+
+
diff --git a/www/layouts/_default/home.html b/www/layouts/_default/home.html
new file mode 100644
index 00000000..89c84cad
--- /dev/null
+++ b/www/layouts/_default/home.html
@@ -0,0 +1,7 @@
+{{ define "main" }}
+ {{ .Content }}
+
+
+
+
+{{ end }}
diff --git a/www/layouts/_default/list.html b/www/layouts/_default/list.html
new file mode 100644
index 00000000..0dfbd7e5
--- /dev/null
+++ b/www/layouts/_default/list.html
@@ -0,0 +1,8 @@
+{{ define "main" }}
+
+ {{ .Content }}
+ {{ range .Pages }}
+