From 499a2141a07ac044fb81281965ad1f8a9d7cb7fd Mon Sep 17 00:00:00 2001 From: 4Lost Date: Sat, 16 Mar 2024 16:44:10 +0100 Subject: [PATCH] xmobar -> test own Modules 6 --- home/programs/xmonad/src/xmobar/Signal.hs | 72 +++++++++++++++++++ .../xmonad/src/xmobar/xmobar-custom.cabal | 1 + 2 files changed, 73 insertions(+) create mode 100644 home/programs/xmonad/src/xmobar/Signal.hs diff --git a/home/programs/xmonad/src/xmobar/Signal.hs b/home/programs/xmonad/src/xmobar/Signal.hs new file mode 100644 index 0000000..34d8cd7 --- /dev/null +++ b/home/programs/xmonad/src/xmobar/Signal.hs @@ -0,0 +1,72 @@ +{-# LANGUAGE DeriveDataTypeable, CPP #-} + +----------------------------------------------------------------------------- +-- | +-- Module : Signal +-- Copyright : (c) Andrea Rosatto +-- : (c) Jose A. Ortega Ruiz +-- : (c) Jochen Keil +-- License : BSD-style (see LICENSE) +-- +-- Maintainer : Jose A. Ortega Ruiz +-- Stability : unstable +-- Portability : unportable +-- +-- Signal handling, including DBUS when available +-- +----------------------------------------------------------------------------- + +module Signal where + +import Data.Typeable (Typeable) +import Control.Concurrent.STM +import Control.Exception hiding (handle) +import System.Posix.Signals +import Graphics.X11.Xlib.Types (Position) + +#ifdef DBUS +import DBus (IsVariant(..)) +import Control.Monad ((>=>)) +#endif + +import Plugins.Utils (safeHead) + +data WakeUp = WakeUp deriving (Show,Typeable) +instance Exception WakeUp + +data SignalType = Wakeup + | Reposition + | ChangeScreen + | Hide Int + | Reveal Int + | Toggle Int + | TogglePersistent + | Action Position + deriving (Read, Show) + +#ifdef DBUS +instance IsVariant SignalType where + toVariant = toVariant . show + fromVariant = fromVariant >=> parseSignalType +#endif + +parseSignalType :: String -> Maybe SignalType +parseSignalType = fmap fst . safeHead . reads + +-- | Signal handling +setupSignalHandler :: IO (TMVar SignalType) +setupSignalHandler = do + tid <- newEmptyTMVarIO + installHandler sigUSR2 (Catch $ updatePosHandler tid) Nothing + installHandler sigUSR1 (Catch $ changeScreenHandler tid) Nothing + return tid + +updatePosHandler :: TMVar SignalType -> IO () +updatePosHandler sig = do + atomically $ putTMVar sig Reposition + return () + +changeScreenHandler :: TMVar SignalType -> IO () +changeScreenHandler sig = do + atomically $ putTMVar sig ChangeScreen + return () diff --git a/home/programs/xmonad/src/xmobar/xmobar-custom.cabal b/home/programs/xmonad/src/xmobar/xmobar-custom.cabal index 3d0faee..dd2d6ef 100644 --- a/home/programs/xmonad/src/xmobar/xmobar-custom.cabal +++ b/home/programs/xmonad/src/xmobar/xmobar-custom.cabal @@ -44,6 +44,7 @@ executable xmobar other-modules: Commands, ColorCache, + Signal, XUtil, Plugins, Plugins.Audio