haskell 根据Xmonad中的屏幕数量调整键绑定

utugiqy6  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

我正在尝试根据当前使用的屏幕(物理屏幕/显示器)数量调整Xmonad中的键绑定。不知何故,我在这项任务中失败了,可能是由于我缺乏Haskell知识。
在我的xmonad.hs文件中,我定义了我的键绑定:

myKeys =
    [ ...
    , ...
    , ("M-x", showSet1)
    , ...
    ]

到目前为止,我在文件的其他地方定义了showSet1abc是实际定义的占位符:

showSet1 = abc

然后我这样使用myKeys

main :: IO ()
main = xmonad
     . ewmhFullscreen
     ...
     $ myConfig

myConfig = def
    { modMask = myModMask
    , ...
    } `additionalKeysP` myKeys

到目前为止,这工作得很好,但现在我想根据屏幕的数量调整showSet1。我发现了这个线程,并从那里使用以下方法获得屏幕数量:

numScreens :: X Int
numScreens = withDisplay (io.fmap length.getScreenInfo)

我的计划是使用以下内容来定义showSet1

showSet1 = if numScreens == 4
    then abc
    else xyz

在编译xmonad时,我得到以下错误:

• No instance for (Eq (X Int)) arising from a use of ‘==’
    • In the expression: numScreens == 4
      In the expression:
        if numScreens == 4 then
            abc
        else
            xyz

如果我理解正确的话,numScreens的类型是X Int,我不能将其与4进行比较。你知道我该怎么做吗我已经尝试了很多东西,包括玩screenCount函数,但到目前为止没有任何效果。

z5btuh9x

z5btuh9x1#

因为你从X得到屏幕的数量,这不是一个纯粹的计算。因此,它是一个X Int,而不是普通的Int。根据asdxyz是什么,这可能会有所帮助:

showSet1 = do
  ns <- numScreens
  if ns == 4
    then abc
    else xyz

相关问题