2016-12-12 4 views
3

Dies ist meiner Meinung nach eine äußerst nützliche Neuverknüpfung, da Sie fast nie die Kontrolle alleine eingeben, warum nicht auf esc umstellen?hammerspoon remap control key: sendet esc, wenn es alleine gedrückt wird, send control wenn es mit anderen Tasten gedrückt wird

Seit Karabiner ist weg Ich habe versucht, meine Lieblings-Funktion mit hammerspoon wiederherzustellen, ich denke, das kann erreicht werden, aber ich kann es einfach nicht zur Arbeit zu bekommen, weiß jemand, wie man das richtig macht?

Antwort

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

Wird die Verzögerung hier benötigt? Ich denke, es ist sehr langsam, wenn Sie es auf 0,2 Sekunden einstellen ... – Blaszard

+0

Die Verzögerung ist so, dass Sie die 'caps' leichter als' ctrl' verwenden können; Für den Fall, dass Sie zum Beispiel "ctrl-c" gedrückt haben und sich gegen das Drücken entschieden haben, aber "caps" bereits gedrückt ist, können Sie es etwas länger halten und es wird wieder "ctrl". Es sollte nichts im normalen Gebrauch stören, wenn es ein 'esc' drückt, wird es fast immer für weniger als 0.2 niedergedrückt. Wenn Sie es länger halten, wird es wieder 'ctrl'. Der wichtige Teil dieses Codes besteht darin, dass in dem Moment, in dem Sie eine andere Taste als "caps" drücken, während caps noch gedrückt ist, diese in den "ctrl" -Keycode wechselt, der gesendet wird. –

+0

Wenn Sie die Verzögerung zu klein einstellen, können Sie die Taste nicht innerhalb der Verzögerung drücken, um schnell esc zu senden. Du könntest das so ändern, dass es nur esc sendet, wenn nicht etwas anderes gedrückt wird, aber ich ziehe es vor, Caps als Strg-Taste zu betrachten, es sei denn, es drückt schnell und für sich selbst, dann ist es esc. –

Verwandte Themen