開いているすべてのアプリウィンドウをカスケードする


4

開いているすべてのアプリウィンドウを特定の画面に配置する方法を探しています。各ウィンドウの一部が表示されるようにそれらを「カスケード」したいと思います。それらのいずれかをクリックすると、別のウィンドウに簡単に戻ることができます。

アイデアは次のとおりです。

ここに画像の説明を入力してください

これには、画面のX軸とY軸上の各ウィンドウの再配置と、各ウィンドウのサイズ変更の両方が含まれます。同じサイズになります。

  • Mac OS内でこれをネイティブに行う方法はありますか?
  • この機能を実現できるアプリはありますか?

更新:

Hammerspoonソリューションを試したところ、以下のエラーが発生しました。すべてのウィンドウを外部モニターからMacBookに移動しましたが、実際にはカスケードしませんでした。

ここに画像の説明を入力してください

回答:


4

Mission Controlを除き、これをネイティブに行う方法は知りません。

Hammerspoonは低レベルの自動化ツールであり、このタイプの場合には少し不器用ではありますが素晴らしいです。これは、ウィンドウの配置など、多くのOSレベルの操作をLuaスクリプトエンジンに公開します。

この機能をHammerspoonに実装するには、次のようなことができます。

function cascadeWindows()
    local windows = hs.window.allWindows()
    local screen = windows[1]:screen():frame()

    local xMargin, yMargin = screen.w/5, screen.h/5  -- This is equal to the gap between the edge of the topleft window and the edge of the screen.
    local layout = {}
    for i, win in ipairs(windows) do
        local winPos = {
            win:application(),
            win:title(),
            win:screen(),
            nil, hs.geometry.rect(
            (i-1)*(xMargin/(#windows-1)), -- x
            (i-1)*(yMargin/(#windows-1)), -- y, you might end up having to add some number here
            screen.w - xMargin,           -- w
            screen.h - yMargin            -- h
            ), nil
        }
        layout[#layout+1] = winPos
    end
    hs.layout.apply(layout)
end
hs.hotkey.bind({'cmd','alt','ctrl'}, 'space', cascadeWindows)

このコードは緩やかにテストされていますが、出発点として機能するはずです。インストールするには、まずHammerspoonをインストールしてから、このコードを~/.hammerspoon/init.luaファイルに追加します。何が起こっているかについての詳細は、のドキュメントでhs.layout.apply、より一般的にはHammerspoonドキュメンタリーで見つけることができます。

Luaを知らず、Luaを学習したくない場合(迅速かつ簡単です!)、またはHammerspoonほどの新しいツールの学習に参加したくない場合は、上記の指示に従って変更してください。あなたが望むものへのキーバインディング。


これをありがとう、それは素晴らしいスタートです。これを試しただけで、上記のエラーメッセージを配置します。
ThomasReggi

2

[ウィンドウ]メニューの[オプション]を押しながら、[前面に配置]をクリックします。これにより、図が示すようにすべてのウィンドウがカスケード表示され、希望どおりに動作します。

アルファベット順に並べ替えます。


あなたの答えは説明することで改善を使用することができ、なぜ/どのようにあなたのソリューション修正/ OPはの質問に対処しています。
Twisty Impersonator

1

私は自分で同じものを探していたので、自分のHammerspoonソリューションを思いつきました。

hs.hotkey.bind({'cmd','alt','ctrl'}, ',', function()
    local windows = hs.window.orderedWindows()
    local screen = windows[1]:screen():frame()
    local nOfSpaces = #windows > 1 and #windows - 1 or 1

    local xMargin = screen.w / 10 -- unused horizontal margin
    local yMargin = 20            -- unused vertical margin
    local spacing = 40            -- the visible margin for each window

    for i, win in ipairs(windows) do
        local offset = (i - 1) * spacing
        local rect = {
            x = xMargin + offset,
            y = screen.y + yMargin + offset,
            w = screen.w - (2 * xMargin) - (nOfSpaces * spacing),
            h = screen.h - (2 * yMargin) - (nOfSpaces * spacing),
        }
        win:setFrame(rect)
    end
end)

私はこれまでのところ非常に満足しています。また、Hammerspoonの残りの構成にも興味があるかもしれません:https : //github.com/dbmrq/dotfiles/tree/master/home/.hammerspoon

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.