kenkovlog

Haskell, Python, Vim, ...

Xmonadでデュアルディスプレイ

Xmonadデュアルディスプレイに関する設定をしたので、
その時のメモ

Xmonadデュアルディスプレイについて

XMonadデュアルディスプレイは、一つのディスプレイに
一つのワークスペースを分り振るものであって、
一つのワークスペースをディスプレイ二つ分に拡張するものではありません。
このあたりは、前に使っていたXFCEとは異なることだったため、勘違いしていました。

設定について

設定ですが
XMonadデュアルディスプレイを使うために次を設定しました。

-- ~/.xmonad/xmonad.hs

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys, additionalKeysP)
import System.IO

-- 次を新しくインポートした
import qualified XMonad.StackSet as W

myManageHook = composeAll
             -- floatさせるアプリケーション
             [ className =? "Gimp" --> doFloat,
               -- 次はtildaでなくTildaにしないといけない
               className =? "Tilda" --> doFloat
             ]

main = do
    -- .xmobarrcの設定
    xmproc <- spawnPipe "/usr/bin/xmobar ~/.xmobarrc"
    xmonad $ defaultConfig {
          -- terminalにはxfceのterminalを使う
          terminal    = "terminal",
          manageHook = manageDocks <+> myManageHook
                       <+> manageHook defaultConfig,
          layoutHook = avoidStruts  $  layoutHook defaultConfig,
          logHook = dynamicLogWithPP xmobarPP {
                      ppOutput = hPutStrLn xmproc,
                      ppTitle = xmobarColor "green" "" . shorten 50
                    }
          -- , modMask = modmask
       } `additionalKeysP`
       myKeys

-- ここでデュアルディスプレイに関する設定をした
-- 具体的には、
-- M-S-rを押すことで
-- ディスプレイ0にワークスペース1を出力し
-- ディスプレイ1にワークスペース8を出力
-- するようにしました。
-- 作業していくなかで、どのディスプレイにどのワークスペース
-- が割り振られているか分からなくなるときがあるので、
-- そのときにこれを使うと便利です
myKeys =
  [("M-S-r", do
    screenWorkspace 0 >>= flip whenJust (windows.W.view)
    (windows . W.greedyView) "1"
    screenWorkspace 1 >>= flip whenJust (windows.W.view)
    (windows . W.greedyView) "8")]