@@ -8,6 +8,7 @@ where
88
99import Graphics.Vty.Output.Interface
1010import Graphics.Vty.Input.Mouse
11+import Graphics.Vty.Input.Focus
1112import qualified Graphics.Vty.Output.TerminfoBased as TerminfoBased
1213
1314import Blaze.ByteString.Builder (writeToByteString)
@@ -38,12 +39,18 @@ reserveTerminal variant outFd = liftIO $ do
3839 t <- TerminfoBased.reserveTerminal variant' outFd
3940
4041 mouseModeStatus <- newIORef False
42+ focusModeStatus <- newIORef False
4143 pasteModeStatus <- newIORef False
4244
4345 let xtermSetMode t' m newStatus = do
4446 curStatus <- getModeStatus t' m
4547 when (newStatus /= curStatus) $
4648 case m of
49+ Focus -> liftIO $ do
50+ case newStatus of
51+ True -> flushedPut requestFocusEvents
52+ False -> flushedPut disableFocusEvents
53+ writeIORef focusModeStatus newStatus
4754 Mouse -> liftIO $ do
4855 case newStatus of
4956 True -> flushedPut requestMouseEvents
@@ -56,6 +63,7 @@ reserveTerminal variant outFd = liftIO $ do
5663 writeIORef pasteModeStatus newStatus
5764
5865 xtermGetMode Mouse = liftIO $ readIORef mouseModeStatus
66+ xtermGetMode Focus = liftIO $ readIORef focusModeStatus
5967 xtermGetMode BracketedPaste = liftIO $ readIORef pasteModeStatus
6068
6169 let t' = t
@@ -64,6 +72,7 @@ reserveTerminal variant outFd = liftIO $ do
6472 when (not utf8a) $ liftIO $ flushedPut setDefaultCharSet
6573 setMode t' BracketedPaste False
6674 setMode t' Mouse False
75+ setMode t' Focus False
6776 releaseTerminal t
6877 , mkDisplayContext = \tActual r -> do
6978 dc <- mkDisplayContext t tActual r