我在 Arch 论坛上看到了一些类似的问题,但我一直无法找到解决方案。
所以我在 Fedora 17 x64 上的 XFCE4 中运行 XMonad 0.1,并且我也安装了 xmonad-contrib。这是我的 xmonad.hs 文件:
import System.Posix.Env (getEnv)
import Data.Maybe (maybe)
import Control.Monad
import XMonad.Hooks.SetWMName
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig
import XMonad
import XMonad.Config.Desktop
import XMonad.Config.Gnome
import XMonad.Config.Kde
import XMonad.Config.Xfce
main = do
session <- getEnv "DESKTOP_SESSION"
xmonad $ xfceConfig --(maybe desktopConfig desktop session)
{
modMask = mod4Mask
, terminal = "gnome-terminal"
, logHook = takeTopFocus >> setWMName "LG3D"
}
`additionalKeys` [ ((mod4Mask, xK_p), spawn "dmenu_run")
,((mod4Mask, xK_v), spawn "gvim")
]
-----------------------------------------
------------Custom Keys------------------
-----------------------------------------
-----------------------------------------
------------Other horrible stuff---------
-----------------------------------------
desktop "gnome" = gnomeConfig
desktop "kde" = kde4Config
desktop "xfce" = xfceConfig
desktop "xmonad-gnome" = gnomeConfig
desktop _ = desktopConfig
atom_WM_TAKE_FOCUS ::
X Atom
atom_WM_TAKE_FOCUS =
getAtom "WM_TAKE_FOCUS"
takeFocusX ::
Window
-> X ()
takeFocusX w =
withWindowSet . const $ do
dpy <- asks display
wmtakef <- atom_WM_TAKE_FOCUS
wmprot <- atom_WM_PROTOCOLS
protocols <- io $ getWMProtocols dpy w
when (wmtakef `elem` protocols) $
io . allocaXEvent $ \ev -> do
setEventType ev clientMessage
setClientMessageEvent ev w wmprot 32 wmtakef currentTime
sendEvent dpy w False noEventMask ev
takeTopFocus ::
X ()
takeTopFocus =
withWindowSet $ maybe (setFocusX =<< asks theRoot) takeFocusX . W.peek
您会在该additionalKeys
部分中注意到,我有 2 个绑定。两者都在使用mod4Mask
,这也是我的默认 mod 键。对于 gvim,第二个绑定可以完美运行。问题是第一个绑定,对于 dmenu,根本什么都不做。奇怪的是,如果我将mod4Mask
(对于 dmenu)更改为,mod1Mask
那么它可以工作。此外,如果我从终端运行 dmenu ,它也可以正常工作。
编辑: mod4Mask 和 P 似乎没有产生/做任何事情。
有任何想法吗?这个配置对我来说似乎很好,我不知道为什么它不起作用。