我是一名Haskell新手,我目前没有时间真正学习Haskell,所以我向那些已经弄明白的专家寻求帮助。 :)
这是我当前的xmonad.hs文件:https://github.com/Greduan/dotfiles/blob/dd45d287fade73a3191ad313ec37231a8c802942/xmonad/xmonad.hs
如何添加/配置键绑定(请参阅myKeys
变量)以及如何从Xmobar更改为基本(尚未配置)Dzen设置。
这是一个似乎没有在我找到的任何配置中使用的设置,每次eI尝试将其转换为其他格式时,它都不能很好地工作。
另一种格式是main = do etc. etc. etc.
BTW。
而且,我怎样才能将转换从这种格式转换为更常用的格式。
答案 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,我也可以提供整个文件..