[xmonad] xmonad switching screens + xsetwacom

Gwern Branwen gwern0 at gmail.com
Sun Oct 26 15:56:33 EDT 2008

On Sun, Oct 26, 2008 at 3:05 PM, IL'dar AKHmetgaleev <akhilman at gmail.com> wrote:
> Greetings
> How I can execute
> Code:
> xsetwacom set stylus Screen_No $No
> when I'm switching screen with hotkeys:
> Code:
>    --
>    -- 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_q, xK_w, xK_e] [0..]
>        , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
> For example I need to spawn "xsetwacom set stylus Screen_No 0" when I'm
> switching to screen 1 by mod-q
> How I can do this?

A rough stab at a solution:

          , ((modMask, xK_q), spawn "xsetwacom set stylus Screen_No 0"
>>  (screenWorkspace sc >>= flip whenJust (windows ○ f)) 1)))

This untested fragment obviously isn't exactly what you want, but it
shows a few pieces of the puzzle: the use of 'spawn' to run your shell
command, the use of >> inside a X () action to do multiple things on
the same key press, and it hints at how to deconstruct the list
comprehension and do the workspace-switching manually*. However, I
leave it to another to tell you how to run spawn only if switching to
workspace 1 instead of running it on every workspace switch.

* I incidentally have long thought that that list comprehension was
cleverness for the sake of being clever, and makes it difficult for
people to modify or even understand it.


More information about the xmonad mailing list