@@ -13,11 +13,12 @@ module Graphics.Vty.Input.Classify
14import Graphics.Vty.Input.Events
14import Graphics.Vty.Input.Events
15import Graphics.Vty.Input.Mouse
15import Graphics.Vty.Input.Mouse
16+import Graphics.Vty.Input.Paste
16import Graphics.Vty.Input.Classify.Types
17import Graphics.Vty.Input.Classify.Types
18import Codec.Binary.UTF8.Generic (decode)
19import Codec.Binary.UTF8.Generic (decode)
20−import Data.List (inits, isPrefixOf, isInfixOf)
21+import Data.List (inits)
21import qualified Data.Map as M( fromList, lookup )
22import qualified Data.Map as M( fromList, lookup )
22import Data.Maybe ( mapMaybe )
23import Data.Maybe ( mapMaybe )
23import qualified Data.Set as S( fromList, member )
24import qualified Data.Set as S( fromList, member )
@@ -83,31 +84,3 @@ utf8Length c
83 | c < 0xE0 = 2
84 | c < 0xE0 = 2
84 | c < 0xF0 = 3
85 | c < 0xF0 = 3
85 | otherwise = 4
86 | otherwise = 4
87−bracketedPasteStart :: String
88−bracketedPasteStart = "\ESC[200~"
90−bracketedPasteEnd :: String
91−bracketedPasteEnd = "\ESC[201~"
93−bracketedPasteStarted :: String -> Bool
94−bracketedPasteStarted = isPrefixOf bracketedPasteStart
96−bracketedPasteFinished :: String -> Bool
97−bracketedPasteFinished = isInfixOf bracketedPasteEnd
99−takeUntil :: (Eq a) => [a] -> [a] -> ([a],[a])
100−takeUntil [] _ = ([], [])
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)
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
113− in Valid (EvPaste p) rest'