How to bind w,e,s,d keys for 4 screens?

I have 4 monitors in a 2x2 configuration. I would like to replace the w-e-r key bindings with w-e-s-d key bindings to match my 2x2 configuration, but it does not work. Specifically, the w & e keys work, but the s & d keys do not work. My code to set these key bindings is a modification of the standard xmonad.hs template from xmonad 0.8. (My modifications are at the end.) I would like the following mapping: s -> screen 1 d -> screen 2 w -> screen 3 e -> screen 4 Here is the section from my xmonad.hs file. My attempt at binding the keys is at the end. myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ -- launch a terminal [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) -- launch dmenu , ((modMask, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"") -- launch gmrun , ((modMask .|. shiftMask, xK_p ), spawn "gmrun") -- close focused window , ((modMask .|. shiftMask, xK_c ), kill) -- Rotate through the available layout algorithms , ((modMask, xK_space ), sendMessage NextLayout) -- -- Reset the layouts on the current workspace to default -- , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) , ((modMask .|. shiftMask, xK_space) , layoutScreens 4 Grid) , ((modMask .|. controlMask .|. shiftMask, xK_space), rescreen) -- Resize viewed windows to the correct size , ((modMask, xK_n ), refresh) -- Move focus to the next window , ((modMask, xK_Tab ), windows W.focusDown) -- Move focus to the next window , ((modMask, xK_j ), windows W.focusDown) -- Move focus to the previous window , ((modMask, xK_k ), windows W.focusUp ) -- Move focus to the master window , ((modMask, xK_m ), windows W.focusMaster ) -- Swap the focused window and the master window , ((modMask, xK_Return), windows W.swapMaster) -- Swap the focused window with the next window , ((modMask .|. shiftMask, xK_j ), windows W.swapDown ) -- Swap the focused window with the previous window , ((modMask .|. shiftMask, xK_k ), windows W.swapUp ) -- Shrink the master area , ((modMask, xK_h ), sendMessage Shrink) -- Expand the master area , ((modMask, xK_l ), sendMessage Expand) -- Push window back into tiling , ((modMask, xK_t ), withFocused $ windows . W.sink) -- Increment the number of windows in the master area , ((modMask , xK_comma ), sendMessage (IncMasterN 1)) -- Deincrement the number of windows in the master area , ((modMask , xK_period), sendMessage (IncMasterN (-1))) -- toggle the status bar gap -- TODO, update this binding with avoidStruts , ((modMask , xK_b ), -- Quit xmonad , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) -- Restart xmonad , ((modMask , xK_q ), restart "xmonad" True) ] ++ -- -- mod-[1..9], Switch to workspace N -- mod-shift-[1..9], Move client to workspace N -- [((m .|. modMask, k), windows $ f i) | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] ++ -- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 -- [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_s, xK_d, xK_w, xK_e] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] Note: I actually have two Xinerama screens stacked vertically, but I use XMonad.Layout.LayoutScreens (combined with Grid) to create 4 screens in a 2x2 configuration. I don't think the LayoutScreens is causing the problem b/c if I revert to using the w,e,r bindings, I am able to to access 3 of the 4 screens as expected.

Quoting Alistair Gee
[((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_s, xK_d, xK_w, xK_e] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
This code looks fine to me (though I'm a bit rusty, as I learned last night when I tried to actually write some code). Are you sure xmonad is definitely loading your new config? Does xmonad --recompile (on the command line) report any errors? Does xmonad --restart work after that? Cheers, ~d

This code looks fine to me (though I'm a bit rusty, as I learned last night when I tried to actually write some code). Are you sure xmonad is definitely loading your new config? Does xmonad --recompile (on the command line) report any errors? Does xmonad --restart work after that?
Cheers, ~d
Ah, that was it. I had accidentally rebound xK_q, so I didn't notice when Mod-Q didn't actually restart xmonad. thanks
participants (2)
-
Alistair Gee
-
wagnerdm@seas.upenn.edu