@@ -8,6 +8,7 @@ where
9import Graphics.Vty.Output.Interface
9import Graphics.Vty.Output.Interface
10import Graphics.Vty.Input.Mouse
10import Graphics.Vty.Input.Mouse
11+import Graphics.Vty.Input.Focus
11import qualified Graphics.Vty.Output.TerminfoBased as TerminfoBased
12import qualified Graphics.Vty.Output.TerminfoBased as TerminfoBased
13import Blaze.ByteString.Builder (writeToByteString)
14import Blaze.ByteString.Builder (writeToByteString)
@@ -38,12 +39,18 @@ reserveTerminal variant outFd = liftIO $ do
38 t <- TerminfoBased.reserveTerminal variant' outFd
39 t <- TerminfoBased.reserveTerminal variant' outFd
40 mouseModeStatus <- newIORef False
41 mouseModeStatus <- newIORef False
42+ focusModeStatus <- newIORef False
41 pasteModeStatus <- newIORef False
43 pasteModeStatus <- newIORef False
43 let xtermSetMode t' m newStatus = do
45 let xtermSetMode t' m newStatus = do
44 curStatus <- getModeStatus t' m
46 curStatus <- getModeStatus t' m
45 when (newStatus /= curStatus) $
47 when (newStatus /= curStatus) $
51+ True -> flushedPut requestFocusEvents
52+ False -> flushedPut disableFocusEvents
53+ writeIORef focusModeStatus newStatus
47 Mouse -> liftIO $ do
54 Mouse -> liftIO $ do
48 case newStatus of
55 case newStatus of
49 True -> flushedPut requestMouseEvents
56 True -> flushedPut requestMouseEvents
@@ -56,6 +63,7 @@ reserveTerminal variant outFd = liftIO $ do
56 writeIORef pasteModeStatus newStatus
63 writeIORef pasteModeStatus newStatus
58 xtermGetMode Mouse = liftIO $ readIORef mouseModeStatus
65 xtermGetMode Mouse = liftIO $ readIORef mouseModeStatus
66+ xtermGetMode Focus = liftIO $ readIORef focusModeStatus
59 xtermGetMode BracketedPaste = liftIO $ readIORef pasteModeStatus
67 xtermGetMode BracketedPaste = liftIO $ readIORef pasteModeStatus
61 let t' = t
69 let t' = t
@@ -64,6 +72,7 @@ reserveTerminal variant outFd = liftIO $ do
64 when (not utf8a) $ liftIO $ flushedPut setDefaultCharSet
72 when (not utf8a) $ liftIO $ flushedPut setDefaultCharSet
65 setMode t' BracketedPaste False
73 setMode t' BracketedPaste False
66 setMode t' Mouse False
74 setMode t' Mouse False
75+ setMode t' Focus False
67 releaseTerminal t
76 releaseTerminal t
68 , mkDisplayContext = \tActual r -> do
77 , mkDisplayContext = \tActual r -> do
69 dc <- mkDisplayContext t tActual r
78 dc <- mkDisplayContext t tActual r