aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2019-06-10 21:52:39 +0200
committerTeddy Wing2019-06-15 20:30:49 +0200
commit644cdb4d9fd40d32248f7f5faabbf3be9704b5fe (patch)
treecba70ec2158325a33e2f59d8a1c72f7dc923c880
parentf4859089de29e4b7fe4e92c0c1f1341c12eb2363 (diff)
downloaddothammerspoon-644cdb4d9fd40d32248f7f5faabbf3be9704b5fe.tar.bz2
Add window movement hotkeys
Create a new mode activated with <C-M-S-w> that activates hotkeys to do window management. Add hotkeys to move windows up, down, left, and right. One set of hotkeys to move by small increments and another set to move by slightly larger increments. Based on code from 'derekwyatt' (https://github.com/derekwyatt): https://github.com/fikovnik/ShiftIt/issues/296#issuecomment-438386501 > units = { > right30 = { x = 0.70, y = 0.00, w = 0.30, h = 1.00 }, > right70 = { x = 0.30, y = 0.00, w = 0.70, h = 1.00 }, > left70 = { x = 0.00, y = 0.00, w = 0.70, h = 1.00 }, > left30 = { x = 0.00, y = 0.00, w = 0.30, h = 1.00 }, > top50 = { x = 0.00, y = 0.00, w = 1.00, h = 0.50 }, > bot50 = { x = 0.00, y = 0.50, w = 1.00, h = 0.50 }, > upright30 = { x = 0.70, y = 0.00, w = 0.30, h = 0.50 }, > botright30 = { x = 0.70, y = 0.50, w = 0.30, h = 0.50 }, > upleft70 = { x = 0.00, y = 0.00, w = 0.70, h = 0.50 }, > botleft70 = { x = 0.00, y = 0.50, w = 0.70, h = 0.50 }, > maximum = { x = 0.00, y = 0.00, w = 1.00, h = 1.00 } > } > > mash = { 'shift', 'ctrl', 'cmd' } > hs.hotkey.bind(mash, 'l', function() hs.window.focusedWindow():move(units.right30, nil, true) end) > hs.hotkey.bind(mash, 'h', function() hs.window.focusedWindow():move(units.left70, nil, true) end) > hs.hotkey.bind(mash, 'k', function() hs.window.focusedWindow():move(units.top50, nil, true) end) > hs.hotkey.bind(mash, 'j', function() hs.window.focusedWindow():move(units.bot50, nil, true) end) > hs.hotkey.bind(mash, ']', function() hs.window.focusedWindow():move(units.upright30, nil, true) end) > hs.hotkey.bind(mash, '[', function() hs.window.focusedWindow():move(units.upleft70, nil, true) end) > hs.hotkey.bind(mash, ';', function() hs.window.focusedWindow():move(units.botleft70, nil, true) end) > hs.hotkey.bind(mash, "'", function() hs.window.focusedWindow():move(units.botright30, nil, true) end) > hs.hotkey.bind(mash, 'm', function() hs.window.focusedWindow():move(units.maximum, nil, true) end)
-rw-r--r--init.lua2
-rw-r--r--window.lua65
2 files changed, 67 insertions, 0 deletions
diff --git a/init.lua b/init.lua
index 28e7bd2..4760509 100644
--- a/init.lua
+++ b/init.lua
@@ -1,6 +1,8 @@
-- Enable command line tool (http://www.hammerspoon.org/docs/hs.ipc.html)
require("hs.ipc")
+require('window')
+
-- Shortcuts to focus tabs in Terminal
terminal_app = hs.application.applicationsForBundleID('com.apple.Terminal')[1]
diff --git a/window.lua b/window.lua
new file mode 100644
index 0000000..5c1dcb9
--- /dev/null
+++ b/window.lua
@@ -0,0 +1,65 @@
+units = {
+ up_small = { x = 0, y = -5 },
+ right_small = { x = 5, y = 0 },
+ down_small = { x = 0, y = 5 },
+ left_small = { x = -5, y = 0 },
+
+ up_med = { x = 0, y = -20 },
+ right_med = { x = 20, y = 0 },
+ down_med = { x = 0, y = 20 },
+ left_med = { x = -20, y = 0 },
+
+ maximum = { x = 0.00, y = 0.00, w = 1.00, h = 1.00 }
+}
+
+window = {}
+function window.up_small()
+ hs.window.focusedWindow():move(units.up_small, nil, false, 0)
+end
+
+function window.right_small()
+ hs.window.focusedWindow():move(units.right_small, nil, false, 0)
+end
+
+function window.down_small()
+ hs.window.focusedWindow():move(units.down_small, nil, false, 0)
+end
+
+function window.left_small()
+ hs.window.focusedWindow():move(units.left_small, nil, false, 0)
+end
+
+function window.up_med()
+ hs.window.focusedWindow():move(units.up_med, nil, false, 0)
+end
+
+function window.right_med()
+ hs.window.focusedWindow():move(units.right_med, nil, false, 0)
+end
+
+function window.down_med()
+ hs.window.focusedWindow():move(units.down_med, nil, false, 0)
+end
+
+function window.left_med()
+ hs.window.focusedWindow():move(units.left_med, nil, false, 0)
+end
+
+
+window_mode = hs.hotkey.modal.new({'ctrl', 'option', 'shift'}, 'w', 'Window')
+window_mode:bind({'ctrl', 'option', 'shift'}, 'w', 'Window Off', function()
+ window_mode:exit()
+end)
+
+window_mode:bind({'shift'}, 'k', window.up_small, nil, window.up_small)
+window_mode:bind({'shift'}, 'l', window.right_small, nil, window.right_small)
+window_mode:bind({'shift'}, 'j', window.down_small, nil, window.down_small)
+window_mode:bind({'shift'}, 'h', window.left_small, nil, window.left_small)
+
+window_mode:bind({}, 'k', window.up_med, nil, window.up_med)
+window_mode:bind({}, 'l', window.right_med, nil, window.right_med)
+window_mode:bind({}, 'j', window.down_med, nil, window.down_med)
+window_mode:bind({}, 'h', window.left_med, nil, window.left_med)
+
+window_mode:bind({}, ']', nil, nil, function() hs.window.focusedWindow():moveOneScreenEast() end)
+window_mode:bind({}, '[', nil, nil, function() hs.window.focusedWindow():moveOneScreenWest() end)