Add hammerspoon. Almost usable now...

This commit is contained in:
Thomas Lovén 2017-10-17 00:44:06 +02:00
parent d668c03630
commit a11d3cb3d5
5 changed files with 174 additions and 0 deletions

View File

@ -0,0 +1,70 @@
local timer = require("hs.timer")
local eventtap = require("hs.eventtap")
local events = eventtap.event.types
local module = {}
module.timeFrame = 1
module.action = function()
hs.alert("You double tapped ctrl!")
end
local timeFirstControl = 0
local firstDown = false
local secondDown = false
local noFlags = function(ev)
local result = true
for k,v in pairs(ev:getFlags()) do
if v then
result = false
break
end
end
return result
end
local onlyCtrl = function(ev)
local result = ev:getFlags().ctrl
for k,v in pairs(ev:getFlags()) do
if k ~= "ctrl" and v then
result = false
break
end
end
return result
end
local reset = function()
timeFirstControl = 0
firstDown = false
secondDown = false
end
module.eventWatcher = eventtap.new({events.flagsChanged, events.keyDown}, function(ev)
if(timer.secondsSinceEpoch() - timeFirstControl) > module.timeFrame then
reset()
end
if ev:getType() == events.flagsChanged then
if noFlags(ev) and firstDown and secondDown then
if module.action then module.action() end
reset()
elseif onlyCtrl(ev) and not firstDown then
firstDown = true
timeFirstControl = timer.secondsSinceEpoch()
elseif onlyCtrl(ev) and firstDown then
secondDown = true
elseif not noFlags(ev) then
reset()
end
else
reset()
end
return false
end):start()
return module

View File

@ -0,0 +1,54 @@
local eventtap = require("hs.eventtap")
local keycodes = require("hs.keycodes")
keycodes = keycodes.map
local events = eventtap.event.types
local module = {}
local escPressed = false
local otherPressed = false
local recursion = false
module.addModifier = function(ev)
ev:setFlags({['cmd'] = true})
return ev
end
module.eventWatcher = eventtap.new({events.keyDown, events.keyUp}, function(ev)
if recursion then
recursion = false
return false
end
if ev:getKeyCode() == keycodes['escape'] then
if ev:getType() == events.keyDown then
if not escPressed then
--hs.alert("esc down")
escPressed = true
otherPressed = false
return true
end
else
--hs.alert("esc up")
escPressed = false
if not otherPressed then
--hs.alert("escape")
ev = eventtap.event.newKeyEvent({}, 'escape', true)
recursion = true
ev:post()
else
--escPressed = false
end
return true
end
elseif escPressed and ev:getType() == events.keyDown then
otherPressed = true
ev = module.addModifier(ev)
recursion = true
ev:post()
return true
end
return false
end):start()
return module

30
wm/hammerspoon/init.lua Executable file
View File

@ -0,0 +1,30 @@
local super = {"cmd", "alt", "ctrl"}
hs.hotkey.bind(super, "W", function()
--hs.notify.new({title="Hammerspoon", informativeText="Hello World"}):send()
hs.alert.show("Reloading...")
hs.reload()
end)
hs.hotkey.bind(super, "R", function()
hs.reload()
end)
--ctrlDoubleTap = require("ctrlDoubleTap")
--ctrlDoubleTap.timeFrame = 0.3
--ctrlDoubleTap.action = function()
--hs.eventtap.keyStroke({}, "f19")
--end
escCtrlDouble = require("escapeControlDouble")
escCtrlDouble.addModifier = function(ev)
app = hs.application.frontmostApplication()
if app:title() == "iTerm2" then
ev:setFlags({['ctrl'] = true})
elseif app:title() == "kitty" then
ev:setFlags({['ctrl'] = true})
else
ev:setFlags({['cmd'] = true})
end
return ev
end
hs.alert.show("Configuration reloaded")

18
wm/hammerspoon/setup.sh Executable file
View File

@ -0,0 +1,18 @@
#!/usr/bin/env bash
source ${DOTFILES}/helpers.sh
function main()
{
local scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
print_info "Installing hammerspoon"
caskget hammerspoon
linkfile ${scriptdir} ${HOME}/.hammerspoon
print_ok "Hammerspoon installed"
}
main "$@"

View File

@ -25,6 +25,8 @@ function main()
print_info "Installing logitech drivers"
caskget caskroom/drivers/logitech-options
print_ok "Logitech drivers installed"
${scriptdir}/hammerspoon/setup.sh
}
main "$@"