on master help sign in
Merge pull request #232 from iphydf/speedup-large-paste

perf: Improve performance for large bracketed pastes.

commitd6a069401e36b4e24cdea99fa8355b9d910b9f25 authorJonathan Daugherty <cygnus@foobox.com> dateWed 9 Mar 2022, 11:33 (5 years ago) parentb3504fb6b8d063
1 file changed+6−13
src/Graphics/Vty/Input/Paste.hs+6−13
src/Graphics/Vty/Input/Paste.hs+6−13
@@ -34,16 +34,9 @@ bracketedPasteFinished = isInfixOf bracketedPasteEnd
3434-- 'True'.
3535parseBracketedPaste :: String -> KClass
3636parseBracketedPaste s =
37− let (p, rest) = takeUntil (drop (length bracketedPasteStart) s) bracketedPasteEnd
38− rest' = if bracketedPasteEnd `isPrefixOf` rest
39− then drop (length bracketedPasteEnd) rest
40− else rest
41− in Valid (EvPaste $ BS8.pack p) rest'
42−
43−takeUntil :: (Eq a) => [a] -> [a] -> ([a],[a])
44−takeUntil [] _ = ([], [])
45−takeUntil cs sub
46− | length cs < length sub = (cs, [])
47− | take (length sub) cs == sub = ([], drop (length sub) cs)
48− | otherwise = let (pre, suf) = takeUntil (tail cs) sub
49− in (head cs:pre, suf)
37+ Valid (EvPaste p) (BS8.unpack $ BS8.drop (BS8.length end) rest')
38+ where
39+ start = BS8.pack bracketedPasteStart
40+ end = BS8.pack bracketedPasteEnd
41+ (_, rest ) = BS8.breakSubstring start . BS8.pack $ s
42+ (p, rest') = BS8.breakSubstring end . BS8.drop (BS8.length start) $ rest