Utilisateur:LeBret/Remplacer AltGr par Kana

De Disposition de clavier bépo
< Utilisateur:LeBret
Version datée du 21 septembre 2011 à 21:40 par LeBret (discussion | contributions) (1ère version)

⚠ 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

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),

Création des programmes d’installation

Consultez la page des pilotes Windows.