Add hammerspoon. Almost usable now...
This commit is contained in:
parent
d668c03630
commit
a11d3cb3d5
70
wm/hammerspoon/ctrlDoubleTap.lua
Executable file
70
wm/hammerspoon/ctrlDoubleTap.lua
Executable 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
|
||||||
|
|
54
wm/hammerspoon/escapeControlDouble.lua
Executable file
54
wm/hammerspoon/escapeControlDouble.lua
Executable 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
30
wm/hammerspoon/init.lua
Executable 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
18
wm/hammerspoon/setup.sh
Executable 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 "$@"
|
@ -25,6 +25,8 @@ function main()
|
|||||||
print_info "Installing logitech drivers"
|
print_info "Installing logitech drivers"
|
||||||
caskget caskroom/drivers/logitech-options
|
caskget caskroom/drivers/logitech-options
|
||||||
print_ok "Logitech drivers installed"
|
print_ok "Logitech drivers installed"
|
||||||
|
|
||||||
|
${scriptdir}/hammerspoon/setup.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user