Utilisateur:LeBret/Remplacer AltGr par Kana

De Disposition de clavier francophone et ergonomique bépo

⚠ en construction ⚠

Bépo définit plusieurs caractères avec le modificateur clavier bépoAltGr. Or ce modificateur est tout simplement un clavier bépoCtrl+clavier bépoAlt. On peut s’en rendre compte en utilisant le clavier bépoAlt gauche : clavier bépoAltGr+clavier bépoe et clavier bépoCtrl+clavier bépoAlt+clavier bépoe donnent tout les deux €.

En générale ce n’est pas trop gênant, sauf pour les applications qui définissent ce type de raccourci clavier (p.ex. Eclipse).

Une solution est d’utiliser le modificateur clavier bépoKana à la place clavier bépoAltGr. Problème, celui-ci n’est pas proposé par l’interface de MSKLC, l’utilitaire qui génére les pilotes Windows.

Prérequis

  1. Installer MSKLC
  2. Récupérer le bepo.klc

Création des DLL

Modification des sources

Génération des fichier sources .C et .H

kbdutool.exe -u -s bepo.klc

Cette commande crée les fichiers suivants : bepo.C, bepo.DEF, bepo.H, bepo.RC

Modification des sources. Les lignes en vert sont à ajouter. Les lignes en rouge sont à supprimer.

bepo.H 
Ajoutez à la fin du fichier :
#undef  X38
#define X38 _EQ( KANA )

X38 designe la touche Alt gauche.

bepo.C
static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
    { VK_SHIFT    ,   KBDSHIFT     },
    { VK_CONTROL  ,   KBDCTRL      },
    { VK_MENU     ,   KBDALT       },
    { VK_KANA     ,   KBDKANA      },
    { 0           ,   0           }
};
static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
    &aVkToBits[0],
    7,
    9,
    {
    //  Modification# //  Keys Pressed
    //  ============= // =============
        0,            // 
        1,            // Shift 
        2,            // Control 
        SHFT_INVALID, // Shift + Control 
        SHFT_INVALID, // Menu
        SHFT_INVALID, // Shift + Menu
        3,            // Control + Menu
        4             // Shift + Control + Menu
        3,            // kana
        4             // kana + shift
     }
};

Toute la table aVkToWch5 est à supprimer.

static ALLOC_SECTION_LDATA VK_TO_WCHARS5 aVkToWch5[] = {
 //                      |         |  Shift  |  Ctrl   |  Ctl+Alt|S+Ctl+Alt|
 //                      |=========|=========|=========|=========|=========|
   {VK_OEM_7     ,0      ,'$'      ,'#'      ,WCH_NONE ,0x2013   ,0x00b6   },
   {'1'          ,CAPLOK ,'\"'     ,'1'      ,WCH_NONE ,0x2014   ,0x201e   },
   ...
   {VK_DECIMAL   ,0      ,'.'      ,'.'      ,WCH_NONE ,WCH_NONE ,WCH_NONE },
   {0            ,0      ,0        ,0        ,0        ,0        ,0        }
 };

Il faut la remplacer par la table aVkToWch7. Il s’agit en fait de la même table avec simplement deux colonnes en plus dont toutes les valeurs sont WCH_NONE.

static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = {
 //                    |         |  Shift  |  Ctrl   |  Ctl+Alt|S+Ctl+Alt|  Kana   | S+Kana  |
 //                    |=========|=========|=========|=========|=========|=========|=========|
   {VK_OEM_7   ,0      ,'$'      ,'#'      ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x2013   ,0x00b6   },
   {'1'        ,CAPLOK ,'\"'     ,'1'      ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x2014   ,0x201e   },
   ...
   {VK_DECIMAL ,0      ,'.'      ,'.'      ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
   {0          ,0      ,0        ,0        ,0        ,0        ,0        ,0        ,0        }
 };

Cas particulier : l’attribut CAPLOKALTGR ne sert plus à rien, il peut donc être supprimer. Je n’ai pas trouvé l’équivalent pour clavier bépoKana (KANALOK n’a pas le même comportement) si vous avez des infos, écrivez-moi. Heureusement cet attribut est peu utilisé. Ci-dessous un exemple sur la lettre O.

{'O'    ,CAPLOK | CAPLOKALTGR,'o'      ,'O'      ,WCH_NONE ,0x0153   ,0x0152   },
{'O'    ,CAPLOK              ,'o'      ,'O'      ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x0153   ,0x0152   },

Il faut ensuite déclarer cette nouvelle table à la place de l’ancienne :

static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
    {  (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
    {  (PVK_TO_WCHARS1)aVkToWch5, 5, sizeof(aVkToWch5[0]) },
    {  (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) },
    {  (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
    {  (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
    {                       NULL, 0, 0                    },
};

Enfin il n’est plus nécessaire de demander un traitement particulier pour le Alt gauche (AltGr).

   /*
    * Locale-specific special processing
    */
   MAKELONG(KLLF_ALTGR, KBD_VERSION),
   MAKELONG(0, KBD_VERSION),

Compilation

Changez les droits d’écriture sur les fichiers bepo.H et bepo.C pour éviter qu’il soit écraser par la compilation.

>attrib +R bepo.H
>attrib +R bepo.C
>kbdutool.exe -u -x bepo.klc

KbdTool v3.40 - convert keyboard text file to C file or a keyboard layout DLL


Compiling layout information from 'bepo.klc' for i386/x86.

       bepo.H : can't open for write.
       bepo.C : can't open for write.

Les deux messages d’erreurs sont normaux ; ils sont même nécessaires. L’option -x dépend de l’architecture de votre machine. Les autres options sont :

       [-x] Builds for x86 (default)
       [-i] Builds for IA64
       [-m] Builds for AMD64
       [-o] Builds for WOW64

bepo.dll

Création des programmes d’installation

Consultez la page des pilotes Windows.