-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwindow_resizer.applescript
executable file
·292 lines (265 loc) · 9.91 KB
/
window_resizer.applescript
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
use framework "AppKit"
on getScreensOrigins()
set output to {}
repeat with curScreen in current application's NSScreen's screens()
set theFrame to curScreen's frame()
set _size to item 1 of theFrame
copy _size to the end of the output
end repeat
return output
end getScreensOrigins
on getScreensSizes()
set output to {}
repeat with curScreen in current application's NSScreen's screens()
set theFrame to curScreen's frame()
set _size to item 2 of theFrame
copy _size to the end of the output
end repeat
return output
end getScreensSizes
on getActiveWindowSizes()
tell application "System Events"
set activeApp to name of first application process whose frontmost is true
tell process activeApp
if (name of window 1) = "Picture in Picture" then
set activeWindow to window 2
else
set activeWindow to window 1
end if
set positionOfCurrentApp to position of activeWindow
set sizeOfCurrentApp to size of activeWindow
end tell
end tell
return {item 1 of positionOfCurrentApp, item 2 of positionOfCurrentApp, item 1 of sizeOfCurrentApp, item 2 of sizeOfCurrentApp}
end getActiveWindowSizes
on getActiveSceenIndex()
set screensSizes to getScreensSizes()
set screensOrigins to getScreensOrigins()
tell application "System Events"
set activeApp to name of first application process whose frontmost is true
set displayName to display name of desktop 1
tell process activeApp
if (name of window 1) = "Picture in Picture" then
set activeWindow to window 2
else
set activeWindow to window 1
end if
set positionOfCurrentApp to position of activeWindow
set positionXOfCurrentApp to (item 1 of positionOfCurrentApp)
set positionYOfCurrentApp to (item 2 of positionOfCurrentApp)
set ScreenX to item 1 of item 1 of screensSizes
set ScreenY to item 2 of item 1 of screensSizes
if (positionYOfCurrentApp ² ScreenY and positionYOfCurrentApp ³ 0) and (positionXOfCurrentApp ² ScreenX and positionXOfCurrentApp ³ 0) then
set activeScreenIndex to 1
else
set activeScreenIndex to 2
end if
end tell
end tell
return activeScreenIndex
end getActiveSceenIndex
on getScreenSize()
set screensSizes to getScreensSizes()
set activeSceenIndex to getActiveSceenIndex()
set _width to item 1 of item activeSceenIndex of screensSizes
set _height to item 2 of item activeSceenIndex of screensSizes
return {_width, _height}
end getScreenSize
on getScreenOrigin()
set screensSizes to getScreensSizes()
set screensOrigins to getScreensOrigins()
set activeSceenIndex to getActiveSceenIndex()
set activeSceenHeight to item 2 of item activeSceenIndex of screensSizes
set mainSceenHeight to item 2 of item 1 of screensSizes
set screensHeightDiff to mainSceenHeight - activeSceenHeight
set _x to item 1 of item activeSceenIndex of screensOrigins
set _y to (item 2 of item activeSceenIndex of screensOrigins) - screensHeightDiff
return {_x, _y}
end getScreenOrigin
on converttoList(delimiter, input)
local delimiter, input, ASTID
set ASTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter
set input to text items of input
set AppleScript's text item delimiters to ASTID
return input
end converttoList
on resizeApp(positionX, positionY, sizeX, sizeY)
tell application "System Events"
set activeApp to name of first application process whose frontmost is true
tell process activeApp
if (name of window 1) = "Picture in Picture" then
set activeWindow to window 2
else
set activeWindow to window 1
end if
set position of activeWindow to {positionX, positionY}
set size of activeWindow to {sizeX, sizeY}
end tell
end tell
end resizeApp
on run(argv)
set query to item 1 of argv
set screenSize to getScreenSize()
set screenOrigin to getScreenOrigin()
set screenOriginX to (item 1 of screenOrigin)
set screenOriginY to (item 2 of screenOrigin)
set screenSizeX to item 1 of screenSize
set screenSizeY to item 2 of screenSize
if (query = "full") then
set positionX to screenOriginX
set positionY to 0 - screenOriginY
set sizeX to screenSizeX
if (screenSizeY = 1200) then
set sizeY to (93 / 100) * screenSizeY
else
set sizeY to (item 2 of screenSize)
end if
else if ({"left", "right", "up", "down", "leftalt", "rightalt"} contains query) then
set windowPositionSize to getActiveWindowSizes()
set windowLeft to (item 1 of windowPositionSize) - screenOriginX
set windowTop to (item 2 of windowPositionSize) + screenOriginY
set windowRight to (item 1 of screenSize) - (item 3 of windowPositionSize) - (item 1 of windowPositionSize) + screenOriginX
set windowBottom to (item 2 of screenSize) - (item 4 of windowPositionSize) - (item 2 of windowPositionSize) - screenOriginY
set windowSizeX to item 3 of windowPositionSize
set windowSizeY to item 4 of windowPositionSize
if (query = "leftalt") then
set positionX to item 1 of windowPositionSize
if windowRight < screenSizeX * 0.33 - 5 then
set sizeX to screenSizeX * (1 - 0.33) - windowLeft
else if windowRight < screenSizeX * 0.5 - 5 then
set sizeX to screenSizeX * (1 - 0.5) - windowLeft
else if windowRight < screenSizeX * 0.67 - 5 then
set sizeX to screenSizeX * (1 - 0.67) - windowLeft
else
return "no space to change"
end if
set positionY to item 2 of windowPositionSize
set sizeY to item 4 of windowPositionSize
else if (query = "rightalt") then
if windowLeft < screenSizeX * 0.33 - 5 then
set positionX to screenSizeX * 0.33 + screenOriginX
else if windowLeft < screenSizeX * 0.5 - 5 then
set positionX to screenSizeX * 0.5 + screenOriginX
else if windowLeft < screenSizeX * 0.67 - 5 then
set positionX to screenSizeX * 0.67 + screenOriginX
else
return "no space to change"
end if
set sizeX to screenOriginX + screenSizeX - positionX - windowRight
set positionY to item 2 of windowPositionSize
set sizeY to item 4 of windowPositionSize
else if (query = "left") then
if windowLeft < 5 then
set positionX to screenOriginX
if windowRight < screenSizeX * 0.33 - 5 then
set sizeX to screenSizeX * (1 - 0.33)
else if windowRight < screenSizeX * 0.5 - 5 then
set sizeX to screenSizeX * (1 - 0.5)
else if windowRight < screenSizeX * 0.67 - 5 then
set sizeX to screenSizeX * (1 - 0.67)
else
return "no space to change"
end if
else
if windowLeft < screenSizeX * 0.33 + 5 then
set positionX to screenOriginX
else if windowLeft < screenSizeX * 0.5 + 5 then
set positionX to screenSizeX * 0.33 + screenOriginX
else if windowLeft < screenSizeX * 0.67 + 5 then
set positionX to screenSizeX * 0.5 + screenOriginX
else
set positionX to screenSizeX * 0.67 + screenOriginX
end if
set sizeX to screenSizeX - windowRight
end if
set positionY to item 2 of windowPositionSize
set sizeY to item 4 of windowPositionSize
else if (query = "right") then
if windowRight < 5 then
if windowLeft < screenSizeX * 0.33 - 5 then
set positionX to screenSizeX * 0.33 + screenOriginX
else if windowLeft < screenSizeX * 0.5 - 5 then
set positionX to screenSizeX * 0.5 + screenOriginX
else if windowLeft < screenSizeX * 0.67 - 5 then
set positionX to screenSizeX * 0.67 + screenOriginX
else
return "no space to change"
end if
set sizeX to screenOriginX + screenSizeX - positionX
else
set positionX to windowLeft + screenOriginX
if windowRight < screenSizeX * 0.33 + 5 then
set sizeX to screenSizeX - windowLeft
else if windowRight < screenSizeX * 0.5 + 5 then
set sizeX to screenSizeX * 0.67 - windowLeft
else if windowRight < screenSizeX * 0.67 + 5 then
set sizeX to screenSizeX * 0.5 - windowLeft
else
set sizeX to screenSizeX * 0.33 + screenOriginX
end if
end if
set positionY to item 2 of windowPositionSize
set sizeY to item 4 of windowPositionSize
else if (query = "up") then
if windowTop < 35 then
set positionY to 0 - screenOriginY
if (screenSizeY = 1200) and windowBottom < (0.05 * screenSizeY - 5) then
set sizeY to (93 / 100) * screenSizeY
else if windowBottom < (windowSizeY * 0.5 - 5) then
set sizeY to 0.5 * screenSizeY
else
return "no space to change"
end if
else
if windowTop > 0.5 * screenSizeY then
set positionY to 0.5 * screenSizeY - screenOriginY
else
set positionY to 0 - screenOriginY
end if
set sizeY to screenSizeY - windowBottom - 24
end if
set positionX to item 1 of windowPositionSize
set sizeX to item 3 of windowPositionSize
else if (query = "down") then
if ((screenSizeY = 1200) and windowBottom < 0.05 * screenSizeY + 5) or (windowBottom < 5) then
if windowTop < (windowSizeY * 0.5 - 5 - 24) then
set positionY to 0.5 * screenSizeY - screenOriginY
else
return "no space to change"
end if
if (screenSizeY = 1200) then
set sizeY to 0.45 * screenSizeY
else
set sizeY to 0.5 * screenSizeY
end if
else
set positionY to item 2 of windowPositionSize
if windowBottom > 0.5 * screenSizeY then
set sizeY to 0.5 * screenSizeY - windowTop
else
set fixedScreenSizeY to screenSizeY
if (screenSizeY = 1200) then
set fixedScreenSizeY to 0.95 * screenSizeY
end if
set sizeY to fixedScreenSizeY - windowTop
end if
end if
set positionX to item 1 of windowPositionSize
set sizeX to item 3 of windowPositionSize
end if
else
set args to converttoList(" ", {query})
set positionX to (((item 1 of args) / 100) * screenSizeX) + screenOriginX
set positionY to (((item 2 of args) / 100) * (item 2 of screenSize)) - screenOriginY
set sizeX to (((item 3 of args) / 100) - ((item 1 of args) / 100)) * screenSizeX
set sizeY to (((item 4 of args) / 100) - ((item 2 of args) / 100)) * (item 2 of screenSize)
end if
if sizeX < 300 then
return "sizeX too small"
end if
if sizeY < 100 then
return "sizeY too small"
end if
resizeApp(positionX, positionY, sizeX, sizeY)
end run