我在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
,这也是我的默认模式键。 gvim的第二个绑定工作得很好。问题是dmenu的第一个绑定什么都不做。奇怪的是,如果我将mod4Mask
(对于dmenu)更改为mod1Mask
,那么它就可以了。此外,如果我从终端运行它,dmenu工作正常。
编辑:mod4Mask和P似乎没有产生/做任何事情。
有什么想法吗?这个配置对我来说似乎很好,我不知道为什么它不起作用。
答案 0 :(得分:2)
我不知道出了什么问题,但我有一些调试建议。
我遇到过我认为我正在运行当前自定义xmonad.hs的情况,但我确实在运行以前的版本或默认版本。通过对xmonad.hs进行一些其他更改并验证它是否有效来对此进行排除。
尝试将mod4Mask p映射到其他内容,看看是否有效。
使用xev,按mod4Mask + p,并确认它确实生成了您期望的事件。与mod4Mask + v比较,看看除了从p到v的变化之外是否存在任何差异。
确保您没有NumLock或Fn或类似的活动! (我想,NumLock会将你的p改为一个数字。)
您使用的是哪种键盘?我们?英国?还有别的吗?
答案 1 :(得分:1)
XFCE将Mod4-p绑定到此文件中的某些内容
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
通过在该文件中搜索“超级”,我发现两行&lt;超级GT&;-p。一个似乎是“空”,另一个执行“xfce4-display-settings --minimal”来设置外部显示输出。
我将该文件中的两个匹配项更改为使用o而不是p,然后退出XFCE并重新登录。现在Mod4-p在XMonad中工作!