yi 0.12.0 → 0.12.1
raw patch · 12 files changed
+98/−39 lines, 12 filesdep +text-icudep −regex-basedep −regex-tdfadep ~lensdep ~vtyPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: text-icu
Dependencies removed: regex-base, regex-tdfa
Dependency ranges changed: lens, vty
API changes (from Hackage documentation)
- Yi.Buffer.Misc: directoryContentA :: HasAttributes c_a1gYl => Lens' c_a1gYl Bool
+ Yi.Buffer.Misc: directoryContentA :: HasAttributes c_a1i9g => Lens' c_a1i9g Bool
- Yi.Buffer.Misc: encodingConverterNameA :: HasAttributes c_a1gYl => Lens' c_a1gYl (Maybe ConverterName)
+ Yi.Buffer.Misc: encodingConverterNameA :: HasAttributes c_a1i9g => Lens' c_a1i9g (Maybe ConverterName)
- Yi.Buffer.Misc: fontsizeVariationA :: HasAttributes c_a1gYl => Lens' c_a1gYl Int
+ Yi.Buffer.Misc: fontsizeVariationA :: HasAttributes c_a1i9g => Lens' c_a1i9g Int
- Yi.Buffer.Misc: identA :: HasAttributes c_a1gYl => Lens' c_a1gYl BufferId
+ Yi.Buffer.Misc: identA :: HasAttributes c_a1i9g => Lens' c_a1i9g BufferId
- Yi.Buffer.Misc: insertingA :: HasAttributes c_a1gYl => Lens' c_a1gYl Bool
+ Yi.Buffer.Misc: insertingA :: HasAttributes c_a1i9g => Lens' c_a1i9g Bool
- Yi.Buffer.Misc: keymapProcessA :: HasAttributes c_a1gYl => Lens' c_a1gYl KeymapProcess
+ Yi.Buffer.Misc: keymapProcessA :: HasAttributes c_a1i9g => Lens' c_a1i9g KeymapProcess
- Yi.Buffer.Misc: lastActiveWindowA :: HasAttributes c_a1gYl => Lens' c_a1gYl Window
+ Yi.Buffer.Misc: lastActiveWindowA :: HasAttributes c_a1i9g => Lens' c_a1i9g Window
- Yi.Buffer.Misc: lastSyncTimeA :: HasAttributes c_a1gYl => Lens' c_a1gYl UTCTime
+ Yi.Buffer.Misc: lastSyncTimeA :: HasAttributes c_a1i9g => Lens' c_a1i9g UTCTime
- Yi.Buffer.Misc: modeAdjustBlockA :: Lens' (Mode syntax_a1adX) (syntax_a1adX -> Int -> BufferM ())
+ Yi.Buffer.Misc: modeAdjustBlockA :: Lens' (Mode syntax_a1boS) (syntax_a1boS -> Int -> BufferM ())
- Yi.Buffer.Misc: modeAppliesA :: Lens' (Mode syntax_a1adX) (FilePath -> YiString -> Bool)
+ Yi.Buffer.Misc: modeAppliesA :: Lens' (Mode syntax_a1boS) (FilePath -> YiString -> Bool)
- Yi.Buffer.Misc: modeFollowA :: Lens' (Mode syntax_a1adX) (syntax_a1adX -> Action)
+ Yi.Buffer.Misc: modeFollowA :: Lens' (Mode syntax_a1boS) (syntax_a1boS -> Action)
- Yi.Buffer.Misc: modeGetStrokesA :: Lens' (Mode syntax_a1adX) (syntax_a1adX -> Point -> Point -> Point -> [Stroke])
+ Yi.Buffer.Misc: modeGetStrokesA :: Lens' (Mode syntax_a1boS) (syntax_a1boS -> Point -> Point -> Point -> [Stroke])
- Yi.Buffer.Misc: modeGotoDeclarationA :: Lens' (Mode syntax_a1adX) (BufferM ())
+ Yi.Buffer.Misc: modeGotoDeclarationA :: Lens' (Mode syntax_a1boS) (BufferM ())
- Yi.Buffer.Misc: modeHLA :: Lens' (Mode syntax_a1adX) (ExtHL syntax_a1adX)
+ Yi.Buffer.Misc: modeHLA :: Lens' (Mode syntax_a1boS) (ExtHL syntax_a1boS)
- Yi.Buffer.Misc: modeIndentA :: Lens' (Mode syntax_a1adX) (syntax_a1adX -> IndentBehaviour -> BufferM ())
+ Yi.Buffer.Misc: modeIndentA :: Lens' (Mode syntax_a1boS) (syntax_a1boS -> IndentBehaviour -> BufferM ())
- Yi.Buffer.Misc: modeIndentSettingsA :: Lens' (Mode syntax_a1adX) IndentSettings
+ Yi.Buffer.Misc: modeIndentSettingsA :: Lens' (Mode syntax_a1boS) IndentSettings
- Yi.Buffer.Misc: modeKeymapA :: Lens' (Mode syntax_a1adX) (KeymapSet -> KeymapSet)
+ Yi.Buffer.Misc: modeKeymapA :: Lens' (Mode syntax_a1boS) (KeymapSet -> KeymapSet)
- Yi.Buffer.Misc: modeModeLineA :: Lens' (Mode syntax_a1adX) ([Text] -> BufferM Text)
+ Yi.Buffer.Misc: modeModeLineA :: Lens' (Mode syntax_a1boS) ([Text] -> BufferM Text)
- Yi.Buffer.Misc: modeNameA :: Lens' (Mode syntax_a1adX) Text
+ Yi.Buffer.Misc: modeNameA :: Lens' (Mode syntax_a1boS) Text
- Yi.Buffer.Misc: modeOnLoadA :: Lens' (Mode syntax_a1adX) (BufferM ())
+ Yi.Buffer.Misc: modeOnLoadA :: Lens' (Mode syntax_a1boS) (BufferM ())
- Yi.Buffer.Misc: modePrettifyA :: Lens' (Mode syntax_a1adX) (syntax_a1adX -> BufferM ())
+ Yi.Buffer.Misc: modePrettifyA :: Lens' (Mode syntax_a1boS) (syntax_a1boS -> BufferM ())
- Yi.Buffer.Misc: modeToggleCommentSelectionA :: Lens' (Mode syntax_a1adX) (Maybe (BufferM ()))
+ Yi.Buffer.Misc: modeToggleCommentSelectionA :: Lens' (Mode syntax_a1boS) (Maybe (BufferM ()))
- Yi.Buffer.Misc: pendingUpdatesA :: HasAttributes c_a1gYl => Lens' c_a1gYl [UIUpdate]
+ Yi.Buffer.Misc: pendingUpdatesA :: HasAttributes c_a1i9g => Lens' c_a1i9g [UIUpdate]
- Yi.Buffer.Misc: pointFollowsWindowA :: HasAttributes c_a1gYl => Lens' c_a1gYl (WindowRef -> Bool)
+ Yi.Buffer.Misc: pointFollowsWindowA :: HasAttributes c_a1i9g => Lens' c_a1i9g (WindowRef -> Bool)
- Yi.Buffer.Misc: preferColA :: HasAttributes c_a1gYl => Lens' c_a1gYl (Maybe Int)
+ Yi.Buffer.Misc: preferColA :: HasAttributes c_a1i9g => Lens' c_a1i9g (Maybe Int)
- Yi.Buffer.Misc: readOnlyA :: HasAttributes c_a1gYl => Lens' c_a1gYl Bool
+ Yi.Buffer.Misc: readOnlyA :: HasAttributes c_a1i9g => Lens' c_a1i9g Bool
- Yi.Buffer.Misc: undosA :: HasAttributes c_a1gYl => Lens' c_a1gYl URList
+ Yi.Buffer.Misc: undosA :: HasAttributes c_a1i9g => Lens' c_a1i9g URList
- Yi.Modes: extensionOrContentsMatch :: [String] -> String -> FilePath -> YiString -> Bool
+ Yi.Modes: extensionOrContentsMatch :: [String] -> Text -> FilePath -> YiString -> Bool
Files
- src/library/Yi/Buffer/HighLevel.hs +2/−4
- src/library/Yi/Dired.hs +7/−5
- src/library/Yi/Eval.hs +5/−2
- src/library/Yi/Keymap/Vim/VisualMap.hs +5/−1
- src/library/Yi/Modes.hs +10/−7
- src/library/Yi/Rectangle.hs +6/−7
- src/library/Yi/Types.hs +1/−2
- src/library/Yi/UI/Pango.hs +1/−1
- src/tests/vimtests/repeat/O1.test +17/−0
- src/tests/vimtests/visual/A_3.test +8/−0
- src/tests/vimtests/visual/CSs.test +30/−0
- yi.cabal +6/−10
src/library/Yi/Buffer/HighLevel.hs view
@@ -923,11 +923,9 @@ (l0, _) <- getLineAndColOfPoint $ regionStart reg (l1, _) <- getLineAndColOfPoint $ regionEnd reg moveTo $ 1 + regionEnd reg- fmap (reverse . catMaybes) $ forM [0 .. abs (l0 - l1)] $ \i -> savingPointB $ do+ fmap reverse $ forM [0 .. abs (l0 - l1)] $ \i -> savingPointB $ do void $ lineMoveRel $ -i- p <- pointB- eol <- atEol- return (if not eol then Just p else Nothing)+ pointB rightEdgesOfRegionB LineWise reg = savingPointB $ do lastEol <- do moveTo $ regionEnd reg
src/library/Yi/Dired.hs view
@@ -62,6 +62,7 @@ import Data.Maybe (fromMaybe) import Data.Monoid (mempty, (<>)) import qualified Data.Text as T (Text, pack, unpack)+import qualified Data.Text.ICU as ICU (regex, find, unfold, group, MatchOption(..)) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Data.Typeable (Typeable) import System.CanonicalizePath (canonicalizePath)@@ -103,7 +104,6 @@ import Yi.MiniBuffer (noHint, spawnMinibufferE, withMinibuffer, withMinibufferFree) import Yi.Misc (getFolder, promptFile) import Yi.Monad (gets)-import Yi.Regex (AllTextSubmatches (..), (=~)) import qualified Yi.Rope as R import Yi.String (showT) import Yi.Style@@ -258,10 +258,12 @@ content <- withGivenBuffer b elemsB let header = R.take 1024 content- rx = "\\-\\*\\- *([^ ]*) *\\-\\*\\-" :: String- hmode = case R.toString header =~ rx of- AllTextSubmatches [_,m] -> T.pack m- _ -> ""+ rx = ICU.regex [] "\\-\\*\\- *([^ ]*) *\\-\\*\\-"+ hmode = case ICU.find rx (R.toText header) of+ Nothing -> ""+ Just m -> case (ICU.group 1 m) of+ Just n -> n+ Nothing -> "" Just mode = find (\(AnyMode m) -> modeName m == hmode) tbl <|> find (\(AnyMode m) -> modeApplies m f header) tbl <|> Just (AnyMode emptyMode)
src/library/Yi/Eval.hs view
@@ -4,6 +4,9 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-}+#ifdef HINT+{-# LANGUAGE FlexibleContexts #-}+#endif {-# OPTIONS_HADDOCK show-extensions #-} -- |@@ -159,8 +162,6 @@ evaluator :: Field Evaluator evaluator = customVariable -instance YiConfigVariable Evaluator- -- * Evaluator based on GHCi -- | Cached variable for getAllNamesInScopeImpl newtype NamesCache = NamesCache [String] deriving (Typeable, Binary)@@ -401,3 +402,5 @@ #else def = publishedActionsEvaluator #endif++instance YiConfigVariable Evaluator
src/library/Yi/Keymap/Vim/VisualMap.hs view
@@ -142,6 +142,9 @@ operatorBindings operators = fmap mkOperatorBinding $ operators ++ visualOperators where visualOperators = fmap synonymOp [ ("x", "d")+ , ("s", "c")+ , ("S", "c")+ , ("C", "c") , ("~", "g~") , ("Y", "y") , ("u", "gu")@@ -242,7 +245,8 @@ "I" -> leftEdgesOfRegionB style region "A" -> rightEdgesOfRegionB style region _ -> error "Just silencing ghc's false positive warning."- withCurrentBuffer $ moveTo $ head cursors+ case cursors of+ (mainCursor : _) -> withCurrentBuffer (moveTo mainCursor) modifyStateE $ \s -> s { vsSecondaryCursors = drop 1 cursors } switchModeE $ Insert (head evs) return Continue
src/library/Yi/Modes.hs view
@@ -21,13 +21,14 @@ gitCommitMode, rubyMode, styleMode ) where -import "regex-tdfa" Text.Regex.TDFA ((=~))- import Control.Applicative ((<$>)) import Control.Lens ((%~), (&), (.~), (^.)) import Data.List (isPrefixOf)-import Data.Maybe (fromMaybe)+import Data.Maybe (fromMaybe, isJust) import System.FilePath (takeDirectory, takeExtension, takeFileName)+import qualified Data.Text as T (Text)+import qualified Data.Text.ICU as ICU (regex, find, MatchOption(..))+ import Yi.Buffer import qualified Yi.IncrementalParse as IncrParser (scanner) import Yi.Keymap (YiM)@@ -50,7 +51,7 @@ import qualified Yi.Lexer.SVNCommit as SVNCommit (lexer) import qualified Yi.Lexer.Whitespace as Whitespace (lexer) import Yi.MiniBuffer (anyModeByNameM)-import qualified Yi.Rope as R (YiString, toString)+import qualified Yi.Rope as R (YiString, toText) import Yi.Search (makeSimpleSearch) import Yi.Style (StyleName) import Yi.Syntax (ExtHL (ExtHL))@@ -233,10 +234,12 @@ -- | When applied to an extensions list and regular expression pattern, creates -- a 'Mode.modeApplies' function.-extensionOrContentsMatch :: [String] -> String -> FilePath -> R.YiString -> Bool+extensionOrContentsMatch :: [String] -> T.Text -> FilePath -> R.YiString -> Bool extensionOrContentsMatch extensions pattern fileName contents- = extensionMatches extensions fileName || contentsMatch- where contentsMatch = R.toString contents =~ pattern :: Bool+ = extensionMatches extensions fileName || isJust m+ where+ r = ICU.regex [] pattern+ m = ICU.find r $ R.toText contents -- | Adds a hook to all matching hooks in a list hookModes :: (AnyMode -> Bool) -> BufferM () -> [AnyMode] -> [AnyMode]
src/library/Yi/Rectangle.hs view
@@ -13,13 +13,12 @@ module Yi.Rectangle where -import "regex-tdfa" Text.Regex.TDFA ( (=~), AllTextSubmatches(..) )- import Control.Applicative ((<$>)) import Control.Monad (forM_) import Data.List (sort, transpose) import Data.Monoid ((<>)) import qualified Data.Text as T (Text, concat, justifyLeft, length, pack, unpack)+import qualified Data.Text.ICU as ICU (regex, find, unfold, group) import Yi.Buffer import Yi.Editor (EditorM, getRegE, setRegE, withCurrentBuffer) import qualified Yi.Rope as R@@ -30,17 +29,17 @@ s <- getSelectRegionB >>= unitWiseRegion Line modifyRegionB (R.fromText . alignText str . R.toText) s where- regexSplit :: String -> String -> [T.Text]- regexSplit regex l = case l =~ regex of- AllTextSubmatches (_:matches) -> T.pack <$> matches- _ -> error "regexSplit: text does not match"+ regexSplit :: T.Text -> T.Text -> [T.Text]+ regexSplit pattern l = case ICU.find (ICU.regex [] pattern) l of+ Nothing -> error "regexSplit: text does not match"+ Just m -> drop 1 $ ICU.unfold ICU.group m alignText :: T.Text -> T.Text -> T.Text alignText regex text = unlines' ls' where ls, ls' :: [T.Text] ls = lines' text columns :: [[T.Text]]- columns = regexSplit (T.unpack regex) <$> (T.unpack <$> ls)+ columns = regexSplit regex <$> ls columnsWidth :: [Int] columnsWidth = fmap (maximum . fmap T.length) $ transpose columns
src/library/Yi/Types.hs view
@@ -27,7 +27,7 @@ module Yi.Types where #ifdef FRONTEND_VTY-import qualified Graphics.Vty as Vty ()+import qualified Graphics.Vty as Vty (Config) #endif import Control.Applicative (Applicative, pure, (<$>), (<*>))@@ -53,7 +53,6 @@ import Data.Traversable (Traversable) import Data.Typeable (Typeable) import Data.Word (Word8)-import qualified Graphics.Vty as Vty (Config) import Yi.Buffer.Basic (BufferRef, WindowRef) import Yi.Buffer.Implementation import Yi.Buffer.Undo (URList)
src/library/Yi/UI/Pango.hs view
@@ -23,7 +23,7 @@ import Control.Applicative import Control.Concurrent import Control.Exception (catch, SomeException)-import Control.Lens hiding (set, Action, from)+import Control.Lens hiding (set, from) import Control.Monad hiding (forM_, mapM_, forM, mapM) import Data.Foldable import Data.IORef
+ src/tests/vimtests/repeat/O1.test view
@@ -0,0 +1,17 @@+-- Input+(2,1)+123+456+789+-- Output+(7,3)+123+456+abc+abc+abc+abc+abc+789+-- Events+2oabc<Esc>3.
+ src/tests/vimtests/visual/A_3.test view
@@ -0,0 +1,8 @@+-- Input+(1,1)+123+-- Output+(1,7)+123text+-- Events+<C-v>$Atext<Esc>
+ src/tests/vimtests/visual/CSs.test view
@@ -0,0 +1,30 @@+-- Input+(1,1)+0; nil 20; binil 40; quadnil+1; un 21; biun 41; quadun+2; bi 22; bibi 42; quadbi+3; tri 23; bitri 43; quadtri+4; quad 24; biquad 44; quadquad+5; pent 25; bipent 45; quadpent+6; hex 26; bihex 46; quadhex+7; sept 27; bisept 47; quadsept+8; oct 28; bioct 48; quadoct+9; enn 29; bienn 49; quadenn+X; dec 2X; bidec 4X; quaddec+E; lev 2E; bilev 4E; quadlev+-- Output+(11,7)+0; nil 20; binil 40; quadnil+1; un 21; biun 41; quadun+2; two 22; bibi 42; quadbi+3; tri 23; bitri 43; quadtri+4; quad 24; biquad 44; quadquad+5; pent 25; bipent 45; quadpent+6; six 26; bihex 46; quadhex+7; sept 27; bisept 47; quadsept+8; oct 28; bioct 48; quadoct+9; nine 29; bienn 49; quadenn+X; ten 2X; bidec 4X; quaddec+E; lev 2E; bilev 4E; quadlev+-- Events+2j3lv3lstwo <Esc>4j03lvelcsix <Esc>3j03lv4lCnine <Esc>j03lvelSten <Esc>
yi.cabal view
@@ -1,5 +1,5 @@ name: yi-version: 0.12.0+version: 0.12.1 category: Development, Editor synopsis: The Haskell-Scriptable Editor description:@@ -104,10 +104,7 @@ Description: bake-in the self-checks flag hint- Default: False- -- TODO: figure out how to write this- -- if impl(ghc < 7.10.1)- -- Default: True+ Default: True Description: Include hint (haskell interpreter) in yi library@@ -276,7 +273,7 @@ bytestring >= 0.9.1 && < 0.11, dynamic-state >= 0.1.0.5, data-default,- lens >= 4.4.0.1,+ lens >= 4.7, dlist >=0.4.1, dyre >=0.8.11, filepath >= 1.1,@@ -284,8 +281,7 @@ mtl >= 0.1.0.1, parsec >= 3.0, pointedlist >= 0.5,- regex-base ==0.93.*,- regex-tdfa >= 1.1 && <1.3,+ text-icu >= 0.7, safe >= 0.3.4 && < 0.4, split >= 0.1 && < 0.3, template-haskell >= 2.4,@@ -348,7 +344,7 @@ Yi.UI.Vty.Conversions build-depends: unix-compat >=0.1 && <0.5,- vty >= 5.2.4 && < 6+ vty >= 5.2.4 && < 5.4 cpp-options: -DFRONTEND_VTY other-modules:@@ -394,7 +390,7 @@ Vim.TestPureEditorManipulations build-depends: base,- lens >= 4.4.0.1,+ lens >= 4.7, semigroups, tasty, tasty-hunit,