module Ribosome.Api.Input where

import Ribosome.Control.Monad.Ribo (NvimE)
import Ribosome.Nvim.Api.IO (vimInput)
import Ribosome.System.Time (sleep)

syntheticInput ::
  MonadIO m =>
  NvimE e m =>
  Maybe Double ->
  [Text] ->
  m ()
syntheticInput :: Maybe Double -> [Text] -> m ()
syntheticInput Maybe Double
interval =
  (Text -> m Int) -> [Text] -> m ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ Text -> m Int
send
  where
    send :: Text -> m Int
send Text
c =
      (Double -> m ()) -> Maybe Double -> m ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ Double -> m ()
forall (m :: * -> *). MonadIO m => Double -> m ()
sleep Maybe Double
interval m () -> m Int -> m Int
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> m Int
forall (m :: * -> *) e.
(Nvim m, MonadDeepError e RpcError m) =>
Text -> m Int
vimInput Text
c