Mac 용 Window Manager를 추천 할 수 있습니까? 화면의 왼쪽 또는 오른쪽 절반에 창을 스냅하는 바로 가기 키를 갖고 싶습니다.
Mac 용 Window Manager를 추천 할 수 있습니까? 화면의 왼쪽 또는 오른쪽 절반에 창을 스냅하는 바로 가기 키를 갖고 싶습니다.
답변:
SizeUp 은 정확히 필요한 것입니다.
SizeUp을 사용하면 화면의 절반 (분할 화면), 화면의 1/4 (사분면), 전체 화면을 채우거나 메뉴 표시 줄 또는 구성 가능한 시스템 전체 단축키 (핫키)를 통해 가운데를 채우도록 창을 빠르게 배치 할 수 있습니다. 다른 운영 체제에서 사용 가능한 "바둑판 식 창"기능과 유사합니다.
매직 마우스 또는 매직 트랙 패드가있는 경우 특정 제스처를 설정하여 창을 관리 할 수 있으므로 BetterTouchTool 이 더 좋습니다. 네 손가락으로 왼쪽으로 스 와이프하는 것처럼 창 크기를 화면의 왼쪽 50 %로 조정할 수 있습니다.
붐 은 훌륭합니다. 전체 화면, 반 화면, 1/4 화면으로 창을 스냅 할 수 있습니다. 격자로 크기를 조정할 수도 있습니다. 사용자 정의 키보드 단축키도 지원합니다.
개인적으로 SizeUp과 Divvy를 매일 사용합니다. ShiftIt에 대해 이미 알고 있었다면 아마도 SizeUp을 지불하지 않았을 것입니다. 아직 언급되지 않은 또 다른 기능 은 BetterTouchTool 입니다. BetterTouchTool 은 다른 많은 기능을 가지고 있지만 고급 옵션에는 숨겨져있는 "창 스냅"이라는 멋진 기능이 있습니다. 화면을 옆으로 끌 때 키보드 단축키 기능은 포함되어 있지 않지만 SizeUp 및 Divvy를 보완하는 훌륭한 기능입니다.
Stack Overflow에 관한 주제 에서 벗어난 질문 에서 찾았습니다 .
여기에 언급되지 않은 두 가지 오픈 소스 관리자가 언급되었습니다.
App Store의 다른 앱
가장 앞에있는 응용 프로그램에서 열려있는 모든 창을 타일링하는 Applescript가 있습니다. ~/Library/Scripts
메뉴 막대의 Applescript 메뉴에 추가 하고 전화 하십시오 . 맛을 내기 위해 소금을 넣으십시오 (무료).
--tile windows of frontmost applications in a grid
--this script is useful for
--multiple window chatting
--working side by side of several windows of the same app
--make need to make it as a stay open application later
--for now assume that it is opened and closed per invokation
property horizontalSpacing : 10 -- sets the horizontal spacing between windows
property verticalSpacing : 10 -- sets the vertical spacing between windows
property maxRows : 2
property maxCols : 2
on run {}
local a
set userscreen to my getUserScreen()
--display dialog (getFrntApp() as string)
try
set applist to getFrntApp()
if length of applist = 0 then
return
end if
set a to item 1 of getFrntApp()
on error the error_message number the error_number
display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
end try
try
tileScriptable(a, userscreen)
on error the error_message number the error_number
--display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
try
tileUnscriptable(a, userscreen)
on error the error_message number the error_number
display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
end try
end try
end run
on tileScriptable(a, screen)
local i, c
set i to 1
tell application named a
set theWindows to every window of application a whose visible is true and floating is false and ¬
modal is false -- and miniaturized is false
set c to count theWindows
if c = 0 then
return
end if
set tiles to calTileBounds(c, screen, 1)
repeat with theWindow in theWindows
my tileScriptableWindow(a, theWindow, item i of tiles)
set i to i + 1
end repeat
end tell
end tileScriptable
on tileUnscriptable(a, screeninfo)
-- unscriptable app
local i, c
set i to 1
tell application "System Events"
set theWindows to (every window of application process a)
--set theWindows to my filterUnscriptableInvisible(theWindows)
set c to count theWindows
if c = 0 then
return
end if
--display dialog screeninfo as string giving up after 5
set tiles to my calTileBounds(c, screeninfo, 1)
repeat with theWindow in theWindows
--display dialog (class of visible of theWindow)
my tileUnScriptableWindow(a, theWindow, item i of tiles)
set i to i + 1
end repeat
end tell
end tileUnscriptable
on filterUnscriptableInvisible(ws)
-- filter out from ws windows that are docked
set newws to {}
set docklist to getNamesDocked()
--display dialog (docklist as string)
repeat with theWindow in ws
if name of theWindow is not in docklist then
set end of newws to theWindow
end if
end repeat
--display dialog (count newws)
return newws
end filterUnscriptableInvisible
on getNamesDocked()
tell application "System Events" to tell process "Dock"'s list 1
set l to name of UI elements whose subrole is "AXMinimizedWindowDockItem"
end tell
return l
end getNamesDocked
on tileScriptableWindow(a, w, bound)
tell application a
set bounds of w to bound
end tell
end tileScriptableWindow
on tileUnScriptableWindow(a, w, bound)
tell application "System Events"
--display dialog (count position of w)
set AppleScript's text item delimiters to " "
set position of w to {(item 1 of bound), (item 2 of bound)}
-- why the -5?
set size of w to {(item 3 of bound) - (item 1 of bound) - 5, ¬
(item 4 of bound) - (item 2 of bound) - 5}
--display dialog (count properties of w)
end tell
end tileUnScriptableWindow
on calTileBounds(nWindows, screen, direction)
-- return a list of lists of window bounds
-- a simple tile algo that tiles along direction (current only 1=horizontal)
local nrows, nColumns, irow, icolumn, nSpacingWidth, nSpacingHeight, nWindowWidth, nWindowHeight
set {x0, y0, availScreenWidth, availScreenHeight} to screen
set ret to {}
set nrows to (nWindows div maxCols)
if (nWindows mod maxCols) ≠ 0 then
set nrows to nrows + 1
end if
if nrows < maxRows then
set nSpacingHeight to (nrows - 1) * verticalSpacing
set nWindowHeight to (availScreenHeight - nSpacingHeight) / nrows
else
set nSpacingHeight to (maxRows - 1) * verticalSpacing
set nWindowHeight to (availScreenHeight - nSpacingHeight) / maxRows
end if
repeat with irow from 0 to nrows - 1
if nrows ≤ maxRows and irow = nrows - 1 then
set nColumns to nWindows - irow * maxCols
else
set nColumns to maxCols
end if
set nSpacingWidth to (nColumns - 1) * horizontalSpacing
set nWindowWidth to (availScreenWidth - nSpacingWidth) / nColumns
set nTop to y0 + (irow mod maxRows) * (verticalSpacing + nWindowHeight)
--display dialog "Top: " & nTop buttons {"OK"} default button 1
repeat with icolumn from 0 to nColumns - 1
set nLeft to x0 + (icolumn) * (horizontalSpacing + nWindowWidth)
set itile to {¬
nLeft, ¬
nTop, ¬
nLeft + nWindowWidth, ¬
nTop + nWindowHeight}
set end of ret to itile
--display dialog item 3 of itile as string
--set itile to {x0 + (icolumn - 1) * wgrid, y0, wgrid, hgrid}
--set item 3 of itile to ((item 1 of itile) + (item 3 of itile))
--set item 4 of itile to ((item 2 of itile) + (item 4 of itile))
end repeat
end repeat
return ret
end calTileBounds
on getFrntApp()
tell application "System Events" to set frntProc to ¬
name of every process whose frontmost is true and visible ≠ false
return frntProc
end getFrntApp
on getUserScreen()
-- size of the menubar
tell application "System Events"
set {menuBarWidth, menuBarHeight} to size of UI element 1 of application process "SystemUIServer"
--display dialog "Menubar width: " & menubarWidth & ", height: " & menubarHeight
set dockApp to (application process "Dock")
set {dockWidth, dockHeight} to size of UI element 1 of dockApp
--display dialog "Dock width: " & dockWidth & ", height: " & dockHeight
set dockPos to position of UI element 1 of dockApp
--display dialog "Dock x: " & (item 1 of dockPos) & ", y: " & (item 2 of dockPos)
end tell
-- size of the full screen
(*
{word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width") as number, ¬
word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height") as number}
*)
tell application "Finder"
set screenSize to bounds of window of desktop
set screenWidth to item 3 of screenSize
set screenHeight to item 4 of screenSize
end tell
--display dialog "Screen width: " & screenWidth & ", height: " & screenHeight
-- by default, set the available screen size to the full screen size
set availableWidth to screenWidth
set availableHeight to screenHeight - menuBarHeight
set availableX to 0
set availableY to menuBarHeight
--determine the userscreen origin and size
-- case 0: hidden dock
-- if (item 1 of dockPos < 0 or item 1 of dockPos ≥ screenHeight) then
-- no need to change anything
-- end if
-- case 1: bottom dock
if ((item 2 of dockPos) + dockHeight = screenHeight) then
set availableHeight to availableHeight - dockHeight
end if
-- case 2: left dock
if (item 1 of dockPos = 0) then
set availableWidth to availableWidth - dockWidth
set availableX to dockWidth
end if
-- case 3: right dock
if ((item 1 of dockPos) + dockWidth = screenWidth) then
set availableWidth to availableWidth - dockWidth
end if
return {availableX, availableY, availableWidth, availableHeight}
end getUserScreen
내가보고들은 바에 따르면 Cinch 는 Windows 7의 창 관리 기능을 Mac OS X로 가져 오는 훌륭한 응용 프로그램입니다.
우선, 무료가 중요하다면 ShiftIt을 구입하십시오.
마우스의 편리함이 중요하다면 Cinch를 구입하십시오. Mac App Store에 있습니다.
마지막으로 Macbook 또는 Magic Trackpad가있는 경우 JiTouch를 받으십시오. 그것은 많은 것들에 제스처를 할당 할 수있게 해줄 것입니다. 그 중 하나는 전체 화면, 왼쪽 절반, 오른쪽 절반입니다. 제스처를 조금이라도 좋아한다면 진지하게 확인하십시오. 100 개 이상의 버튼이있는 마우스를 사용하는 것과 같습니다. 지 터치