@@ -13,11 +13,12 @@ module Graphics.Vty.Input.Classify
1313
1414import Graphics.Vty.Input.Events
1515import Graphics.Vty.Input.Mouse
16+import Graphics.Vty.Input.Paste
1617import Graphics.Vty.Input.Classify.Types
1718
1819import Codec.Binary.UTF8.Generic (decode)
1920
20−import Data.List (inits, isPrefixOf, isInfixOf)
21+import Data.List (inits)
2122import qualified Data.Map as M( fromList, lookup )
2223import Data.Maybe ( mapMaybe )
2324import qualified Data.Set as S( fromList, member )
@@ -83,31 +84,3 @@ utf8Length c
8384 | c < 0xE0 = 2
8485 | c < 0xF0 = 3
8586 | otherwise = 4
86−
87−bracketedPasteStart :: String
88−bracketedPasteStart = "\ESC[200~"
89−
90−bracketedPasteEnd :: String
91−bracketedPasteEnd = "\ESC[201~"
92−
93−bracketedPasteStarted :: String -> Bool
94−bracketedPasteStarted = isPrefixOf bracketedPasteStart
95−
96−bracketedPasteFinished :: String -> Bool
97−bracketedPasteFinished = isInfixOf bracketedPasteEnd
98−
99−takeUntil :: (Eq a) => [a] -> [a] -> ([a],[a])
100−takeUntil [] _ = ([], [])
101−takeUntil cs sub
102− | length cs < length sub = (cs, [])
103− | take (length sub) cs == sub = ([], drop (length sub) cs)
104− | otherwise = let (pre, suf) = takeUntil (tail cs) sub
105− in (head cs:pre, suf)
106−
107−parseBracketedPaste :: String -> KClass
108−parseBracketedPaste s =
109− let (p, rest) = takeUntil (drop (length bracketedPasteStart) s) bracketedPasteEnd
110− rest' = if bracketedPasteEnd `isPrefixOf` rest
111− then drop (length bracketedPasteEnd) rest
112− else rest
113− in Valid (EvPaste p) rest'