« Utilisateur:Lawrent » : différence entre les versions

De Disposition de clavier bépo
 
(55 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Ma disposition est récente et subit encore quelques modifications. Si vous souhaitez une version stable, revenez d'ici quelques temps :-) .
Rappel: les emplacements des touches sur une disposition azerty sont indiqués [entre crochets]. Ceux sur le bépo sont {entre accolades}. En clair: [F] et {E} désignent la même touche.


==Disposition complète, encore en cours de changements==
==Nouvelle disposition==
À l'instar de l'[http://www.pvv.org/~hakonhal/main.cgi/keyboard Arensito], monter toutes les touches d'une ligne et utiliser la ligne inférieure comme ligne de modificateurs. Cette disposition est temporaire; à terme je veux refaire une dispo bépo from scratch, comme je l'ai déjà commencé [[Utilisateur:Lawrent/bepo3|ici]].


Sur cette disposition, il n'y a plus de couche overlay. Depuis ma disposition précédente je suis passé sur Arch Linux et je reconfigure les raccourcis claviers de mes applications selon mes besoins (voir [[Utilisateur:Lawrent#i3|plus bas]]). Les modificateurs sont donc:
* maj, altgr, level5: idem avant;
* alt: le modificateur $mod de i3;
* ctrl: le modificateur de l'application en cours, si elle n'est pas "vimifiée".
<source>
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │ È      │ O Œ    │ É      │ P      │ À      │ ¨ ` ≠  │ B  "  │ D      │ L ≤    │ V ≥    │ H      │ Ç      ║                ║
│ TAB    │ è `    │ o œ    │ é &    │ p      │ à      │ ^ ´ =  │ b ^ '  │ d $ 6  │ l < 7  │ v > 8  │ h # 9  │ ç @ %  ║      CAPSLOCK ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║ A Æ    │ U Ù    │ I «    │ E »    │ ;      │ C      │ T      │ N –    │ R      │ S      │ M      │        ║          ║
║ ←——          ║ a æ    │ u ù    │ i (    │ e )    │ , —    │ c \ 0  │ t / 1  │ n - 2  │ r { 3  │ s } 4  │ m % 5  │ ESC    ║  DELETE  ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║    Ê    £      ║ Z ≠    │ Y      │ X ±    │ : ·    │ K      │ ? ≈ ;  │ Q  ±  │ G  =  │ J  (  │ F  )  │ W  :  │        ║        ║
║    ê    €      ║ z =    │ y *    │ x +    │ . …    │ k °    │ ' ! ,  │ q " +  │ g _ -  │ j [ *  │ f ] /  │ w ~ .  │        ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
║          ║        │        │        │    |  │        │        │        │        │        │        │        ║                      ║
║          ║ CTRL  │        │ MAJ    │  ←—'  │ LEVEL5 │        │ WIN    │ SPACE  │ MAJ    │        │ CTRL  ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝
║          ║        ║        ║        ║                                            ║        ║        ║        ║
║          ║        ║        ║        ║                ALTGR                      ║        ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝
</source>
==Ancienne disposition==
<source>
<source>
level 1-2 : lettre et majuscule
level 1-2 : lettre et majuscule
Ligne 9 : Ligne 34 :
level 5 + maj : chiffres en exposant
level 5 + maj : chiffres en exposant
level 5 + altgr: chiffres en indice (plus difficiles à saisir)
level 5 + altgr: chiffres en indice (plus difficiles à saisir)
overlay: remappe les touches utiles hors texte (navigation, lanceur d'applications, etc)


┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│ CAPS  │        │        │        │        │        │ SHUT  │        │        │        │        │        │        ║                ║
│ CAPS  │        │        │        │        │        │ SHUT  │        │        │        │        │        │        ║                ║
│ LOCK  │ ALTGR  │ META  │ TAB    │ CTRL  │        │ DOWN  │        │ CTRL  │ ALT    │ INSERT │        │ ←——    ║ DELETE        ║
│ LOCK  │ ALTGR  │ META  │ TAB    │ CTRL  │        │ DOWN  │        │ CTRL  │ ALT    │ INSERT │        │       ║ DELETE        ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║  O  Œ │ É      │ P      │ H    ≠ │ È      │ ¨ `  ≠ │ V      │ D      │ L ≤    │ B ≥    │ Z      │ Ç      ║      |  ║
║              ║  O  Œ │ É      │ P      │ À      │ È      │ ¨ `  ≠ │ V      │ D      │ L ≤    │ B ≥    │ Z      │ Ç      ║      |  ║
║ ←——          ║  o  œ │ é    & │ p    | │ h    = │ è    ` │ ^ ´  = │ v ^  5 │ d $  6 │ l <  7 │ b >  8 │ z #  9 │ ç @  % ║    ←—'  ║
║ ←——          ║  o  œ │ é    & │ p    | │ à      │ è    ` │ ^ ´  = │ v ^  5 │ d $  6 │ l <  7 │ b >  8 │ z #  9 │ ç @  % ║    ←—'  ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬────────┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬────────┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║ A    Æ │ U    Ù │ I    « │ E    » │ ;      │ C      │ T ~    │ N –    │ R      │ S      │ M      │        ║        ║
║                ║ A    Æ │ U    Ù │ I    « │ E    » │ ;      │ C      │ T ~    │ N –    │ R      │ S      │ M      │        ║        ║
║ ALTGR          ║ a    æ │ u    ù │ i    ( │ e    ) │ ,    — │ c \  0 │ t /  1 │ n -  2 │ r {  3 │ s }  4 │ m %  . │ ALTGR  ║        ║
║ ALTGR          ║ a    æ │ u    ù │ i    ( │ e    ) │ ,    — │ c \  0 │ t /  1 │ n -  2 │ r {  3 │ s }  4 │ m %  . │ ALTGR  ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
║          ║ Ê    £ │ À      │ Y      │ X    ± │ :    · │ K      │ ? ≈    │ Q    ± │ G      │ J      │ F      ║ W                    ║
║          ║ Ê    £ │ H    ≠ │ Y      │ X    ± │ :    · │ K      │ ? ≈    │ Q    ± │ G      │ J      │ F      ║ W                    ║
║ Level5    ║ ê    € │ à      │ y    * │ x    + │ .    … │ k    ° │ ' !  , │ q "  + │ g _  - │ j [  * │ f ]  / ║ w                    ║
║ Level5    ║ ê    € │ h    = │ y    * │ x    + │ .    … │ k    ° │ ' !  , │ q "  + │ g _  - │ j [  * │ f ]  / ║ w                    ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝  
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝  
║          ║        ║        ║        ║  [esp insecable]        [esp insecable]  ║        ║        ║        ║
║          ║        ║        ║        ║  [esp insecable]        [esp insecable]  ║        ║        ║        ║
Ligne 49 : Ligne 75 :
<source>
<source>
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
CAPS  │        │        │        │        │        │ SHUT  │        │        │        │        │        │        ║                ║
      │        │        │        │        │        │       │        │        │        │        │        │        ║                ║
LOCK  │        │ META  TAB    CTRL  │        │ DOWN  │        │ CTRL  ALT    INSERT │        │        ║ DELETE       
      │        │                   │        │       │        │                   │        │        ║              
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
DEL          ║  O  Ö │ É      P      H    ≠ È      ¨ `  ~ V      D      L ≤    B ≥    Z      Ç            | 
            ║  O  Ö │             À  Å                                                        
←——          ║  o  ö │ é    & p    | h    = è    ` ^ ´  , v ^  5 d $  6 l <  7 b >  8 z #  9 ç @  %     ←—' 
            ║  o  ö │             à  å                                                        
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║ A   Ä │ U    Ù I    « E    » ;      C      T –    N      R      S      M      │        ║        ║
║                ║ A   Ä │                                                             │        ║        ║
ALTGR          ║ a   ä │ u    ù i    ( e    ) ,    — c \  0 t -  1 n /  2 r {  3 s }  4 m %  . ALTGR  ║        ║
              a   ä │                                                                   ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
╠═══════════╦════╝───┬────┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴───┬────┴───╔═════════════╩════════╣
║          ║ Ê      À    Å Y      X    ± :    · K      ? ≈  ≠ Q    ± G      J      F      W                   
║          ║                                                                                      
Level5    ê    € à    å y    * x    + .    … k    ° ' !  = q "  + g _  - j [  * f ]  / w                   
                                                                                               
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝  
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝
║          ║        ║        ║        ║   [esp insecable]        [esp insecable]  ║        ║        ║        ║
║          ║        ║        ║        ║                                           ║        ║        ║        ║
ALT      ║        ║ OVERLAY║  MAJ    [space]                  ~              MAJ    ESC    META 
          ║        ║        ║                                                                  
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝
</source>
</source>


Remarque: à partir de 3 touches simultanées, certaines combinaisons de touche n'envoient pas de signal du clavier vers le pc (par exemple sur mon clavier la combinaison maj+altgr (gauche) + n) à cause d'un phénomène appelé ghosting (http://www.microsoft.com/appliedsciences/antighostingexplained.mspx). Lorsqu'on déplace les modificateurs, il arrive que certaines combinaisons de touche s'avèrent impossibles (il faut donc trouver une alternative propre au clavier). Sur Linux, xev affiche dans la console les events envoyés par le clavier et permet de détecter une combinaison de touche interdite.
Remarque: à partir de 3 touches simultanées, certaines combinaisons de touche n'envoient pas de signal du clavier vers le pc (par exemple sur mon clavier la combinaison maj+altgr (gauche) + n) à cause d'un phénomène appelé ghosting (). Lorsqu'on déplace les modificateurs, il arrive que certaines combinaisons de touche s'avèrent impossibles (il faut donc trouver une alternative propre au clavier). Sur Linux, xev affiche dans la console les events envoyés par le clavier et permet de détecter une combinaison de touche interdite.


Pour l'utilisation de l'overlay, attention: toujours relacher la touche pressée <b>avant</b> la touche overlay. Sinon elle reste enfoncée et ça fait des surprises.


==Caractéristiques principales==
===Changements à essayer===
* rendre AltGr symétrique pour pouvoir accéder facilement aux 4 levels de toutes les touches et ainsi rendre les symboles courants en programmation plus accessibles.
* mettre Space+AltGr comme espace insécable.
* <b>ne pas</b> utiliser la ligne des chiffres que je juge trop inaccessible.
* placer ~ (tilde) sur w+altgr et ~ (accent) sur w+altgr+maj
* déplacer les modificateurs (l'idée des majuscules sous les pouces et des ctrl sur la ligne des chiffres vient de [[Utilisateur:Robin|Robin]]). La combinaison maj+altgr s'en voit facilitée des deux côtés.
* ajouter µ sur m+maj+altgr
* placer un pavé numérique sur deux lignes sous la main droite. Ses lignes sont décalées pour équilibrer la charge de l'index et de l'auriculaire.
* swap t<->n ? le N est la consonne la plus fréquente du français, pourquoi ne pas la mettre sur l'index… (+ l'auriculaire droit a énormément de travail puisqu'il a 8 touches à gérer)
* un accès très facile aux flèches directionnelles. Vraiment, ça change la vie.
* swap è<->ê: c'est un détail, mais le è est légèrement plus fréquent en français que le ê, autant le mettre donc sur une touche plus accessible. (Ceci casse la compatibilité avec les claviers à 104 touches, où le ê se tape ^e.)
* les ^ et ~ sont ajoutés comme touches non-mortes pour la programmation
* déplacer META sur le [CTRL] gauche et INSERT sur le [CTRL] droit. J'utilise ces touches une fois toutes les 3 lunes (et je n'utilise jamais les [CTRL]), ça devrait me libérer de la place sur ma ligne des chiffres. Peut-être que je pourrais les remplacer par des caractères peu fréquents, ou trouver un meilleur endroit pour mon Level5? À tester alors, pour faciliter l'alternance entre AltGr gauche et Level5 (fréquents quand on écrit du code):
* les touches spéciales placées sur l'overlay sont fréquemment utilisées sur Linux Mint pour passer d'un écran virtuel à un autre, etc. En plus, MAJ+flèche permet de sélectionnel du texte
** êÊ€£ sur [2]
* altgr est duppliqué sur la ligne des chiffres pour faciliter les raccourcis ctrl-], ctrl-^ et d'autres vimités
** Level5 sur [T]
** Esc sur [Maj] gauche
* Swap PgDw <-> Home
* Pavé numérique à tester:
<source>
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║    │    │    │    │    │    │  "│  6│  7│  8│  9│    ║    ║
║      ║    │    │    │    │    │    │  '│    │    │    │    │    ║    ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │  0│  1│  2│  3│  4│  5│    ║    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │  ;│  ±│  =│  (│  )║  :        ║
║      ║    │    │    │    │    │    │  ,│  +│  -│  *│  /║  .       ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝
</source>
* Carte overlay enrichie pour les combinaisons ctrl-F4, alt-F2, alt-F4, ctrl-tab, ctrl-maj-tab, alt-tab:
<source>
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║      ║    │    │    │    │    │    │PgDw│PgUp│    │    │    │    ║    ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║        ║CTRL│ALT │META│MAJ │    │  ← │  ↓ │  ↑ │  → │ F2 │ F4 │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║          ║
║      ║    │    │    │    │    │    │    │End │Home│    │    ║          ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║OVRL║    ║                  TAB  ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝
</source>
 
 
===Changements par rapport au bépo original===
Avertissement: ne modifiez pas votre disposition bépo :D
 
"Le principal problème de Bépo étant qu’il évolue constamment. Un jour, faudrait leur dire qu’un clavier optimisé à 99% et disponible maintenant est préférable qu’un clavier qui change tout le temps pour être un jour optimisé à 100% alors que bon, de toutes façons, à partir du moment où on demande l’avis des gens, ils seront forcément pas contents." ([http://ploum.net/183-conserver-la-tradition-du-changement-mais-pas-trop/ Ploum])


J'ai également modifié l'emplacement initial de certaines touches:
J'ai déplacé plusieurs touches par rapport au bépo original. Grosso modo, ça s'est fait sur de l'essai-erreur avec deux idées en tête:
* Le B: [[Utilisateur:Robin|Robin]] recommande d'intervertir le J et le B à cause de la fréquence des digrammes ja, aj, bn, nb. Le digramme mb s'en retrouve plus difficile mais on y gagne à faciliter les digrammes bl et br car ils sont effectués par des doigts voisins.
* la place du o et du v: je considère qu'il est plus agréable de déplacer les poignets vers l'extérieur que l'intérieur et je vois mes index sur le [F] et le [J] comme des pivots. Je tape avec les bras en V inversé. Avec cette philosophie en tête, la touche [A] est plus accessible que la touche [R], du coup c'est plus intéressant de placer le O sur le [R]. (Rappelons que le O est 6 fois plus fréquent que le B.) Pareil pour le placement du V.
* Le H : je n'aime vraiment pas la place du H dans le bépo original à cause du digramme ch. Vue la place peu privilégiée du H et la fréquence du J un swap H<->J me semble adéquat.
* le h: parce que je n'aime pas le digramme ch sur le bépo initial. J'ai essayé plusieurs emplacements pour finalement arriver à une position qui me plait. (Note: le H est vraiment pas facile à placer: s'il est à gauche il perturbe les digrammes avec des voyelles, s'il est à droite il lui faut une place qui rende les digrammes CH et TH potables.)
* Le O : ma méthode de saisie (voir plus bas) encourage l'utilisation des pouces comme pivots vers l'extérieur. Je trouve donc les touches O, È, ^ et V particulièrement inaccessibles. Un swap H<->O rend le O plus accessible et facilite les digrammes ou et oi (il ne faut plus «casser» les poignets vers l'intérieur). Dans l'ensemble, ça compense le digramme he concentré sur un seul doigt.
* déplacement du ! : c'est une exception de mettre un signe de ponctuation en altgr, mais le '^' est trop inaccessible à mon goût, et puis ça me permet de faire une touche rien qu'avec les accents morts.
* Le S et le N : pour faciliter les trigrammes des et men.


Bugs:
Notons également que [[Utilisateur:Robin]] recommande de déplacer le B à cause du digramme BA.
* Delete (Maj + Backspace) a un comportement bizarre dans la console et ne fonctionne pas sur firefox


==Utilisation recommandée==
 
* saisie des caractères proche de la [[Méthode de saisie|variante A]] (idée: utiliser les index comme pivots pour les lignes supérieures et "tirer les mains vers l'extérieur" pour la ligne inférieure)
===Modificateurs===
Ça a commencé avec [[Utilisateur:Robin]]: de mémoire il a lancé l'idée de mettre les majuscules sous les pouces, et à partir de là on a décidé de carrément revoir la position de tous les modificateurs. Grosso modo, l'idée c'est:
* maj sous les pouces;
* altgr à l'extérieur de la homerow;
* ctrl sur les majeurs de la ligne des chiffres.
Ensuite on a d'autres trucs comme:
* backspace sur tab pour le rendre plus accessible (vraiment très agréable!);
* tab sur la rangée des chiffres à gauche (surtout pas à droite) parce qu'il est souvent suivi d'un enter.
Et le reste c'est des touches que j'utilise peu souvent et que j'ai placées là, pour quand j'en ai besoin
 
À avoir en tête quand on modifie l'emplacement des modificateurs: le ghosting. Le ghosting est dû à la manière dont est conçu un clavier, c'est un problème de hardware. Grosso modo, chaque clavier est garanti de pouvoir reconnaitre 2 touches difféerentes quand elles sont pressées simultanément. Mais à partir de 3 touches simultanées, à cause de la manière dont est généralement conçu un clavier, on trouve certaines combinaisons de touche où la 3e touche n'est pas reconnue (voir explication [http://www.microsoft.com/appliedsciences/antighostingexplained.mspx ici]. Bref, sur mon clavier, le raccourci [AltGauche + CapsLock + L] est une de ces combinaisons interdites. Du coup, sur ma disposition, {AltGr+Maj+R} n'envoie que AltGr+Maj à l'OS. À la base je voulais mettre mon pavé numérique en AltGr+Maj mais ce problème m'a détourné vers la couche level5.
 
Sous linux, <code>xev</code> est un programme qui affiche dans la console les events enregistrés par le clavier et de la souris (incluant une tonne d'infos). Pour détecter si une combinaison de touche est maudite, il suffit de lancer le programme et voir si xev réagit à la combinaison. Pour filtrer la sortie du programme et n'afficher que la ligne qui nous intéresse, on peut lancer
<source>xev | grep "keycode"</source>
 
===Overlay===
L'overlay est une fonctionnalité d'xkb: presser une certaine touche donne accès à une nouvelle couche de touches. On pourrait dire que c'est un modificateur, mais ça ne l'est pas. La différence majeure entre, disons, maj+E et overlay+E, c'est que:
* placer CTRL sur maj+E bugge (et d'autres touches aussi);
* overlay+E est un lien vers une autre touche (disons, celle qui est associée à CTRL). Et bizarrement ça bugge moins.
Malheureusement, cette fonctionnalité n'existe (je pense) que dans xkb. Sous windows ou en mode console (le truc linux où on appuye sur ctrl+alt+F1 et dont on sort en appuyant sur ctrl+alt+F8), comme ce n'est pas xkb qui gère le clavier, je doute qu'on puisse implémenter cette couche overlay. À voir.
 
Ma couche overlay a été penée pour les touches que j'utilise fréquemment « hors saisie de texte ». Certains sont universels, d'autres sont spécifiques à certains environnements de bureau (Cinnamon et Gnome2, et probablement quelques autres)
* les touches fléchées à la vim (ça change la vie de les avoir sur la homerow)
* ctrl-alt-flèche change de bureau virtuel
* ctrl-alt-maj-flèche déplace une fenêtre de bureau virtuel
* super-flèche redimensionne la fenêtre
* alt-f2 est le lanceur d'application
* alt-f4 est bien connu pour fermer une application
* alt-tab et alt-maj-tab basculent d'une fenêtre à l'autre
* ctrl-tab et ctrl-maj-tab basculent d'un onglet à l'autre sur firefox et chrome
* ctrl-flèche, sur la plupart des applications, permet de naviguer mot par mot (et non caractère par caractère)
* maj-flèche et ctrl-maj-flèche surlignent du texte.
Ici aussi il faut faire atttention à l'emplacement des touches si on veut éviter les touches fantômes.
 
Note: toujours relacher la touche pressée <b>avant</b> la touche overlay. Sinon elle reste enfoncée et ça fait des surprises.
 
===Méthode de saisie===
Comme écrit plus haut, elle est proche de la [[Méthode_de_saisie#Variante_.C2.AB_A_.C2.BB|variante A]] (idée: utiliser les index comme pivots pour les lignes supérieures et "tirer les mains vers l'extérieur" pour la ligne inférieure)
<source>┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
<source>┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ 1  │ 1  │ 1  │    │ 1  │    │ 1  │ 1  │    │ 1  │    │    │    ║        ║
│ 1  │ 1  │ 1  │    │ 1  │    │ 1  │ 1  │    │ 1  │    │    │    ║        ║
Ligne 103 : Ligne 207 :
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝</source>
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝</source>
* usage du caps lock: en fait, cette touche est très utile! Par exemple, pour écrire LASER, je tape: <caps lock>laser<caps lock>. Pas besoin de faire danser les auriculaires sur maj gauche et maj droit.


==Apprentissage==
===Installation (Linux)===
réécrire)
====En console====
En mode console (par exemple, quand on fait ctrl-alt-f2, attention que pour revenir à l'interface graphique il faut appuyer sur ctrl-alt-f8), ce n'est pas xkb qui gère la disposition du clavier mais loadkeys. Du coup, il faut également configurer loadkeys si on est sur une version bidouillée. Lire [https://wiki.archlinux.org/index.php/Extra_keyboard_keys_in_console la page du wiki d'Arch] pour voir comment s'y prendre: on peut déplacer les ctrl, alt et autres maj ou caps-lock où on veut, mais c'est pas certain qu'il existe un mode overlay…


==Installation (Linux)==
Plus généralement, c'est le package [http://kbd-project.org/www.win.tue.nl/~aeb/linux/kbd/kbd-2.html kbd] qui prend la gestion du clavier en charge.
<code>man keymaps</code> donne des infos sur comment écrire ses fichiers loadkeys.
 
====XKB====
* Copier le code suivant à la fin du fichier {{c|/usr/share/X11/xkb/symbols/fr}} (les touches non-affectées sont toutes affectées à §).
* Copier le code suivant à la fin du fichier {{c|/usr/share/X11/xkb/symbols/fr}} (les touches non-affectées sont toutes affectées à §).
* Remplacer le fichier {{c|xkb/types/level5}} par celui proposé ici (dans mes souvenirs avec le type "EIGHT_LEVEL_SEMIALPHABETIC", "CAPS_LOCK + Level5" agit comme "Shift + Level5" alors que "CAPS_LOCK" ne devrait pas avoir d'influence sur le pavé numérique)
* (Note personnelle: ajouter également le fichier dans xkb/types/ dans lequel j'ai modifié la définition du tye EIGHT_LEVEL_SEMIALPHABETIC)
* Pour activer la disposition, lancer la commande {{c|setxkbmap fr bepo2}}
* Pour activer la disposition, lancer la commande {{c|setxkbmap fr bepo2}}
* Pour activer la disposition par défaut, modifier le fichier {{c|xorg.conf}} ({{c|locate xorg.conf}} pour le trouver) ou {{c|/etc/default/keyboard}} sur les dernières versions d'Ubuntu/Linux Mint avec les lignes
* Pour activer la disposition par défaut, modifier le fichier {{c|xorg.conf}} ({{c|locate xorg.conf}} pour le trouver) ou {{c|/etc/default/keyboard}} ou {{c|/etc/X11/xorg.conf.d/10-keyboard.conf}} avec les lignes
<source lang="bash">XKBLAYOUT="fr"
<source lang="bash">XKBLAYOUT="fr"
XKBVARIANT="bepo2"</source>
XKBVARIANT="bepo2"</source>
* Après chaque modification ultérieure, lancer commande {{c|sudo sudo rm /var/lib/xkb/*}} (copier préalablement le contenu du dossier {{c|/var/lib/xkb/}} par sécurité...). Pour tester la validité des modifications, lancer {{c|xkbcomp /usr/share/X11/xkb/symbols/fr}} (s'il n'y a pas de sortie, c'est que c'est bon).
* Après chaque modification ultérieure, lancer commande {{c|sudo sudo rm /var/lib/xkb/*}}. Pour tester la validité des modifications, lancer {{c|xkbcomp /usr/share/X11/xkb/symbols/fr}} (s'il n'y a pas de sortie, c'est que c'est bon).


<b>Note: ce fichier n'est pas à jour</b>
<source lang="bash">
<source lang="bash">
!!!!!!!!!!! N'EST PAS À JOUR !!!!!!!!!!!!!!!!!!
// a ajouter dans xkb/symbols/french
// a ajouter dans xkb/symbols/french


Ligne 127 : Ligne 236 :
     name[Group1]= "French (Bepo2, ergonomic, derived from the Bepo by Laurent Van Eesbeeck)";
     name[Group1]= "French (Bepo2, ergonomic, derived from the Bepo by Laurent Van Eesbeeck)";
   
   
     key <TLDE> { type[group1] = "ONE_LEVEL", [ Caps_Lock         ]};
     key <TLDE> { type[group1] = "ONE_LEVEL", [ Caps_Lock         ]};
     key <AE01> { type[group1] = "ONE_LEVEL", [ ISO_Level3_Shift ]};
     key <AE01> { type[group1] = "ONE_LEVEL", [ ISO_Level3_Shift   ]};
     key <AE02> { type[group1] = "ONE_LEVEL", [ section          ]};
     key <AE02> { type[group1] = "ONE_LEVEL", [ Super_L            ]};
     key <AE03> { type[group1] = "ONE_LEVEL", [ Alt_L            ]};
     key <AE03> { type[group1] = "TWO_LEVEL", [ Tab , ISO_Left_Tab ]};
     key <AE04> { type[group1] = "ONE_LEVEL", [ Control_L         ]};
     key <AE04> { type[group1] = "ONE_LEVEL", [ Control_L         ]};
     key <AE05> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE05> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE06> { type[group1] = "ONE_LEVEL", [ section          ]};
     key <AE06> { type[group1] = "ONE_LEVEL", [ Terminate_Server  ]};
     key <AE07> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE07> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE08> { type[group1] = "ONE_LEVEL", [ Control_R         ]};
     key <AE08> { type[group1] = "ONE_LEVEL", [ Control_R         ]};
     key <AE09> { type[group1] = "ONE_LEVEL", [ Super_R          ]};
     key <AE09> { type[group1] = "ONE_LEVEL", [ Alt_L              ]};
     key <AE10> { type[group1] = "ONE_LEVEL", [ section          ]};
     key <AE10> { type[group1] = "ONE_LEVEL", [ Insert            ]};
     key <AE11> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE11> { type[group1] = "ONE_LEVEL", [ section           ]};
     key <AE12> { type[group1] = "ONE_LEVEL", [ Insert            ]};
     key <AE12> { type[group1] = "ONE_LEVEL", [ Backspace          ]};
     key <BKSP> { type[group1] = "ONE_LEVEL", [ Delete           ]};
     key <BKSP> { type[group1] = "ONE_LEVEL", [ Delete             ]};


     key <TAB>  { type[group1] = "ONE_LEVEL"                 , [ BackSpace                                                               ]};
     key <TAB>  { type[group1] = "ONE_LEVEL"               , [ BackSpace     ]};
     key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ j             , J            , grave          , section                ]};
//    key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ o              , O            , oe        , OE                      ]};
     key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ eacute        , Eacute       , ampersand     , section                ]};
     key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ o             , O            , odiaeresis , Odiaeresis              ]};
     key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ p              , P           , bar           , section                ]};
     key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ eacute        , Eacute       , ampersand , section                ]};
     key <AD04> { type[group1] = "FOUR_LEVEL_ALPHABETIC"     , [ o              , O            , oe            , OE                      ]};
     key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ p              , P             , bar       , section                ]};
     key <AD05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ egrave        , Egrave       , section        , section                ]};
     key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ agrave      , Agrave      , aring          , Aring          ]};
     key <AD06> { type[group1] = "EIGHT_LEVEL"              , [ dead_circumflex, dead_acute   , dead_diaeresis , dead_grave      , comma ], overlay1=<FK13>};
     key <AD05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ egrave        , Egrave       , grave      , section                ]};
     key <AD07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ v              , V           , asciicircum   , section        , 5, 5 ], overlay1=<PGDN>};
     key <AD06> { type[group1] = "EIGHT_LEVEL"              , [ dead_circumflex, dead_diaeresis, dead_acute , dead_grave      , equal, notequal  ]};
     key <AD08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ d              , D           , underscore     , section        , 6, 6 ], overlay1=<PGUP>};
     key <AD07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ v              , V             , asciicircum, section        , 5, fivesuperior , fivesubscript ], overlay1=<PGDN>};
     key <AD09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ l              , L           , less           , lessthanequal  , 7, ], overlay1=<FK14>};
     key <AD08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ d              , D             , dollar     , section        , 6, sixsuperior , sixsubscript  ], overlay1=<PGUP>};
     key <AD10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ b              , B           , greater       , greaterthanequal, 8, ]};
     key <AD09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ l              , L             , less       , lessthanequal  , 7, sevensuperior, sevensubscript ]};
     key <AD11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ z              , Z           , numbersign     , section        , 9, 9 ]};
     key <AD10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ b              , B             , greater   , greaterthanequal, 8, eightsuperior, eightsubscript ]};
     key <AD12> { type[group1] = "TWO_LEVEL"                 , [ Tab            , Iso_Left_Tab                                            ]};
     key <AD11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ z              , Z             , numbersign , section        , 9, ninesuperior , ninesubscript ]};
     key <RTRN> { type[group1] = "ONE_LEVEL"                , [ Return                                                                   ]};
     key <AD12> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ ccedilla      , Ccedilla      , at        , section        , percent, percent                ]};
     key <RTRN> { type[group1] = "ONE_LEVEL"                , [ Return                                                               ]};


     key <CAPS> { type[group1] = "ONE_LEVEL"                , [ ISO_Level3_Shift                                                       ],  overlay1=<ESC> };
     key <CAPS> { type[group1] = "ONE_LEVEL"                , [ ISO_Level3_Shift                                           ]};
     key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC"    , [ a                , A        , ae        , AE                        ],  overlay1=<AE04>};
//    key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC"    , [ a                , A        , ae        , AE            ],  overlay1=<AE04>};
     key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC"    , [ u                , U        , ugrave    , Ugrave                     ],  overlay1=<RCTL>};
     key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC"    , [ a                , A        , adiaeresis , Adiaeresis    ],  overlay1=<AE04>};
     key <AC03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ i                , I        , parenleft  , leftdoublequotemark        ],  overlay1=<LCTL>};
     key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC"    , [ u                , U        , ugrave    , Ugrave         ],  overlay1=<LCTL>};
     key <AC04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ e                , E        , parenright , rightdoublequotemark      ],  overlay1=<LALT>};
     key <AC03> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ i                , I        , parenleft  , guillemotleft  , parenleft , parenleft , parenleft    ],  overlay1=<RCTL>};
     key <AC05> { type[group1] = "FOUR_LEVEL"                , [ comma            , semicolon , minus      , emdash                    ]};
     key <AC04> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ e                , E        , parenright , guillemotright , parenright, parenright, parenright    ],  overlay1=<LALT>};
     key <AC06> { type[group1] = "EIGHT_LEVEL_ALPHABETIC"    , [ c                , C        , ccedilla  , Ccedilla , period , period ],  overlay1=<LEFT>};
     key <AC05> { type[group1] = "FOUR_LEVEL"                , [ comma            , semicolon , emdash    , section        ]};
     key <AC07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ t                , T        , backslash  , section  , 0     , 0      ],  overlay1=<DOWN>};
     key <AC06> { type[group1] = "EIGHT_LEVEL_ALPHABETIC"    , [ c                , C        , backslash  , section        , 0      , zerosuperior , zerosubscript ],  overlay1=<LEFT>};
     key <AC08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ s               , S         , dollar    , section  , 1     , 1      ],  overlay1=<UP>};
     key <AC07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ t                , T        , slash      , dead_tilde    , 1     , onesuperior  , onesubscript  ],  overlay1=<DOWN>};
     key <AC09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ r                , R        , braceleft  , section , 2     , 2      ],  overlay1=<RGHT>};
     key <AC08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ n               , N         , minus      , endash        , 2     , twosuperior  , twosubscript  ],  overlay1=<UP>};
     key <AC10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ n               , N         , braceright , section , 3     , 3      ]};
     key <AC09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ r                , R        , braceleft  , section       , 3     , threesuperior, threesubscript],  overlay1=<RGHT>};
     key <AC11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ m                , M        , percent    , section , 4      , 4      ]};
     key <AC10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ s               , S         , braceright , section       , 4     , foursuperior , foursubscript ]};
     key <BKSL> { type[group1] = "ONE_LEVEL"                , [ ISO_Level3_Shift                                                       ]};
     key <AC11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ m                , M        , percent    , section       , period , period ]};
     key <BKSL> { type[group1] = "ONE_LEVEL"                , [ ISO_Level3_Shift                                   ]};


     key <LFSH> { type[group1] = "ONE_LEVEL"                , [ ISO_Level5_Shift                                       ]};
     key <LFSH> { type[group1] = "ONE_LEVEL"                , [ ISO_Level5_Shift                                           ]};
     key <LSGT> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ ecircumflex , Ecircumflex , EuroSign     , section      ]};
     key <LSGT> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ ecircumflex , Ecircumflex , EuroSign       , sterling      ]};
     key <AB01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ agrave      , Agrave     , at          , section      ]};
     key <AB01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ h              , H            , equal     , notequal                ]};
     key <AB02> { type[group1] = "ALPHABETIC"               , [ y          , Y          , bar          , section     ]};
     key <AB02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ y          , Y          , asterisk      , section       ]};
     key <AB03> { type[group1] = "ALPHABETIC"               , [ x          , X          , ampersand    , section     ]};
     key <AB03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ x          , X          , plus          , plusminus     ]};
     key <AB04> { type[group1] = "FOUR_LEVEL"                , [ period      , colon      , ellipsis     , section      ]};
     key <AB04> { type[group1] = "FOUR_LEVEL"                , [ period      , colon      , ellipsis       , periodcentered ]};
     key <AB05> { type[group1] = "ALPHABETIC"               , [ k          , K                                         ]};
     key <AB05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ k          , K           , degree        , section        ]};
     key <AB06> { type[group1] = "EIGHT_LEVEL"              , [ apostrophe  , question    , exclam      , notequal , equal   , approxeq ]};
     key <AB06> { type[group1] = "EIGHT_LEVEL"              , [ apostrophe  , question    , exclam         , approxeq       , comma   ]};
     key <AB07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ q          , Q          , quotedbl     , section , plus    , plus    ], overlay1=<HOME>};
     key <AB07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ q          , Q          , quotedbl       , section       , plus    , plusminus], overlay1=<END>};
     key <AB08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ g          , G          , degree      , section , minus    , minus    ], overlay1=<END>};
     key <AB08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ g          , G          , underscore    , section       , minus    , minus    ], overlay1=<HOME>};
     key <AB09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ h           , H           , bracketleft , section , asterisk , asterisk ]};
     key <AB09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ j           , J           , bracketleft   , section       , asterisk , asterisk ]};
     key <AB10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ f          , F          , bracketright , section , slash    , slash    ]};
     key <AB10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ f          , F          , bracketright   , section       , slash    , slash    ]};
     key <RTSH> { type[group1] = "ALPHABETIC"                , [ w          , W                                       ]};
     key <RTSH> { type[group1] = "ALPHABETIC"                , [ w          , W                                             ]};


     key <LCTL> { type[group1] = "ONE_LEVEL"                , [ Super_L                                                            ]};
     key <LCTL> { type[group1] = "ONE_LEVEL"                , [ Alt_L                                                        ]};
     key <LWIN> { type[group1] = "ONE_LEVEL"                , [ VoidSymbol ]  , actions = [ SetControls(controls=Overlay1)         ]};
     key <LWIN> { type[group1] = "ONE_LEVEL"                , [ VoidSymbol ]  , actions = [ SetControls(controls=Overlay1) ]};
     key <LALT> { type[group1] = "ONE_LEVEL"                , [ Shift_L                                                             ]};
     key <LALT> { type[group1] = "ONE_LEVEL"                , [ Shift_L                                                     ]};
     key <SPCE> { type[group1] = "FOUR_LEVEL"              , [ space          , nobreakspace  , asciitilde         , space        ]};
     key <SPCE> { type[group1] = "FOUR_LEVEL"              , [ space          , nobreakspace  , asciitilde , nobreakspace  ]};
     key <RALT> { type[group1] = "ONE_LEVEL"                , [ Shift_R                                                             ]};
     key <RALT> { type[group1] = "ONE_LEVEL"                , [ Shift_R                                                     ]};
     key <MENU> { type[group1] = "ONE_LEVEL"                , [ VoidSymbol ]  , actions = [ SetControls(controls=Overlay1)        ]};
     key <MENU> { type[group1] = "ONE_LEVEL"                , [ Escape                                                      ]};
     key <RCTL> { type[group1] = "ONE_LEVEL"                , [ Alt_R                                                              ]};
     key <RCTL> { type[group1] = "ONE_LEVEL"                , [ Super_R                                                      ]};
   
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock    { Caps_Lock }; // caps lock
    modifier_map Control { Control_L, Control_R };
    modifier_map Mod5    { ISO_Level3_Shift }; // altgr
    modifier_map Mod3    { ISO_Level5_Shift }; // Level5
};
</source>
 
<source lang="bash">
partial default xkb_types "default" {
    // Definition for a key type used for the czech keymap, for instance.
    // Defines style a with four level shift. It is similar to three_level
    // type used for iso9995 but it lets the shift key behave "normally".


     // fake key for overlay
     virtual_modifiers LevelThree,ScrollLock,LevelFive;
    key <FK13> { type[group1] = "ONE_LEVEL", [ XF86Back    ] };
    key <FK14> { type[group1] = "ONE_LEVEL", [ XF86Forward ] };


      
     type "EIGHT_LEVEL" {
     modifier_map Shift { Shift_L, Shift_R }; // shift
        modifiers = Shift+LevelThree+LevelFive;
    modifier_map Lock { Caps_Lock }; // caps lock
map[None] = Level1;
    modifier_map Control { Control_L, Control_R };
map[Shift] = Level2;
     modifier_map Mod5 { ISO_Level3_Shift }; // altgr
map[LevelThree] = Level3;
    modifier_map Mod3 { ISO_Level5_Shift }; // Level5
map[Shift+LevelThree] = Level4;
};</source>
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
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_ALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock]  = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] =  Level4;
        map[Lock+Shift+LevelThree] = Level3;
 
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive]  = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] =  Level8;
        map[Lock+Shift+LevelThree+LevelFive] = Level7;
 
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_LEVEL_FIVE_LOCK" {
//    // Level5-Lock is implemented by using NumLock, because a real modifier
//    // is required.
//   
//        modifiers = Shift + Lock + 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]                    = Level7;
//        map[LevelFive+LevelThree+Shift]              = Level8;
//
//        map[NumLock]                                = Level5;
//        map[NumLock+Shift]                          = Level6;
//        map[NumLock+LevelThree]                      = Level7;
//        map[NumLock+LevelThree+Shift]                = Level8;
//
//        map[NumLock+LevelFive]                      = Level1;
//        map[NumLock+LevelFive+Shift]                = Level2;
//        map[NumLock+LevelFive+LevelThree]            = Level3;
//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
//
//        // Lock has no effect
//        map[Lock]                                    = Level1;
//        map[Lock+Shift]                              = Level2;
//        map[Lock+LevelThree]                        = Level3;
//        map[Lock+LevelThree+Shift]                  = Level4;
//
//        map[Lock+LevelFive]                          = Level5;
//        map[Lock+LevelFive+Shift]                    = Level6;
//        map[Lock+LevelFive+LevelThree]              = Level7;
//        map[Lock+LevelFive+LevelThree+Shift]        = Level8;
//
//        map[Lock+NumLock]                            = Level5;
//        map[Lock+NumLock+Shift]                      = Level6;
//        map[Lock+NumLock+LevelThree]                = Level7;
//        map[Lock+NumLock+LevelThree+Shift]          = Level8;
//
//        map[Lock+NumLock+LevelFive]                  = Level1;
//        map[Lock+NumLock+LevelFive+Shift]            = Level2;
//        map[Lock+NumLock+LevelFive+LevelThree]      = Level3;
//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
//
//        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_ALPHABETIC_LEVEL_FIVE_LOCK" {
//    // Level5-Lock is implemented by using NumLock, because a real modifier
//    // is required.
//   
//        modifiers = Shift + Lock + 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]                    = Level7;
//        map[LevelFive+LevelThree+Shift]              = Level8;
//
//        map[NumLock]                                = Level5;
//        map[NumLock+Shift]                          = Level6;
//        map[NumLock+LevelThree]                      = Level7;
//        map[NumLock+LevelThree+Shift]                = Level8;
//
//        map[NumLock+LevelFive]                      = Level1;
//        map[NumLock+LevelFive+Shift]                = Level2;
//        map[NumLock+LevelFive+LevelThree]            = Level3;
//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
//
//        // Lock interchanges Level1 and Level2
//        map[Lock]                                    = Level2;
//        map[Lock+Shift]                              = Level1;
//        map[Lock+LevelThree]                        = Level3;
//        map[Lock+LevelThree+Shift]                  = Level4;
//
//        map[Lock+LevelFive]                          = Level5;
//        map[Lock+LevelFive+Shift]                    = Level6;
//        map[Lock+LevelFive+LevelThree]              = Level7;
//        map[Lock+LevelFive+LevelThree+Shift]        = Level8;
//
//        map[Lock+NumLock]                            = Level5;
//        map[Lock+NumLock+Shift]                      = Level6;
//        map[Lock+NumLock+LevelThree]                = Level7;
//        map[Lock+NumLock+LevelThree+Shift]          = Level8;
//
//        map[Lock+NumLock+LevelFive]                  = Level2;
//        map[Lock+NumLock+LevelFive+Shift]            = Level1;
//        map[Lock+NumLock+LevelFive+LevelThree]      = Level4;
//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
//
//        preserve[LevelFive+Shift] = Shift;
//        preserve[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_SEMIALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock]  = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] =  Level3;
        map[Lock+Shift+LevelThree] = Level4;
 
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive]  = Level5;
map[Lock+Shift+LevelFive]  = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] =  Level7;
        map[Lock+Shift+LevelThree+LevelFive] = Level8;
 
preserve[Lock+LevelThree] = Lock;
preserve[Lock+Shift+LevelThree] = Lock;
preserve[Lock+LevelFive] = Lock;
preserve[Lock+Shift+LevelFive] = Lock;
preserve[Lock+LevelThree+LevelFive] = Lock;
preserve[Lock+Shift+LevelThree+LevelFive] = Lock;
 
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";
    };
 
};
</source>
 
=Ergonomie de mon système=
Pour citer [https://www.youtube.com/watch?v=SkdrYWhh-8s Ben Orenstein]:
 
<cite>Je <i>déteste</i> mon clavier. Je n'utilise jamais deux frappes de clavier si je peux n'en utiliser qu'une.<br>
[…]<br>
Évitez les fichiers de configuration (.vimrc) préécrits par d'autres. Commencez par un .vimrc vide et remplissez-le au fur et à mesure de vos besoins.
</cite>
 
Auquel j'ajoute le conseil suivant: n'ayez pas peur de remapper une fonction sur un raccourci clavier déjà existant. Si vous ne connaissez pas/n'utilisez pas ce raccourci, vous n'y perdez rien.
 
Et mes conseils pour remapper/créer des raccourcis claviers:
* trouvez un moyen mnémotechnique entre la fonction et le raccourci clavier, même absurde: sous gmail, <code>p</code> est associé à la fonction répondre (mnémo: ré[p]ondre)
* associez de préférence vos raccourcis clavier sur la homerow: sous gmail, j'ai associé <code>e</code> à la fonction archiver parce que c'est la lettre la plus accessible sur le clavier
* pour les vimistes: si vous êtes à court de raccourcis clavier pour vos fonctions, n'ayez pas peur des trigrammes faciles (par exemple, {aui} ou {ane}).
 
==VIM (en cours de changements)==
<b>Ce .vimrc n'est pas à jour et date de l'époque où j'avais interverti N et S</b>


==VIM==
Comme j'ai interverti le N et le S, le [[Vim#.7E.2F.vimrc|fichier de configuration]] de VIM doit être modifié en conséquence:
Comme j'ai interverti le N et le S, le [[Vim#.7E.2F.vimrc|fichier de configuration]] de VIM doit être modifié en conséquence:
* flèches directionnelles:
* flèches directionnelles:
Ligne 218 : Ligne 559 :
** k = cherche la prochaine occurrence de <i>pattern</i> (après /<i>pattern</i>), K = cherche l'occurrence précédente
** k = cherche la prochaine occurrence de <i>pattern</i> (après /<i>pattern</i>), K = cherche l'occurrence précédente


Le fichier ~/.vimrc.bepo est alors le suivant:
Au passage j'ai aussi modifié la gestion des fenêtres, avec deux modificateurs (presque) symétriques: à et w. Il y a aussi d'autres modifications au passage que je ne sais pas si je garderai (remapper ê sur 0).
<source>" {W} -> [É]
 
" ——————————
Mon fichier ~/.vimrc.bepo est alors le suivant:
" On remappe W sur É :
<source>" I. Les commandes de base
noremap é w
" azerty  bépo  signification (minuscule)                signification (majuscule)
noremap É W
" ----------------------------------------------------------------------------------
" Corollaire, pour effacer/remplacer un mot quand on n’est pas au début (daé / laé).
"   H      C    flèche gauche                            début d'écran
" (attention, cela diminue la réactivité du {A}…)
"    J      T    flèche bas                              fusionne deux lignes
noremap aé aw
"   K      N    flèche haut                              lance :!man sur le mot courant
noremap aÉ aW
"    L      R    flèche droite                            fin d'écran
" Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W :
"    C      L    supprime <mvt> puis insert              supprime la fin de ligne puis insert
noremap w <C-w>
"    T      J    va à l'emplacement avant le <x> suivant  va après le <x> précédent
noremap W <C-w><C-w>
"   N      K    relance / et ?                          relance / et ? dans l'autre sens
   
"    R      H    remplace le caractère sous le curseur    mode remplacement
" [HJKL] -> {CTNR}
"    W      É    mouvement jusqu'au prochain mot         jusqu'au prochain MOT
" ————————————————
 
" {cr} = « gauche / droite »
" II. La gestion des fenêtres
" azerty bépo signification (minuscule) signification (majuscule) mnémo (bépo)
" ----------------------------------------------------------------------------------------------------------
" <C-W> à préfixe pour la gestion des fenêtres, à gauche sur le clavier
" <C-W> w préfixe pour la gestion des fenêtres, à droite sur le clavier
" <C-W><C-W> À bascule vers la fenêtre précédente (cycle sur toutes les fenêtres)
" <C-W>p W bascule vers la fenêtre précédente (alterne entre 2)
" <C-W>h àc va à la fenêtre à gauche déplace la fenêtre à l'extrême gauche
" <C-W>j àt va à la fenêtre en bas déplace la fenêtre à l'extrême bas
" <C-W>k àn va à la fenêtre en haut déplace la fenêtre à l'extrême haut
" <C-W>l àr va à la fenêtre à droite déplace la fenêtre à l'extrême droite
" <C-W>c we ferme la fenêtre courante (rien) exit
" <C-W>t wh va à la fenêtre supérieure déplace la fenêtre vers un nouveau tab haut
" <C-W>n ww ouvre une nouvelle fenêtre (rien) window
" <C-W>r wt/wn déplace la fenêtre un cran vers le bas/vers le haut t/n (flèches)
" :vsplit<CR> à<CR> divise la fenêtre verticalement
" :split<CR> à<SPACE>divise la fenêtre horizontalement
 
" Remappage d'une touche en azerty: noremap bépo azerty
 
" remappage de h, H
noremap c h
noremap c h
noremap r l
noremap C H
" {tn} = « haut / bas »
 
" remappage de j, gj, zj, J, gJ
noremap t j
noremap t j
noremap gt gj
noremap zn zj
noremap T J
noremap gT gJ
" remappage de k, gk, zk, K
noremap n k
noremap n k
" {CR} = « haut / bas de l'écran »
noremap gn gk
noremap C H
noremap zt zk
noremap N K
 
" remappage de l, L
noremap r l
noremap R L
noremap R L
" {TS} = « joindre / aide »
 
noremap T J
" remappage de c, C
noremap N K
noremap l c
" Corollaire : repli suivant / précédent
noremap L C
noremap zn zj
 
noremap zt zk
" remappage de t, T
" {HJKL} <- [CTNR]
" ————————————————
" {J} = « Jusqu'à »            (j = suivant, J = précédant)
noremap j t
noremap j t
noremap J T
noremap J T
" {L} = « Change »            (l = attend un mvt, L = jusqu'à la fin de ligne)
 
noremap l c
" remappage de n, N
noremap L C
noremap k n
" {H} = « Remplace »          (h = un caractère slt, H = reste en « Remplace »)
noremap K N
 
" remappage de r, R
noremap h r
noremap h r
noremap H R
noremap H R
" {K} = « Recherche »          (k = suivant, K = précédent)
 
noremap k n
" remappage de w, W, aw, aW, iw, iW (les text objects du mot courant)
noremap K N
noremap é w
noremap É W
onoremap aé aw
onoremap aÉ aW
onoremap ié iw
onoremap iÉ iW
 
   
   
" Désambiguation de {g}
" Navigation des onglets
" —————————————————————
" ligne écran précédente / suivante (à l'intérieur d'une phrase)
noremap gn gk
noremap gt gj
" onglet précédant / suivant
" onglet précédant / suivant
noremap gb gT
noremap gb gT
noremap gé gt
noremap gé gt
" optionnel : {gB} / {gÉ} pour aller au premier / dernier onglet
" premier / dernier onglet
noremap gB :exe "silent! tabfirst"<CR>
noremap gB :exe "silent! tabfirst"<CR>
noremap gÉ :exe "silent! tablast"<CR>
noremap gÉ :exe "silent! tablast"<CR>
" optionnel : {g"} pour aller au début de la ligne écran
noremap g" g0
 
" Remaper la gestion des fenêtres
" ———————————————————————————————
noremap wt <C-w>j
noremap wn <C-w>k
noremap wc <C-w>h
noremap wr <C-w>l
noremap wd <C-w>c
noremap wo <C-w>s
noremap wp <C-w>o
noremap w<SPACE> :split<CR>
noremap w<CR> :vsplit<CR></source>


==Autour du clavier==
"Le gestionnaire des fenêtres
Je suis passé à VIM comme éditeur de texte par défaut. Comme pour bépo, il a une courbe d'apprentissage/d'adaptation assez raide, mais il surpasse de loin les éditeurs de texte standards.
" définition des préfixes et commandes fréquentes
noremap à <C-w>
noremap À <C-w><C-w>
noremap w <C-w>
noremap W <C-w>p
noremap à<SPACE> :vsplit<CR>
noremap à<CR> :split<CR>


" pour utiliser ctnr comme hjkl
" même si j est mappé sur t et à est mappé sur <C-w>,
" il faut quand même remapper àt sur <C-w>j
noremap àc <C-w>h
noremap àC <C-w>H
noremap àt <C-w>j
noremap àT <C-w>J
noremap àn <C-w>k
noremap àN <C-w>K
noremap àr <C-w>l
noremap àR <C-w>L
" réattribue ce qui était attribué à ctnr
noremap we <C-w>c
noremap wh <C-w>t
noremap wH <C-w>T
noremap ww <C-w>n
noremap wt <C-w>r
noremap wn <C-w>R
" Remappage personnel:
" ê va au début de ligne, Ê va au premier caractère non-blanc de la ligne
" (plus accessibles que 0 et ^ sur mon clavier)
" mémo: ^ est l'accent de Ê
noremap ê 0
noremap Ê ^
" idem pour le début de la ligne sur l'écran
noremap gê g0
noremap gÊ g^
" ç est remappé sur ` (utilisé pour atteindre un mark)
" mnémo: ç est sur la même touche que @ (lance une macro)
noremap ç `
</source>
===é, ê, è, à===
Ces touches sont une mine d'or. Le clavier déjà surchargé de fonctions vim à un tel point qu'on a parfois du mal à choisir à trouver un raccourci disponible sur lequel associer une fonction. Sauf que les touches accentuées sont toutes inutilisées.
===vimrc.bepo===
L'adaptation hjkl <-> ctsr. À compléter
===vimrc.windows===
La modification des commandes <C-W> pour être cohérentes avec ctsr et avec ma config d'i3. Pas encore commencé, mais je pense que ctrl sera mon « modificateur » officiel pour la gestion des fenêtres: <C-W>j ne sera pas remappé vers <C-W>t mais directement vers <C-T>.
Idée: comme dans i3, placer le redimensionnement des fenêtres dans un mode à part? Jeter un oeil au plugin [http://www.vim.org/scripts/script.php?script_id=2467 submode] pour voir comment faire.
Question: est-ce réellement nécessaire d'utiliser cette fonctionnalité de vim quand on a un gestionnaire de fenêtre comme i3 qui tourne à côté? Le paradigme « une fenêtre = 1 fichier » n'est-il pas mieux? Pas toujours. Il y a des cas où on veut ouvrir plusieurs fichiers dans la même application vim, par exemple quand on appliquer un même changement à plusieurs fichiers à la fois. Ou alors quand plusieurs fichiers ont besoin de mettre plusieurs registres en commun. Ou encore pour pouvoir copier-coller d'un fichier à l'autre sans passer par "+y.
===vimrc.abbrev===
Inspiré de [[Utilisateur:Damien_thiriet]] et [https://www.youtube.com/watch?v=SkdrYWhh-8s Ben Orenstein]. L'idée est de remplacer des blocs de texte très fréquents par des abbréviations, et de remapper des typos qu'on fait tout le temps par leur correction. Ce fichier est très personnel, à vous d'écrire le votre.
==Firefox==
Avec l'addon [https://addons.mozilla.org/en-US/firefox/addon/add-to-search-bar/ add to search bar] on peut définir n'importe quel champ de saise comme moteur de recherche via le clic droit, et on peut lui associer un mot-clef. Le mot-clef est essentiel, il permet de sélectionner ce moteur de recherche lorsqu'on tape un url dans firefox (avec CTRL-L ou ALT-D, ou avec o dans vimperator/pentadactyl).
Par exemple, j'ai associé le mot-clef « en » au champ de recherche de [http://www.wordreference.com/enfr/ cette page] de façon à ce que la recherche <code>en cupboard</code> ouvre la page de traduction du mot cupboard. D'autres exemples d'utilisation: la barre de recherche dans un wiki ou sur un forum, etc. D'un point de vue d'ergonomie plus les mots-clef sont courts, mieux c'est: « gr » est mon mot-clef pour la recherche de goodreads.com au lieu de « goodreads ».
==DWB==
Navigateur web très léger et similaire à vimperator. À tester très prochainement. Comme avec l'addon "add to search bar" de firefox, on peut définir soi-même des mots-clef associés à des champs de recherche via la commande "gs".
==Gmail==
Gmail possède une option pour parcourir ses mails avec des raccourcis claviers. Cette option est encore expérimentale, c'est pourquoi il faut l'activer manuellement dans "roue crantée > paramètres > labos". Le mieux, c'est qu'on peut redéfinir ses raccourcis claviers dans le menu "roue crantée > paramètres > raccourcis claviers". Personnellement j'ai désactivé les raccourcis correspondant aux actions que je n'utilise pas. Pour rester compatible avec pentadactyl, les touches suivantes ne sont pas associées à des actions:
<source>
CTSR    page précédente/tab suivant/tab précédent/page suivante
f,F    follow hint
o,O    open website
a,A    open website in new tab
d      kill tab
</source>
Voici donc mes raccourcis gmail
<source>c va au message précédent dans une discussion
t va à la conversation suivante dans un dossier
s va à la conversation précédente dans un dossier
r va au message suivant dans une discussion
.      sélectionne la discussion (poinçonne la case)
p supprime (p est un d à l'envers)
e ouvrir l'[e]mail sélectionné
m écrire un nouveau [m]essage
u/U annuler la dernière action ([u]ndo)/mettre à jour la conversation ([u]pdate)
à retour [à] la liste des conversations
q/Q marquer comme lu/non lu (pas de mnémo)
n/N répondre (a[n]swer)/répondre à tous
w transférer (for[w]ard)
l ouvre le menu « appliquer le [l]ibellé »
x archiver (x ressemble à la lettre grecque chi)
i accède à la boite de réception ([i]nbox)
é accède aux messages envoy[é]s
b accède aux [b]rouillons
gc accède aux [c]ontacts
gt accède à [t]ous les messages
/ sélectionne la barre de recherche
L cherche pour un [l]abel
? afficher les raccourcis clavier</source>
==i3==
[http://i3wm.org i3] est un <i>très</i> bon gestionnaire de fenêtre, avec une documentation exemplaire. Essayez-le.
Ma config se trouve [[Utilisateur:Lawrent/i3|ici]].
==Claviers alternatifs==
Pour plus tard:
Pour plus tard:
* changer mon gestionnaire de fenêtres vers quelque chose optimisé pour une utilisation au clavier. J'hésite encore vers lequel migrer, wmii et scrotwm ont l'air intéressants.
* [http://www.tipro.net/ecatalogue/free/ Tipro]. Avec son clavier orthogonal entièrement personnalisable sur 8 lignes, je pourrai y placer mes modificateurs et touches spéciales (MAJ, CTRL, ALT, ALTGR, ESC, TAB, …) où je veux. :-)
* passer à un clavier [http://www.tipro.net/ecatalogue/free/ Tipro]. Avec son clavier orthogonal entièrement personnalisable sur 8 lignes, je pourrai y placer mes modificateurs et touches spéciales (MAJ, CTRL, ALT, ALTGR, ESC, TAB, …) où je veux. :-)
* L'[http://ergodox.org/Default.aspx Ergodox] a l'air cool à bidouiller aussi
 
=Divers=
==Bépo==
Shortcutworld, un wiki sur les raccourcis clavier: http://www.shortcutworld.com/


==Liens utiles et tout ce qui n'a pas sa place ailleurs==
Pour en savoir plus sur la syntaxe utilisée dans le wiki: http://meta.wikimedia.org/wiki/Help:Wikitext_examples/fr
Pour en savoir plus sur la syntaxe utilisée dans le wiki: http://meta.wikimedia.org/wiki/Help:Wikitext_examples/fr
Un article sur la conception d'une nouvelle disposition: http://mtgap.bilfo.com/keyboard.html


http://www.lexique.org/listes/liste_bigrammes.txt des statistiques sur les bigrammes de la langue française, utile si on veut modifier le bépo original
http://www.lexique.org/listes/liste_bigrammes.txt des statistiques sur les bigrammes de la langue française, utile si on veut modifier le bépo original
Ligne 312 : Ligne 784 :
<source>3,141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 820 974 944 592 307 816 406 286 208 998 628 034 825 342 117 067 982 148 086 513 282 306 647 093 844 609 550 582 231 725 359 408 128 481 117 450 284 102 701 938 521 105 559 644 622 948 954 930 381 964 428 810 975 665 933 446 128 475 648 233 786 783 165 271 201 909 145 648 566 923 460 348 610 454 326 648 213 393 607 260 249 141 273 724 587 006 606 315 588 174 881 520 920 962 829 254 091 715 364 367 892 590 360 011 330 530 548 820 466 521 384 146 951 941 511 609 433 057 270 365 759 591 953 092 186 117 381 932 611 793 105 118 548 074 462 379 962 749 567 351 885 752 724 891 227 938 183 011 949 129 833 673 362 440 656 643 086 021 394 946 395 224 737 190 702 179 860 943 702 770 539 217 176 293 176 752 384 674 818 467 669 405 132 000 568 127 145 263 560 827 785 771 342 757 789 609 173 637 178 721 468 440 901 224 953 430 146 549 585 371 050 792 279 689 258 923 542 019 956 112 129 021 960 864 034 418 159 813 629 774 771 309 960 518 707 211 349 999 998 372 978 049 951 059 731 732 816 096 318 595 024 459 455 346 908 302 642 522 308 253 344 685 035 261 931 188 171 010 003 137 838 752 886 587 533 208 381 420 617 177 669 147 303 598 253 490 428 755 468 731 159 562 863 882 353 787 593 751 957 781 857 780 532 171 226 806 613 001 927 876 611 195 909 216 420 198 938 095 257 201 065 485 863 278 865 936 153 381 827 968 230 301 952 035 301 852 968 995 773 622 599 413 891 249 721 775 283 479 131 515 574 857 242 454 150 695 950 829 533 116 861 727 855 889 075 098 381 754 637 464 939 319 255 060 400 927 701 671 139 009 848 824 012 858 361 603 563 707 660 104 710 181 942 955 596 198 946 767 837 449 448 255 379 774 726 847 104 047 534 646 208 046 684 259 069 491 293 313 677 028 989 152 104 752 162 056 966 024 058 038 150 193 511 253 382 430 035 587 640 247 496 473 263 914 199 272 604 269 922 796 782 354 781 636 009 341 721 641 219 924 586 315 030 286 182 974 555 706 749 838 505 494 588 586 926 995 690 927 210 797 509 302 955 321 165 344 987 202 755 960 236 480 665 499 119 881 834 797 753 566 369 807 426 542 527 862 551 818 417 574 672 890 977 772 793 800 081 647 060 016 145 249 192 173 217 214 772 350 141 441 973 568 548 161 361 157 352 552 133 475 741 849 468 438 523 323 907 394 143 334 547 762 416 862 518 983 569 485 562 099 219 222 184 272 550 254 256 887 671 790 494 601 653 466 804 988 627 232 791 786 085 784 383 827 967 976 681 454 100 953 883 786 360 950 680 064 225 125 205 117 392 984 896 084 128 488 626 945 604 241 965 285 022 210 661 186 306 744 278 622 039 194 945 047 123 713 786 960 956 364 371 917 287 467 764 657 573 962 413 890 865 832 645 995 813 390 478 027 590 099 465 764 078 951 269 468 398 352 595 709 825 822 620 522 489 407 726 719 478 268 482 601 476 990 902 640 136 394 437 455 305 068 203 496 252 451 749 399 651 431 429 809 190 659 250 937 221 696 461 515 709 858 387 410 597 885 959 772 975 498 930 161 753 928 468 138 268 683 868 942 774 155 991 855 925 245 953 959 431 049 972 524 680 845 987 273 644 695 848 653 836 736 222 626 099 124 608 051 243 884 390 451 244 136 549 762 780 797 715 691 435 997 700 129 616 089 441 694 868 555 848 406 353 422 072 225 828 488 648 158 456 028 50 </source>
<source>3,141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 820 974 944 592 307 816 406 286 208 998 628 034 825 342 117 067 982 148 086 513 282 306 647 093 844 609 550 582 231 725 359 408 128 481 117 450 284 102 701 938 521 105 559 644 622 948 954 930 381 964 428 810 975 665 933 446 128 475 648 233 786 783 165 271 201 909 145 648 566 923 460 348 610 454 326 648 213 393 607 260 249 141 273 724 587 006 606 315 588 174 881 520 920 962 829 254 091 715 364 367 892 590 360 011 330 530 548 820 466 521 384 146 951 941 511 609 433 057 270 365 759 591 953 092 186 117 381 932 611 793 105 118 548 074 462 379 962 749 567 351 885 752 724 891 227 938 183 011 949 129 833 673 362 440 656 643 086 021 394 946 395 224 737 190 702 179 860 943 702 770 539 217 176 293 176 752 384 674 818 467 669 405 132 000 568 127 145 263 560 827 785 771 342 757 789 609 173 637 178 721 468 440 901 224 953 430 146 549 585 371 050 792 279 689 258 923 542 019 956 112 129 021 960 864 034 418 159 813 629 774 771 309 960 518 707 211 349 999 998 372 978 049 951 059 731 732 816 096 318 595 024 459 455 346 908 302 642 522 308 253 344 685 035 261 931 188 171 010 003 137 838 752 886 587 533 208 381 420 617 177 669 147 303 598 253 490 428 755 468 731 159 562 863 882 353 787 593 751 957 781 857 780 532 171 226 806 613 001 927 876 611 195 909 216 420 198 938 095 257 201 065 485 863 278 865 936 153 381 827 968 230 301 952 035 301 852 968 995 773 622 599 413 891 249 721 775 283 479 131 515 574 857 242 454 150 695 950 829 533 116 861 727 855 889 075 098 381 754 637 464 939 319 255 060 400 927 701 671 139 009 848 824 012 858 361 603 563 707 660 104 710 181 942 955 596 198 946 767 837 449 448 255 379 774 726 847 104 047 534 646 208 046 684 259 069 491 293 313 677 028 989 152 104 752 162 056 966 024 058 038 150 193 511 253 382 430 035 587 640 247 496 473 263 914 199 272 604 269 922 796 782 354 781 636 009 341 721 641 219 924 586 315 030 286 182 974 555 706 749 838 505 494 588 586 926 995 690 927 210 797 509 302 955 321 165 344 987 202 755 960 236 480 665 499 119 881 834 797 753 566 369 807 426 542 527 862 551 818 417 574 672 890 977 772 793 800 081 647 060 016 145 249 192 173 217 214 772 350 141 441 973 568 548 161 361 157 352 552 133 475 741 849 468 438 523 323 907 394 143 334 547 762 416 862 518 983 569 485 562 099 219 222 184 272 550 254 256 887 671 790 494 601 653 466 804 988 627 232 791 786 085 784 383 827 967 976 681 454 100 953 883 786 360 950 680 064 225 125 205 117 392 984 896 084 128 488 626 945 604 241 965 285 022 210 661 186 306 744 278 622 039 194 945 047 123 713 786 960 956 364 371 917 287 467 764 657 573 962 413 890 865 832 645 995 813 390 478 027 590 099 465 764 078 951 269 468 398 352 595 709 825 822 620 522 489 407 726 719 478 268 482 601 476 990 902 640 136 394 437 455 305 068 203 496 252 451 749 399 651 431 429 809 190 659 250 937 221 696 461 515 709 858 387 410 597 885 959 772 975 498 930 161 753 928 468 138 268 683 868 942 774 155 991 855 925 245 953 959 431 049 972 524 680 845 987 273 644 695 848 653 836 736 222 626 099 124 608 051 243 884 390 451 244 136 549 762 780 797 715 691 435 997 700 129 616 089 441 694 868 555 848 406 353 422 072 225 828 488 648 158 456 028 50 </source>


Deux claviers vierges: un large et un étroit
Trois claviers vierges de taille différente:
<source>┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
<source>┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
Ligne 345 : Ligne 817 :
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝</source>
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝
 
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───╔═════╗
│  │  │  │  │  │  │  │  │  │  │  │  │  ║    ║
╔═════╗─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─╚═╦═══╣
║    ║  │  │  │  │  │  │  │  │  │  │  │  ║  ║
╠═════╩╗──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──╚╗  ║
║      ║  │  │  │  │  │  │  │  │  │  │  │  ║  ║
╠════╦═╝─┬─┴─┬─┴─┬─┴─═─┴─┬─┴─┬─┴─═─┴─┬─┴─┬─┴─┬─┴─╔═════╩══╣
║    ║  │  │  │  │  │  │  │  │  │  │  ║        ║
╠════╬═══╦═══╦═══╦════════════════╦════╦════╦════╬════════╝
║    ║  ║  ║  ║                ║    ║    ║    ║
╚════╩═══╩═══╩═══╩════════════════╩════╩════╩════╝</source>
 
==non-Bépo==
http://www.sf.airnet.ne.jp/ts/language/number.html
 
http://tylerneylon.com/a/7date_spec/

Dernière version du 27 août 2015 à 10:43

Rappel: les emplacements des touches sur une disposition azerty sont indiqués [entre crochets]. Ceux sur le bépo sont {entre accolades}. En clair: [F] et {E} désignent la même touche.

Nouvelle disposition

À l'instar de l'Arensito, monter toutes les touches d'une ligne et utiliser la ligne inférieure comme ligne de modificateurs. Cette disposition est temporaire; à terme je veux refaire une dispo bépo from scratch, comme je l'ai déjà commencé ici.

Sur cette disposition, il n'y a plus de couche overlay. Depuis ma disposition précédente je suis passé sur Arch Linux et je reconfigure les raccourcis claviers de mes applications selon mes besoins (voir plus bas). Les modificateurs sont donc:

  • maj, altgr, level5: idem avant;
  • alt: le modificateur $mod de i3;
  • ctrl: le modificateur de l'application en cours, si elle n'est pas "vimifiée".
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │ È      │ O Œ    │ É      │ P      │ À      │ ¨ ` ≠  │ B   "  │ D      │ L ≤    │ V ≥    │ H      │ Ç      ║                ║
│ TAB    │ è `    │ o œ    │ é &    │ p      │ à      │ ^ ´ =  │ b ^ '  │ d $ 6  │ l < 7  │ v > 8  │ h # 9  │ ç @ %  ║       CAPSLOCK ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║ A Æ    │ U Ù    │ I «    │ E »    │ ;      │ C      │ T      │ N –    │ R      │ S      │ M      │        ║          ║
║ ←——          ║ a æ    │ u ù    │ i (    │ e )    │ , —    │ c \ 0  │ t / 1  │ n - 2  │ r { 3  │ s } 4  │ m % 5  │ ESC    ║  DELETE  ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║    Ê    £      ║ Z ≠    │ Y      │ X ±    │ : ·    │ K      │ ? ≈ ;  │ Q   ±  │ G   =  │ J   (  │ F   )  │ W   :  │        ║        ║
║    ê    €      ║ z =    │ y *    │ x +    │ . …    │ k °    │ ' ! ,  │ q " +  │ g _ -  │ j [ *  │ f ] /  │ w ~ .  │        ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
║           ║        │        │        │     |  │        │        │        │        │        │        │        ║                      ║
║           ║ CTRL   │        │ MAJ    │   ←—'  │ LEVEL5 │        │ WIN    │ SPACE  │ MAJ    │        │ CTRL   ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝ 
║           ║        ║        ║        ║                                            ║        ║        ║        ║
║           ║        ║        ║        ║                 ALTGR                      ║        ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

Ancienne disposition

level 1-2 : lettre et majuscule
level 3-4 (altgr, altgr+maj) : autres lettres et/ou symboles
level 5  (level5, seulement à droite): pavé numérique
level 5 + maj : chiffres en exposant
level 5 + altgr: chiffres en indice (plus difficiles à saisir)
overlay: remappe les touches utiles hors texte (navigation, lanceur d'applications, etc)

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│ CAPS   │        │        │        │        │        │ SHUT   │        │        │        │        │        │        ║                ║
│ LOCK   │ ALTGR  │ META   │ TAB    │ CTRL   │        │ DOWN   │        │ CTRL   │ ALT    │ INSERT │        │        ║ DELETE         ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║  O   Œ │ É      │ P      │ À      │ È      │ ¨ `  ≠ │ V      │ D      │ L ≤    │ B ≥    │ Z      │ Ç      ║       |  ║
║ ←——          ║  o   œ │ é    & │ p    | │ à      │ è    ` │ ^ ´  = │ v ^  5 │ d $  6 │ l <  7 │ b >  8 │ z #  9 │ ç @  % ║     ←—'  ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬────────┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║ A    Æ │ U    Ù │ I    « │ E    » │ ;      │ C      │ T ~    │ N –    │ R      │ S      │ M      │        ║        ║
║ ALTGR          ║ a    æ │ u    ù │ i    ( │ e    ) │ ,    — │ c \  0 │ t /  1 │ n -  2 │ r {  3 │ s }  4 │ m %  . │ ALTGR  ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
║           ║ Ê    £ │ H    ≠ │ Y      │ X    ± │ :    · │ K      │ ? ≈    │ Q    ± │ G      │ J      │ F      ║ W                    ║
║ Level5    ║ ê    € │ h    = │ y    * │ x    + │ .    … │ k    ° │ ' !  , │ q "  + │ g _  - │ j [  * │ f ]  / ║ w                    ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝ 
║           ║        ║        ║        ║   [esp insecable]         [esp insecable]  ║        ║        ║        ║
║ ALT       ║        ║ OVERLAY║   MAJ  ║   [space]                  ~               ║ MAJ    ║ ESC    ║ META   ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

carte overlay
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
║       ║    │    │    │    │    │    │PgDw│PgUp│    │    │    │    ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║        ║CTRL│ALT │META│MAJ │    │  ← │  ↓ │  ↑ │  → │    │    │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
║      ║    │    │    │    │    │    │    │End │Home│    │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║OVRL║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

Alternative pour le suédois (bien que si on veut vraiment taper du suédois il faut repenser toute la carte).

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║  O   Ö │        │        │  À   Å │        │        │        │        │        │        │        │        ║          ║
║              ║  o   ö │        │        │  à   å │        │        │        │        │        │        │        │        ║          ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║  A   Ä │        │        │        │        │        │        │        │        │        │        │        ║        ║
║                ║  a   ä │        │        │        │        │        │        │        │        │        │        │        ║        ║
╠═══════════╦════╝───┬────┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴───┬────┴───╔═════════════╩════════╣
║           ║        │        │        │        │        │        │        │        │        │        │        ║                      ║
║           ║        │        │        │        │        │        │        │        │        │        │        ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝
║           ║        ║        ║        ║                                            ║        ║        ║        ║
║           ║        ║        ║        ║                                            ║        ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

Remarque: à partir de 3 touches simultanées, certaines combinaisons de touche n'envoient pas de signal du clavier vers le pc (par exemple sur mon clavier la combinaison maj+altgr (gauche) + n) à cause d'un phénomène appelé ghosting (). Lorsqu'on déplace les modificateurs, il arrive que certaines combinaisons de touche s'avèrent impossibles (il faut donc trouver une alternative propre au clavier). Sur Linux, xev affiche dans la console les events envoyés par le clavier et permet de détecter une combinaison de touche interdite.


Changements à essayer

  • mettre Space+AltGr comme espace insécable.
  • placer ~ (tilde) sur w+altgr et ~ (accent) sur w+altgr+maj
  • ajouter µ sur m+maj+altgr
  • swap t<->n ? le N est la consonne la plus fréquente du français, pourquoi ne pas la mettre sur l'index… (+ l'auriculaire droit a énormément de travail puisqu'il a 8 touches à gérer)
  • swap è<->ê: c'est un détail, mais le è est légèrement plus fréquent en français que le ê, autant le mettre donc sur une touche plus accessible. (Ceci casse la compatibilité avec les claviers à 104 touches, où le ê se tape ^e.)
  • déplacer META sur le [CTRL] gauche et INSERT sur le [CTRL] droit. J'utilise ces touches une fois toutes les 3 lunes (et je n'utilise jamais les [CTRL]), ça devrait me libérer de la place sur ma ligne des chiffres. Peut-être que je pourrais les remplacer par des caractères peu fréquents, ou trouver un meilleur endroit pour mon Level5? À tester alors, pour faciliter l'alternance entre AltGr gauche et Level5 (fréquents quand on écrit du code):
    • êÊ€£ sur [2]
    • Level5 sur [T]
    • Esc sur [Maj] gauche
  • Swap PgDw <-> Home
  • Pavé numérique à tester:
 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗ 
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║ 
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║ 
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣ 
 ║       ║    │    │    │    │    │    │   "│   6│   7│   8│   9│    ║     ║
 ║       ║    │    │    │    │    │    │   '│    │    │    │    │    ║     ║ 
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║ 
 ║        ║    │    │    │    │    │   0│   1│   2│   3│   4│   5│    ║    ║
 ║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║ 
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣ 
 ║      ║    │    │    │    │    │    │   ;│   ±│   =│   (│   )║  :        ║
 ║      ║    │    │    │    │    │    │   ,│   +│   -│   *│   /║  .        ║ 
 ╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝ 
 ║      ║    ║    ║    ║                        ║    ║    ║    ║ 
 ║      ║    ║    ║    ║                        ║    ║    ║    ║ 
 ╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝
  • Carte overlay enrichie pour les combinaisons ctrl-F4, alt-F2, alt-F4, ctrl-tab, ctrl-maj-tab, alt-tab:
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
║       ║    │    │    │    │    │    │PgDw│PgUp│    │    │    │    ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║        ║CTRL│ALT │META│MAJ │    │  ← │  ↓ │  ↑ │  → │ F2 │ F4 │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
║      ║    │    │    │    │    │    │    │End │Home│    │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║OVRL║    ║                   TAB  ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝


Changements par rapport au bépo original

Avertissement: ne modifiez pas votre disposition bépo :D

"Le principal problème de Bépo étant qu’il évolue constamment. Un jour, faudrait leur dire qu’un clavier optimisé à 99% et disponible maintenant est préférable qu’un clavier qui change tout le temps pour être un jour optimisé à 100% alors que bon, de toutes façons, à partir du moment où on demande l’avis des gens, ils seront forcément pas contents." (Ploum)

J'ai déplacé plusieurs touches par rapport au bépo original. Grosso modo, ça s'est fait sur de l'essai-erreur avec deux idées en tête:

  • la place du o et du v: je considère qu'il est plus agréable de déplacer les poignets vers l'extérieur que l'intérieur et je vois mes index sur le [F] et le [J] comme des pivots. Je tape avec les bras en V inversé. Avec cette philosophie en tête, la touche [A] est plus accessible que la touche [R], du coup c'est plus intéressant de placer le O sur le [R]. (Rappelons que le O est 6 fois plus fréquent que le B.) Pareil pour le placement du V.
  • le h: parce que je n'aime pas le digramme ch sur le bépo initial. J'ai essayé plusieurs emplacements pour finalement arriver à une position qui me plait. (Note: le H est vraiment pas facile à placer: s'il est à gauche il perturbe les digrammes avec des voyelles, s'il est à droite il lui faut une place qui rende les digrammes CH et TH potables.)

Notons également que Utilisateur:Robin recommande de déplacer le B à cause du digramme BA.


Modificateurs

Ça a commencé avec Utilisateur:Robin: de mémoire il a lancé l'idée de mettre les majuscules sous les pouces, et à partir de là on a décidé de carrément revoir la position de tous les modificateurs. Grosso modo, l'idée c'est:

  • maj sous les pouces;
  • altgr à l'extérieur de la homerow;
  • ctrl sur les majeurs de la ligne des chiffres.

Ensuite on a d'autres trucs comme:

  • backspace sur tab pour le rendre plus accessible (vraiment très agréable!);
  • tab sur la rangée des chiffres à gauche (surtout pas à droite) parce qu'il est souvent suivi d'un enter.

Et le reste c'est des touches que j'utilise peu souvent et que j'ai placées là, pour quand j'en ai besoin

À avoir en tête quand on modifie l'emplacement des modificateurs: le ghosting. Le ghosting est dû à la manière dont est conçu un clavier, c'est un problème de hardware. Grosso modo, chaque clavier est garanti de pouvoir reconnaitre 2 touches difféerentes quand elles sont pressées simultanément. Mais à partir de 3 touches simultanées, à cause de la manière dont est généralement conçu un clavier, on trouve certaines combinaisons de touche où la 3e touche n'est pas reconnue (voir explication ici. Bref, sur mon clavier, le raccourci [AltGauche + CapsLock + L] est une de ces combinaisons interdites. Du coup, sur ma disposition, {AltGr+Maj+R} n'envoie que AltGr+Maj à l'OS. À la base je voulais mettre mon pavé numérique en AltGr+Maj mais ce problème m'a détourné vers la couche level5.

Sous linux, xev est un programme qui affiche dans la console les events enregistrés par le clavier et de la souris (incluant une tonne d'infos). Pour détecter si une combinaison de touche est maudite, il suffit de lancer le programme et voir si xev réagit à la combinaison. Pour filtrer la sortie du programme et n'afficher que la ligne qui nous intéresse, on peut lancer

xev | grep "keycode"

Overlay

L'overlay est une fonctionnalité d'xkb: presser une certaine touche donne accès à une nouvelle couche de touches. On pourrait dire que c'est un modificateur, mais ça ne l'est pas. La différence majeure entre, disons, maj+E et overlay+E, c'est que:

  • placer CTRL sur maj+E bugge (et d'autres touches aussi);
  • overlay+E est un lien vers une autre touche (disons, celle qui est associée à CTRL). Et bizarrement ça bugge moins.

Malheureusement, cette fonctionnalité n'existe (je pense) que dans xkb. Sous windows ou en mode console (le truc linux où on appuye sur ctrl+alt+F1 et dont on sort en appuyant sur ctrl+alt+F8), comme ce n'est pas xkb qui gère le clavier, je doute qu'on puisse implémenter cette couche overlay. À voir.

Ma couche overlay a été penée pour les touches que j'utilise fréquemment « hors saisie de texte ». Certains sont universels, d'autres sont spécifiques à certains environnements de bureau (Cinnamon et Gnome2, et probablement quelques autres)

  • les touches fléchées à la vim (ça change la vie de les avoir sur la homerow)
  • ctrl-alt-flèche change de bureau virtuel
  • ctrl-alt-maj-flèche déplace une fenêtre de bureau virtuel
  • super-flèche redimensionne la fenêtre
  • alt-f2 est le lanceur d'application
  • alt-f4 est bien connu pour fermer une application
  • alt-tab et alt-maj-tab basculent d'une fenêtre à l'autre
  • ctrl-tab et ctrl-maj-tab basculent d'un onglet à l'autre sur firefox et chrome
  • ctrl-flèche, sur la plupart des applications, permet de naviguer mot par mot (et non caractère par caractère)
  • maj-flèche et ctrl-maj-flèche surlignent du texte.

Ici aussi il faut faire atttention à l'emplacement des touches si on veut éviter les touches fantômes.

Note: toujours relacher la touche pressée avant la touche overlay. Sinon elle reste enfoncée et ça fait des surprises.

Méthode de saisie

Comme écrit plus haut, elle est proche de la variante A (idée: utiliser les index comme pivots pour les lignes supérieures et "tirer les mains vers l'extérieur" pour la ligne inférieure)

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ 1  │ 1  │ 1  │    │ 1  │    │ 1  │ 1  │    │ 1  │    │    │    ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║ 1  │    │ 1  │    │    │ 1  │ 1  │    │ 1  │    │    │    ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║ 1  │    │ 1  │    │    │ 1  │ 1  │    │ 1  │    │    │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║ 1  │    │ 1  │    │    │    │ 1  │ 1  │    │ 1  │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

Installation (Linux)

En console

En mode console (par exemple, quand on fait ctrl-alt-f2, attention que pour revenir à l'interface graphique il faut appuyer sur ctrl-alt-f8), ce n'est pas xkb qui gère la disposition du clavier mais loadkeys. Du coup, il faut également configurer loadkeys si on est sur une version bidouillée. Lire la page du wiki d'Arch pour voir comment s'y prendre: on peut déplacer les ctrl, alt et autres maj ou caps-lock où on veut, mais c'est pas certain qu'il existe un mode overlay…

Plus généralement, c'est le package kbd qui prend la gestion du clavier en charge. man keymaps donne des infos sur comment écrire ses fichiers loadkeys.

XKB

  • Copier le code suivant à la fin du fichier /usr/share/X11/xkb/symbols/fr (les touches non-affectées sont toutes affectées à §).
  • Remplacer le fichier xkb/types/level5 par celui proposé ici (dans mes souvenirs avec le type "EIGHT_LEVEL_SEMIALPHABETIC", "CAPS_LOCK + Level5" agit comme "Shift + Level5" alors que "CAPS_LOCK" ne devrait pas avoir d'influence sur le pavé numérique)
  • (Note personnelle: ajouter également le fichier dans xkb/types/ dans lequel j'ai modifié la définition du tye EIGHT_LEVEL_SEMIALPHABETIC)
  • Pour activer la disposition, lancer la commande setxkbmap fr bepo2
  • Pour activer la disposition par défaut, modifier le fichier xorg.conf (locate xorg.conf pour le trouver) ou /etc/default/keyboard ou /etc/X11/xorg.conf.d/10-keyboard.conf avec les lignes
XKBLAYOUT="fr"
XKBVARIANT="bepo2"
  • Après chaque modification ultérieure, lancer commande sudo sudo rm /var/lib/xkb/*. Pour tester la validité des modifications, lancer xkbcomp /usr/share/X11/xkb/symbols/fr (s'il n'y a pas de sortie, c'est que c'est bon).

Note: ce fichier n'est pas à jour

// a ajouter dans xkb/symbols/french

partial alphanumeric_keys
xkb_symbols "bepo2" {

    include "keypad(oss)" // touches standard
 
    name[Group1]= "French (Bepo2, ergonomic, derived from the Bepo by Laurent Van Eesbeeck)";
 
    key <TLDE> { type[group1] = "ONE_LEVEL", [ Caps_Lock          ]};
    key <AE01> { type[group1] = "ONE_LEVEL", [ ISO_Level3_Shift   ]};
    key <AE02> { type[group1] = "ONE_LEVEL", [ Super_L            ]};
    key <AE03> { type[group1] = "TWO_LEVEL", [ Tab , ISO_Left_Tab ]};
    key <AE04> { type[group1] = "ONE_LEVEL", [ Control_L          ]};
    key <AE05> { type[group1] = "ONE_LEVEL", [ section            ]};
    key <AE06> { type[group1] = "ONE_LEVEL", [ Terminate_Server   ]};
    key <AE07> { type[group1] = "ONE_LEVEL", [ section            ]};
    key <AE08> { type[group1] = "ONE_LEVEL", [ Control_R          ]};
    key <AE09> { type[group1] = "ONE_LEVEL", [ Alt_L              ]};
    key <AE10> { type[group1] = "ONE_LEVEL", [ Insert             ]};
    key <AE11> { type[group1] = "ONE_LEVEL", [ section            ]};
    key <AE12> { type[group1] = "ONE_LEVEL", [ Backspace          ]};
    key <BKSP> { type[group1] = "ONE_LEVEL", [ Delete             ]};

    key <TAB>  { type[group1] = "ONE_LEVEL"                , [ BackSpace      ]};
//    key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ o              , O             , oe         , OE                      ]};
    key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ o              , O             , odiaeresis , Odiaeresis              ]};
    key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ eacute         , Eacute        , ampersand  , section                 ]};
    key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ p              , P             , bar        , section                 ]};
    key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ agrave      , Agrave      , aring          , Aring          ]};
    key <AD05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ egrave         , Egrave        , grave      , section                 ]};
    key <AD06> { type[group1] = "EIGHT_LEVEL"               , [ dead_circumflex, dead_diaeresis, dead_acute , dead_grave      , equal, notequal   ]};
    key <AD07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ v              , V             , asciicircum, section         , 5, fivesuperior , fivesubscript  ], overlay1=<PGDN>};
    key <AD08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ d              , D             , dollar     , section         , 6, sixsuperior  , sixsubscript   ], overlay1=<PGUP>};
    key <AD09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ l              , L             , less       , lessthanequal   , 7, sevensuperior, sevensubscript ]};
    key <AD10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ b              , B             , greater    , greaterthanequal, 8, eightsuperior, eightsubscript ]};
    key <AD11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ z              , Z             , numbersign , section         , 9, ninesuperior , ninesubscript  ]};
    key <AD12> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ ccedilla       , Ccedilla      , at         , section         , percent, percent                 ]};
    key <RTRN> { type[group1] = "ONE_LEVEL"                 , [ Return                                                                ]};

    key <CAPS> { type[group1] = "ONE_LEVEL"                 , [ ISO_Level3_Shift                                           ]};
//    key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC"     , [ a                , A         , ae         , AE             ],  overlay1=<AE04>};
    key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC"     , [ a                , A         , adiaeresis , Adiaeresis     ],  overlay1=<AE04>};
    key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC"     , [ u                , U         , ugrave     , Ugrave         ],  overlay1=<LCTL>};
    key <AC03> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ i                , I         , parenleft  , guillemotleft  , parenleft , parenleft , parenleft     ],  overlay1=<RCTL>};
    key <AC04> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ e                , E         , parenright , guillemotright , parenright, parenright, parenright    ],  overlay1=<LALT>};
    key <AC05> { type[group1] = "FOUR_LEVEL"                , [ comma            , semicolon , emdash     , section        ]};
    key <AC06> { type[group1] = "EIGHT_LEVEL_ALPHABETIC"    , [ c                , C         , backslash  , section        , 0      , zerosuperior , zerosubscript ],  overlay1=<LEFT>};
    key <AC07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ t                , T         , slash      , dead_tilde     , 1      , onesuperior  , onesubscript  ],  overlay1=<DOWN>};
    key <AC08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ n                , N         , minus      , endash         , 2      , twosuperior  , twosubscript  ],  overlay1=<UP>};
    key <AC09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ r                , R         , braceleft  , section        , 3      , threesuperior, threesubscript],  overlay1=<RGHT>};
    key <AC10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ s                , S         , braceright , section        , 4      , foursuperior , foursubscript ]};
    key <AC11> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ m                , M         , percent    , section        , period , period ]};
    key <BKSL> { type[group1] = "ONE_LEVEL"                 , [ ISO_Level3_Shift                                    ]};

    key <LFSH> { type[group1] = "ONE_LEVEL"                 , [ ISO_Level5_Shift                                            ]};
    key <LSGT> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ ecircumflex , Ecircumflex , EuroSign       , sterling       ]};
    key <AB01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ h              , H             , equal      , notequal                ]};
    key <AB02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ y           , Y           , asterisk       , section        ]};
    key <AB03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ x           , X           , plus           , plusminus      ]};
    key <AB04> { type[group1] = "FOUR_LEVEL"                , [ period      , colon       , ellipsis       , periodcentered ]};
    key <AB05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC" , [ k           , K           , degree         , section        ]};
    key <AB06> { type[group1] = "EIGHT_LEVEL"               , [ apostrophe  , question    , exclam         , approxeq       , comma    ]};
    key <AB07> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ q           , Q           , quotedbl       , section        , plus     , plusminus], overlay1=<END>};
    key <AB08> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ g           , G           , underscore     , section        , minus    , minus    ], overlay1=<HOME>};
    key <AB09> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ j           , J           , bracketleft    , section        , asterisk , asterisk ]};
    key <AB10> { type[group1] = "EIGHT_LEVEL_SEMIALPHABETIC", [ f           , F           , bracketright   , section        , slash    , slash    ]};
    key <RTSH> { type[group1] = "ALPHABETIC"                , [ w           , W                                             ]};

    key <LCTL> { type[group1] = "ONE_LEVEL"                , [ Alt_L                                                        ]};
    key <LWIN> { type[group1] = "ONE_LEVEL"                , [ VoidSymbol ]   , actions = [ SetControls(controls=Overlay1)  ]};
    key <LALT> { type[group1] = "ONE_LEVEL"                , [ Shift_L                                                      ]};
    key <SPCE> { type[group1] = "FOUR_LEVEL"               , [ space          , nobreakspace  , asciitilde , nobreakspace   ]};
    key <RALT> { type[group1] = "ONE_LEVEL"                , [ Shift_R                                                      ]};
    key <MENU> { type[group1] = "ONE_LEVEL"                , [ Escape                                                       ]};
    key <RCTL> { type[group1] = "ONE_LEVEL"                , [ Super_R                                                      ]};
    
    modifier_map Shift   { Shift_L, Shift_R };
    modifier_map Lock    { Caps_Lock }; // caps lock
    modifier_map Control { Control_L, Control_R };
    modifier_map Mod5    { ISO_Level3_Shift }; // altgr
    modifier_map Mod3    { ISO_Level5_Shift }; // Level5
};
partial default xkb_types "default" {
    // Definition for a key type used for the czech keymap, for instance.
    // Defines style a with four level shift. It is similar to three_level
    // type used for iso9995 but it lets the shift key behave "normally".

    virtual_modifiers LevelThree,ScrollLock,LevelFive;

    type "EIGHT_LEVEL" {
        modifiers = Shift+LevelThree+LevelFive;
	map[None] = Level1;
	map[Shift] = Level2;
	map[LevelThree] = Level3;
	map[Shift+LevelThree] = Level4;
	map[LevelFive] = Level5;
	map[Shift+LevelFive] = Level6;
	map[LevelThree+LevelFive] = Level7;
	map[Shift+LevelThree+LevelFive] = Level8;
	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_ALPHABETIC" {
	modifiers = Shift+Lock+LevelThree+LevelFive;
	map[None] = Level1;
	map[Shift] = Level2;
	map[Lock]  = Level2;
	map[LevelThree] = Level3;
	map[Shift+LevelThree] = Level4;
	map[Lock+LevelThree] =  Level4;
        map[Lock+Shift+LevelThree] = Level3;

	map[LevelFive] = Level5;
	map[Shift+LevelFive] = Level6;
	map[Lock+LevelFive]  = Level6;
	map[LevelThree+LevelFive] = Level7;
	map[Shift+LevelThree+LevelFive] = Level8;
	map[Lock+LevelThree+LevelFive] =  Level8;
        map[Lock+Shift+LevelThree+LevelFive] = Level7;

	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_LEVEL_FIVE_LOCK" {
//    	// Level5-Lock is implemented by using NumLock, because a real modifier
//    	// is required.
//    	
//        modifiers = Shift + Lock + 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]                    = Level7;
//        map[LevelFive+LevelThree+Shift]              = Level8;
//
//        map[NumLock]                                 = Level5;
//        map[NumLock+Shift]                           = Level6;
//        map[NumLock+LevelThree]                      = Level7;
//        map[NumLock+LevelThree+Shift]                = Level8;
//
//        map[NumLock+LevelFive]                       = Level1;
//        map[NumLock+LevelFive+Shift]                 = Level2;
//        map[NumLock+LevelFive+LevelThree]            = Level3;
//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
//
//        // Lock has no effect
//        map[Lock]                                    = Level1;
//        map[Lock+Shift]                              = Level2;
//        map[Lock+LevelThree]                         = Level3;
//        map[Lock+LevelThree+Shift]                   = Level4;
//
//        map[Lock+LevelFive]                          = Level5;
//        map[Lock+LevelFive+Shift]                    = Level6;
//        map[Lock+LevelFive+LevelThree]               = Level7;
//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
//
//        map[Lock+NumLock]                            = Level5;
//        map[Lock+NumLock+Shift]                      = Level6;
//        map[Lock+NumLock+LevelThree]                 = Level7;
//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
//
//        map[Lock+NumLock+LevelFive]                  = Level1;
//        map[Lock+NumLock+LevelFive+Shift]            = Level2;
//        map[Lock+NumLock+LevelFive+LevelThree]       = Level3;
//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
//
//        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_ALPHABETIC_LEVEL_FIVE_LOCK" {
//    	// Level5-Lock is implemented by using NumLock, because a real modifier
//    	// is required.
//    	
//        modifiers = Shift + Lock + 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]                    = Level7;
//        map[LevelFive+LevelThree+Shift]              = Level8;
//
//        map[NumLock]                                 = Level5;
//        map[NumLock+Shift]                           = Level6;
//        map[NumLock+LevelThree]                      = Level7;
//        map[NumLock+LevelThree+Shift]                = Level8;
//
//        map[NumLock+LevelFive]                       = Level1;
//        map[NumLock+LevelFive+Shift]                 = Level2;
//        map[NumLock+LevelFive+LevelThree]            = Level3;
//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
//
//        // Lock interchanges Level1 and Level2
//        map[Lock]                                    = Level2;
//        map[Lock+Shift]                              = Level1;
//        map[Lock+LevelThree]                         = Level3;
//        map[Lock+LevelThree+Shift]                   = Level4;
//
//        map[Lock+LevelFive]                          = Level5;
//        map[Lock+LevelFive+Shift]                    = Level6;
//        map[Lock+LevelFive+LevelThree]               = Level7;
//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
//
//        map[Lock+NumLock]                            = Level5;
//        map[Lock+NumLock+Shift]                      = Level6;
//        map[Lock+NumLock+LevelThree]                 = Level7;
//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
//
//        map[Lock+NumLock+LevelFive]                  = Level2;
//        map[Lock+NumLock+LevelFive+Shift]            = Level1;
//        map[Lock+NumLock+LevelFive+LevelThree]       = Level4;
//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
//
//        preserve[LevelFive+Shift] = Shift;
//        preserve[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_SEMIALPHABETIC" {
	modifiers = Shift+Lock+LevelThree+LevelFive;
	map[None] = Level1;
	map[Shift] = Level2;
	map[Lock]  = Level2;
	map[LevelThree] = Level3;
	map[Shift+LevelThree] = Level4;
	map[Lock+LevelThree] =  Level3;
        map[Lock+Shift+LevelThree] = Level4;

	map[LevelFive] = Level5;
	map[Shift+LevelFive] = Level6;
	map[Lock+LevelFive]  = Level5;
		map[Lock+Shift+LevelFive]  = Level6;
	map[LevelThree+LevelFive] = Level7;
	map[Shift+LevelThree+LevelFive] = Level8;
	map[Lock+LevelThree+LevelFive] =  Level7;
        map[Lock+Shift+LevelThree+LevelFive] = Level8;

	preserve[Lock+LevelThree] = Lock;
	preserve[Lock+Shift+LevelThree] = Lock;
	preserve[Lock+LevelFive] = Lock;
	preserve[Lock+Shift+LevelFive] = Lock;
	preserve[Lock+LevelThree+LevelFive] = Lock;
	preserve[Lock+Shift+LevelThree+LevelFive] = Lock;

	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";
    };

};

Ergonomie de mon système

Pour citer Ben Orenstein:

Je déteste mon clavier. Je n'utilise jamais deux frappes de clavier si je peux n'en utiliser qu'une.
[…]
Évitez les fichiers de configuration (.vimrc) préécrits par d'autres. Commencez par un .vimrc vide et remplissez-le au fur et à mesure de vos besoins.

Auquel j'ajoute le conseil suivant: n'ayez pas peur de remapper une fonction sur un raccourci clavier déjà existant. Si vous ne connaissez pas/n'utilisez pas ce raccourci, vous n'y perdez rien.

Et mes conseils pour remapper/créer des raccourcis claviers:

  • trouvez un moyen mnémotechnique entre la fonction et le raccourci clavier, même absurde: sous gmail, p est associé à la fonction répondre (mnémo: ré[p]ondre)
  • associez de préférence vos raccourcis clavier sur la homerow: sous gmail, j'ai associé e à la fonction archiver parce que c'est la lettre la plus accessible sur le clavier
  • pour les vimistes: si vous êtes à court de raccourcis clavier pour vos fonctions, n'ayez pas peur des trigrammes faciles (par exemple, {aui} ou {ane}).

VIM (en cours de changements)

Ce .vimrc n'est pas à jour et date de l'époque où j'avais interverti N et S

Comme j'ai interverti le N et le S, le fichier de configuration de VIM doit être modifié en conséquence:

  • flèches directionnelles:
    • c = ←, C = haut de l'écran
    • t = ↓, T = joindre
    • n = ↑, N = aide
    • r = →, R = bas de l'écran
  • remplacement des touches ctnr:
    • jx = aller au prochain caractère x, Jx = aller au caractère x précédent
    • lmov = supprime le mouvement mov et bascule en mode insertion, L = supprime la fin de ligne et bascule en mode insertion (tester si ll supprime toute la ligne)
    • hx = remplace le caractère sous le curseur par x, H = entre en mode remplacement
    • k = cherche la prochaine occurrence de pattern (après /pattern), K = cherche l'occurrence précédente

Au passage j'ai aussi modifié la gestion des fenêtres, avec deux modificateurs (presque) symétriques: à et w. Il y a aussi d'autres modifications au passage que je ne sais pas si je garderai (remapper ê sur 0).

Mon fichier ~/.vimrc.bepo est alors le suivant:

" I. Les commandes de base
" azerty   bépo   signification (minuscule)                signification (majuscule)
" ----------------------------------------------------------------------------------
"    H      C     flèche gauche                            début d'écran
"    J      T     flèche bas                               fusionne deux lignes
"    K      N     flèche haut                              lance :!man sur le mot courant
"    L      R     flèche droite                            fin d'écran
"    C      L     supprime <mvt> puis insert               supprime la fin de ligne puis insert
"    T      J     va à l'emplacement avant le <x> suivant  va après le <x> précédent
"    N      K     relance / et ?                           relance / et ? dans l'autre sens
"    R      H     remplace le caractère sous le curseur    mode remplacement
"    W      É     mouvement jusqu'au prochain mot          jusqu'au prochain MOT

" II. La gestion des fenêtres
"	azerty		bépo	signification (minuscule)		signification (majuscule)				mnémo (bépo)
" ----------------------------------------------------------------------------------------------------------
"	<C-W>		à		préfixe pour la gestion des fenêtres, à gauche sur le clavier
"	<C-W>		w		préfixe pour la gestion des fenêtres, à droite sur le clavier
"	<C-W><C-W>	À		bascule vers la fenêtre précédente (cycle sur toutes les fenêtres)
"	<C-W>p		W		bascule vers la fenêtre précédente (alterne entre 2)
"	<C-W>h		àc		va à la fenêtre à gauche		déplace la fenêtre à l'extrême gauche
"	<C-W>j		àt		va à la fenêtre en bas			déplace la fenêtre à l'extrême bas
"	<C-W>k		àn		va à la fenêtre en haut			déplace la fenêtre à l'extrême haut
"	<C-W>l		àr		va à la fenêtre à droite		déplace la fenêtre à l'extrême droite
"	<C-W>c		we		ferme la fenêtre courante 		(rien)									exit
"	<C-W>t		wh		va à la fenêtre supérieure		déplace la fenêtre vers un nouveau tab  haut
"	<C-W>n		ww		ouvre une nouvelle fenêtre		(rien)									window
"	<C-W>r		wt/wn	déplace la fenêtre un cran vers le bas/vers le haut						t/n (flèches)
"	:vsplit<CR>	à<CR>	divise la fenêtre verticalement
"	:split<CR>	à<SPACE>divise la fenêtre horizontalement

" Remappage d'une touche en azerty: noremap bépo azerty

" remappage de h, H
noremap c h
noremap C H

" remappage de j, gj, zj, J, gJ
noremap t j
noremap gt gj
noremap zn zj
noremap T J
noremap gT gJ

" remappage de k, gk, zk, K
noremap n k
noremap gn gk
noremap zt zk
noremap N K

" remappage de l, L
noremap r l
noremap R L

" remappage de c, C
noremap l c
noremap L C

" remappage de t, T
noremap j t
noremap J T

" remappage de n, N
noremap k n
noremap K N

" remappage de r, R
noremap h r
noremap H R

" remappage de w, W, aw, aW, iw, iW (les text objects du mot courant)
noremap é w
noremap É W
onoremap aé aw
onoremap aÉ aW
onoremap ié iw
onoremap iÉ iW

 
" Navigation des onglets
" onglet précédant / suivant
noremap gb gT
noremap gé gt
" premier / dernier onglet
noremap gB :exe "silent! tabfirst"<CR>
noremap gÉ :exe "silent! tablast"<CR>
 

"Le gestionnaire des fenêtres
" définition des préfixes et commandes fréquentes
noremap à <C-w>
noremap À <C-w><C-w>
noremap w <C-w>
noremap W <C-w>p
noremap à<SPACE> :vsplit<CR>
noremap à<CR> :split<CR>

" pour utiliser ctnr comme hjkl
" même si j est mappé sur t et à est mappé sur <C-w>,
" il faut quand même remapper àt sur <C-w>j
noremap àc <C-w>h
noremap àC <C-w>H
noremap àt <C-w>j
noremap àT <C-w>J
noremap àn <C-w>k
noremap àN <C-w>K
noremap àr <C-w>l
noremap àR <C-w>L

" réattribue ce qui était attribué à ctnr
noremap we <C-w>c
noremap wh <C-w>t
noremap wH <C-w>T
noremap ww <C-w>n
noremap wt <C-w>r
noremap wn <C-w>R


" Remappage personnel:
" ê va au début de ligne, Ê va au premier caractère non-blanc de la ligne
" (plus accessibles que 0 et ^ sur mon clavier)
" mémo: ^ est l'accent de Ê
noremap ê 0
noremap Ê ^
" idem pour le début de la ligne sur l'écran
noremap gê g0
noremap gÊ g^
" ç est remappé sur ` (utilisé pour atteindre un mark)
" mnémo: ç est sur la même touche que @ (lance une macro)
noremap ç `

é, ê, è, à

Ces touches sont une mine d'or. Le clavier déjà surchargé de fonctions vim à un tel point qu'on a parfois du mal à choisir à trouver un raccourci disponible sur lequel associer une fonction. Sauf que les touches accentuées sont toutes inutilisées.

vimrc.bepo

L'adaptation hjkl <-> ctsr. À compléter

vimrc.windows

La modification des commandes <C-W> pour être cohérentes avec ctsr et avec ma config d'i3. Pas encore commencé, mais je pense que ctrl sera mon « modificateur » officiel pour la gestion des fenêtres: <C-W>j ne sera pas remappé vers <C-W>t mais directement vers <C-T>.

Idée: comme dans i3, placer le redimensionnement des fenêtres dans un mode à part? Jeter un oeil au plugin submode pour voir comment faire.

Question: est-ce réellement nécessaire d'utiliser cette fonctionnalité de vim quand on a un gestionnaire de fenêtre comme i3 qui tourne à côté? Le paradigme « une fenêtre = 1 fichier » n'est-il pas mieux? Pas toujours. Il y a des cas où on veut ouvrir plusieurs fichiers dans la même application vim, par exemple quand on appliquer un même changement à plusieurs fichiers à la fois. Ou alors quand plusieurs fichiers ont besoin de mettre plusieurs registres en commun. Ou encore pour pouvoir copier-coller d'un fichier à l'autre sans passer par "+y.

vimrc.abbrev

Inspiré de Utilisateur:Damien_thiriet et Ben Orenstein. L'idée est de remplacer des blocs de texte très fréquents par des abbréviations, et de remapper des typos qu'on fait tout le temps par leur correction. Ce fichier est très personnel, à vous d'écrire le votre.

Firefox

Avec l'addon add to search bar on peut définir n'importe quel champ de saise comme moteur de recherche via le clic droit, et on peut lui associer un mot-clef. Le mot-clef est essentiel, il permet de sélectionner ce moteur de recherche lorsqu'on tape un url dans firefox (avec CTRL-L ou ALT-D, ou avec o dans vimperator/pentadactyl).

Par exemple, j'ai associé le mot-clef « en » au champ de recherche de cette page de façon à ce que la recherche en cupboard ouvre la page de traduction du mot cupboard. D'autres exemples d'utilisation: la barre de recherche dans un wiki ou sur un forum, etc. D'un point de vue d'ergonomie plus les mots-clef sont courts, mieux c'est: « gr » est mon mot-clef pour la recherche de goodreads.com au lieu de « goodreads ».

DWB

Navigateur web très léger et similaire à vimperator. À tester très prochainement. Comme avec l'addon "add to search bar" de firefox, on peut définir soi-même des mots-clef associés à des champs de recherche via la commande "gs".

Gmail

Gmail possède une option pour parcourir ses mails avec des raccourcis claviers. Cette option est encore expérimentale, c'est pourquoi il faut l'activer manuellement dans "roue crantée > paramètres > labos". Le mieux, c'est qu'on peut redéfinir ses raccourcis claviers dans le menu "roue crantée > paramètres > raccourcis claviers". Personnellement j'ai désactivé les raccourcis correspondant aux actions que je n'utilise pas. Pour rester compatible avec pentadactyl, les touches suivantes ne sont pas associées à des actions:

CTSR    page précédente/tab suivant/tab précédent/page suivante
f,F     follow hint
o,O     open website
a,A     open website in new tab
d       kill tab

Voici donc mes raccourcis gmail

c	va au message précédent dans une discussion
t	va à la conversation suivante dans un dossier
s	va à la conversation précédente dans un dossier
r	va au message suivant dans une discussion

.       sélectionne la discussion (poinçonne la case)
p	supprime (p est un d à l'envers)
e	ouvrir l'[e]mail sélectionné
m	écrire un nouveau [m]essage
u/U	annuler la dernière action ([u]ndo)/mettre à jour la conversation ([u]pdate)
à	retour [à] la liste des conversations
q/Q	marquer comme lu/non lu (pas de mnémo)
n/N	répondre (a[n]swer)/répondre à tous
w	transférer (for[w]ard)
l	ouvre le menu « appliquer le [l]ibellé »
x	archiver (x ressemble à la lettre grecque chi)

i	accède à la boite de réception ([i]nbox)
é	accède aux messages envoy[é]s
b	accède aux [b]rouillons
gc	accède aux [c]ontacts
gt	accède à [t]ous les messages

/	sélectionne la barre de recherche
L	cherche pour un [l]abel

?	afficher les raccourcis clavier

i3

i3 est un très bon gestionnaire de fenêtre, avec une documentation exemplaire. Essayez-le.

Ma config se trouve ici.

Claviers alternatifs

Pour plus tard:

  • Tipro. Avec son clavier orthogonal entièrement personnalisable sur 8 lignes, je pourrai y placer mes modificateurs et touches spéciales (MAJ, CTRL, ALT, ALTGR, ESC, TAB, …) où je veux. :-)
  • L'Ergodox a l'air cool à bidouiller aussi

Divers

Bépo

Shortcutworld, un wiki sur les raccourcis clavier: http://www.shortcutworld.com/

Pour en savoir plus sur la syntaxe utilisée dans le wiki: http://meta.wikimedia.org/wiki/Help:Wikitext_examples/fr

Un article sur la conception d'une nouvelle disposition: http://mtgap.bilfo.com/keyboard.html

http://www.lexique.org/listes/liste_bigrammes.txt des statistiques sur les bigrammes de la langue française, utile si on veut modifier le bépo original

Je suis en dualboot Windows 7/Linux et pour l'instant Windows est resté sagement en azerty. Un jour il faudrait que j'explore PKL pour voir si je peux également bidouiller ma disposition sur Windows.

Un lien vers les symboles ascii, utiles pour dessiner un clavier: http://www.toutimages.com/codes_caracteres.htm

╔ ╗ ╚ ╝ ╩ ╦ ╠ ╣ ═ ║ ╬
┌ ┐ └ ┘ ┴ ┬ ├ ┤ ─ │ ┼

Pour s'habituer au pavé numérique, on peut s'exercer en recopiant les décimales de pi. Voici ses 2400 premières décimales, trouvées sur http://trucsmaths.free.fr/images/pi/pi2400.htm

3,141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 820 974 944 592 307 816 406 286 208 998 628 034 825 342 117 067 982 148 086 513 282 306 647 093 844 609 550 582 231 725 359 408 128 481 117 450 284 102 701 938 521 105 559 644 622 948 954 930 381 964 428 810 975 665 933 446 128 475 648 233 786 783 165 271 201 909 145 648 566 923 460 348 610 454 326 648 213 393 607 260 249 141 273 724 587 006 606 315 588 174 881 520 920 962 829 254 091 715 364 367 892 590 360 011 330 530 548 820 466 521 384 146 951 941 511 609 433 057 270 365 759 591 953 092 186 117 381 932 611 793 105 118 548 074 462 379 962 749 567 351 885 752 724 891 227 938 183 011 949 129 833 673 362 440 656 643 086 021 394 946 395 224 737 190 702 179 860 943 702 770 539 217 176 293 176 752 384 674 818 467 669 405 132 000 568 127 145 263 560 827 785 771 342 757 789 609 173 637 178 721 468 440 901 224 953 430 146 549 585 371 050 792 279 689 258 923 542 019 956 112 129 021 960 864 034 418 159 813 629 774 771 309 960 518 707 211 349 999 998 372 978 049 951 059 731 732 816 096 318 595 024 459 455 346 908 302 642 522 308 253 344 685 035 261 931 188 171 010 003 137 838 752 886 587 533 208 381 420 617 177 669 147 303 598 253 490 428 755 468 731 159 562 863 882 353 787 593 751 957 781 857 780 532 171 226 806 613 001 927 876 611 195 909 216 420 198 938 095 257 201 065 485 863 278 865 936 153 381 827 968 230 301 952 035 301 852 968 995 773 622 599 413 891 249 721 775 283 479 131 515 574 857 242 454 150 695 950 829 533 116 861 727 855 889 075 098 381 754 637 464 939 319 255 060 400 927 701 671 139 009 848 824 012 858 361 603 563 707 660 104 710 181 942 955 596 198 946 767 837 449 448 255 379 774 726 847 104 047 534 646 208 046 684 259 069 491 293 313 677 028 989 152 104 752 162 056 966 024 058 038 150 193 511 253 382 430 035 587 640 247 496 473 263 914 199 272 604 269 922 796 782 354 781 636 009 341 721 641 219 924 586 315 030 286 182 974 555 706 749 838 505 494 588 586 926 995 690 927 210 797 509 302 955 321 165 344 987 202 755 960 236 480 665 499 119 881 834 797 753 566 369 807 426 542 527 862 551 818 417 574 672 890 977 772 793 800 081 647 060 016 145 249 192 173 217 214 772 350 141 441 973 568 548 161 361 157 352 552 133 475 741 849 468 438 523 323 907 394 143 334 547 762 416 862 518 983 569 485 562 099 219 222 184 272 550 254 256 887 671 790 494 601 653 466 804 988 627 232 791 786 085 784 383 827 967 976 681 454 100 953 883 786 360 950 680 064 225 125 205 117 392 984 896 084 128 488 626 945 604 241 965 285 022 210 661 186 306 744 278 622 039 194 945 047 123 713 786 960 956 364 371 917 287 467 764 657 573 962 413 890 865 832 645 995 813 390 478 027 590 099 465 764 078 951 269 468 398 352 595 709 825 822 620 522 489 407 726 719 478 268 482 601 476 990 902 640 136 394 437 455 305 068 203 496 252 451 749 399 651 431 429 809 190 659 250 937 221 696 461 515 709 858 387 410 597 885 959 772 975 498 930 161 753 928 468 138 268 683 868 942 774 155 991 855 925 245 953 959 431 049 972 524 680 845 987 273 644 695 848 653 836 736 222 626 099 124 608 051 243 884 390 451 244 136 549 762 780 797 715 691 435 997 700 129 616 089 441 694 868 555 848 406 353 422 072 225 828 488 648 158 456 028 50

Trois claviers vierges de taille différente:

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
│        │        │        │        │        │        │        │        │        │        │        │        │        ║                ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║        │        │        │        │        │        │        │        │        │        │        │        ║          ║
║              ║        │        │        │        │        │        │        │        │        │        │        │        ║          ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║        │        │        │        │        │        │        │        │        │        │        │        ║        ║
║                ║        │        │        │        │        │        │        │        │        │        │        │        ║        ║
╠═══════════╦════╝───┬────┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴───┬────┴───╔═════════════╩════════╣
║           ║        │        │        │        │        │        │        │        │        │        │        ║                      ║
║           ║        │        │        │        │        │        │        │        │        │        │        ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝
║           ║        ║        ║        ║                                            ║        ║        ║        ║
║           ║        ║        ║        ║                                            ║        ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───╔═════╗
│   │   │   │   │   │   │   │   │   │   │   │   │   ║     ║
╔═════╗─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─╚═╦═══╣
║     ║   │   │   │   │   │   │   │   │   │   │   │   ║   ║
╠═════╩╗──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──╚╗  ║
║      ║   │   │   │   │   │   │   │   │   │   │   │   ║  ║
╠════╦═╝─┬─┴─┬─┴─┬─┴─═─┴─┬─┴─┬─┴─═─┴─┬─┴─┬─┴─┬─┴─╔═════╩══╣
║    ║   │   │   │   │   │   │   │   │   │   │   ║        ║
╠════╬═══╦═══╦═══╦════════════════╦════╦════╦════╬════════╝
║    ║   ║   ║   ║                ║    ║    ║    ║
╚════╩═══╩═══╩═══╩════════════════╩════╩════╩════╝

non-Bépo

http://www.sf.airnet.ne.jp/ts/language/number.html

http://tylerneylon.com/a/7date_spec/