[vim] Add support for bépo keyboard layout
This commit is contained in:
parent
938d3afc62
commit
8b5e1b5860
4 changed files with 142 additions and 0 deletions
BIN
bin/detectbepo
Executable file
BIN
bin/detectbepo
Executable file
Binary file not shown.
53
src/detectbepo.c
Normal file
53
src/detectbepo.c
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <X11/XKBlib.h>
|
||||||
|
#include <X11/extensions/XKBrules.h>
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
Display *dpy = XOpenDisplay(NULL);
|
||||||
|
|
||||||
|
if (dpy == NULL) {
|
||||||
|
fprintf(stderr, "Cannot open display\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
XkbStateRec state;
|
||||||
|
XkbGetState(dpy, XkbUseCoreKbd, &state);
|
||||||
|
|
||||||
|
XkbDescPtr desc = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd);
|
||||||
|
char *group = XGetAtomName(dpy, desc->names->groups[state.group]);
|
||||||
|
//printf("Full name: %s\n", group);
|
||||||
|
|
||||||
|
XkbRF_VarDefsRec vd;
|
||||||
|
XkbRF_GetNamesProp(dpy, NULL, &vd);
|
||||||
|
|
||||||
|
char *layout = strtok(vd.layout, ",");
|
||||||
|
|
||||||
|
for (int i = 0; i < state.group; i++) {
|
||||||
|
layout = strtok(NULL, ",");
|
||||||
|
if (layout == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf("Layout name: %s\n", tok);
|
||||||
|
if (strcmp(layout, "fr"))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *variant = strtok(vd.variant, ",");
|
||||||
|
|
||||||
|
for (int i = 0; i < state.group; i++) {
|
||||||
|
variant = strtok(NULL, ",");
|
||||||
|
if (variant == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//printf("Variant name: %s\n", variant);
|
||||||
|
if (strcmp(variant, "bepo"))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
printf("Bépo détecté\n");
|
||||||
|
return 0;
|
||||||
|
}
|
83
vim/bepo.rc
Normal file
83
vim/bepo.rc
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
" From https://bepo.fr/wiki/Vim
|
||||||
|
"
|
||||||
|
" {W} -> [É]
|
||||||
|
" ——————————
|
||||||
|
" On remappe W sur É :
|
||||||
|
noremap é w
|
||||||
|
noremap É W
|
||||||
|
" Corollaire: on remplace les text objects aw, aW, iw et iW
|
||||||
|
" pour effacer/remplacer un mot quand on n’est pas au début (daé / laé).
|
||||||
|
onoremap aé aw
|
||||||
|
onoremap aÉ aW
|
||||||
|
onoremap ié iw
|
||||||
|
onoremap iÉ iW
|
||||||
|
" Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W :
|
||||||
|
noremap w <C-w>
|
||||||
|
noremap W <C-w><C-w>
|
||||||
|
|
||||||
|
" [HJKL] -> {CTSR}
|
||||||
|
" ————————————————
|
||||||
|
" {cr} = « gauche / droite »
|
||||||
|
noremap c h
|
||||||
|
noremap r l
|
||||||
|
" {ts} = « haut / bas »
|
||||||
|
noremap t j
|
||||||
|
noremap s k
|
||||||
|
" {CR} = « haut / bas de l'écran »
|
||||||
|
noremap C H
|
||||||
|
noremap R L
|
||||||
|
" {TS} = « joindre / aide »
|
||||||
|
noremap T J
|
||||||
|
noremap S K
|
||||||
|
" Corollaire : repli suivant / précédent
|
||||||
|
noremap zs zj
|
||||||
|
noremap zt zk
|
||||||
|
|
||||||
|
" {HJKL} <- [CTSR]
|
||||||
|
" ————————————————
|
||||||
|
" {J} = « Jusqu'à » (j = suivant, J = précédant)
|
||||||
|
noremap j t
|
||||||
|
noremap J T
|
||||||
|
" {L} = « Change » (l = attend un mvt, L = jusqu'à la fin de ligne)
|
||||||
|
noremap l c
|
||||||
|
noremap L C
|
||||||
|
" {H} = « Remplace » (h = un caractère slt, H = reste en « Remplace »)
|
||||||
|
noremap h r
|
||||||
|
noremap H R
|
||||||
|
" {K} = « Substitue » (k = caractère, K = ligne)
|
||||||
|
noremap k s
|
||||||
|
noremap K S
|
||||||
|
" Corollaire : correction orthographique
|
||||||
|
noremap ]k ]s
|
||||||
|
noremap [k [s
|
||||||
|
|
||||||
|
" Désambiguation de {g}
|
||||||
|
" —————————————————————
|
||||||
|
" ligne écran précédente / suivante (à l'intérieur d'une phrase)
|
||||||
|
noremap gs gk
|
||||||
|
noremap gt gj
|
||||||
|
" onglet précédent / suivant
|
||||||
|
noremap gb gT
|
||||||
|
noremap gé gt
|
||||||
|
" optionnel : {gB} / {gÉ} pour aller au premier / dernier onglet
|
||||||
|
noremap gB :exe "silent! tabfirst"<CR>
|
||||||
|
noremap gÉ :exe "silent! tablast"<CR>
|
||||||
|
" optionnel : {g"} pour aller au début de la ligne écran
|
||||||
|
noremap g" g0
|
||||||
|
|
||||||
|
" <> en direct
|
||||||
|
" ————————————
|
||||||
|
noremap « <
|
||||||
|
noremap » >
|
||||||
|
|
||||||
|
" Remaper la gestion des fenêtres
|
||||||
|
" ———————————————————————————————
|
||||||
|
noremap wt <C-w>j
|
||||||
|
noremap ws <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>
|
6
vimrc
6
vimrc
|
@ -297,3 +297,9 @@ if has("autocmd")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif " has("autocmd")
|
endif " has("autocmd")
|
||||||
|
|
||||||
|
" Enable bépo layout if detected
|
||||||
|
silent call system("detectbepo")
|
||||||
|
if v:shell_error == 0
|
||||||
|
source ~/.vim/bepo.rc
|
||||||
|
endif
|
||||||
|
|
Loading…
Reference in a new issue