@@ -10,10 +10,12 @@
1010-- Copyright Corey O'Connor (coreyoconnor@gmail.com)
1111module Graphics.Vty.Output.TerminfoBased
1212 ( reserveTerminal
13+ , setWindowSize
1314 )
1415where
1516
1617import Control.Monad (when)
18+import Data.Bits (shiftL)
1719import qualified Data.ByteString as BS
1820import Data.ByteString.Internal (toForeignPtr)
1921import Data.Terminfo.Parse
@@ -174,6 +176,8 @@ reserveTerminal termName outFd = do
174176 , releaseDisplay = do
175177 maybeSendCap rmcup []
176178 maybeSendCap cnorm []
179+ , setDisplayBounds = \(w, h) ->
180+ setWindowSize outFd (w, h)
177181 , displayBounds = do
178182 rawSize <- getWindowSize outFd
179183 case rawSize of
@@ -244,6 +248,13 @@ getWindowSize fd = do
244248 (a,b) <- (`divMod` 65536) `fmap` c_getWindowSize fd
245249 return (fromIntegral b, fromIntegral a)
246250
251+foreign import ccall "gwinsz.h vty_c_set_window_size" c_setWindowSize :: Fd -> CLong -> IO ()
252+
253+setWindowSize :: Fd -> (Int, Int) -> IO ()
254+setWindowSize fd (w, h) = do
255+ let val = (h `shiftL` 16) + w
256+ c_setWindowSize fd $ fromIntegral val
257+
247258terminfoDisplayContext :: Output -> TerminfoCaps -> DisplayRegion -> IO DisplayContext
248259terminfoDisplayContext tActual terminfoCaps r = return dc
249260 where dc = DisplayContext