4 changed files with 142 additions and 0 deletions
Binary file not shown.
@ -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; |
|||
} |
|||
@ -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> |
|||
Loading…
Reference in new issue