是否有任何窗口管理器允许我将窗口对齐到显示器的侧面?


21

您可以推荐Mac的Window Manager吗?我想要一个键盘快捷方式,可以将窗口捕捉到屏幕的左半部分或右半部分。


4
我不认为你可以向内或向外OS X下一个窗口管理器管理单元
zneak

@mankoff这个问题是6个月前提出的。您的问题是此问题的重复。
凯尔·克罗宁

@Kyle,新问题正试图成为一个更通用的问题。这是特定于向左/向右捕捉的。有很多特定的窗口问题。抱歉,没有在这里给您的+11好的答案造成问题,只是想为所有WM问题建立一个单一的参考位置。

@mankoff我不担心我的回答,我只是说这个问题不应该作为一个较新问题的“重复”而关闭。
凯尔·克罗宁

我同意实际上不应该关闭它,但是它仍然是重复的。时间无关紧要,它们彼此都是重复的,应该互相引用。我只是想关注这篇文章的最后一段:blog.stackoverflow.com/2011/01/…– 2011

Answers:


17

SizeUp正是您需要的:

SizeUp允许您快速定位窗口,使其恰好占满整个屏幕的一半(分屏),四分之一的屏幕(象限),全屏或通过菜单栏或可配置的全系统快捷键(热键)居中。与其他操作系统上可用的“平铺窗口”功能相似。


1
似乎没有免费的替代品很奇怪,但这是值得的。我真的只使用“全屏”和“下一个监视器”,但这是值得的。
Fishtoaster

@Fishtoaster制作SizeUp的公司还提供了一个名为TwoUp的免费版本,但已停产
Kyle Cronin 2010年

1
这个。SizeUp每天都会震撼我的世界。
马特2010年

这有很多很棒的默认仓位。谢谢你的建议。
citadelgrad

1
@citadelgrad:如果这解决了您的问题,请不要忘记检查帖子旁边的√标记。
zneak

8

股利

Divvy是一个小菜单栏应用程序,可让您自动调整任何活动窗口的大小。Divviy实际上将您的屏幕划分为6x6的网格。调用时,Divvy使用此6x6网格在屏幕中间弹出一个HUD。根据您要调整活动窗口大小的屏幕部分,只需在HUD上拖动并选择这些正方形,其余的就由窗口完成。就这么简单。


7

在测试SizeUp和Breeze之后,我决定Breeze最适合我的需求。两者都允许您将窗口定位在左侧,右侧或全屏模式。为我售出的功能是为应用程序设置默认大小和位置,并为其分配快捷键。


太棒了 感谢您分享您的决定。对于8块钱看起来不错。
mkelley33

7

ShiftIt(链接的原始版本已终止)是这样做的,并且是免费的开放源代码。

编辑:该项目现在位于GitHub上,但是最新版本是2010年11月。


1
这就是我要说的。在雪豹上效果很好。还支持可分配的键盘快捷键。
Randy6T9 2011年

它开源是很酷的,但是它需要X11的事实使它对我而言
James McMahon

5

妈咪

我听说有些人也谈到了这一点:

您是否花费大量时间移动和缩放窗口,以便更好地查看和使用Mac上的所有内容?让Moom代替您自己完成这项工作,而不是自己做。


4

如果您拥有魔术鼠标或魔术触控板,那么BetterTouchTool会更好,因为您可以设置特定的手势来管理窗口。就像四根手指向左滑动一样,可以将窗口的大小调整到屏幕左侧50%。


4

妈咪很棒。您可以将窗口捕捉到:全屏,半屏,四分之一屏。您也可以使用网格调整大小。它还支持自定义键盘快捷键。

Moom屏幕截图


+1用于包含图片,因为它对于了解其工作原理非常有用。
Paul Wagland

3

我个人每天使用SizeUp和Divvy。如果我较早了解ShiftIt,那么我可能不会为SizeUp付钱。值得一提的另一个尚未提及的功能是BetterTouchTool,它具有许多其他功能,但是隐藏在高级选项中的一项好功能是它们称为“ Window Snapping”,可以将窗口捕捉到窗口的左侧或右侧。屏幕拖动到侧面时。不包括键盘快捷键功能,但它是对SizeUp和Divvy的不错补充。


1
我现在使用的是BetterTouchTool,它是目前最好的免费应用程序之一。
罗伯特·希亚乔

3

我从堆栈溢出的一个非主题问题中找到了这里:

此处提到的有两个开源管理器没有出现在此列表中:

来自App Store的另一个



我自己使用眼镜。特定应用程序确实存在一个问题-undo命令似乎在Firefox窗口上不起作用。它似乎也没有Slate那样多的功能。
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的出色应用程序。


但是,除了Aero Snap之外,几乎不存在Windows 7的窗口管理。* nix有更多选项,这些软件可能会受到这些选项的影响。
Ehtesh Choudhury 2012年

1

首先,如果免费对您很重要,请获取ShiftIt。

如果鼠标的便利性对您很重要,请使用Cinch。在Mac App Store中。

最后,如果您有Macbook或Magic Trackpad,请获取JiTouch。它将允许您将手势分配给许多事物。其中之一是全屏,左半边,右半边。如果您不喜欢手势,请认真检查一下。就像拥有100多个按钮的鼠标一样。 JiTouch


0

水星移动

您可能还会看到MercuryMover,它在一系列键盘映射下为您提供了一系列窗口移动工具。当我在笔记本电脑的小屏幕上挣扎时,我经常使用此功能,并且可以将其翻转到屏幕边缘等位置。它最接近地映射了普通Windows中的“移动”系统菜单功能。视窗'。



0

据我了解您的问题,您想将窗口粘贴到屏幕的边缘,以便窗口的侧面直接在屏幕的边缘。现在可以在macOS Sierra(10.12)上本地实现。

您需要做的就是将要定位的窗口(单击并拖动窗口的顶部)移动到要粘贴的一侧。您需要缓慢执行此操作,否则它将无法正常工作。将窗口拖动到边缘后,它将停留一会儿,这时应该停止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.