【问题标题】:How to create and handle custom messages in Xmonad?如何在 Xmonad 中创建和处理自定义消息?
【发布时间】:2017-07-08 19:44:03
【问题描述】:

我想实现由自定义布局处理的自定义消息。

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 l@(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) }

我不太明白这个逻辑是如何工作的(我从某个地方复制了它),msum 在这里做什么?我想我一旦找到mplus 的实例声明Maybe 就会知道。

【问题讨论】:

    标签: xmonad


    【解决方案1】:

    想通了。您只需要在列表中添加额外的“布局”。

    基本上所有msum 所做的只是获取第一个Just 值并将其返回,例如: msum [Nothing, Nothing, Just 1, Just 2, Nothing] 将返回 Just 1

      pureMessage l@(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) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多