diff options
Diffstat (limited to 'Buffer/Motion.hs')
-rw-r--r-- | Buffer/Motion.hs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Buffer/Motion.hs b/Buffer/Motion.hs index 86446e0..fa9e059 100644 --- a/Buffer/Motion.hs +++ b/Buffer/Motion.hs @@ -25,21 +25,33 @@ data LeftRightMotion | WordsBackward Int deriving (Show) + -- TODO fail if cannot splitAt properly OR if we didn't modify the buffer +gotoLeft :: Int -> Buffer -> Buffer gotoLeft i (ls, rs) = let (lls, rls) = splitAt (length ls - i) ls in (lls, rls ++ rs) + -- TODO fail if cannot splitAt properly OR if we didn't modify the buffer +gotoRight :: Int -> Buffer -> Buffer gotoRight i (ls, rs) = let (lrs, rrs) = splitAt i rs in (ls ++ lrs, rrs) + +gotoFirstChar :: Buffer -> Buffer gotoFirstChar (ls, rs) = ("", ls ++ rs) + +gotoEndOfLine :: Buffer -> Buffer gotoEndOfLine (ls, rs) = (ls ++ rs, "") + -- TODO fail if i <= 0 or i > length +gotoColumn :: Int -> Buffer -> Buffer gotoColumn i (ls, rs) = splitAt (i - 1) $ ls ++ rs + +wordsForward :: Int -> Buffer -> Buffer wordsForward i (ls, rs) = let rs' = dropWhile (==' ') $ dropWhile (/=' ') rs ls' = ls ++ take (length rs - length rs') rs @@ -49,6 +61,8 @@ wordsForward i (ls, rs) = then wordsForward (i - 1) b' else b' + +wordsBackward :: Int -> Buffer -> Buffer wordsBackward i (ls, rs) = let ls' = dropWhileEnd (/=' ') $ dropWhileEnd (==' ') ls rs' = drop (length ls') ls ++ rs |