如何在这个不寻常的设置中使用Dzen而不是Xmobar

时间:2014-01-19 14:57:19

标签: haskell xmonad

我是一名Haskell新手,我目前没有时间真正学习Haskell,所以我向那些已经弄明白的专家寻求帮助。 :)

这是我当前的xmonad.hs文件:https://github.com/Greduan/dotfiles/blob/dd45d287fade73a3191ad313ec37231a8c802942/xmonad/xmonad.hs

如何添加/配置键绑定(请参阅myKeys变量)以及如何从Xmobar更改为基本(尚未配置)Dzen设置。

这是一个似乎没有在我找到的任何配置中使用的设置,每次eI尝试将其转换为其他格式时,它都不能很好地工作。

另一种格式是main = do etc. etc. etc. BTW。

而且,我怎样才能将转换从这种格式转换为更常用的格式。

2 个答案:

答案 0 :(得分:6)

关于“转化”:

由于xmonad.hs只是编译成“你的”xmonad的haskell源代码,因此没有真正的“格式”,并且有很多方法可以编写同样的东西。

如果您的意思是如何将main从使用=<< operator转换为符号

main = xmonad =<< statusBar myBar myPP statusbarToggleKey myConfig

这里使用两个功能:

  • statusBar函数,它接受四个参数并返回IO (XConfig (ModifiedLayout AvoidStruts l)。基本上,使用传递给它的内容statusBar创建相应的XConfig并将其包装在IO monad中。

  • xmonad函数接受XConfig并返回IO()

=&lt;&lt;将两者结合起来:将statusBar返回的XConfig从IO monad中取出并传递给xmonad

符号中的等价物是:

main = do 
    config <- statusBar myBar myPP statusbarToggleKey myConfig
    xmonad config

但是一旦你理解了monad运算符的作用,它们看起来就比表示法更优雅。

使用dzen:

如果你想继续使用statusBar函数,你只需要更改传递给它的参数。

-- the command line to launch the status bar
myBar = "dzen2 -y -1" --that's for dzen at the bottom of the screen
-- the PP
myPP = defaultPP

键绑定:

您可以在XConfig definition中看到keys的类型。这是一个采用XConfig并返回地图的函数。

以下是使用fromList中的Data.Map函数编写它的“漂亮”方式示例:

import qualified Data.Map as M

myKeys conf@(XConfig {modMask = modm}) = M.fromList $
    [
     ((modm, xK_c), kill),
     ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
    ]

然后,如果你想使用defaultConfig中定义的密钥以及你的密钥,你可以使用<+>

myConfig = defaultConfig
    { 
     ...
    , keys = myKeys <+> keys defaultConfig 
    }

答案 1 :(得分:3)

对于键绑定,请使用additionalKeys(来自模块XMonad.Util.EZConfig)。 以下是我使用的一些键绑定(也许你需要更多的导入来使一切正常):

defaultConfig
{
-- stuff
} `additionalKeys`
[ ((0, xK_Print), spawn "scrot")
, ((mod1Mask, xK_Print), spawn "scrot -m -d 1")
, ((mod1Mask .|. shiftMask, xK_t), spawn "killall trayer && trayer --edge top --align right --SetDockType true --SetPartialStrut true  --expand true --transparent true --width 5 --alpha 255 --tint 0x191970 --height 17")
, ((mod1Mask, xK_p), spawn "dmenu_run")
, ((mod1Mask, xK_b   ), sendMessage ToggleStruts)
, ((mod1Mask, xK_m   ), focusUrgent)
, ((mod1Mask, xK_n   ), D.dzen "Hi, mom!" (seconds 4))
, ((mod1Mask, xK_f   ), goToSelected defaultGSConfig)
, ((mod4Mask, xK_l   ), spawn "cmus-remote -n ") --next song
, ((mod4Mask, xK_h   ), spawn "cmus-remote -r") --previous song
, ((mod4Mask, xK_s   ), spawn "cmus-remote -s") --stop
, ((mod4Mask, xK_p   ), spawn "cmus-remote -p") --play
, ((mod4Mask, xK_Right   ), spawn "cmus-remote -k +5") --forward 5 sec
, ((mod4Mask, xK_Left    ), spawn "cmus-remote -k -5") --rewind 5 sec
, ((mod4Mask, xK_KP_Subtract    ), spawn "amixer -q sset PCM 2dB-") --quieter
, ((mod4Mask, xK_KP_Add         ), spawn "amixer -q sset PCM 2dB+") --louder
, ((mod1Mask .|. shiftMask, xK_udiaeresis), removeWorkspace)
, ((mod1Mask .|. shiftMask, xK_numbersign), selectWorkspace defaultXPConfig)
]

D.dzen来自import qualified XMonad.Util.Dzen as D。我不使用dzen作为状态栏,但是查看这个模块可能会给你一些提示。

编辑:这是一个dzen配置:And1's_xmonad.hs。摘自本网站的例子有很多:Config_archive

edit2:我刚刚使用新的statusBar功能玩了一下,这显然很新,并提出了一个有效的例子。

edit3:删除了statusBar不需要的logHook。 main现在看起来像这样:

main = do
    xmonad =<< statusBar "dzen2" myPP toggleStrutsKey
    defaultConfig { --stuff
    }

keys设置对我不起作用,我不得不坚持additionalKeys(不要忘记括号):

main = do
    xmonad =<< statusBar "dzen2" myPP toggleStrutsKey
    (defaultConfig { --stuff
    } `additionalKeys`
    [ -- key bindings
    ])

一旦我整理了我的xmonad.hs,我也可以提供整个文件..