module Rasa.Internal.Actions
(
bufDo
, bufDo_
, buffersDo
, buffersDo_
, exit
, getBufRefs
, nextBufRef
, prevBufRef
) where
import Rasa.Internal.Editor
import Rasa.Internal.Action
import Rasa.Internal.BufAction
import Control.Monad
import Data.Maybe
buffersDo :: BufAction a -> Action [a]
buffersDo bufAct = do
bufRefs <- getBufRefs
bufferDo bufRefs bufAct
buffersDo_ :: BufAction a -> Action ()
buffersDo_ = void . buffersDo
bufDo :: BufRef -> BufAction a -> Action (Maybe a)
bufDo bufRef bufAct = listToMaybe <$> bufferDo [bufRef] bufAct
bufDo_ :: BufRef -> BufAction a -> Action ()
bufDo_ bufRef bufAct = void $ bufDo bufRef bufAct
nextBufRef :: BufRef -> Action BufRef
nextBufRef br = do
bufRefs <- getBufRefs
return $ if null bufRefs
then br
else case dropWhile (<= br) bufRefs of
[] -> head bufRefs
(x:_) -> x
prevBufRef :: BufRef -> Action BufRef
prevBufRef br = do
bufRefs <- getBufRefs
return $ if null bufRefs
then br
else case dropWhile (>= br) (reverse bufRefs) of
[] -> last bufRefs
(x:_) -> x