2017-07-08 9 views
0

カスタムレイアウトで処理するカスタムメッセージを実装したいと思います。Xmonadでカスタムメッセージを作成して処理する方法は?

data ModifySideContainer = IncrementLeftColumnContainer | IncrementRightColumnContainer deriving Typeable 
instance Message ModifySideContainer 

私はこれが(カスタムレイアウト内の)私の現在のPureMessage実装です(https://hackage.haskell.org/package/xmonad-0.13/docs/XMonad-Core.html#v:pureMessage

pureMessage内のカスタムメッセージを処理する方法があまりにもわからない:

pureMessage [email protected](MiddleColumn sr mcc deltaInc _) m = msum [ 
    fmap resize  (fromMessage m), 
    fmap incmastern (fromMessage m) 
    ] 
    where 
     resize Expand = l {splitRatio = (min 0.5 $ sr + deltaInc)} 
     resize Shrink = l {splitRatio = (max 0 $ sr - deltaInc)} 
     incmastern (IncMasterN x) = l { middleColumnCount = max 0 (mcc+x) } 

Iドンこの論理がどのように働くか(私はどこかからコピーしました)、ここではmsumは何ですか?私は、Maybeのインスタンス宣言がmplusであることを知っています。

答えて

0

それを実演しました。リスト内に追加の「レイアウト」を追加するだけです。 msum [Nothing, Nothing, Just 1, Just 2, Nothing]Just 1を返します。基本的に

すべてmsumんが最初Just値を取得し、例えば、それを返します。

pureMessage [email protected](MiddleColumn sRatio mcc deltaInc _ leftCount rightCount) m = msum [ 
    fmap resize  (fromMessage m), 
    fmap incmastern (fromMessage m), 
    fmap incSideContainer (fromMessage m) 
    ] 
    where 
     incSideContainer IncrementLeftColumnContainer = l 
     { leftContainerCount = leftCount + 1, rightContainerCount = rightCount - 1} 
     incSideContainer IncrementRightColumnContainer = l 
     { leftContainerCount = leftCount - 1, rightContainerCount = rightCount + 1} 
     resize Expand = l {splitRatio = (min 0.5 $ sRatio + deltaInc)} 
     resize Shrink = l {splitRatio = (max 0 $ sRatio - deltaInc)} 
     incmastern (IncMasterN x) = l { middleColumnCount = max 0 (mcc+x) } 
関連する問題