hammerspoon - init lua
authorPeng Li <seudut@gmail.com>
Mon, 11 Sep 2017 12:17:50 +0000 (20:17 +0800)
committerPeng Li <seudut@gmail.com>
Mon, 11 Sep 2017 12:17:50 +0000 (20:17 +0800)
hammerspoon/init.lua

index 9c0de3f..7854163 100644 (file)
@@ -1,4 +1,91 @@
+-- Sample Hello World 
 hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
   hs.notify.new({title="Hammerspoon", informativeText="Hello World"}):send()
 --  hs.alert.show("Hello World!")
 end)
+
+-- Reload configuration
+hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function()
+  hs.reload()
+end)
+hs.alert.show("Config loaded")
+
+
+-- Sample - Drawing on the screen - http://www.hammerspoon.org/go/#simplereload
+mouseCircle = nil
+mouseCircleTimer = nil
+
+function mouseHighlight()
+    -- Delete an existing highlight if it exists
+    if mouseCircle then
+        mouseCircle:delete()
+        if mouseCircleTimer then
+            mouseCircleTimer:stop()
+        end
+    end
+    -- Get the current co-ordinates of the mouse pointer
+    mousepoint = hs.mouse.getAbsolutePosition()
+    -- Prepare a big red circle around the mouse pointer
+    mouseCircle = hs.drawing.circle(hs.geometry.rect(mousepoint.x-40, mousepoint.y-40, 80, 80))
+    mouseCircle:setStrokeColor({["red"]=1,["blue"]=0,["green"]=0,["alpha"]=1})
+    mouseCircle:setFill(false)
+    mouseCircle:setStrokeWidth(5)
+    mouseCircle:show()
+
+    -- Set a timer to delete the circle after 3 seconds
+    mouseCircleTimer = hs.timer.doAfter(3, function() mouseCircle:delete() end)
+end
+hs.hotkey.bind({"cmd","alt","shift"}, "D", mouseHighlight)
+
+
+-- window movement
+hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function()
+  local win = hs.window.focusedWindow()
+  local f = win:frame()
+
+  f.x = f.x - 10
+  win:setFrame(f)
+end)
+
+---- multi-window layout
+local laptopScreen = "Color LCD"
+local windowLayout = {
+    {"Safari",  nil,          laptopScreen, hs.layout.left50,    nil, nil},
+    {"Mail",    nil,          laptopScreen, hs.layout.right50,   nil, nil},
+    {"iTunes",  "iTunes",     laptopScreen, hs.layout.maximized, nil, nil},
+    {"iTunes",  "MiniPlayer", laptopScreen, nil, nil, hs.geometry.rect(0, -48, 400, 48)},
+}
+hs.layout.apply(windowLayout)
+
+---- Creating a simple menubar item
+--caffeine = hs.menubar.new()
+--function setCaffeineDisplay(state)
+--    if state then
+--        caffeine:setTitle("AWAKE")
+--    else
+--        caffeine:setTitle("SLEEPY")
+--    end
+--end
+--
+--function caffeineClicked()
+--    setCaffeineDisplay(hs.caffeinate.toggle("displayIdle"))
+--end
+--
+--if caffeine then
+--    caffeine:setClickCallback(caffeineClicked)
+--    setCaffeineDisplay(hs.caffeinate.get("displayIdle"))
+--end
+
+-- Reacting to application events 
+-- wheny active the Finder applications, all of its windows
+-- will be brought to the front of the display.
+function applicationWatcher(appName, eventType, appObject)
+    if (eventType == hs.application.watcher.activated) then
+        if (appName == "Finder") then
+            -- Bring all Finder windows forward when one gets activated
+            appObject:selectMenuItem({"Window", "Bring All to Front"})
+        end
+    end
+end
+appWatcher = hs.application.watcher.new(applicationWatcher)
+appWatcher:start()