From f28825e471e206bcb7e6dc8e4874c2b771f7d24c Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 7 Feb 2023 02:30:41 +0100 Subject: move Graphics.* & co. to lib --- lib/Data/Text/Encoding/Extra.hs | 11 ++++++++++ lib/Foreign/C/String/Extra.hs | 10 +++++++++ lib/Graphics/X11/Extra.hs | 5 +++++ lib/Graphics/X11/Xlib/Atom/Extra.hs | 39 ++++++++++++++++++++++++++++++++++ lib/Graphics/X11/Xlib/Display/Extra.hs | 20 +++++++++++++++++ lib/Graphics/X11/Xlib/Extra.hs | 7 ++++++ lib/Graphics/X11/Xlib/Extras/Extra.hs | 14 ++++++++++++ pager.cabal | 25 ++++++++++++++++------ src/Data/Text/Encoding/Extra.hs | 11 ---------- src/Foreign/C/String/Extra.hs | 10 --------- src/Graphics/X11/Extra.hs | 5 ----- src/Graphics/X11/Xlib/Atom/Extra.hs | 39 ---------------------------------- src/Graphics/X11/Xlib/Display/Extra.hs | 20 ----------------- src/Graphics/X11/Xlib/Extra.hs | 7 ------ src/Graphics/X11/Xlib/Extras/Extra.hs | 14 ------------ 15 files changed, 124 insertions(+), 113 deletions(-) create mode 100644 lib/Data/Text/Encoding/Extra.hs create mode 100644 lib/Foreign/C/String/Extra.hs create mode 100644 lib/Graphics/X11/Extra.hs create mode 100644 lib/Graphics/X11/Xlib/Atom/Extra.hs create mode 100644 lib/Graphics/X11/Xlib/Display/Extra.hs create mode 100644 lib/Graphics/X11/Xlib/Extra.hs create mode 100644 lib/Graphics/X11/Xlib/Extras/Extra.hs delete mode 100644 src/Data/Text/Encoding/Extra.hs delete mode 100644 src/Foreign/C/String/Extra.hs delete mode 100644 src/Graphics/X11/Extra.hs delete mode 100644 src/Graphics/X11/Xlib/Atom/Extra.hs delete mode 100644 src/Graphics/X11/Xlib/Display/Extra.hs delete mode 100644 src/Graphics/X11/Xlib/Extra.hs delete mode 100644 src/Graphics/X11/Xlib/Extras/Extra.hs diff --git a/lib/Data/Text/Encoding/Extra.hs b/lib/Data/Text/Encoding/Extra.hs new file mode 100644 index 0000000..a8e6234 --- /dev/null +++ b/lib/Data/Text/Encoding/Extra.hs @@ -0,0 +1,11 @@ +module Data.Text.Encoding.Extra where + +import Data.ByteString (ByteString) +import Data.Text (Text) +import qualified Data.Text.Encoding as Text +import qualified Data.Text.Encoding.Error as Text + + +decodeUtf8Lenient :: ByteString -> Text +decodeUtf8Lenient = + Text.decodeUtf8With Text.lenientDecode diff --git a/lib/Foreign/C/String/Extra.hs b/lib/Foreign/C/String/Extra.hs new file mode 100644 index 0000000..a7b6dfe --- /dev/null +++ b/lib/Foreign/C/String/Extra.hs @@ -0,0 +1,10 @@ +module Foreign.C.String.Extra where + +import Data.Word (Word8) +import Foreign.C.String (castCCharToChar) +import Foreign.C.Types (CChar) +import qualified Data.Char as Char + + +castCCharToWord8 :: CChar -> Word8 +castCCharToWord8 = fromIntegral . Char.ord . castCCharToChar diff --git a/lib/Graphics/X11/Extra.hs b/lib/Graphics/X11/Extra.hs new file mode 100644 index 0000000..ce4cb46 --- /dev/null +++ b/lib/Graphics/X11/Extra.hs @@ -0,0 +1,5 @@ +module Graphics.X11.Extra + ( module Graphics.X11.Xlib.Extra + ) where + +import Graphics.X11.Xlib.Extra diff --git a/lib/Graphics/X11/Xlib/Atom/Extra.hs b/lib/Graphics/X11/Xlib/Atom/Extra.hs new file mode 100644 index 0000000..8442c48 --- /dev/null +++ b/lib/Graphics/X11/Xlib/Atom/Extra.hs @@ -0,0 +1,39 @@ +module Graphics.X11.Xlib.Atom.Extra where + +import Graphics.X11.Types (Atom) +import Graphics.X11.Xlib.Atom (internAtom) +import Graphics.X11.Xlib.Display.Extra (withDefaultDisplay) +import System.IO.Unsafe (unsafePerformIO) + + +unsafeInternAtom :: String -> Bool -> Atom +unsafeInternAtom atomName onlyIfExists = + unsafePerformIO $ withDefaultDisplay $ \display -> + internAtom display atomName onlyIfExists + +_NET_ACTIVE_WINDOW :: Atom +_NET_ACTIVE_WINDOW = unsafeInternAtom "_NET_ACTIVE_WINDOW" True + +_NET_CLIENT_LIST :: Atom +_NET_CLIENT_LIST = unsafeInternAtom "_NET_CLIENT_LIST" True + +_NET_CURRENT_DESKTOP :: Atom +_NET_CURRENT_DESKTOP = unsafeInternAtom "_NET_CURRENT_DESKTOP" True + +_NET_DESKTOP_NAMES :: Atom +_NET_DESKTOP_NAMES = unsafeInternAtom "_NET_DESKTOP_NAMES" True + +_NET_WM_DESKTOP :: Atom +_NET_WM_DESKTOP = unsafeInternAtom "_NET_WM_DESKTOP" True + +_NET_WM_NAME :: Atom +_NET_WM_NAME = unsafeInternAtom "_NET_WM_NAME" True + +_WIN_WORKSPACE :: Atom +_WIN_WORKSPACE = unsafeInternAtom "_WIN_WORKSPACE" True + +_WIN_WORKSPACE_NAMES :: Atom +_WIN_WORKSPACE_NAMES = unsafeInternAtom "_WIN_WORKSPACE_NAMES" True + +_WM_NAME :: Atom +_WM_NAME = unsafeInternAtom "WM_NAME" True diff --git a/lib/Graphics/X11/Xlib/Display/Extra.hs b/lib/Graphics/X11/Xlib/Display/Extra.hs new file mode 100644 index 0000000..16b1a74 --- /dev/null +++ b/lib/Graphics/X11/Xlib/Display/Extra.hs @@ -0,0 +1,20 @@ +module Graphics.X11.Xlib.Display.Extra where + +import Control.Exception (bracket) +import System.Environment (getEnv) +import System.IO.Unsafe (unsafePerformIO) +import Graphics.X11.Xlib.Types (Display) +import Graphics.X11.Xlib.Display (closeDisplay, openDisplay) + + +defaultDisplayName :: String +defaultDisplayName = + unsafePerformIO (getEnv "DISPLAY") + +withDisplay :: String -> (Display -> IO a) -> IO a +withDisplay display = + bracket (openDisplay display) closeDisplay + +withDefaultDisplay :: (Display -> IO a) -> IO a +withDefaultDisplay = + withDisplay defaultDisplayName diff --git a/lib/Graphics/X11/Xlib/Extra.hs b/lib/Graphics/X11/Xlib/Extra.hs new file mode 100644 index 0000000..c2093ab --- /dev/null +++ b/lib/Graphics/X11/Xlib/Extra.hs @@ -0,0 +1,7 @@ +module Graphics.X11.Xlib.Extra + ( module Graphics.X11.Xlib.Atom.Extra + , module Graphics.X11.Xlib.Display.Extra + ) where + +import Graphics.X11.Xlib.Atom.Extra +import Graphics.X11.Xlib.Display.Extra diff --git a/lib/Graphics/X11/Xlib/Extras/Extra.hs b/lib/Graphics/X11/Xlib/Extras/Extra.hs new file mode 100644 index 0000000..d88bf9d --- /dev/null +++ b/lib/Graphics/X11/Xlib/Extras/Extra.hs @@ -0,0 +1,14 @@ +module Graphics.X11.Xlib.Extras.Extra where + +import Data.Text (Text) +import Foreign.C.String.Extra (castCCharToWord8) +import qualified Data.ByteString as ByteString +import qualified Data.Text.Encoding.Extra as Text +import qualified Graphics.X11 as X11 +import qualified Graphics.X11.Xlib.Extras as X11 + + +getWindowPropertyText :: X11.Display -> X11.Atom -> X11.Window -> IO (Maybe Text) +getWindowPropertyText d a w = + fmap (Text.decodeUtf8Lenient . ByteString.pack . map castCCharToWord8) <$> + X11.getWindowProperty8 d a w diff --git a/pager.cabal b/pager.cabal index 418727e..17bb744 100644 --- a/pager.cabal +++ b/pager.cabal @@ -29,6 +29,7 @@ executable pager , data-default , hack , optparse-applicative + , pager , probability , scanner , speculate @@ -38,17 +39,27 @@ executable pager , unix other-modules: Data.List.Extra , Data.Monoid.Extra - , Data.Text.Encoding.Extra , Data.Text.Extra - , Foreign.C.String.Extra - , Graphics.X11.Extra - , Graphics.X11.Xlib.Extra - , Graphics.X11.Xlib.Atom.Extra - , Graphics.X11.Xlib.Display.Extra - , Graphics.X11.Xlib.Extras.Extra , Hack.Buffer.Extra , Much.Screen , Pager.Sixelerator , Pager.Types , Sixel , State + +library + build-depends: base + , X11 + , bytestring + , text + default-language: Haskell2010 + exposed-modules: + Data.Text.Encoding.Extra + , Foreign.C.String.Extra + , Graphics.X11.Extra + , Graphics.X11.Xlib.Atom.Extra + , Graphics.X11.Xlib.Display.Extra + , Graphics.X11.Xlib.Extra + , Graphics.X11.Xlib.Extras.Extra + ghc-options: -Wall + hs-source-dirs: lib diff --git a/src/Data/Text/Encoding/Extra.hs b/src/Data/Text/Encoding/Extra.hs deleted file mode 100644 index a8e6234..0000000 --- a/src/Data/Text/Encoding/Extra.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Data.Text.Encoding.Extra where - -import Data.ByteString (ByteString) -import Data.Text (Text) -import qualified Data.Text.Encoding as Text -import qualified Data.Text.Encoding.Error as Text - - -decodeUtf8Lenient :: ByteString -> Text -decodeUtf8Lenient = - Text.decodeUtf8With Text.lenientDecode diff --git a/src/Foreign/C/String/Extra.hs b/src/Foreign/C/String/Extra.hs deleted file mode 100644 index a7b6dfe..0000000 --- a/src/Foreign/C/String/Extra.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Foreign.C.String.Extra where - -import Data.Word (Word8) -import Foreign.C.String (castCCharToChar) -import Foreign.C.Types (CChar) -import qualified Data.Char as Char - - -castCCharToWord8 :: CChar -> Word8 -castCCharToWord8 = fromIntegral . Char.ord . castCCharToChar diff --git a/src/Graphics/X11/Extra.hs b/src/Graphics/X11/Extra.hs deleted file mode 100644 index ce4cb46..0000000 --- a/src/Graphics/X11/Extra.hs +++ /dev/null @@ -1,5 +0,0 @@ -module Graphics.X11.Extra - ( module Graphics.X11.Xlib.Extra - ) where - -import Graphics.X11.Xlib.Extra diff --git a/src/Graphics/X11/Xlib/Atom/Extra.hs b/src/Graphics/X11/Xlib/Atom/Extra.hs deleted file mode 100644 index 8442c48..0000000 --- a/src/Graphics/X11/Xlib/Atom/Extra.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Graphics.X11.Xlib.Atom.Extra where - -import Graphics.X11.Types (Atom) -import Graphics.X11.Xlib.Atom (internAtom) -import Graphics.X11.Xlib.Display.Extra (withDefaultDisplay) -import System.IO.Unsafe (unsafePerformIO) - - -unsafeInternAtom :: String -> Bool -> Atom -unsafeInternAtom atomName onlyIfExists = - unsafePerformIO $ withDefaultDisplay $ \display -> - internAtom display atomName onlyIfExists - -_NET_ACTIVE_WINDOW :: Atom -_NET_ACTIVE_WINDOW = unsafeInternAtom "_NET_ACTIVE_WINDOW" True - -_NET_CLIENT_LIST :: Atom -_NET_CLIENT_LIST = unsafeInternAtom "_NET_CLIENT_LIST" True - -_NET_CURRENT_DESKTOP :: Atom -_NET_CURRENT_DESKTOP = unsafeInternAtom "_NET_CURRENT_DESKTOP" True - -_NET_DESKTOP_NAMES :: Atom -_NET_DESKTOP_NAMES = unsafeInternAtom "_NET_DESKTOP_NAMES" True - -_NET_WM_DESKTOP :: Atom -_NET_WM_DESKTOP = unsafeInternAtom "_NET_WM_DESKTOP" True - -_NET_WM_NAME :: Atom -_NET_WM_NAME = unsafeInternAtom "_NET_WM_NAME" True - -_WIN_WORKSPACE :: Atom -_WIN_WORKSPACE = unsafeInternAtom "_WIN_WORKSPACE" True - -_WIN_WORKSPACE_NAMES :: Atom -_WIN_WORKSPACE_NAMES = unsafeInternAtom "_WIN_WORKSPACE_NAMES" True - -_WM_NAME :: Atom -_WM_NAME = unsafeInternAtom "WM_NAME" True diff --git a/src/Graphics/X11/Xlib/Display/Extra.hs b/src/Graphics/X11/Xlib/Display/Extra.hs deleted file mode 100644 index 16b1a74..0000000 --- a/src/Graphics/X11/Xlib/Display/Extra.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Graphics.X11.Xlib.Display.Extra where - -import Control.Exception (bracket) -import System.Environment (getEnv) -import System.IO.Unsafe (unsafePerformIO) -import Graphics.X11.Xlib.Types (Display) -import Graphics.X11.Xlib.Display (closeDisplay, openDisplay) - - -defaultDisplayName :: String -defaultDisplayName = - unsafePerformIO (getEnv "DISPLAY") - -withDisplay :: String -> (Display -> IO a) -> IO a -withDisplay display = - bracket (openDisplay display) closeDisplay - -withDefaultDisplay :: (Display -> IO a) -> IO a -withDefaultDisplay = - withDisplay defaultDisplayName diff --git a/src/Graphics/X11/Xlib/Extra.hs b/src/Graphics/X11/Xlib/Extra.hs deleted file mode 100644 index c2093ab..0000000 --- a/src/Graphics/X11/Xlib/Extra.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Graphics.X11.Xlib.Extra - ( module Graphics.X11.Xlib.Atom.Extra - , module Graphics.X11.Xlib.Display.Extra - ) where - -import Graphics.X11.Xlib.Atom.Extra -import Graphics.X11.Xlib.Display.Extra diff --git a/src/Graphics/X11/Xlib/Extras/Extra.hs b/src/Graphics/X11/Xlib/Extras/Extra.hs deleted file mode 100644 index d88bf9d..0000000 --- a/src/Graphics/X11/Xlib/Extras/Extra.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Graphics.X11.Xlib.Extras.Extra where - -import Data.Text (Text) -import Foreign.C.String.Extra (castCCharToWord8) -import qualified Data.ByteString as ByteString -import qualified Data.Text.Encoding.Extra as Text -import qualified Graphics.X11 as X11 -import qualified Graphics.X11.Xlib.Extras as X11 - - -getWindowPropertyText :: X11.Display -> X11.Atom -> X11.Window -> IO (Maybe Text) -getWindowPropertyText d a w = - fmap (Text.decodeUtf8Lenient . ByteString.pack . map castCCharToWord8) <$> - X11.getWindowProperty8 d a w -- cgit v1.2.3