aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/xmonadpropread.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/xmonadpropread.hs')
-rw-r--r--scripts/xmonadpropread.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/scripts/xmonadpropread.hs b/scripts/xmonadpropread.hs
new file mode 100644
index 0000000..88049f2
--- /dev/null
+++ b/scripts/xmonadpropread.hs
@@ -0,0 +1,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