rasa-ext-vim 0.1.6 → 0.1.7
raw patch · 2 files changed
+39/−27 lines, 2 filesdep ~rasadep ~rasa-ext-cursorsdep ~rasa-ext-files
Dependency ranges changed: rasa, rasa-ext-cursors, rasa-ext-files, rasa-ext-views, rasa-ext-vim
Files
- rasa-ext-vim.cabal +6/−6
- src/Rasa/Ext/Vim.hs +33/−21
rasa-ext-vim.cabal view
@@ -1,5 +1,5 @@ name: rasa-ext-vim-version: 0.1.6+version: 0.1.7 cabal-version: >=1.10 build-type: Simple license: GPL-3@@ -22,10 +22,10 @@ Rasa.Ext.Vim build-depends: base >=4.8 && <5,- rasa >=0.1.10 && <0.2,- rasa-ext-files >=0.1.4 && <0.2,- rasa-ext-views >=0.1.4 && <0.2,- rasa-ext-cursors >=0.1.6 && <0.2,+ rasa >=0.1.11 && <0.2,+ rasa-ext-files >=0.1.5 && <0.2,+ rasa-ext-views >=0.1.5 && <0.2,+ rasa-ext-cursors >=0.1.7 && <0.2, text >=1.2.2.1 && <1.3, yi-rope >=0.7.0.2 && <0.8, text-lens >=0.1.1 && <0.2,@@ -41,7 +41,7 @@ main-is: Spec.hs build-depends: base >=4.9.0.0 && <4.10,- rasa-ext-vim >=0.1.6 && <0.2,+ rasa-ext-vim >=0.1.7 && <0.2, hspec >=2.2.4 && <2.3 default-language: Haskell2010 default-extensions: OverloadedStrings
src/Rasa/Ext/Vim.hs view
@@ -11,6 +11,7 @@ import Control.Monad import Control.Lens import Data.Default+import Data.Maybe (fromMaybe) import Data.Typeable import qualified Yi.Rope as Y @@ -56,7 +57,7 @@ -- > rasa $ do -- > vim -- > ...-vim :: Action ()+vim :: App () vim = do void $ onKeypress handleKeypress onEveryNewBuffer_ . addBottomStatus $ do@@ -66,7 +67,7 @@ Insert -> styleText "INSERT" $ fg Green -- | The event listener which listens for keypresses and responds appropriately-handleKeypress :: Keypress -> Action ()+handleKeypress :: Keypress -> App () handleKeypress keypress = focusDo_ $ do mode <- getMode preHist <- getHist@@ -80,9 +81,9 @@ -- | Listeners for keypresses that run regardless of current mode. anyMode :: [Keypress] -> BufAction ()-anyMode [Keypress 'c' [Ctrl]] = liftAction exit-anyMode [KPageDown []] = liftAction $ scrollBy 14 -- Page down-anyMode [KPageUp []] = liftAction $ scrollBy (-14) -- Page up+anyMode [Keypress 'c' [Ctrl]] = liftApp exit+anyMode [KPageDown []] = liftApp $ scrollBy 14 -- Page down+anyMode [KPageUp []] = liftApp $ scrollBy (-14) -- Page up anyMode [KHome []] = startOfLine anyMode [KEnd []] = endOfLine anyMode _ = return ()@@ -110,22 +111,22 @@ normal [Keypress 's' []] = addHist $ Keypress 's' [] normal [Keypress 's' [], Keypress 'n' []] = toggleLineNumbers -normal [Keypress '+' []] = liftAction nextBuf-normal [Keypress '-' []] = liftAction prevBuf-normal [Keypress 'w' [Ctrl]] = liftAction hSplit-normal [Keypress 'v' [Ctrl]] = liftAction vSplit-normal [Keypress 'o' [Ctrl]] = liftAction closeInactive-normal [Keypress 'r' [Ctrl]] = liftAction rotate+normal [Keypress '+' []] = liftApp nextBuf+normal [Keypress '-' []] = liftApp prevBuf+normal [Keypress 'w' [Ctrl]] = liftApp hSplit+normal [Keypress 'v' [Ctrl]] = liftApp vSplit+normal [Keypress 'o' [Ctrl]] = liftApp closeInactive+normal [Keypress 'r' [Ctrl]] = liftApp rotate -normal [Keypress 'e' [Ctrl]] = liftAction $ scrollBy 1 -- Scroll down-normal [Keypress 'd' [Ctrl]] = liftAction $ scrollBy 7 -- Half-Page down-normal [Keypress 'y' [Ctrl]] = liftAction $ scrollBy (-1) -- Scroll up-normal [Keypress 'u' [Ctrl]] = liftAction $ scrollBy (-7) -- Half-Page up+normal [Keypress 'e' [Ctrl]] = liftApp $ scrollBy 1 -- Scroll down+normal [Keypress 'd' [Ctrl]] = liftApp $ scrollBy 7 -- Half-Page down+normal [Keypress 'y' [Ctrl]] = liftApp $ scrollBy (-1) -- Scroll up+normal [Keypress 'u' [Ctrl]] = liftApp $ scrollBy (-7) -- Half-Page up -normal [KLeft []] = liftAction focusViewLeft-normal [KRight []] = liftAction focusViewRight-normal [KUp []] = liftAction focusViewAbove-normal [KDown []] = liftAction focusViewBelow+normal [KLeft []] = liftApp focusViewLeft+normal [KRight []] = liftApp focusViewRight+normal [KUp []] = liftApp focusViewAbove+normal [KDown []] = liftApp focusViewBelow normal [Keypress 'G' []] = do@@ -178,8 +179,19 @@ -- | Move cursors to end of the line endOfLine :: BufAction ()-endOfLine = findNext "\n"+endOfLine = do + txt <- getText+ overRanges . map $ overBoth $ coordEndOfLine txt+ where+ coordEndOfLine :: Y.YiString -> Coord -> Coord+ coordEndOfLine txt (Coord row col) = Coord row maxColumn+ where+ maxColumn :: Int+ maxColumn = fromMaybe col (txt ^? asLines . ix row . to Y.length) -- | Move cursors to start of the line startOfLine :: BufAction ()-startOfLine = findPrev "\n"+startOfLine = overRanges . map $ overBoth coordStartOfLine+ where+ coordStartOfLine :: Coord -> Coord+ coordStartOfLine (Coord x _) = Coord x 0