diff --git a/modules/darwin/hammerspoon/Spoons/ControlEscape.spoon/init.lua b/modules/darwin/hammerspoon/Spoons/ControlEscape.spoon/init.lua index 09f6506..7b4d676 100644 --- a/modules/darwin/hammerspoon/Spoons/ControlEscape.spoon/init.lua +++ b/modules/darwin/hammerspoon/Spoons/ControlEscape.spoon/init.lua @@ -8,113 +8,105 @@ --- combination with another key, then provide the normal `control` key --- behavior. -local obj={} +local obj = {} obj.__index = obj -- Metadata -obj.name = 'ControlEscape' -obj.version = '0.1' -obj.author = 'Jason Rudolph ' -obj.homepage = 'https://github.com/jasonrudolph/ControlEscape.spoon' -obj.license = 'MIT - https://opensource.org/licenses/MIT' +obj.name = "ControlEscape" +obj.version = "0.1" +obj.author = "Jason Rudolph " +obj.homepage = "https://github.com/jasonrudolph/ControlEscape.spoon" +obj.license = "MIT - https://opensource.org/licenses/MIT" function obj:init() - self.movements = 0 - self.sendEscape = false - self.lastModifiers = {} + self.movements = 0 + self.sendEscape = false + self.lastModifiers = {} - -- Create an eventtap to run each time the modifier keys change (i.e., each - -- time a key like control, shift, option, or command is pressed or released) - self.controlTap = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, - function(event) - local newModifiers = event:getFlags() + -- Create an eventtap to run each time the modifier keys change (i.e., each + -- time a key like control, shift, option, or command is pressed or released) + self.controlTap = hs.eventtap.new({ hs.eventtap.event.types.flagsChanged }, function(event) + local newModifiers = event:getFlags() - -- If this change to the modifier keys does not involve a *change* to the - -- up/down state of the `control` key (i.e., it was up before and it's - -- still up, or it was down before and it's still down), then don't take - -- any action. - if self.lastModifiers['ctrl'] == newModifiers['ctrl'] then - return false - end - - -- Control was not down but is now - if not self.lastModifiers['ctrl'] then - - -- Only prepare to send escape if no other modifier keys are in use - self.lastModifiers = newModifiers - if (not self.lastModifiers['cmd'] and not self.lastModifiers['alt']) then - self.sendEscape = true - self.movements = 0 + -- If this change to the modifier keys does not involve a *change* to the + -- up/down state of the `control` key (i.e., it was up before and it's + -- still up, or it was down before and it's still down), then don't take + -- any action. + if self.lastModifiers["ctrl"] == newModifiers["ctrl"] then + return false end - -- Control was down and is up, hasn't been blocked by another key, and - -- isn't above the movement threshold - elseif (self.sendEscape == true and not newModifiers['ctrl'] and self.movements < 30) then + -- Control was not down but is now + if not self.lastModifiers["ctrl"] then + -- Only prepare to send escape if no other modifier keys are in use + self.lastModifiers = newModifiers + if not self.lastModifiers["cmd"] and not self.lastModifiers["alt"] then + self.sendEscape = true + self.movements = 0 + end - self.lastModifiers = newModifiers + -- Control was down and is up, hasn't been blocked by another key, and + -- isn't above the movement threshold + elseif self.sendEscape == true and not newModifiers["ctrl"] and self.movements < 30 then + self.lastModifiers = newModifiers - -- Allow for shift-escape - if newModifiers['shift'] then - hs.eventtap.keyStroke({'shift'}, 'escape', 0) + -- Allow for shift-escape + if newModifiers["shift"] then + hs.eventtap.keyStroke({ "shift" }, "escape", 0) + else + hs.eventtap.keyStroke(newModifiers, "escape", 0) + end + self.sendEscape = false + self.movements = 0 + self.numberOfCharacters = 0 + + -- Control was down and is up, but isn't ready to send escape else - hs.eventtap.keyStroke(newModifiers, 'escape', 0) + self.lastModifiers = newModifiers end + end) + + -- If any other key is pressed, don't send escape + self.asModifier = hs.eventtap.new({ hs.eventtap.event.types.keyDown }, function(_) self.sendEscape = false - self.movements = 0 - self.numberOfCharacters = 0 + print("Don't sent escape") + end) - -- Control was down and is up, but isn't ready to send escape - else - self.lastModifiers = newModifiers - - end - end - ) - - -- If any other key is pressed, don't send escape - self.asModifier = hs.eventtap.new({hs.eventtap.event.types.keyDown}, - function(event) - self.sendEscape = false - end - ) - - -- If mouse is moving significantly, don't send escape - self.scrolling = hs.eventtap.new({hs.eventtap.event.types.gesture}, - function(event) - local touches = event:getTouches() - local i, v = next(touches, nil) - while i do - if v["phase"] == "moved" then - -- Increment the movement counter - self.movements = self.movements + 1 + -- If mouse is moving significantly, don't send escape + self.scrolling = hs.eventtap.new({ hs.eventtap.event.types.gesture }, function(event) + local touches = event:getTouches() + local i, v = next(touches, nil) + while i do + if v["phase"] == "moved" then + -- Increment the movement counter + self.movements = self.movements + 1 + end + i, v = next(touches, i) -- get next index end - i, v = next(touches, i) -- get next index - end - end - ) + end) end --- ControlEscape:start() --- Method --- Start sending `escape` when `control` is pressed and released in isolation function obj:start() - self.controlTap:start() - self.asModifier:start() - self.scrolling:start() + self.controlTap:start() + self.asModifier:start() + self.scrolling:start() end --- ControlEscape:stop() --- Method --- Stop sending `escape` when `control` is pressed and released in isolation function obj:stop() - -- Stop monitoring keystrokes - self.controlTap:stop() - self.asModifier:stop() - self.scrolling:stop() + -- Stop monitoring keystrokes + self.controlTap:stop() + self.asModifier:stop() + self.scrolling:stop() - -- Reset state - self.sendEscape = false - self.lastModifiers = {} + -- Reset state + self.sendEscape = false + self.lastModifiers = {} end return obj diff --git a/modules/darwin/hammerspoon/Spoons/Launcher.spoon/init.lua b/modules/darwin/hammerspoon/Spoons/Launcher.spoon/init.lua index 3d852cf..fa27215 100644 --- a/modules/darwin/hammerspoon/Spoons/Launcher.spoon/init.lua +++ b/modules/darwin/hammerspoon/Spoons/Launcher.spoon/init.lua @@ -8,11 +8,11 @@ obj.name = "Launcher" obj.version = "0.1" obj.license = "MIT - https://opensource.org/licenses/MIT" -function drawSwitcher() +function DrawSwitcher() -- Drawing - width = hs.screen.mainScreen():fullFrame().w - switcherWidth = 500 - canv = hs.canvas.new({ + local width = hs.screen.mainScreen():fullFrame().w + local switcherWidth = 500 + local canv = hs.canvas.new({ x = width / 2 - switcherWidth / 2, y = 1, h = 3, @@ -39,8 +39,9 @@ function obj:init() -- Behaviors on enter function self.launcher:entered() -- hs.alert("Entered mode") - self.canv = drawSwitcher() + self.canv = DrawSwitcher() end + -- Behaviors on exit function self.launcher:exited() -- hs.alert("Exited mode") @@ -54,10 +55,6 @@ function obj:init() -- Launcher shortcuts self.launcher:bind("ctrl", "space", function() end) - self.launcher:bind("", "space", function() - hs.hints.windowHints() - self.launcher:exit() - end) self.launcher:bind("", "return", function() self:switch("Alacritty.app") end)