Utilisateur:Lawrent

De Disposition de clavier bépo

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      │ À      │ ¨ `  ≠ │ V    " │ D      │ L ≤    │ B ≥    │ Z      │ Ç      ║                ║
│ TAB    │ è    ` │  o   œ │ é    & │ p      │ à      │ ^ ´  = │ v ^  ' │ d $  6 │ l <  7 │ b >  8 │ z #  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  ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║    Ê    £      ║ H    ≠ │ Y      │ X    ± │ :    · │ K      │ ? ≈  ; │ Q    ± │ G    = │ J    ( │ F    ) │ W    : │        ║        ║
║    ê    €      ║ h    = │ y    * │ x    + │ .    … │ k    ° │ ' !  , │ q "  + │ g _  - │ j [  * │ f ]  / │ w    . │        ║        ║
╠═══════════╦════╝──════──┴──════──┴──════──┴──════──┴───┬────┴───┬────┴──════──┴──════──┴──════──┴──════──┴───╔═════════════╩════════╣
║           ║        │        │        │     |  │        │        │        │        │        │        │        ║                      ║
║           ║        │        │ MAJ    │   ←—'  │ LEVEL5 │        │ ALT    │ SPACE  │ MAJ    │        │        ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝ 
║           ║        ║        ║        ║                                            ║        ║        ║        ║
║           ║        ║        ║        ║                 ALTGR                      ║ CTRL   ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

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 d'entrée comme moteur de recherche, 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 ».

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 jamais et j'ai associé les raccourcis suivants (l'idéal est de choisir des moyens mnémotechniques pour les retenir):

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

x	sélectionne la discussion (coche la case)
d	supprime (Delete)
o	Ouvrir le message sélectionné
m/M	écrire un nouveau Message
u/U	annuler la dernière action (Undo)/mettre à jour la conversation (Update)
g	retour à la liste des conversations (unGo ou Gmail)
,/;	marquer comme lu/non lu
p/P	réPondre/réPondre dans une nouvelle fenêtre
a/A	répondre à tous (All)/répondre à tous dans une nouvelle fenêtre
f/F	transférer (Forward)/transférer dans une nouvelle fenêtre
l	ouvre le menu « appliquer le libellé »
e	archiver

i	accède à la boite de réception (Inbox)
É	accède aux messages envoyÉs
B	accède aux Brouillons
C	accède aux Contacts
T	accède à Tous les messages

/	sélectionne la barre de recherche
L	cherche pour un label

?	afficher les raccourcis clavier

i3

Comme gestionnaire de fenêtre, je suis en transition vers i3. Première impression: c'est un très bon gestionnaire de fenêtre, avec une documentation exemplaire. Essayez-le.

Mon fichier de configuration suivra. Quelques idées que je configurerai:

  • mettre les flèches directionnelles sur auie (à gauche) et non sur ctsr. Par défaut i3 place les flèches directionnelles sur $mod+jklm et non $mod+hjkl, j'imagine que ce choix a 2 raisons:
    • $mod+h est déjà réservé pour un split horizontal
    • vim place ses flèches sur hjkl pour placer les flèches haut et bas (les plus importantes quand on navigue dans un fichier texte) sur les doigts forts de la main. Or quand on navigue entre les fenêtres et bureaux virtuels, les flèches gauche et droite deviennent les plus importantes. $mod+jklm évite de devoir bouger l'index pour la flèche gauche.

La raison derrière mon $mod+auie, c'est de garder la flèche gauche sur la position de repos tout en ne perturbant pas les habitudes que j'ai dans vim.

  • $mod+enter ouvre un terminal en split vertical, $mod+space ouvre un terminal dans un split horizontal
  • mes bureaux virtuels sont accessibles sur $mod+bépo et non sur $mod+1234, pour ne pas devoir utiliser le modificateur level5 en plus de $mod
  • de manière générale, mes raccourcis suivront la même règle que ceux de gmail: trouver un lien mnémotechnique (même tordu) entre leur fonction et la touche associée.
bindsym $mod+Return split vertical; exec i3-sensible-terminal
bindsym $mod+BackSpace split horizontal; exec i3-sensible-terminal

bindsym $mod+a focus left
bindsym $mod+i focus down
bindsym $mod+u focus up
bindsym $mod+e focus right

bindsym $mod+x focus child
bindsym $mod+y focus parent

bindsym $mod+Shift+a move left
bindsym $mod+Shift+i move down
bindsym $mod+Shift+u move up
bindsym $mod+Shift+e move right

bindsym $mod+o workspace 1
bindsym $mod+é workspace 2
bindsym $mod+p workspace 3
bindsym $mod+à workspace 4

bindsym $mod+Shift+o move container to workspace 1
bindsym $mod+Shift+é move container to workspace 2
bindsym $mod+Shift+p move container to workspace 3
bindsym $mod+Shift+à move container to workspace 4


bindsym $mod+h split horizontal
bindsym $mod+v split vertical

bindsym $mod+s layout stacking # [S]tacking layout
bindsym $mod+n layout toggle split # toggle between horizontal '[N] vertical layouts
bindsym $mod+t layout tabbed # [T]abs layout

mode "resize" {
        bindsym a resize shrink width 10 px or 10 ppt
        bindsym u resize grow height 10 px or 10 ppt
        bindsym i resize shrink height 10 px or 10 ppt
        bindsym e resize grow width 10 px or 10 ppt

        # back to normal: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"
bindsym $mod+Shift+r reload # [R]eload i3's config file

bindsym $mod+l exec dmenu_run # [L]aunch
bindsym $mod+d kill # [D]elete
bindsym $mod+Shift+d exit # [D]elete everything

# custom application launch: vimprobable automatically sets its window in a tabbed layout
bindsym $mod+V exec vimprobable2; split horizontal; layout tabbed

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

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

Un article que je lirai un jour: 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

Deux claviers vierges: un large et un étroit

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

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