창 관리자가 창을 디스플레이 측면에 맞출 수 있습니까?


21

Mac 용 Window Manager를 추천 할 수 있습니까? 화면의 왼쪽 또는 오른쪽 절반에 창을 스냅하는 바로 가기 키를 갖고 싶습니다.


4
OS X에서 창 관리자를 시작하거나 종료 할 수 없다고 생각합니다.
zneak

@mankoff이 질문은 6 개월 전에 질문되었습니다. 귀하의 질문은 이것과 중복됩니다.
Kyle Cronin

@Kyle 새로운 질문은보다 일반적인 질문이 되고자합니다. 이것은 왼쪽 / 오른쪽 스냅에만 해당됩니다. 특정 윈도우 관련 질문이 많이 있습니다. 죄송합니다. 여기에서 좋은 +11 답변으로 문제를 일으키지 않고 모든 WM 질문에 대한 단일 참조 장소를 만들려고합니다.

@mankoff 나는 내 대답에 대해 걱정하지 않고 단지이 질문을 새로운 질문의 "중복"으로 끝내서는 안된다고 말하는 것입니다.
Kyle Cronin

나는 그것이 실제로 폐쇄되어서는 안된다는 데 동의하지만 여전히 복제본입니다. 시간은 관련이 없으며 서로 중복되어 있으며 서로를 참조해야합니다. 방금이 게시물의 마지막 단락을 따르려고했습니다. blog.stackoverflow.com/2011/01/…

답변:


17

SizeUp 은 정확히 필요한 것입니다.

SizeUp을 사용하면 화면의 절반 (분할 화면), 화면의 1/4 (사분면), 전체 화면을 채우거나 메뉴 표시 줄 또는 구성 가능한 시스템 전체 단축키 (핫키)를 통해 가운데를 채우도록 창을 빠르게 배치 할 수 있습니다. 다른 운영 체제에서 사용 가능한 "바둑판 식 창"기능과 유사합니다.


1
무료 대안이 없다는 것이 이상해 보이지만 비용이 들었습니다. 나는 '전체 화면'과 '다음 모니터'만 사용하지만 그만한 가치가 있습니다.
Fishtoaster

@Fishtoaster SizeUp을 만드는 회사도 TwoUp이라는 무료 버전을 만들었지 만 중단되었습니다
Kyle Cronin

1
이. SizeUp은 매일 세상을 흔들어 놓습니다.
Matt

이것은 훌륭한 기본 위치가 많이 있습니다. 제안 해 주셔서 감사합니다.
citadelgrad

1
@ citadelgrad : 문제가 해결되면 게시물 옆의 √ 표시를 확인하십시오.
zneak

8

Divvy는 활성 창 크기를 자동으로 조정할 수있는 작은 메뉴 표시 줄 앱입니다. Divviy는 실제로 화면을 6x6 격자로 나눕니다. Divvy가 호출되면이 6x6 그리드와 함께 화면 중앙에 약간의 HUD가 나타납니다. 활성 창의 크기를 조정하려는 화면 부분에 따라 HUD에서 해당 사각형을 끌어서 선택하면 나머지가 수행됩니다. 그렇게 간단합니다.


7

SizeUp과 Breeze를 테스트 한 후 Breeze가 내 요구에 가장 적합 하다고 판단했습니다 . 둘 다 창을 왼쪽, 오른쪽 또는 전체 화면에 배치 할 수 있습니다. 나를 위해 판매 한 기능은 응용 프로그램의 기본 크기 및 위치를 설정하고 바로 가기 키를 할당하는 것이 었습니다.


대단해 결정한 내용을 공유해 주셔서 감사합니다. 8 달러는 훌륭해 보입니다.
mkelley33

7

ShiftIt (링크의 원본 버전이 중단됨)이이를 수행하며 무료이며 오픈 소스입니다.

편집 : 프로젝트는 현재 GitHub 에 있지만 마지막 릴리스는 2010 년 11 월입니다.


1
이것이 내가 말하려는 것입니다. Snow Leopard에서 잘 작동합니다. 할당 가능한 키보드 단축키도 지원합니다.
Randy6T9

오픈 소스라는 것은 멋진 일이지만 X11이 필요하다는 사실은 저에게 전혀 도움이되지 않습니다
James McMahon

5

일부 사람들도 이것에 대해 이야기하는 것을 들었습니다.

창을 이동하고 확대 / 축소하는 데 많은 시간을 할애하여 Mac의 모든 컨텐츠를보다 잘보고 작업 할 수 있습니까? 직접 작업을 수행하는 대신 Moom이 작업을 처리하도록하십시오.


4

매직 마우스 또는 매직 트랙 패드가있는 경우 특정 제스처를 설정하여 창을 관리 할 수 ​​있으므로 BetterTouchTool 이 더 좋습니다. 네 손가락으로 왼쪽으로 스 와이프하는 것처럼 창 크기를 화면의 왼쪽 50 %로 조정할 수 있습니다.


4

은 훌륭합니다. 전체 화면, 반 화면, 1/4 화면으로 창을 스냅 할 수 있습니다. 격자로 크기를 조정할 수도 있습니다. 사용자 정의 키보드 단축키도 지원합니다.

붐 스크린 샷


이미지가 포함 된 경우 +1. 작동 방식에 대한 아이디어를 얻는 데 매우 유용합니다.
Paul Wagland

3

개인적으로 SizeUp과 Divvy를 매일 사용합니다. ShiftIt에 대해 이미 알고 있었다면 아마도 SizeUp을 지불하지 않았을 것입니다. 아직 언급되지 않은 또 다른 기능 은 BetterTouchTool 입니다. BetterTouchTool 은 다른 많은 기능을 가지고 있지만 고급 옵션에는 숨겨져있는 "창 스냅"이라는 멋진 기능이 있습니다. 화면을 옆으로 끌 때 키보드 단축키 기능은 포함되어 있지 않지만 SizeUp 및 Divvy를 보완하는 훌륭한 기능입니다.


1
BetterTouchTool은 이제 내가 이것을 위해 사용하는 것입니다. 그것은 최고의 무료 앱 중 하나입니다.
Robert S Ciaccio

3

Stack Overflow에 관한 주제 에서 벗어난 질문 에서 찾았습니다 .

여기에 언급되지 않은 두 가지 오픈 소스 관리자가 언급되었습니다.

App Store의 다른 앱


이 블로그 게시물에서 슬레이트에 대한 좋은 개요와 제목 : 슬레이트 사용 : Mac 용 해커의 창 관리자
slm

나는 Spectacle을 직접 사용합니다. 특정 응용 프로그램에는 한 가지 문제가 있습니다. 실행 취소 명령은 Firefox 창에서 작동하지 않는 것 같습니다. 또한 슬레이트만큼 많은 기능을 가지고 있지 않은 것 같습니다.
SilverWolf-복원 모니카

2

무료 및 오픈 소스 인 Slate 를 사용해 볼 수도 있습니다 .

기사 를 읽고 싶을 수도 있습니다 .


2

가장 앞에있는 응용 프로그램에서 열려있는 모든 창을 타일링하는 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

출처 : Google을 통한 MacScripter


1

내가보고들은 바에 따르면 Cinch 는 Windows 7의 창 관리 기능을 Mac OS X로 가져 오는 훌륭한 응용 프로그램입니다.


그러나 Windows 7의 창 관리는 Aero Snap과 별개로 존재하지 않습니다. * nix에는 훨씬 더 많은 옵션이 있으며 이러한 소프트웨어에 영향을 줄 수 있습니다.
Ehtesh Choudhury 2012

1

우선, 무료가 중요하다면 ShiftIt을 구입하십시오.

마우스의 편리함이 중요하다면 Cinch를 구입하십시오. Mac App Store에 있습니다.

마지막으로 Macbook 또는 Magic Trackpad가있는 경우 JiTouch를 받으십시오. 그것은 많은 것들에 제스처를 할당 할 수있게 해줄 것입니다. 그 중 하나는 전체 화면, 왼쪽 절반, 오른쪽 절반입니다. 제스처를 조금이라도 좋아한다면 진지하게 확인하십시오. 100 개 이상의 버튼이있는 마우스를 사용하는 것과 같습니다. 지 터치


0

머큐리

또한 MercuryMover를 살펴보면 일련의 키보드 매핑에서 다양한 창 이동 도구를 제공합니다. 작은 랩톱 화면으로 어려움을 겪을 때 이것을 많이 사용했으며 창 가장자리를 화면 가장자리로 뒤집을 수 있습니다. 일반 Windows에서 얻는 '이동'시스템 메뉴 기능을 가장 밀접하게 매핑합니다. 창문.



0

지금까지 내가 당신에게 질문을 이해, 당신은 할 스틱 창의면이 화면의 가장자리에 바로 그래서, 화면의 가장자리에 창을. 이것은 macOS Sierra (10.12)에서 기본적으로 가능합니다.

창의 상단을 클릭하고 드래그하여 고정하려는면으로 배치하려는 창을 이동하기 만하면됩니다. 이 작업을 천천히 수행해야합니다. 그렇지 않으면 작동하지 않습니다. 창을 가장자리로 드래그하면 잠시 멈추고 멈추어야 할 때입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.