2014-06-30 1 views
0

J'ai quelques mappages de touches et macros que j'utilise via AutoHotkey. J'ai remappé le contrôle à capslock et j'ai fait une macro qui me permet d'appuyer sur ^, pour la maison et ^. pour la fin. Cela fonctionne parfaitement bien si je presse capslock et ',' ou '.' une fois que. Mais si je continue à maintenir le verrouillage des majuscules, puis appuyez sur "," ou "." encore une fois, il insère juste le personnage. Je reçois le comportement attendu lorsque je maintiens la touche capslock actuelle.AHK Macro ne s'exécute qu'une seule fois lors de l'utilisation du contrôle remappé - s'exécute toujours en utilisant la touche de contrôle normale

J'ai essayé les suggestions de la réponse dans cette question: Autohotkey, issue after mapping capslock::ctrl et cela fonctionne - sauf qu'il change le comportement du début/fin de ligne au début/fin du fichier.

Voici mon code:

^,::Send, {Home} 
^.::Send, {End} 
Capslock::Ctrl 

Répondre

1

Il y a beaucoup de complications possibles lors du mappage directement CapsLock à une clé. Je suggère que vous allez la route de la définition d'une variable lorsque CapsLock est maintenu enfoncé. Voici comment je vous suggère de le faire pour AutoHotkey_L.

global capDown = 0 

CapsLock:: 
    capDown = 1 
return 

CapsLock up:: 
    capDown = 0 
return 


#If capDown 
    *h::CapsNav("Left") 
    *j::CapsNav("Down") 
    *k::CapsNav("Up") 
    *l::CapsNav("Right") 

    *,::CapsNav("Home") 
    *.::CapsNav("End") 

    *n::CapsNav("Home", "^") 
    *p::CapsNav("End", "^") 

    *a::Send ^a ; add as needed 



CapsNav(action, initmod = "", mod = "+") 
{ 
    If ! GetKeyState("alt") 
     Send % initmod "{" action "}" 
    Else 
     Send % mod . initmod "{" action "}" 
    SetCapsLockState, AlwaysOff 
} 

Pour la version récente de AutoHotkey supprimer global et changer #If capDown à if (capDown)

La fonction incluse permet également Alt qui se tiendra vers le bas pour sélectionner du texte tout en se déplaçant. Il permet également d'utiliser un modificateur tel que Ctrl.

Si vous utilisez CapsLock pour d'autres combinaisons de touches, vous voudrez également ajouter tout cela. J'espère que cela t'aides.

+0

Cela semble très intéressant et je voudrais l'utiliser. J'adore que tu aies inclus les raccourcis VI, je n'ai jamais pensé à faire ça mais c'est génial. Cependant, lorsque j'essaie d'exécuter ce script, j'obtiens cette erreur: '' Line Text: global capDown = 0'' '' Erreur: Cette ligne ne contient pas d'action reconnue. '' –

+0

Il semble que vous utilisiez AHK Standard par opposition à AHK_L. Le 'global' n'est pas requis pour que le script fonctionne correctement. Essayez de le retirer et voir si cela fonctionne pour vous. –

+0

Malheureusement, cela dit: '' Texte de ligne: #If capDown Erreur: Cette ligne ne contient pas d'action reconnue.'' –

0

Je ne sais pas pourquoi vous avez ce comportement.

J'ai essayé ceci pour tester et cela fonctionne bien plusieurs fois avec à la fois Ctrl ou CapsLock enfoncé tout le temps.

Capslock::Ctrl 
^,::SoundBeep, 300, 500 
^.::SoundBeep, 1000, 500 
+0

Intéressant. J'ai le comportement indiqué sur deux ordinateurs distincts. –

+0

Pourrait-il être un problème de version, j'utilise AutoHotkey v1.1.10.01. Ou y a-t-il autre chose, par ex. votre version du système d'exploitation ou votre pilote de clavier. –

Questions connexes