Reputation: 9
I have been a long time user of XMonad until I switched to an ergonomic keyboard layout, namely the Bépo (http://bepo.fr/wiki/Accueil).
Until thenI was using the XMonad.Config.Azerty module for my keyboard. But since the layout change the keyboard shorcuts were broken.
More exactly the workpaces switching ones (home+1=workspace1, home+2=workspace2, etc...).
I then switched back to the default config but it was not better.
I obviously does not need the defaultAzerty function anymore.
Does someone know what should I be doing to remap the home +1..9 combinaison so that they work.
EDIT : updated config
Here is my config :
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Arrows #-}
import XMonad
import Graphics.X11.ExtraTypes.XF86
import qualified Data.Map as M
import qualified XMonad.StackSet as W
import XMonad.Hooks.DynamicLog
--
import XMonad.Layout.NoBorders
--
import Data.Ratio
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Spacing
import XMonad.Layout.Grid
import XMonad.Layout.IM
main :: IO ()
main = xmonad =<< xmobar myConf
-- |Main configuration, override the defaults to your liking.
myConf = defaultConfig
{ modMask = mod4Mask
, terminal = "urxvt"
, layoutHook = smartBorders $ myLayout
, workspaces = myWorkspaces
, keys = myKeys }
-- | Keyboard keys
homeMask :: KeyMask
homeMask = 133 -- from the xev data
keysToAdd x =
[ ((mod4Mask, xK_F4 ), kill)
, ((0, xF86XK_Calculator ), spawn "mate-calculator")
, ((0, xF86XK_WWW ), spawn "firefox")
, ((0, xF86XK_HomePage ), spawn "caja")
, ((0, xK_Print ), spawn "mate-screenshot")
, ((mod4Mask, xK_z ), spawn "emacs") ]
++
[((m .|. homeMask, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces defaultConfig) [10 .. 19]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] ]
keysToDel x = [((mod4Mask .|. shiftMask), xK_c)] -- to delete the unused keys
myKeys x = foldr M.delete (keysToAdd' x) (keysToDel x)
where
-- to include new keys to existing keys
keysToAdd' x = M.union (keys defaultConfig x) (M.fromList (keysToAdd x))
-- |Workspaces listing
myWorkspaces = ["1:main", "2:edit", "3:web", "4:browse", "5:irc", "6:pidgin"]
-- |Default layout
myLayout = pidgin $ Mirror tiled ||| tiled ||| Full
where
-- pidgin conf
pidgin = onWorkspace "6:pidgin" pidginLayout
pidginLayout = withIM (18/100) (Role "buddy_list") gridLayout
gridLayout = spacing 8 $ Grid
-- default tiling algorithm partitions the screen into two panes
tiled = spacing 2 $ Tall nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
ratio = 2/3
-- Percent of screen to increment by when resizing panes
delta = 5/100
Also I saw that post but I don't know if it is what I want : Switching workspaces in xmonad using programmer dvorak keyboard layout (shifted numbers)
I have no problem with the haskell language but the XMonad API is that big.
EDIT2 : following what is written here http://blacketernal.wordpress.com/set-up-key-mappings-with-xmodmap/, my home key is already a modifier
Here is the dump of the last lines :
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1
Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Upvotes: 0
Views: 1913
Reputation: 8136
The basic approach I use is to launch xev, type the key combination that you want to do something, and notice what keysyms show up. If I understand correctly, you want to type Home+1 to take you to workspace 1. When I tried that, I get the following, but your results are probably different.
KeyRelease event, serial 33, synthetic NO, window 0x2600001,
root 0x1dc, subw 0x0, time 255407786, (1090,771), root:(1093,774),
state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES,
XLookupString gives 1 bytes: (31) "1"
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x2600001,
root 0x1dc, subw 0x0, time 255407938, (1090,771), root:(1093,774),
state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Next you add the appropriate hook to your xmonad. Looking at that post you referenced, maybe something like this would work?
homeMask :: KeyMask
homeMask = 110 -- from the xev data
[((m .|. homeMask, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
EDIT: Before you go too far debugging this, perhaps a simpler test is in order to make sure we have the Home key trapped properly. Add the following to your config:
homeMask :: KeyMask
homeMask = 110 -- from the xev data
And put this in the keysToAdd
in your config:
, ((homeMask, xK_z ), spawn "emacs")
Now restart XMonad and see if Home+z launches emacs.
Upvotes: 1