module Linenoise.Unlift
( InputResult (..)
, addHistory
, clearScreen
, getInputLine
, historyLoad
, historySave
, printKeycodes
, setCompletion
, setMultiline
, stifleHistory
) where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.IO.Unlift (MonadUnliftIO, withRunInIO)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8, encodeUtf8)
import Linenoise.FFI (InputResult (..))
import qualified Linenoise.FFI as FFI
addHistory :: MonadIO m => Text -> m ()
addHistory = liftIO . FFI.addHistory . encodeUtf8
clearScreen :: MonadIO m => m ()
clearScreen = liftIO FFI.clearScreen
getInputLine :: MonadIO m => Text -> m (InputResult Text)
getInputLine = liftIO . fmap (fmap decodeUtf8) . FFI.getInputLine . encodeUtf8
historyLoad :: MonadIO m => FilePath -> m ()
historyLoad = liftIO . FFI.historyLoad
historySave :: MonadIO m => FilePath -> m ()
historySave = liftIO . FFI.historySave
printKeycodes :: MonadIO m => m ()
printKeycodes = liftIO FFI.printKeycodes
setCompletion :: MonadUnliftIO m => (Text -> m [Text]) -> m ()
setCompletion f =
let g = fmap (fmap encodeUtf8) . f . decodeUtf8
in withRunInIO (\runInIO -> FFI.setCompletion (runInIO . g))
setMultiline :: MonadIO m => Bool -> m ()
setMultiline = liftIO . FFI.setMultiline
stifleHistory :: MonadIO m => Int -> m ()
stifleHistory = liftIO . FFI.stifleHistory