我在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个绑定(bind)。两者都使用mod4Mask,这也是我的默认mod key 。对于gvim,第二个绑定(bind)非常有效。问题在于,对于dmenu,第一个绑定(bind)完全不执行任何操作。奇怪的是,如果将mod4Mask(用于dmenu)更改为mod1Mask,则可以正常工作。另外,如果我从终端运行dmenu,它也可以正常工作。

编辑:mod4Mask和P似乎不产生/做任何事情。

有任何想法吗?这个配置对我来说似乎很好,我不知道为什么它不起作用。

最佳答案

我不知道出什么问题了,但是我有一些调试建议。

  • 我曾经以为我正在运行当前的自定义xmonad.hs,但实际上我正在运行以前的版本或默认版本。通过对xmonad.hs进行其他一些更改并验证其是否有效,可以排除这种情况。
  • 尝试将mod4Mask p映射到其他对象,看看是否可行。
  • 使用xev,按mod4Mask + p,并验证它确实生成了您期望的事件。与mod4Mask + v进行比较,看看从p到v的变化是否有任何区别。
  • 确保您没有NumLock或Fn或类似的事件对象! (我认为NumLock会将您的p更改为数字。)

  • 您使用哪种键盘?我们?英国?还有别的吗

    关于linux - XMonad不会使用mod4Mask产生任何东西,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12764021/

    10-13 07:06