Première petite bidouille en relation avec l'Apple IIGS et plus exactement ActiveGS, l'excellent émulateur que j'utilise quasiment quotidiennement en ce moment pour les screenshots des galeries. Seul petit problème, ActiveGS, défini par ses créateurs (qu'on ne présente plus) comme un front-end à KEGS, l'émulateur GS référence de Kent Dickey, souffre du même problème que celui-ci : le support exclusif du clavier QWERTY. Ce qui se traduit, si on utilise un bon vieux clavier AZERTY de PC, par un mapping des touches apocalyptique ! Vouloir entrer le moindre signe de ponctuation ou avoir accès aux caractères spéciaux se transforme vite en supplice. Et la crise de nerf n'est jamais bien loin quand il faut essayer toutes les touches du clavier pour afficher une accolade (si jamais on la trouve...) !
Bien évidemment, modifier le réglage au niveau du "Control Panel" de la ROM du GS émulé ne change absolument rien, c'est simplement le cœur d'ActiveGS (donc KEGS) qui ignore superbement la disposition des touches AZERTY. Et passer son clavier PC en mode QWERTY au niveau de Windows ne résoudra pas non plus le problème car si vous n'avez pas de double inscription sur les touches, bonjour l'angoisse pour s'y retrouver... 

La solution va donc être de remapper les touches de notre clavier PC vers les touches affichant les caractères voulus sous ActiveGS. Sous Windows, il existe deux possibilités pour remapper : la bonne et la mauvaise ! La mauvaise (pour ce cas précis), c'est de faire un remapping au niveau du système, par l'intermédiaire de la base de registre. Car dans ce cas, le mapping sera permanent et concernera toutes les applications. De plus, on ne pourra pas passer d'une configuration de touches à l'autre à la volée car il faudra après modification de la base de registre, systématiquement rebooter pour que cela soit pris en compte ! Bref, il vaut mieux utiliser une autre méthode, en l’occurrence la bonne ! Et celle-ci a un nom : AutoHotkey !

Ce petit logiciel, gratuit et peu gourmand en ressources, exécute des scripts (de simples fichiers texte avec extension .ahk) écrits dans un langage propriétaire mais simple. À la base, AutoHotkey permettait de définir des Hotkeys (d'où son nom), c'est à dire des touches auxquelles on pouvait assigner une fonction particulière (lancer une application notamment). Mais au fil des évolutions, AutoHotkey est devenu un outil de programmation avancé permettant de faire beaucoup de choses (manipulations de fenêtres, interactions avec des applications tierces, etc.). Bien heureusement, il a conservé ses fonctions premières de HotKey, nous permettant ainsi de redéfinir très simplement nos touches du clavier et de résoudre notre problème.

Voyons concrètement quelques lignes issues du script AutoHotkey que j'utilise pour remapper les touches avec ActiveGS :

<^>!(::SendInput )		; [
+(::SendInput {Numpad5}		; 5
(::SendInput +ç 		; (

Cela a l'air un peu barbare comme ça mais en fait c'est très simple. Nous avons ici le cas concret du remapping complet de la touche ( d'un clavier PC. Par l’intermédiaire de cette touche est accessible la parenthèse gauche donc, le chiffre 5 (avec Shift) et le crochet gauche (avec AltGr). Or pour obtenir, sous ActiveGS, la parenthèse gauche, il faut en fait utiliser la touche ç d'un clavier PC ! Et pour le crochet, c'est la touche ). Si je vous dis que, dans le langage de script AutoHotkey, + et <^>! représentent respectivement l'appui sur Shift et sur AltGr, vous commencez à comprendre la syntaxe je suppose :

Touche PC :: Équivalence ActiveGS
(oublions le SendInput qui n'est en fait qu'une option de la fonction de base "::")

Il faut bien comprendre qu'AutoHotkey remappe la touche complète et n'agit pas au niveau des caractères. Si vous définissez dans un script uniquement a::b , à chaque appui sur la touche a, AutoHotkey simulera un appui sur la touche b. Si vous faites Shift+a, il enverra alors un Shift+b (donc B). Et ceci automatiquement.
Si on veut qu'il remplace Shift+a par autre chose que Shift+b, il faudra donc spécifiquement définir la touche (ou combinaison de touches) que l'on veut obtenir pour ce Shift+a. Par exemple :

+a::+c   ; Shift+a enverra un Shift+c soit un C majuscule
a::b     ; l'appui sur a enverra un b
notes    : vu que rien n'est défini spécifiquement, pour Ctrl+a,
           AutoHotkey enverra par défaut un Ctr+b.
         : un appui sur b enverra un... b (la touche de destination
           n'est pas modifiée par le a::b).

Comme on peut utiliser les modificateurs de touche (Shift/Alt/Ctrl/AltGr) de chaque côté de la fonction "::", on obtient donc une certaine souplesse permettant d'envoyer spécifiquement une combinaison de touches à la place d'une autre. Et donc, par extension (et déformation de langage), un caractère à la place d'un autre !

Tout ceci est un peu confus ? Essayez avec un script simple en utilisant les différents modificateurs d'un côté et de l'autre de la fonction et voyez concrètement le résultat. Avec un peu de pratique, on pige vite le coup. J'invite d'ailleurs tous les utilisateurs un tant soit peu curieux à se pencher très sérieusement sur AutoHotkey car il peut rendre de nombreux services. Le site officiel est d'ailleurs très bien foutu, l'aide (en ligne comme locale) est abondante et le forum, très actif, permet de répondre à pas mal d'interrogations.

Pour l'utilisation d'un script, c'est très simple : une fois AutoHotkey installé, un double-clique sur le fichier .ahk l'active. La magie s'opère alors ! Et comble du raffinement dans le cas qui nous intéresse, le remapping se fait uniquement si ActiveGS est au premier plan. Vous pouvez utiliser vos applications en parallèle avec le mapping normal du clavier.

J'ai intégré au script pur de remapping des touches, une partie permettant d'ouvrir automatiquement au lancement d'ActiveGS la boîte de dialogue d'options et de la déplacer dans un coin de l'écran. J'en avais marre de le faire manuellement à chaque lancement ! Et ceci permet également d'illustrer les multiples possibilités d'AutoHotkey. Je pense d'ailleurs par la suite continuer à améliorer le script en y ajoutant de nouvelles fonctions et en corrigeant bien sûr les éventuels bugs. Quant au mapping des touches en lui-même, il permet sous Dos/Prodos d'avoir accès de façon normale à tous les caractères comme les parenthèses, les crochets ou les accolades (pratique pour ceux qui veulent programmer sous Merlin sans se tirer une balle !). De plus, sous GS/OS 6.01 francisé, il permet d'obtenir les caractères accentués français par la même combinaison de touche que sur un clavier PC !

Télécharger mon script de remapping (dernière version) et AutoHotkey pour Windows.

Notes :

  • j'ai fait une utilisation intensive du pavé numérique pour remapper les chiffres. Sous ActiveGS, si vous utilisez ce pavé pour simuler le joystick, cela risque de poser problème ! voir mise à jour 0.43
  • si quelqu'un retrouve l'équivalent de la touche _ (underscore), je suis preneur. Surtout que sur GS, la même touche sert pour le signe moins (-), nettement plus problématique lorsqu'il manque. Heureusement que sur le pavé numérique, cette touche existe...
  • certaines touches PC, n'ayant pas d'équivalent sous ActiveGS, ne sont pas remappées. Il y a donc pour certains caractères plusieurs façons de les obtenir (la touche officielle PC et la touche délire ActiveGS restée en l'état).
  • il faudra probablement adapter le script pour certains claviers. Je pense notamment aux claviers d'ordinateurs portables qui ont souvent un agencement particulier spécifique à chaque modèle.
  • le script est uniquement compatible avec la version standalone d'ActiveGS sous Windows. Pour les autres OS, il y a un projet d'adaptation d'AutoHotkey multi-plateformes. Il existe peut-être même des équivalents (nul besoin d'avoir des fonctions avancées juste pour remapper). voir mise à jour 0.48 pour la compatibilité avec la version Plugin pour navigateurs

 

Mises à jour :

  • 0.42 (08.10.2012) : première version stable diffusée.
  • 0.43 (09.10.2012) : limitation de l'utilisation du pavé numérique pour le remapping (uniquement pour le signe "-"). Ceci afin de limiter les conflits avec les logiciels GS utilisant le pavé numérique pour différentes fonctions.
  • 0.48 (12.10.2012) :
    1. boîte d'options maintenant magnétique et déplaçable par CTRL+HOME à 4 emplacements différents autour de la fenêtre principale (pour ActiveGS standalone uniquement).
    2. ajout du support de GSport (autre émulateur dérivé de KEGS).
    3. ajout du support intégral de la version Plugin d'ActiveGS pour Chrome.
    4. ajout du support de la version Plugin pour IE et Firefox pour les sites Virtual Apple et FTA. En effet, pour Internet Explorer et Firefox, AutoHotkey ayant des difficultés à reconnaître spécifiquement l'onglet dans lequel s’exécute le plugin ActiveGS, il est nécessaire de définir chaque site dans le script afin d'éviter un remapping des touches sur l'ensemble des onglets du browser.
    5. correction de bugs divers et optimisation.
  • 0.50 (17.10.2012) :
    1. ajout d'une Hotkey (CTRL+END) pour cacher/afficher le symbole d'accès disque quand l'émulateur est en pause par F5 (remarque : oui je sais que l'on peut désactiver l'affichage dans le fichier de configuration d'ActiveGS, toutefois cela nécessite un redémarrage de l"émulateur, idem pour le réactiver. Mon approche permet de ponctuellement l'effacer si besoin est, pour prendre un screenshot notamment).
    2. changement du titre de la fenêtre d'ActiveGS quand l'émulateur est en pause.
  • 0.53 (01.11.2012) : prise en compte de la modification "underscore" pour ActiveGS standalone (PC) et GSport.
  • 0.55 (11.11.2012) : ajout de la touche Win Droite comme alternative à ALT Gr pour obtenir certains caractères sous GS/OS ou les CDA.
  • 0.80 (29.11.2012) : support de plusieurs sessions d'ActiveGS en même temps.
  • 0.91 (11.01.2013) : ajout de la fonction COLLER (touche F2) vers ActiveGS d'un texte mis dans le presse-papier (ESC permet de stopper le processus). Remarque : il y a une temporisation de définie  permettant d'éviter que certains caractères ne se perdent en route. Suivant la puissance du PC faisant tourner ActiveGS et la vitesse de simulation de celui-ci, cette tempo pourra être optimisée. : modifier le paramètre suivant SetKeyDelay dans le script (exprimé en milliseconde).
  • 0.92 (13.01.2013) :
    1. fonction COLLER - correction de bugs et ajout de la possibilité de mettre en pause le processus (touche ESPACE).
    2. fonction COLLER - amélioration de la vitesse pour les textes courts (désactivation de la temporisation).

 

Vous pouvez retrouver toutes les versions du script directement sur cette page.