Hammerspoon 사용해 데스크탑 자동화

Hammerspoon

Hammerspoon 은 macOS의 데스크탑 자동화를 위해 Lua scipt 를 사용하는 엔진이다. Hammerspoon을 다운받아 설치하고 에 있는 Getting Started 를 보고 바로 시작할 수 있다.

설치

최신 릴리즈를 Latest Hammerspoon 에서 다운받아 Application 폴더로 옮긴다.

그리고 Hammerspoon을 실행하면 Status bar에 나타난다.

Hammerspoon

[그림. Hammerspoon]

환경설정 / 보안 및 개인정보 에서 손쉬운 사용에 hammerspoon을 추가해 주고 활성화 한다.

Hammerspoon

[그림. 보안 및 개인정보에서 제어 허용]

Open config

Hammerspoon 메뉴에서 Open Config 를 실행하면 시스템의 .lua 확장자를 열 수 있는 텍스트 에디터가 실행된다. 이곳에 Getting Started 의 샘플 스크립을 복사해서 바로 사용해 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Y", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.x = f.x - 10
f.y = f.y - 10
win:setFrame(f)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "K", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.y = f.y - 10
win:setFrame(f)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "U", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.x = f.x + 10
f.y = f.y - 10
win:setFrame(f)
end)

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)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "L", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.x = f.x + 10
win:setFrame(f)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "B", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.x = f.x - 10
f.y = f.y + 10
win:setFrame(f)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "J", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.y = f.y + 10
win:setFrame(f)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "N", function()
local win = hs.window.focusedWindow()
local f = win:frame()

f.x = f.x + 10
f.y = f.y + 10
win:setFrame(f)
end)

init.lua 에 스크립을 작성하고 저장한 후에 Hammerspoon 메뉴에서 Reload config를 실행하고 Console… 메뉴로 스크립 활성화를 확인할 수 있다.

Window Resizing

*Cmd+Opt+Ctrl+F** 키로 윈도우를 고정된 크기로 변경할 수 있게 사용하고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
--[[
Window Resizing
--]]

-- Full screen
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()

f.x = max.x
f.y = max.y
f.w = max.w
f.h = max.h
win:setFrame(f)
end)

-- 4:3 ratio: XGA, 1280x960, SXGA+, UGA
-- Resizing: XGA 1024-768
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F1", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()

f.x = max.x
f.y = max.y
f.w = 1024
f.h = 768
win:setFrame(f)
hs.notify.new({title="Resizing...", informativeText="1024x768"}):send()
end)


-- Resize: 1280x960 (1024)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F2", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()

f.x = max.x
f.y = max.y
f.w = 1280
f.h = 960
win:setFrame(f)

hs.notify.new({title="Resizing...", informativeText="1280x960"}):send()
end)

-- Resize: SXGA+ 1400x1050
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F3", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()

f.x = max.x
f.y = max.y
f.w = 1400
f.h = 1050
win:setFrame(f)

hs.notify.new({title="Resizing...", informativeText="1400x1050"}):send()
end)

-- Resize: 1920x1080
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F4", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen()
local max = screen:frame()

f.x = max.x
f.y = max.y
f.w = 1920
f.h = 1080
win:setFrame(f)

hs.notify.new({title="Resizing...", informativeText="1920x1080"}):send()
end)

Aerosnap

https://blog.jverkamp.com/2016/02/08/duplicating-aerosnap-on-osx-with-hammerspoon/