Amethyst: ๊ธฐ๋Šฅ ์š”์ฒญ: ์ž์ˆ˜์ •์œผ๋กœ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„ ๋งŒ๋“ค๊ธฐ

์— ๋งŒ๋“  2014๋…„ 03์›” 31์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ianyh/Amethyst

๋•Œ๋กœ๋Š” ์ƒˆ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ  ์ƒˆ ๊ณต๊ฐ„์— ์ฐฝ์„ ๋˜์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์ˆ˜์ •์œผ๋กœ ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด (๋‚˜์—๊ฒŒ) ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒˆ ๊ณต๊ฐ„์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ๊นŒ์ง€ ์ฐพ์€ ์ตœ๊ณ ์˜ ์›Œํฌํ”Œ๋กœ:

  • Mission Control ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ณต๋ฐฑ ํ‘œ์‹œ
  • โŒฅ๋ฅผ ๊ธธ๊ฒŒ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค(๊ฐ ๊ณต๊ฐ„์— x๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๋””์Šคํ”Œ๋ ˆ์ด์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ์— ํฐ "๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ"๊ฐ€ ํ‘œ์‹œ๋จ)
  • ๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ๋ฅผ ํด๋ฆญํ•˜๋ ค๋ฉด ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉ
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ณต๊ฐ„์œผ๋กœ ๋Œ์•„๊ฐ€ ์ž์ˆ˜์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐฝ์„ ๊ด€๋ฆฌํ•˜์‹ญ์‹œ์˜ค.

AppleScript ๋ฐ Accessibility Inspector๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ Apple์˜ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ ๋ฐ Amethyst ์†Œ์Šค์—์„œ ์•ฝ๊ฐ„์˜ ํ”ผ์ƒ์ ์ธ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด๋‚˜ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ™•์‹คํžˆ ๋‚ด ์ดˆ๋ณด์ž์˜ ๊ธฐ์ˆ ์€ ๋ถ€์กฑํ–ˆ๊ณ  ๋‚˜๋Š” ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค :)

์ด๊ฒŒ ๊ฐ€๋Šฅํ•ด? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ๊บผ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ„์† ๋‚˜์•„๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ๊ทธ๊ฒƒ์ด ๋ฐํ˜€์ง€๋”๋ผ๋„ ์ž์ˆ˜์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠธ๋ ๋กœ ์นด๋“œ

discussion needed enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@codehearts ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

> pbpaste | osascript
35:121: execution error: System Events got an error: sh: /Applications/Mission Control.app/Contents/MacOS/Mission Control: No such file or directory (127)

"/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control" ๋ฅผ /System/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control" ๋Œ€์ฒดํ•˜๋ฉด ๋‹ค์Œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

> sw_vers -productVersion
10.15.2

๋ชจ๋“  7 ๋Œ“๊ธ€

ํ , ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ณด๋ ค๋ฉด Apple์˜ API์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์€ ์ฐฝ์„ ๋‹ค๋ฅธ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋งˆ์šฐ์Šค๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ์ฐฝ์„ ํด๋ฆญํ•˜๊ณ  ๋“œ๋ž˜๊ทธํ•˜๋Š” ๋™์‹œ์— ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™) ์ด๊ฒƒ์€ ๋‹ค์†Œ ์šฐ์•„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ํ™”๋ฉด ํฌ๊ธฐ/์„ค์ •์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์€ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰

  • ๋ฏธ์…˜ ์ปจํŠธ๋กค ๋ฐ”๋กœ ๊ฐ€๊ธฐ ํŠธ๋ฆฌ๊ฑฐ
  • ๋งˆ์šฐ์Šค๋ฅผ ์ด๋™ํ•˜๊ณ  ์ƒˆ ์ŠคํŽ˜์ด์Šค ๋ฒ„ํŠผ์—์„œ ๋งˆ์šฐ์Šค ๋‹ค์šด ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ถ•ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™

๊ณต๊ฐ„์— ๋Œ€ํ•œ ๊ฐœ์ธ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ณต๊ฐ„์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Ian์ด ๊ฐœ์ธ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Amethyst์— ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@๋ ˆ์˜ค๋‚˜๋ฅดํŠธ ,

SO ์˜์ด ๋‹ต๋ณ€ ์€ AppleScript ๋ฐ MouseTools๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์ง€ ๋งŒ ๋ถˆํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

delay 0.5 -- time to release command if the script is run with command-R
tell application "System Events"
    key code 126 using control down -- control-up
    delay 1
    do shell script "MouseTools -x 1900 -y 60;sleep 1;MouseTools -leftClickNoRelease;MouseTools -releaseMouse"
    key code 53 -- escape
end tell

^ MouseTools ๋ฐ ํ™”๋ฉด ํฌ๊ธฐ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ๋‘˜๋Ÿฌ๋ณด๊ณ  ๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ์— ๋Œ€ํ•œ ๋ฒ„ํŠผ ์„ค๋ช…์ด "๋ฐ์Šคํฌํ†ฑ ์ถ”๊ฐ€"๋ผ๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด ์„ค๋ช…์€ ๊ณ ์œ ํ•˜๊ฒŒ ๋ณด์ด์ง€๋งŒ AppleScript์— ๋‹ค์Œ์„ ํ†ตํ•ด ๋ฒ„ํŠผ์„ ์ฐพ๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๋ฐฑ ๋’ค์— ํ•ด๋‹น ์„ค๋ช…์ด ํ‘œ์‹œ๋˜๊ณ  ๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

SO์˜ ๋˜ ๋‹ค๋ฅธ ๋‹ต๋ณ€ ์€ com.apple.spaces.plist ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ Finder ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋„๋ก ์ œ์•ˆํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ๋งŽ์€ ํ•ดํ‚น์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)

์ƒ๊ฐ?

์ด๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์€ ์š”์ฒญ๋œ ๊ณต๊ฐ„์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋˜์ง€๊ธฐ ์ „์— ๊ณต๊ฐ„ ๋ฐ”๋กœ ๊ฐ€๊ธฐ์— ๋Œ€ํ•œ ๋˜์ง€๊ธฐ ์ดˆ์  ์ฐฝ์—์„œ ๊ณต๊ฐ„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mojave์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ ๊ณต๊ฐ„ ์ƒ์„ฑ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

tell application "System Events"
  do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
  click button 1 of group "Spaces Bar" of group 1 of group "Mission Control" of process "Dock"
  do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
end tell

์ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” Mission Control ํ‚ค ๋ฐ”์ธ๋”ฉ์„ ์„ค์ •ํ•  ํ•„์š”๋„ ์—†์ง€๋งŒ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹œ์ž‘๋˜๊ณ  ์ค‘์ง€๋  ๋•Œ ์ฐฝ์€ ๋ช‡ ์ดˆ ๋™์•ˆ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ›„ delay 0.5 ์ถ”๊ฐ€ํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ƒˆ ๊ณต๊ฐ„ ์ƒ์„ฑ์„ ํ‘œ์‹œํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

@codehearts ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

> pbpaste | osascript
35:121: execution error: System Events got an error: sh: /Applications/Mission Control.app/Contents/MacOS/Mission Control: No such file or directory (127)

"/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control" ๋ฅผ /System/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control" ๋Œ€์ฒดํ•˜๋ฉด ๋‹ค์Œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

> sw_vers -productVersion
10.15.2

@codehearts ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‚ด Mac ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค: 10.14.6
-- ์ด ํ•จ์ˆ˜๋ฅผ Amethyst์— ํŒจํ‚ค์ง•ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ทธ๊ฒƒ์€ Mac์—์„œ ๋‚˜์—๊ฒŒ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค(๋ชจ๋“  ์ผ์ด ํ‚ค๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ผ๊ด€๋˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š” Linux์—์„œ i3๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ต)

์ž์ˆ˜์ •์ด ์•ผ๋ฐ”์ด๋ฅผ 100% ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์€ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋˜์ง€๊ณ  ์‹ถ์„ ๋•Œ ์ƒˆ ๊ณต๊ฐ„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(1๋ฒˆ ๊ณต๊ฐ„์—์„œ 7๋ฒˆ ๊ณต๊ฐ„์œผ๋กœ ์•ฑ์„ ๋˜์ง€๋ฉด ๋นˆ ๊ณต๊ฐ„ 5๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ๋‘ ๋ฒˆ์งธ ๊ณต๊ฐ„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค). ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์•ฑ์„ ์ด๋™ํ•  ๋•Œ ๋นˆ ๊ณต๊ฐ„ ์ž๋™ ์†Œ๋ฉธ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰