module Yi.Keymap.Emacs.KillRing where
import Prelude ()
import Yi.Prelude
import Yi.Keymap
import Yi.Buffer
import Yi.Editor
import Control.Monad ( replicateM_ )
import Yi.KillRing
killRegion :: BufferM ()
killRegion = deleteRegionB =<< getSelectRegionB
killLineE :: Maybe Int -> YiM ()
killLineE a = withBuffer $ case a of
Nothing -> killRestOfLine
Just n -> replicateM_ (2*n) killRestOfLine
killringPut :: Direction -> String -> EditorM ()
killringPut dir s = modA killringA $ krPut dir s
killRestOfLine :: BufferM ()
killRestOfLine =
do eol <- atEol
if eol then deleteN 1 else deleteToEol
yankE :: EditorM ()
yankE = do (text:_) <- getsA killringA krContents
withBuffer0 $ do pointB >>= setSelectionMarkPointB
insertN text
killRingSaveE :: EditorM ()
killRingSaveE = do (r, text) <- withBuffer0 $ do
r <- getSelectRegionB
text <- readRegionB r
putA highlightSelectionA False
return (r,text)
killringPut (regionDirection r) text
yankPopE :: EditorM ()
yankPopE = do
kr <- getA killringA
withBuffer0 (deleteRegionB =<< getRawestSelectRegionB)
putA killringA $ let ring = krContents kr
in kr {krContents = tail ring ++ [head ring]}
yankE
appendNextKillE :: EditorM ()
appendNextKillE = modA killringA (\kr -> kr {krKilled=True})