module Ribosome.Api.Tabpage where

import Ribosome.Control.Monad.Ribo (NvimE)
import Ribosome.Nvim.Api.Data (Tabpage)
import Ribosome.Nvim.Api.IO (nvimTabpageGetNumber, tabpageIsValid, vimCommand)

closeTabpage ::
  NvimE e m =>
  Tabpage ->
  m ()
closeTabpage :: Tabpage -> m ()
closeTabpage Tabpage
tabpage = do
  Bool
valid <- Tabpage -> m Bool
forall (m :: * -> *) e.
(Nvim m, MonadDeepError e RpcError m) =>
Tabpage -> m Bool
tabpageIsValid Tabpage
tabpage
  Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
valid (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Int
number <- Tabpage -> m Int
forall (m :: * -> *) e.
(Nvim m, MonadDeepError e RpcError m) =>
Tabpage -> m Int
nvimTabpageGetNumber Tabpage
tabpage
    Text -> m ()
forall (m :: * -> *) e.
(Nvim m, MonadDeepError e RpcError m) =>
Text -> m ()
vimCommand (Text
"silent! tabclose! " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall b a. (Show a, IsString b) => a -> b
show Int
number)