summaryrefslogtreecommitdiffhomepage
path: root/scripts/xmonadpropwrite.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/xmonadpropwrite.hs')
-rw-r--r--scripts/xmonadpropwrite.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/xmonadpropwrite.hs b/scripts/xmonadpropwrite.hs
new file mode 100644
index 0000000..476a5db
--- /dev/null
+++ b/scripts/xmonadpropwrite.hs
@@ -0,0 +1,41 @@
+-- Copyright Spencer Janssen <spencerjanssen@gmail.com>
+-- Tomas Janousek <tomi@nomi.cz>
+-- BSD3 (see LICENSE)
+--
+-- Reads from standard input and writes to an X propery on root window.
+-- To be used with XPropertyLog:
+-- Add it to commands:
+-- Run XPropertyLog "_XMONAD_LOG_CUSTOM"
+-- Add it to the template:
+-- template = "... %_XMONAD_LOG_CUSTOM% ..."
+-- Run:
+-- $ blah blah | xmonadpropwrite _XMONAD_LOG_CUSTOM
+
+import Control.Monad
+import Graphics.X11
+import Graphics.X11.Xlib.Extras
+import Codec.Binary.UTF8.String as UTF8
+import Foreign.C (CChar)
+import System.IO
+import System.Environment
+
+main = do
+ atom <- flip fmap getArgs $ \args -> case args of
+ [a] -> a
+ _ -> "_XMONAD_LOG"
+
+ d <- openDisplay ""
+ xlog <- internAtom d atom False
+ ustring <- internAtom d "UTF8_STRING" False
+
+ root <- rootWindow d (defaultScreen d)
+
+ forever $ do
+ msg <- getLine
+ changeProperty8 d root xlog ustring propModeReplace (encodeCChar msg)
+ sync d True
+
+ return ()
+
+encodeCChar :: String -> [CChar]
+encodeCChar = map fromIntegral . UTF8.encode