blob: 88049f290ec07091b8bc5964189b3e7c15374029 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
-- Copyright Spencer Janssen <spencerjanssen@gmail.com>
-- BSD3 (see LICENSE)
--
-- Experimental, will add proper documentation later (famous last words)
import Control.Monad
import Graphics.X11
import Graphics.X11.Xlib.Extras
import Codec.Binary.UTF8.String as UTF8
import Foreign.C (CChar)
main = do
d <- openDisplay ""
xlog <- internAtom d "_XMONAD_LOG" False
root <- rootWindow d (defaultScreen d)
selectInput d root propertyChangeMask
allocaXEvent $ \ep -> forever $ do
nextEvent d ep
e <- getEvent ep
case e of
PropertyEvent { ev_atom = a } | a == xlog -> do
mwp <- getWindowProperty8 d xlog root
maybe (return ()) (putStrLn . decodeCChar) mwp
_ -> return ()
return ()
decodeCChar :: [CChar] -> String
decodeCChar = UTF8.decode . map fromIntegral
|