ghcid-0.3.3: src/Language/Haskell/Ghcid/Terminal.hs
{-# LANGUAGE CPP #-}
module Language.Haskell.Ghcid.Terminal(
terminalTopmost
) where
#if defined(mingw32_HOST_OS)
import Data.Word
import Data.Bits
import Foreign.Ptr
type HWND = Ptr ()
c_SWP_NOSIZE = 1 :: Word32
c_SWP_NOMOVE = 2 :: Word32
c_HWND_TOPMOST = -1 :: Int
foreign import stdcall unsafe "windows.h GetConsoleWindow"
c_GetConsoleWindow :: IO HWND
foreign import stdcall unsafe "windows.h SetWindowPos"
c_SetWindowPos :: HWND -> Int -> Int -> Int -> Int -> Int -> Word32 -> IO Bool
#endif
-- | Raise the current terminal on top of all other screens, if you can.
terminalTopmost :: IO ()
#if defined(mingw32_HOST_OS)
terminalTopmost = do
wnd <- c_GetConsoleWindow
c_SetWindowPos wnd c_HWND_TOPMOST 0 0 0 0 (c_SWP_NOMOVE .|. c_SWP_NOSIZE)
return ()
#else
terminalTopmost = return ()
#endif