【问题标题】:How to use Dzen instead of Xmobar in this unusual setup如何在这个不寻常的设置中使用 Dzen 而不是 Xmobar
【发布时间】:2014-01-30 07:47:46
【问题描述】:

我是 Haskell 新手,目前我没有时间真正学习 Haskell,所以我向已经了解它的专家寻求帮助。 :)

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

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

这是一个似乎没有在我发现的任何配置中使用的设置,每次我尝试将其转换为其他格式时,它都无法正常工作。

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

还有,我怎样才能从这种格式转换到更常用的格式。

【问题讨论】:

    标签: haskell xmonad


    【解决方案1】:

    关于“转换”:

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

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

    main = xmonad =<< statusBar myBar myPP statusbarToggleKey myConfig
    

    这里你使用了两个函数:

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

    • xmonad 函数采用 XConfig 并返回 IO()

    =statusBar 返回的 XConfig 从 IO monad 中取出并将其传递给 xmonad

    do 表示法中的等价物是:

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

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

    使用 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 并返回地图的函数。

    这是一个“漂亮”的编写方式示例,使用来自Data.MapfromList 函数:

    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 中定义的键除了你的,你可以使用&lt;+&gt;

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

    【讨论】:

    • 哦,我没有将默认键添加到我的自定义键中,呵呵。对我也很好。
    【解决方案2】:

    至于键绑定,使用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:删除了 logHook,因为 statusBar 不需要它。 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 后,我还可以提供整个文件..

    【讨论】:

    • 很好的答案,谢谢!将来可能会使用它。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2013-04-05
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多