gen*_*ass 5 linux haskell xmonad fedora xfce
我在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
Run Code Online (Sandbox Code Playgroud)
你会注意到additionalKeys,我有2个绑定.两者都在使用mod4Mask,这也是我的默认模式键.gvim的第二个绑定工作完美.问题是dmenu的第一个绑定什么都不做.奇怪的是,如果我改变mod4Mask(对于dmenu)mod1Mask那么它是有效的.此外,如果我从终端运行它,dmenu工作正常.
编辑:mod4Mask和P似乎没有产生/做任何事情.
有任何想法吗?这个配置对我来说似乎很好,我不知道它为什么不起作用.
我不知道出了什么问题,但我有一些调试建议。
我曾经遇到过这样的情况:我以为我正在运行当前的自定义 xmonad.hs,但实际上我正在运行以前的版本或默认版本。通过对 xmonad.hs 进行一些其他更改并验证其是否有效来排除此问题。
尝试将 mod4Mask p 映射到其他内容,看看是否有效。
使用 xev,按 mod4Mask + p,并验证它确实生成您期望的事件。与 mod4Mask + v 进行比较,看看除了 p 到 v 的变化之外,还有什么不同吗?
确保您没有启用 NumLock 或 Fn 或类似的功能!(我认为 NumLock 会将你的 p 更改为数字。)
您使用什么类型的键盘?我们?英国?还有别的事吗?