web-dev-qa-db-ja.com

タイル型ウィンドウマネージャーとマルチヘッドセットアップ:Gnomeスタイルのワークスペース

Metacityからxmonadに切り替えたところ、タイル型ウィンドウマネージャーの概念に非常に感銘を受けました。しかし、私は気になります。gnomeでは、「ワークスペース」は3つのモニターすべてで構成されていましたが、xmonadでは、すべての物理画面に独自のワークスペースがあります(たとえば、mod + 1を押すと、1つの画面だけがワークスペースを変更します)。

Gnome(メタシティ)ワークスペースの概念を実装するタイル型ウィンドウマネージャーはありますか? xmonadはどういうわけかすべての物理画面を1つのワークスペースにリンクできますか?

4
Flow

XMonadは、3つの画面すべてを単一のワークスペースとして使用することはできませんが、使用することもできません。画面をうまくナビゲートする方法を知っておく必要があると思います。私は非常に気に入ったセットアップを持っており、そのセットアップの構成ファイルを見ることができます Haskell WikiのXMonadセクションにあります 。私が表示するものはすべて、私のマシン上の自分の構成にあるものからのものです(ただし、リンクしたページにあるとは限りません)。

マルチヘッドナビゲーションを耐えられるだけでなく素晴らしい天の恵みにする2つの xmonad-contrib ライブラリがあり、それらは CycleWSTagWindows です。

CycleWSを使用すると、さまざまな物理画面(prevScreenとnextScreenを使用)のワークスペースを循環でき、画面間でウィンドウを簡単に移動できます(shiftPrevScreenとshiftNextScreenを使用)。つまり、画面ごとに異なるワークスペースがあり、それぞれがウィンドウを共有できるということです。 1つのウィンドウをすべての画面にまたがらせたい場合を除いて、問題はありません。 xmonad.hsがCycleWSコマンドを使用する方法は次のとおりです。

-- Alt + Ctrl Left / Right makes the view go left and right
, ((altMask .|. controlMask, xK_Left       ), prevScreen >> windowCenter)
, ((altMask .|. controlMask, xK_Right      ), nextScreen >> windowCenter)
, ((altMask .|. controlMask, xK_Down       ), shiftPrevScreen)
, ((altMask .|. controlMask, xK_Up         ), shiftNextScreen)
, ((altMask .|. controlMask .|. shiftMask, xK_Down       ), shiftPrevScreen >> prevScreen >> windowCenter)
, ((altMask .|. controlMask .|. shiftMask, xK_Up         ), shiftNextScreen >> nextScreen >> windowCenter)

[注:windowCenter = warpToWindow(1%6)(1%6)]

TagWindowsは素晴らしく、特にviewOnScreen関数を使用すると、画面の正面にある任意の画面でタグ付きプログラムを呼び出すことができますが、好みに合わせて少しハッキングする必要がありました。私が使用するキーは次のとおりです。

, ((myModMask,                 xK_g  ), tagPrompt defaultXPConfig (withFocused . addTag))
, ((myModMask .|. shiftMask,   xK_g  ), tagDelPrompt defaultXPConfig)
, ((altMask,                   xK_g  ), tagPrompt defaultXPConfig (`withTaggedGlobalP` gotoWindow))

そして、ここでgotoWindow関数が定義されています。

-- Warning: This gotoWindow function assumes you made your workspaces
-- with the 'withScreens' function from XMonad.Layout.IndependentScreens    
gotoWindow :: Window -> WindowSet -> WindowSet
gotoWindow window ws = case S.findTag window ws of
                           Just i -> viewOnScreen (screenIdFromTag i) i ws
                           Nothing -> ws
    where
        screenIdFromTag :: WorkspaceId -> ScreenId
        screenIdFromTag = S . read . takeWhile (/= '_')

そして、それはあなたがあなたのXMonad設定ファイルに多頭の素晴らしさを釘付けにすることを可能にするはずです。コメントがあれば、遠慮なくコメントで質問してください。これがお役に立てば幸いです。

3