[英]XMonad won't spawn anything with mod4Mask
我在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似乎没有产生/做任何事情。
有任何想法吗? 这个配置对我来说似乎很好,我不知道它为什么不起作用。
我不知道出了什么问题,但我有一些调试建议。
我有过这样的情况,我认为我正在运行我当前的自定义xmonad.hs,但我确实在运行以前的版本或默认版本。 通过对xmonad.hs进行一些其他更改并验证它是否有效来对此进行排除。
尝试将mod4Mask p映射到其他东西,看看是否有效。
使用xev,按mod4Mask + p,并验证它确实生成了您期望的事件。 与mod4Mask + v比较,看看除了从p到v的变化之外是否存在任何差异。
确保你没有NumLock或Fn或类似的东西! (我想,NumLock会将你的p改为数字。)
你用的是哪种键盘? 我们? 英国? 别的什么?
XFCE将Mod4-p绑定到此文件中的某些内容
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
通过在该文件中搜索“Super”,我找到了两行<Super> -p。 一个似乎是“空”而另一个执行“xfce4-display-settings --minimal”来设置外部显示输出。
我将该文件中的两个更改都更改为使用o而不是p然后退出XFCE并重新登录。现在Mod4-p在XMonad中工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.