2016-12-12 2 views
3

Ceci est un remappage extrêmement utile à mon avis, puisque vous ne tapez presque jamais de contrôle seul, pourquoi ne pas le remapper à esc? Depuis que le mousqueton est parti, j'ai essayé de restaurer ma fonctionnalité préférée en utilisant marteau-pieu, je pense que cela peut être atteint, mais je ne peux pas le faire fonctionner, est-ce que quelqu'un sait comment le faire correctement?marteauxpoon remapper la touche de contrôle: envoyer esc quand pressé seul, envoyer le contrôle lorsqu'il est pressé avec d'autres touches

Répondre

4
-- Sends "escape" if "caps lock" is held for less than .2 seconds, and no other keys are pressed. 

local send_escape = false 
local last_mods = {} 
local control_key_timer = hs.timer.delayed.new(0.2, function() 
    send_escape = false 
end) 

hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, function(evt) 
    local new_mods = evt:getFlags() 
    if last_mods["ctrl"] == new_mods["ctrl"] then 
     return false 
    end 
    if not last_mods["ctrl"] then 
     last_mods = new_mods 
     send_escape = true 
     control_key_timer:start() 
    else 
     if send_escape then 
      hs.eventtap.keyStroke({}, "escape") 
     end 
     last_mods = new_mods 
     control_key_timer:stop() 
    end 
    return false 
end):start() 


hs.eventtap.new({hs.eventtap.event.types.keyDown}, function(evt) 
    send_escape = false 
    return false 
end):start() 
+0

Le délai est-il nécessaire ici? Je pense que c'est très lent si vous le réglez à 0,2 sec ... – Blaszard

+0

Le délai est tel que vous pouvez utiliser le 'caps' comme' ctrl' plus facilement; dans le cas où vous êtes par exemple arrivé à "ctrl-c", et que vous avez décidé de ne pas appuyer dessus mais que "caps" est déjà pressé, vous pouvez le maintenir un peu plus longtemps et le retourner dans "ctrl". Il ne devrait pas interférer avec quoi que ce soit dans l'utilisation normale, si c'est un 'esc' appuyez sur il sera presque toujours enfoncé pour moins de 0,2. Si vous le maintenez plus longtemps, il se transforme en 'ctrl'. La partie importante de ce code est que le moment où vous appuyez sur une touche autre que «caps» alors que les majuscules sont encore enfoncées, il change pour le code clé «ctrl» envoyé. –

+0

Fondamentalement, si vous définissez le retard trop petit, vous ne seriez pas en mesure d'appuyer sur la touche et relâchez-le dans le délai assez rapidement pour envoyer esc. Vous pouvez modifier ceci pour envoyer seulement esc à moins que quelque chose d'autre ne soit pressé, mais je préfère penser à des caps comme une clé ctrl sauf si elle est pressée rapidement et seule alors c'est esc. –