Разве какие-либо оконные менеджеры позволяют мне привязывать окна к сторонам дисплея?

21

Можете ли вы порекомендовать оконный менеджер для Mac? Я хотел бы иметь сочетание клавиш, которое бы привязывало окна к левой или правой половине моего экрана.

citadelgrad
источник
4
Я не думаю, что вы можете подключить или отключить оконный менеджер под OS X.
zneak
@mankoff Этот вопрос был задан 6 месяцев назад. Ваш вопрос является дубликатом этого.
Кайл Кронин
@Kyle новый вопрос пытается быть более общим вопросом. Этот характерен для привязки влево / вправо. Есть много конкретных оконных вопросов. Извините, я не пытаюсь вызвать проблемы с вашим хорошим ответом +11 здесь, просто пытаюсь создать единый справочный пункт для всех вопросов WM.
@mankoff Я не беспокоюсь о своем ответе, я просто говорю, что этот вопрос не следует закрывать как «дубликат» более нового вопроса.
Кайл Кронин
Я согласен, что это не должно быть на самом деле закрыто, но это все еще дубликат. Время не имеет значения, каждый из них дублирует друг друга и должен ссылаться друг на друга. Я просто пытался следовать последнему абзацу этого поста: blog.stackoverflow.com/2011/01/...

Ответы:

17

SizeUp это именно то, что вам нужно:

SizeUp позволяет быстро позиционировать окно, чтобы заполнить ровно половину экрана (разделенный экран), четверть экрана (квадрант), полный экран или по центру с помощью строки меню или настраиваемых общесистемных сочетаний клавиш (горячие клавиши). Аналогичен функциональности «плиточные окна», доступной в других операционных системах.

Кайл Кронин
источник
1
Кажется странным, что нет бесплатной альтернативы, но это того стоило. Я действительно использую только «Полный экран» и «Следующий монитор», но это того стоит.
Fishtoaster
@Fishtoaster Компания, которая производит SizeUp, также сделала бесплатную версию под названием TwoUp, но она была прекращена
Кайл Кронин
1
Это. SizeUp качает мой мир ежедневно.
Мэтт
Это тонна отличных позиций по умолчанию. Спасибо за предложение.
Цитадельград
1
@citadelgrad: если это решило вашу проблему, не забудьте поставить галочку рядом с постом.
zneak
8

пай

Divvy - это небольшое меню, которое позволяет автоматически изменять размеры любого активного окна. Divviy виртуально делит ваш экран на сетку 6x6. Когда вызвано, Divvy поднимает немного HUD в середине экрана с этой сеткой 6x6. В зависимости от того, в какой части экрана вы хотите изменить размер активного окна, просто перетащите и выберите эти квадраты в HUD, и окно сделает все остальное. Это так просто.

neoneye
источник
7

После тестирования SizeUp и Breeze я решил, что Breeze лучше всего соответствует моим потребностям. Оба позволяют вам размещать окна слева, справа или в полноэкранном режиме. Функция, которая продала его для меня, заключалась в установке размера и позиции по умолчанию для приложения и назначении ему сочетания клавиш.

citadelgrad
источник
Потрясающе. Спасибо, что поделились своим мнением. За 8 баксов выглядит отлично.
mkelley33
7

ShiftIt (оригинальная версия по ссылке прекращена) делает это, и является бесплатным и открытым исходным кодом.

Изменить: проект в настоящее время на GitHub , однако последний выпуск был в ноябре 2010 года.

Роберт С Чаччо
источник
1
Это то, что я собирался сказать. Прекрасно работает на Snow Leopard. Поддерживает назначаемые сочетания клавиш, а также.
Randy6T9
Круто, что это открытый исходный код, но тот факт, что он требует X11, делает его бесполезным для меня
Джеймс МакМахон
5

Moom

Я слышал, что некоторые люди говорят об этом тоже:

Вы тратите много времени на перемещение и масштабирование окон, чтобы лучше видеть и работать со всем содержимым вашего Mac? Вместо того, чтобы делать эту работу самостоятельно, позвольте Moom справиться с задачей для вас.

claytron
источник
4

Если у вас есть волшебная мышь или волшебный трекпад, лучше использовать BetterTouchTool, так как вы можете устанавливать определенные жесты для управления окнами. Как четыре пальца влево можно изменить размер окна влево на 50% экрана.

MikhailT
источник
4

Мум это здорово. Вы можете привязать окна к: полный экран, половина экрана, четверть экрана. Вы также можете изменить размер с помощью сетки. Он также поддерживает пользовательские сочетания клавиш.

Скриншот Moom

Питер Роу
источник
+1 за включение изображения, так как оно весьма полезно для понимания того, как оно работает.
Пол Уогланд
3

Я лично использую SizeUp и Divvy ежедневно. Если бы я знал о ShiftIt раньше, я бы, вероятно, не заплатил бы за SizeUp. Еще один, чтобы проверить, что еще не было упомянуто, это BetterTouchTool , который имеет много других функций, но скрыт в расширенных параметрах - это хорошая функция, которую они называют «привязка окна», которая привязывает окно слева или справа от экран, когда вы перетащите его в сторону. В него не включены функции сочетания клавиш, но это хорошее дополнение к SizeUp и Divvy.

Дэвид Холлман
источник
1
BetterTouchTool - это то, что я сейчас использую для этого, это одно из лучших бесплатных приложений.
Роберт С. Чаччо
3

Я нашел здесь из не по теме вопроса о переполнении стека :

Там были упомянуты два менеджера Open Source, которых не было в этом списке:

Еще один из App Store

Frobbit
источник
Есть хороший обзор Slate и того, что он может сделать в этом посте под названием: Использование Slate: оконный менеджер хакера для Mac
slm
Я использую Spectacle сам. У него есть одна проблема с конкретным приложением - команда отмены, похоже, не работает в окнах Firefox. У этого также, кажется, нет такого количества особенностей как Сланец.
Серебряный Волк - Восстановить Монику
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.

daviesgeek
источник
Тем не менее, управление окнами в Windows 7 практически отсутствует, за исключением Aero Snap. * nix имеет гораздо больше возможностей, на которые, вероятно, влияют эти части программного обеспечения.
Этеш Чоудхури
1

Прежде всего, если для вас важен бесплатный доступ, получите ShiftIt.

Если для вас важно удобство мыши, приобретите Cinch. Это в Mac App Store.

Наконец, если у вас есть Macbook или Magic Trackpad, приобретите JiTouch. Это позволит вам назначить жест многим, многим вещам; один из которых на весь экран, наполовину левый, наполовину правый. Серьезно проверьте это, если вы любите жесты хоть немного. Это как мышь с более чем 100 кнопками. JiTouch

Randy6T9
источник
0

MercuryMover

Вы также можете взглянуть на MercuryMover, который предоставляет вам ряд инструментов перемещения окна под серией раскладок клавиатуры. Я часто использовал это, когда боролся с маленьким экраном ноутбука, и вы можете заставить его перевернуть окно к краю экрана и т. Д. Оно наиболее точно отображает функциональность системного меню «перемещение», которую вы получаете в обычной Windows ». окна.

robsoft
источник
0

Насколько я понимаю ваш вопрос, вы хотите приклеить окно к краю экрана, чтобы сторона окна была прямо на краю экрана. Это теперь возможно в macOS Sierra (10.12) изначально.

Все, что вам нужно сделать, это переместить окно, которое вы хотите расположить (щелкнув и перетащив верхнюю часть окна) в ту сторону, к которой вы хотите его привязать. Вы должны делать это медленно, иначе это не сработает. После того, как вы перетащите окно к краю, оно некоторое время приклеится, и тогда вам следует остановиться.

Скелет лук
источник