Typematrix, couper/copier/coller et FFXIV

Par défaut

Aller, depuis le script autohotkey pour Telegram, je ne sais pas pourquoi, mais je n’arrête pas de bidouiller pour améliorer mon utilisation du clavier. Là, il s’agit d’améliorer le copier coller avec un Typematrix : en effet, vu le placement des lettres « c » et « v » en bépo, l’opération ne se fait plus d’une seule main.

Les créateurs du clavier y ont pensé et ont mis 3 racourcis à activer avec la touche « Fn » en bas à gauche :

cut_copy_paste_tmx

Seulement cette solution n’est pas parfaite : elle envoie en fait respectivement les séquences de touches « Shift-Suppr », « Ctrl-Insert » et « Shift-Insert » qui sont des racourcis très répendus pour couper, copier et coller en informatique. Là où ça coince, c’est que certains logiciels ne prennent pas en compte ces séquences standard et du coup, on est privé de copier-coller dans ceux-ci.

C’est là qu’entre en jeu Autohotkey, pour convertir ces séquences en classique Ctrl-x, Ctrl-c, Ctrl-v !

#singleinstance 
#NoTrayIcon
#NoEnv 
^Insert::Send, ^c
+Insert::Send, ^v
+Delete::Send, ^x

ARR_FFXIV_Logo

Et voilà ! Enfin… presque, j’ai fait ce bout de script à la base pour un jeu (Final Fantasy XIV pour ne pas le citer) et ces trois petites lignes n’ont rien arrangé du tout en jeu. J’ai alors fouillé la documentation et fait beaucoup d’expérimentations pour arriver à ça :

#singleinstance 
#NoTrayIcon
#NoEnv 
SendMode Input
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#IfWinActive ahk_class FFXIVGAME
^Insert::
Send, ^c
return

+Insert::
ControlSend,, {Shift up}{Control up}, ahk_class FFXIVGAME
SetKeyDelay, -1, 50
ControlSend,, {Control down}v{Control up}, ahk_class FFXIVGAME
SetKeyDelay, -1, -1
return

+Delete::
ControlSend,, {Shift up}{Control up}, ahk_class FFXIVGAME
SetKeyDelay, -1, 50
ControlSend,, {Control down}{x}{Control up}, ahk_class FFXIVGAME
SetKeyDelay, -1, -1
return

#IfWinActive 
^Insert::Send, ^c 
+Insert::Send, ^v 
+Delete::Send, ^x

Une petite explication s’impose. Comme je voulais une autre combinaison pour FFXIV, j’ai ouvert une section pour avec « #IfWinActive ahk_class FFXIVGAME » et je la termine pour revenir à un mode global avec « #IfWinActive » (sans paramètre). Le ahk_class dit à AutoHotkey quelle fenêtre reçoit ces commandes et on trouve cette classe en utilisant le Window Spy de Autohotkey.

Ensuite, Autohotkey envoie des touches et Windows accepte plusieurs façon d’envoyer des entrées, je n’y connais pas grand chose mais déjà, entre le mode sur le bureau et DirectX, ça doit être différent. J’ai testé plusieurs choses et « SendEvent » ainsi que « ControlSend » sont les seuls qui fonctionnent. Le dernier fonctionne nettement mieux sur ce jeu mais l’info peut être utile si jamais ça ne marche pas pour vous pour un autre jeux.

Le second problème, c’est que le Typematrix semble garder Shift appuyé plus longtemps que nécessaire pour faire « Shift-Insert » et du coup, j’envoie un levé de touche Shift. Le levé de Control est pour nettoyer le tout car ça insérait un « v » au premier « coller » après un « copier ». Un temps de pressage de touche est configuré pour laisser le jeu capturer les entrées.

Enfin, pour ceux qui seraient tenté d’utiliser « ahk_exe » à la place de « ahk_class » le nom de l’exe change selon que vous lancez le jeu en DX9 ou DX11 (me suis fait avoir…).

Bon copier coller in game !