ตัวจัดการหน้าต่างใด ๆ อนุญาตให้ฉันถ่ายหน้าต่างไปที่ด้านข้างของหน้าจอหรือไม่


21

คุณสามารถแนะนำ Window Manager สำหรับ Mac ได้หรือไม่? ฉันต้องการแป้นพิมพ์ลัดที่ใช้ snap หน้าต่างไปทางซ้ายหรือขวาครึ่งหนึ่งของหน้าจอ


4
ผมไม่คิดว่าคุณสามารถ snap ในหรือออกจากการเป็นผู้จัดการหน้าต่างภายใต้ OS X ได้
zneak

@mankoff คำถามนี้ถูกถามเมื่อ 6 เดือนที่แล้ว คำถามของคุณซ้ำกับคำถามนี้
Kyle Cronin

@Kyle คำถามใหม่กำลังพยายามเป็นคำถามทั่วไปเพิ่มเติม อันนี้มีไว้เฉพาะในการจัดชิดซ้าย / ขวา มีคำถามหน้าต่างเฉพาะจำนวนมาก ขออภัยไม่พยายามทำให้เกิดปัญหากับคำตอบที่ดี +11 ของคุณที่นี่เพียงพยายามสร้างที่อ้างอิงเดียวสำหรับคำถาม WM ทั้งหมด

@ankoff ฉันไม่กังวลเกี่ยวกับคำตอบของฉันฉันแค่บอกว่าคำถามนี้ไม่ควรถูกปิดเป็น "ซ้ำ" ของคำถามที่ใหม่กว่า
Kyle Cronin

ฉันเห็นด้วยว่าไม่ควรปิดจริง แต่ก็ยังซ้ำกัน เวลาไม่เกี่ยวข้องกันเป็นข้อมูลที่ซ้ำกันและควรอ้างอิงซึ่งกันและกัน ฉันแค่พยายามติดตามย่อหน้าสุดท้ายของโพสต์นี้: blog.stackoverflow.com/2011/01/…

คำตอบ:


17

SizeUpเป็นสิ่งที่คุณต้องการ:

SizeUp ช่วยให้คุณจัดตำแหน่งหน้าต่างอย่างรวดเร็วเพื่อเติมครึ่งหนึ่งของหน้าจอ (splitscreen), หนึ่งในสี่ของหน้าจอ (Quadrant), เต็มหน้าจอหรือกึ่งกลางผ่านแถบเมนูหรือปุ่มลัดทั้งระบบที่กำหนดค่าได้ (ปุ่มลัด) คล้ายกับฟังก์ชั่น "หน้าต่างเรียงกระเบื้อง" ที่มีอยู่ในระบบปฏิบัติการอื่น


1
ดูเหมือนแปลกที่ไม่มีทางเลือกฟรี แต่นี่คุ้มค่ากับราคา ฉันใช้ 'Full Screen' และ 'Next Monitor' จริงๆเท่านั้น แต่มันก็คุ้มค่า
Fishtoaster

@ Fishtoaster บริษัท ที่ทำให้ SizeUp ได้สร้างเวอร์ชันฟรีชื่อว่า TwoUp แต่ถูกยกเลิก
Kyle Cronin

1
นี้. SizeUp เขย่าโลกของฉันเป็นประจำทุกวัน
แมตต์

นี่เป็นตำแหน่งเริ่มต้นที่ยอดเยี่ยมมากมาย ขอบคุณสำหรับคำแนะนำ
citadelgrad

1
@citadelgrad: หากวิธีนี้ช่วยแก้ไขปัญหาของคุณอย่าลืมตรวจสอบเครื่องหมาย next ถัดจากโพสต์
zneak

8

divvy

Divvy เป็นแอปแถบเมนูขนาดเล็กที่ช่วยให้คุณปรับขนาดหน้าต่างที่ใช้งานอยู่โดยอัตโนมัติ Divviy แบ่งหน้าจอของคุณออกเป็นตารางขนาด 6x6 เมื่อเรียกใช้ Divvy จะนำ HUD ขึ้นมาเล็กน้อยบนหน้าจอด้วยตาราง 6x6 นี้ ขึ้นอยู่กับส่วนของหน้าจอที่คุณต้องการปรับขนาดหน้าต่างที่ใช้งานของคุณเพียงลากและเลือกสี่เหลี่ยมเหล่านั้นบน HUD และหน้าต่างทำส่วนที่เหลือ มันง่ายมาก


7

หลังจากทดสอบ SizeUp และ Breeze ฉันได้ตัดสินใจว่าBreezeเหมาะกับความต้องการของฉันที่สุด ทั้งสองอย่างอนุญาตให้คุณวางตำแหน่งหน้าต่างทางซ้ายขวาหรือเต็มหน้าจอ คุณสมบัติที่ขายให้ฉันคือการตั้งค่าขนาด & ตำแหน่งเริ่มต้นสำหรับแอปพลิเคชันและกำหนดให้เป็นปุ่มทางลัด


น่ากลัว ขอขอบคุณที่แบ่งปันสิ่งที่คุณตัดสินใจ สำหรับ 8 bucks ดูดี
mkelley33

7

ShiftIt (เวอร์ชันดั้งเดิมที่ลิงก์เลิกใช้) ทำสิ่งนี้และเป็นแหล่งข้อมูลฟรีและโอเพ่นซอร์ส

แก้ไข: โครงการนี้อยู่ในGitHubอย่างไรก็ตามรุ่นล่าสุดในเดือนพฤศจิกายน 2010


1
นี่คือสิ่งที่ฉันจะพูด ทำงานได้ดีบน Snow Leopard รองรับแป้นพิมพ์ลัดที่กำหนดได้เช่นกัน
Randy6T9

มันเจ๋งมากที่มันเป็นโอเพ่นซอร์ส แต่ความจริงที่ว่ามันต้องใช้ X11 ทำให้มันไม่เป็นปัญหาสำหรับฉัน
James McMahon

5

สี่มุม

ฉันได้ยินบางคนพูดถึงสิ่งนี้ด้วย:

คุณใช้เวลาเยอะในการเคลื่อนย้ายและซูมหน้าต่างเพื่อให้คุณสามารถดูและทำงานกับเนื้อหาทั้งหมดใน Mac ของคุณได้ดีขึ้นหรือไม่? แทนที่จะทำอย่างนั้นด้วยตัวเองให้ Moom จัดการงานแทนคุณ


4

หากคุณมีเม้าส์หรือแทร็คแพด Magic, BetterTouchToolจะดีกว่าเนื่องจากคุณสามารถตั้งค่าท่าทางสัมผัสเฉพาะเพื่อจัดการหน้าต่างได้ เช่นเดียวกับการกวาดนิ้วด้วยสี่นิ้วด้านซ้ายสามารถปรับขนาดหน้าต่างเป็นซ้าย 50% ของหน้าจอ


4

Moomยอดเยี่ยม คุณสามารถ snap windows ไปที่: แบบเต็มหน้าจอครึ่งหน้าจอหน้าจอไตรมาส คุณสามารถปรับขนาดด้วยกริด รองรับแป้นพิมพ์ลัดที่กำหนดเองเช่นกัน

ภาพหน้าจอ Moom


+1 สำหรับการรวมรูปภาพเนื่องจากมันค่อนข้างมีประโยชน์ในการทำความเข้าใจว่ามันทำงานอย่างไร
พอล Wagland

3

ฉันใช้ SizeUp และ Divvy เป็นการส่วนตัวทุกวัน หากฉันเคยรู้จัก ShiftIt มาก่อนหน้านี้ฉันอาจจะไม่ได้จ่ายค่า SizeUp อีกหนึ่งการตรวจสอบที่ยังไม่ได้กล่าวถึงคือBetterTouchToolซึ่งมีคุณสมบัติอื่น ๆ อีกมากมาย แต่ซ่อนอยู่ในตัวเลือกขั้นสูงเป็นคุณลักษณะที่ดีที่พวกเขาเรียกว่า "Window Snapping" ซึ่งจัดหน้าต่างไปทางซ้ายหรือขวาของ หน้าจอเมื่อคุณลากไปด้านข้าง ไม่มีฟังก์ชั่นแป้นพิมพ์ลัดรวมอยู่ด้วย แต่มันเป็นส่วนเสริมที่ดีสำหรับ SizeUp และ Divvy


1
BetterTouchTool เป็นสิ่งที่ฉันใช้ตอนนี้เป็นหนึ่งในแอพฟรีที่ดีที่สุดที่นั่น
Robert S Ciaccio

3

ฉันพบที่นี่จากคำถามปิดหัวข้อใน Stack Overflow :

มีผู้จัดการโอเพนซอร์สสองรายที่กล่าวถึงที่นั่นซึ่งไม่ปรากฏในรายการนี้:

อีกอันจาก App Store


มีภาพรวมที่ดีของ Slate และสิ่งที่สามารถทำได้ในบล็อกโพสต์นี้มีชื่อว่า: การใช้ Slate: เครื่องมือจัดการหน้าต่างของแฮกเกอร์สำหรับ Macs
slm

ฉันใช้ Spectacle ด้วยตัวเอง มันมีปัญหาหนึ่งกับแอปพลิเคชันเฉพาะ - คำสั่งเลิกทำดูเหมือนจะไม่ทำงานบนหน้าต่าง Firefox มันดูเหมือนจะไม่ได้มีคุณสมบัติมากเท่า Slate
SilverWolf - Reinstate Monica

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

ที่มา: MacScripter ผ่าน Google


1

จากสิ่งที่ฉันเห็นและได้ยินCinchเป็นแอปพลิเคชั่นที่ยอดเยี่ยมสำหรับการนำการจัดการหน้าต่างของ Windows 7 ไปยัง Mac OS X


แม้ว่าการจัดการหน้าต่างของ Windows 7 นั้นส่วนใหญ่ไม่มีอยู่จริงนอกจาก Aero Snap * ระวังมีตัวเลือกมากมายซึ่งชิ้นส่วนของซอฟต์แวร์เหล่านี้อาจได้รับอิทธิพลจาก
Ehtesh Choudhury

1

ก่อนอื่นถ้าฟรีสิ่งสำคัญสำหรับคุณคือรับShiftIt

หากความสะดวกสบายจากเมาส์เป็นสิ่งสำคัญสำหรับคุณให้รับ Cinch มันอยู่ใน Mac App Store

ในที่สุดหากคุณมี Macbook หรือ Magic Trackpad ให้รับ JiTouch มันจะช่วยให้คุณกำหนดท่าทางให้หลาย ๆ อย่าง หนึ่งในนั้นคือเต็มหน้าจอ, ครึ่งซ้าย, ครึ่งขวา ตรวจสอบอย่างจริงจังถ้าคุณชอบท่าทางแม้แต่น้อย มันเหมือนกับการมีเมาส์ที่มี 100+ ปุ่ม JiTouch


0

MercuryMover

คุณอาจดูที่ MercuryMover ซึ่งให้เครื่องมือย้ายหน้าต่างหลากหลายแบบภายใต้ชุดของการจับคู่แป้นพิมพ์ ฉันเคยใช้มันเยอะมากเมื่อต้องดิ้นรนกับหน้าจอแล็ปท็อปขนาดเล็กและคุณสามารถเอามันพลิกหน้าต่างไปที่ขอบของหน้าจอ ฯลฯ มันจะแมปฟังก์ชั่นการทำงานของเมนูระบบ 'เลื่อน' อย่างใกล้ชิดที่สุด หน้าต่าง



0

เท่าที่ฉันเข้าใจคำถามของคุณคุณต้องการที่จะติดหน้าต่างไปที่ขอบของหน้าจอเพื่อให้ด้านข้างของหน้าต่างอยู่ตรงขอบของหน้าจอ ตอนนี้สามารถทำได้ใน macOS Sierra (10.12)

สิ่งที่คุณต้องทำคือย้ายหน้าต่างที่คุณต้องการวางตำแหน่ง (โดยการคลิกและลากด้านบนของหน้าต่าง) ไปยังด้านที่คุณต้องการให้ติด คุณต้องทำสิ่งนี้ช้ามิฉะนั้นจะไม่สามารถใช้งานได้ หลังจากที่คุณลากหน้าต่างไปที่ขอบมันจะติดครู่หนึ่งและนั่นคือเวลาที่คุณควรหยุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.