
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On Thu, Aug 02, 2012 at 21:41:55 GMT, Bryan Huh wrote:
Currently, I move my windows to the left and right screens using the following keybinding:
[((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_h, xK_l, xK_r] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
But if I try to move a window from one screen to the next using mod-shift-{h,l}, it annoys me that that window loses focus. I would like it for the window to remain in focus on the new screen (i.e. the new screen should be put in focus). I really like how when you shift a window up and down the stack with shift-mod-{j,k} that the same window remains in focus at all times. Is there an easy way to maintain this behavior across screens?
I have machines with 1, 2, and 3 monitors all using the same config (the plan is to make the 3 monitor one a 4 monitor machine once I get an HDMI cable for it). I have pretty much every binding you could want controlling workspaces and screens done. Swapping screens or workspaces, following with focus or not. It's modifier heavy, but the important stuff is left alone (mainly Ctrl+Arrow, Alt+Arrow, and Ctrl+Alt+Fn, and Alt+key (for rtorrent mainly, but I'm sure it makes conflicts with emacs easier to avoid too)). Here's the relevant section from my xmonad.hs: myKeys conf = M.fromList $ -- ... ------------------------------------------------------------------- -- ctrl+F[1 .. ], Switch to workspace N -- ctrl+shift+F[1 .. ], View to workspace N -- meta+F[1 .. ], Move client to workspace N and follow -- meta+shift+F[1 .. ], Move client to workspace N -- alt+F[1 .. ], Swap with workspace N and follow -- alt+shift+F[1 .. ], Swap with workspace N [ ((m, k), windows $ f i) | (i, k) <- zip (workspaces conf) workspaceKeys , (f, m) <- [ (W.greedyView , controlMask) , (W.view , controlMask .|. shiftMask) , (liftM2 (.) W.greedyView W.shift, mod4Mask) , (W.shift , mod4Mask .|. shiftMask) , (swapWithCurrent , mod1Mask) , (silentSwapWithCurrent , mod1Mask .|. shiftMask) ] ] ++ ------------------------------------------------------------------- -- ctrl+meta+F[1 .. ], Switch to screen N -- ctrl+meta+shift+F[1 .. ], Move client to screen N -- alt+meta+F[1 .. ], Swap with screen N and follow -- alt+meta+shift+F[1 .. ], Swap with screen N [ ((m, k), screenWorkspace i >>= flip whenJust (windows . f)) | (i, k) <- zip [0 .. ] workspaceKeys , (f, m) <- [ (W.view , controlMask .|. mod4Mask) , (W.shift , controlMask .|. mod4Mask .|. shiftMask) , (swapWithCurrent , mod1Mask .|. mod4Mask) , (silentSwapWithCurrent, mod1Mask .|. mod4Mask .|. shiftMask) ] ] ++ ------------------------------------------------------------------- -- ctrl+alt+[left,right], Switch to workspace to the left or right -- meta+[left,right], Move window to left or right and follow -- meta+shift+[left,right], Move window to left or right -- alt+meta+[left,right], Swap with workspace to left or right and follow -- alt+meta+shift+[left,right], Swap with workspace to left or right [ ((m, xK_Left ), c) | (c, m) <- [ (prevWS , controlMask .|. mod1Mask) , (shiftToPrev >> prevWS, mod4Mask) , (shiftToPrev , mod4Mask .|. shiftMask) , (swapTo Prev , mod1Mask .|. mod4Mask) , (swapTo Prev >> nextWS, mod1Mask .|. mod4Mask .|. shiftMask) ] ] ++ [ ((m, xK_Right), c) | (c, m) <- [ (nextWS , controlMask .|. mod1Mask) , (shiftToNext >> nextWS, mod4Mask) , (shiftToNext , mod4Mask .|. shiftMask) , (swapTo Next , mod1Mask .|. mod4Mask) , (swapTo Next >> prevWS, mod1Mask .|. mod4Mask .|. shiftMask) ] ] ++ ------------------------------------------------------------------- -- ctrl+alt+[up,down], Switch to next/previous screen -- meta+[up,down], Move window to next/previous screen and follow -- meta+shift+[up,down], Move window to next/previous screen -- alt+meta+[up,down], Swap with next/previous screen and follow -- alt+meta+shift+[up,down], Swap with next/previous screen [ ((m, xK_Up ), c) | (c, m) <- [ (prevScreen , controlMask .|. mod1Mask) , (shiftPrevScreen >> prevScreen, mod4Mask) , (shiftPrevScreen , mod4Mask .|. shiftMask) , (swapPrevScreen >> nextScreen , mod1Mask .|. mod4Mask) , (swapPrevScreen , mod1Mask .|. mod4Mask .|. shiftMask) ] ] ++ [ ((m, xK_Down ), c) | (c, m) <- [ (nextScreen , controlMask .|. mod1Mask) , (shiftNextScreen >> nextScreen, mod4Mask) , (shiftNextScreen , mod4Mask .|. shiftMask) , (swapNextScreen >> prevScreen , mod1Mask .|. mod4Mask) , (swapNextScreen , mod1Mask .|. mod4Mask .|. shiftMask) ] ] where workspaceKeys = [xK_F1 .. xK_F12] silentSwapWithCurrent i w = W.view (W.currentTag w) $ swapWithCurrent i w - --Ben -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBCgAGBQJQGyW7AAoJEKaxavVX4C1XPJIQAMg2x5PZ2pjtN2H4tqWLRWTH czBWO3c50NgBao6Z6Gx2vI1ehTQMN8KPteQIA4lbveWg529gJWr4qaZW/vlCDtr4 6CPGsJX6pguYs8dhJgQyVrlb38Ii+1tZ/LolN9oVP1uCwmyWZD9s8QDojFJU0XX0 z4ZQS7pLJh4rWmlSt0xgN3L3+L6hrrQTbT1G8rb3UNYgKVnMTrwg20GsY2bfhLj4 h4sF0mweFXIq03n0jEwgxjXMAqQTG1KzaUVPgC2iF9q0sSZVCsnBNTwS8Gy7nhVW 6dzL5uPu/8P42rwDzzPUgEsGR8Lv11ra7RxEKlpGtJYtJuoeuODha3G++M2+vTMR 20MivbiVlPpizz0cYfQpgJ4cJowSbfAzCV2kC2dIciud5yg93JBGykRhVg4KzsyH zR83G0G8XGxXUIOZaUcnn+AnxPdGIfK37PHUWyvP8dBW+BS+U8tNt3qqEowz7ZP9 z4HC/35XlX/DITpFJUHXi4vRg7O2DoiJA04uv6jh8/q9uBvlPN7JXdCAtN+USpIw ygoriwpcrxpjWvy5OAbWVOFtM6xw3K/gK1Cf7nfCGWPZhRko1KmHm2YlgAU6BHyM iFQYDgqt3qG/pOKJwZ4Rfmc8QCe7/q93lCuiUywtkGpw0XIiZUXL7S0qVAEsGD8J Ce0H0tinAxjG5l6Nfzyk =dl5T -----END PGP SIGNATURE-----