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"
|
||||
caskget caskroom/drivers/logitech-options
|
||||
print_ok "Logitech drivers installed"
|
||||
|
||||
${scriptdir}/hammerspoon/setup.sh
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
Loading…
x
Reference in New Issue
Block a user