I've done some work on Yi this night. It's divided in 3 'darc sends': - minor_tweaks -- lacking key bindings; One nice patch per feature; just commit it - eol_normal_mode -- Fixes normal mode to work more like Vim's. The only obvious problem with this one big patch is that it fixes several things at once. - enter_autoindent - This one is rather hackish; It makes new lines (via enter in insert and 'o'/'O' in normal mode) indented like previous ones. It probably needs more work before committing, but i post it here, because I've found it very helpful at dogfooding (using Yi do actually develop it).
It's almost dawn, so it's quite probable that I made lots of stupid mistakes; My Yi works better than ever, though. Good night, everyone -- Krzysiek --~--~---------~--~----~------------~-------~--~----~ Yi development mailing list yi-devel@googlegroups.com http://groups.google.com/group/yi-devel -~----------~----~----~----~------~----~------~--~---
Wed Dec 3 00:52:18 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Indenting as previous line on insert mode Enter and normal mode 'o'; 'O' indends as next line This is not perfect, but better than nothing; We obviously lack :set ai New patches: [Indenting as previous line on insert mode Enter and normal mode 'o'; 'O' indends as next line Krzysztof Goj <[EMAIL PROTECTED]>**20081202235218 This is not perfect, but better than nothing; We obviously lack :set ai ] hunk ./Yi/Buffer/Indent.hs 383 indentToB level = do indentSettings <- indentSettingsB modifyRegionClever (rePadString indentSettings level) =<< regionOfB Line - --- | Indent as much as the previous line -indentAsPreviousB :: BufferM () -indentAsPreviousB = - do previousLine <- getNextNonBlankLineB Backward + +-- | Indent as much as the previous/next line +indentAsNeighbourLine :: Direction -> BufferM () +indentAsNeighbourLine dir = + do previousLine <- getNextNonBlankLineB dir previousIndent <- indentOfB previousLine indentToB previousIndent hunk ./Yi/Buffer/Indent.hs 391 +-- | Indent as much as the previous line +indentAsPreviousB :: BufferM () +indentAsPreviousB = indentAsNeighbourLine Backward hunk ./Yi/Buffer/Indent.hs 395 +-- | Indent as much as the next line +indentAsNextB :: BufferM () +indentAsNextB = indentAsNeighbourLine Forward -- | Set the padding of the string to newCount, filling in tabs if -- expandTabs is set in the buffers IndentSettings hunk ./Yi/Keymap/Vim.hs 671 char 'I' ?>> beginIns self firstNonSpaceB, char 'a' ?>> beginIns self $ moveXorEol 1, char 'A' ?>> beginIns self moveToEol, - char 'o' ?>> beginIns self $ moveToEol >> insertB '\n', - char 'O' ?>> beginIns self $ moveToSol >> insertB '\n' >> lineUp, + char 'o' ?>> beginIns self $ moveToEol >> insertB '\n' >> indentAsPreviousB, + char 'O' ?>> beginIns self $ moveToSol >> insertB '\n' >> lineUp >> indentAsNextB, char 'c' ?>> changeCmds, char 'C' ?>> beginIns self $ cut Exclusive viMoveToEol, -- alias of "c$" char 'S' ?>> beginIns self $ withBuffer0 moveToSol >> cut Exclusive viMoveToEol, -- non-linewise alias of "cc" hunk ./Yi/Keymap/Vim.hs 709 spec KEnd ?>>! moveToEol, spec KHome ?>>! moveToSol, spec KDel ?>>! (adjBlock (-1) >> deleteB Character Forward), - spec KEnter ?>>! insertB '\n', + spec KEnter ?>>! insertB '\n' >> indentAsPreviousB, spec KTab ?>>! insertTabB, (ctrl $ char 't') ?>>! shiftIndentOfLine 1, (ctrl $ char 'd') ?>>! shiftIndentOfLine (-1), Context: [Ctrl-t and Ctrl-d in insert mode (indentation) Krzysztof Goj <[EMAIL PROTECTED]>**20081202223751] [Fixed isMakefile: takeBaseName should be takeFileName. Otherwise makefile's named like foo.mk would not be recognized. [EMAIL PROTECTED] [Issue 202: indentation and Vim commands Krzysztof Goj <[EMAIL PROTECTED]>**20081202183446 Added indentation-awareness to cutRegion, pasteBefore and pasteAfter. ] [Better percent move. Krzysztof Goj <[EMAIL PROTECTED]>**20081202162105] [replace all: more helpful message [EMAIL PROTECTED] [fix build [EMAIL PROTECTED] [Better word and WORD motions for Vim keymap. Krzysztof Goj <[EMAIL PROTECTED]>**20081202132813] [doc [EMAIL PROTECTED] [Yi/Users/Gwern.hs: +shorter binding for gotoLn [EMAIL PROTECTED] Ignore-this: 5defc56344c3e1c61bd602d192e06af3 I find the default Emacs binding of M-g g tedious; why not just M-g? ] [doc [EMAIL PROTECTED] [make Accessor instance of Category [EMAIL PROTECTED] [use Control.Category [EMAIL PROTECTED] [Yi.Keymap.Emacs: +standard emacs M-; binding [EMAIL PROTECTED] Ignore-this: 5abf2d7154acfdcce44286f34ec238b9 ] [update to base>=4; replace all Control.Exception with Control.OldException [EMAIL PROTECTED] Ignore-this: 205b7c23a4ffcc16b8612d0b4edc9352 ] [better support for vivid colors [EMAIL PROTECTED] [Main.hs: minor indent [EMAIL PROTECTED] Ignore-this: b53fd55beb556c92b6bba9ee4a49cd61 ] [added C-w and C-u to ex mode Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103414] ['ZZ' closes window, not editor, 'ZQ' == ':q!' Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103311] [bump version number [EMAIL PROTECTED] [TAG 0.5.2 [EMAIL PROTECTED] Patch bundle hash: 25c2a30184cf6b5431148f297a772f73668f467d
Wed Dec 3 04:10:45 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Behaviour at end of line (BIG PATCH) - Doesn't allow to go to EOL in normal mode - Does allow it in other (visual, insert, replace) modes - Corrected D, and '$' command - cursor moves left after leaving insert and replace mode New patches: [Behaviour at end of line (BIG PATCH) Krzysztof Goj <[EMAIL PROTECTED]>**20081203031045 - Doesn't allow to go to EOL in normal mode - Does allow it in other (visual, insert, replace) modes - Corrected D, and '$' command - cursor moves left after leaving insert and replace mode ] hunk ./Yi/Buffer/HighLevel.hs 43 botB :: BufferM () botB = moveTo =<< sizeB +-- | Move left if on eol, but not on blank line +leftOnEol :: BufferM () +leftOnEol = do + eol <- atEol + sol <- atSol + when (eol && not sol) leftB + -- | Move @x@ chars back, or to the sol, whichever is less moveXorSol :: Int -> BufferM () moveXorSol x = replicateM_ x $ do c <- atSol; when (not c) leftB hunk ./Yi/Keymap/Vim.hs 110 -- | Replace mode is like insert, except it performs writes, not inserts rep_mode :: VimMode - rep_mode = write (setStatus ("-- REPLACE --", defaultStyle)) >> many rep_char >> leave + rep_mode = write (setStatus ("-- REPLACE --", defaultStyle)) >> many rep_char >> leave >> (write leftB) -- | Reset the selection style to a character-wise mode 'SelectionStyle Character'. resetSelectStyle :: BufferM () hunk ./Yi/Keymap/Vim.hs 117 resetSelectStyle = setDynamicB $ SelectionStyle Character -- | Visual mode, similar to command mode + vis_move :: VimMode + vis_move = gen_cmd_move >>= write . viMove . snd + vis_mode :: SelectionStyle -> VimMode hunk ./Yi/Keymap/Vim.hs 121 - vis_mode selectionStyle = do + vis_mode selStyle = do write (setVisibleSelection True >> pointB >>= setSelectionMarkPointB) hunk ./Yi/Keymap/Vim.hs 123 - core_vis_mode selectionStyle + core_vis_mode selStyle write (clrStatus >> withBuffer0 (setVisibleSelection False) >> withBuffer0 resetSelectStyle) hunk ./Yi/Keymap/Vim.hs 125 - + core_vis_mode :: SelectionStyle -> VimMode hunk ./Yi/Keymap/Vim.hs 127 - core_vis_mode selectionStyle = do - write $ do withBuffer0 $ setDynamicB $ selectionStyle - setStatus $ (msg selectionStyle, defaultStyle) - many (cmd_move <|> + core_vis_mode selStyle = do + write $ do withBuffer0 $ setDynamicB $ selStyle + setStatus $ (msg selStyle, defaultStyle) + many (vis_move <|> select_any_unit (withBuffer0 . (\r -> resetSelectStyle >> extendSelectRegionB r >> leftB))) hunk ./Yi/Keymap/Vim.hs 132 - (vis_single selectionStyle <|| vis_multi) + (vis_single selStyle <|| vis_multi) where msg (SelectionStyle Line) = "-- VISUAL LINE --" msg (SelectionStyle _) = "-- VISUAL --" hunk ./Yi/Keymap/Vim.hs 151 cs <- many $ charOf id '0' '9' return $ Just $ read (c:cs) + viMoveToNthEol :: Int -> BufferM () + viMoveToNthEol n = (replicateM_ n $ moveB Line Forward) + viMoveToEol :: ViMove viMoveToEol = MaybeMove Line Forward hunk ./Yi/Keymap/Vim.hs 173 -- cmd_move :: VimMode - cmd_move = gen_cmd_move >>= write . viMove . snd + cmd_move = gen_cmd_move >>= write . viMoveNM . snd -- the returned RegionStyle is used when the movement is combined with a 'cut' or 'yank'. gen_cmd_move :: KeymapM (RegionStyle, ViMove) hunk ./Yi/Keymap/Vim.hs 198 -- | movement commands (with exclusive cut/yank semantics) moveCmdFM_exclusive :: [(Event, (Int -> ViMove))] moveCmdFM_exclusive = - -- left/right + -- left/right [(char 'h', left) ,(ctrl $ char 'h', left) ,(spec KBS, left) hunk ./Yi/Keymap/Vim.hs 206 ,(spec KRight, right) ,(char 'l', right) ,(char ' ', right) + -- eol / sol / special column ,(spec KHome, sol) ,(char '^', const $ ArbMove firstNonSpaceB) ,(char '|', \i -> SeqMove viMoveToSol (Replicate (CharMove Forward) (i-1))) hunk ./Yi/Keymap/Vim.hs 210 - + ,(char '$', eol) + ,(spec KEnd, eol) -- words ,(char 'w', Replicate $ GenMove unitViWord (Backward,InsideBound) Forward) ,(char 'W', Replicate $ GenMove unitViWORD (Backward,InsideBound) Forward) hunk ./Yi/Keymap/Vim.hs 227 left = Replicate $ CharMove Backward right = Replicate $ CharMove Forward sol = Replicate $ viMoveToSol + eol = ArbMove . viMoveToNthEol -- | movement *multi-chars* commands (with exclusive cut/yank semantics) moveCmdS_exclusive :: [(String, (Int -> ViMove))] hunk ./Yi/Keymap/Vim.hs 235 [("[(", Replicate $ ArbMove (goUnmatchedB Backward '(' ')')) ,("[{", Replicate $ ArbMove (goUnmatchedB Backward '{' '}')) ,("])", Replicate $ ArbMove (goUnmatchedB Forward '(' ')')) - ,("]}", Replicate $ ArbMove (goUnmatchedB Forward '{' '}')) - ] + ,("]}", Replicate $ ArbMove (goUnmatchedB Forward '{' '}'))] -- | movement commands (with inclusive cut/yank semantics) moveCmdFM_inclusive :: [(Event, (Int -> ViMove))] hunk ./Yi/Keymap/Vim.hs 240 moveCmdFM_inclusive = - -- left/right - [(char '$', eol) - ,(spec KEnd, eol) - -- words - ,(char 'e', Replicate $ GenMove unitViWord (Forward, InsideBound) Forward) + [(char 'e', Replicate $ GenMove unitViWord (Forward, InsideBound) Forward) ,(char 'E', Replicate $ GenMove unitViWORD (Forward, InsideBound) Forward)] hunk ./Yi/Keymap/Vim.hs 242 - where - eol = Replicate $ viMoveToEol -- | movement *multi-chars* commands (with inclusive cut/yank semantics) moveCmdS_inclusive :: [(String, (Int -> ViMove))] hunk ./Yi/Keymap/Vim.hs 256 <*> (savingPointB (viMove move >> pointB)) <*> pure regionStyle + -- viMove Normal Mode + viMoveNM :: ViMove -> BufferM () + viMoveNM move = viMove move >> leftOnEol + viMove :: ViMove -> BufferM () viMove NoMove = return () viMove (GenMove unit boundary dir) = genMoveB unit boundary dir hunk ./Yi/Keymap/Vim.hs 390 ,(ctrl $ char 'r', withBuffer . flip replicateM_ redoB) ,(ctrl $ char 'z', const suspendEditor) ,(ctrl $ char ']', const gotoTagCurrentWord) - ,(char 'D', withEditor . cut Exclusive . (Replicate $ Move Line Forward)) + ,(char 'D', withEditor . cut Exclusive . ArbMove . viMoveToNthEol) ,(char 'J', const (withBuffer (moveToEol >> deleteN 1))) -- the "\n" ,(char 'Y', \n -> withEditor $ do let move = Replicate (Move Line Forward) n hunk ./Yi/Keymap/Vim.hs 567 when (rowsCut > 2) $ printMsg $ show rowsCut ++ " fewer lines" cut :: RegionStyle -> ViMove -> EditorM () - cut regionStyle move = - cutRegion regionStyle =<< (withBuffer0 $ regionOfViMove move regionStyle) + cut regionStyle move = do + region <- withBuffer0 $ regionOfViMove move regionStyle + cutRegion regionStyle region + withBuffer0 leftOnEol cutSelection :: EditorM () cutSelection = uncurry cutRegion =<< withBuffer0 regionOfSelection hunk ./Yi/Keymap/Vim.hs 579 pasteOverSelection = do txt <- getRegE withBuffer0 $ do - selectionStyle <- getDynamicB + selStyle <- getDynamicB start <- getSelectionMarkPointB stop <- pointB hunk ./Yi/Keymap/Vim.hs 582 - region <- mkRegionOfStyleB start stop $ selection2regionStyle $ selectionStyle + region <- mkRegionOfStyleB start stop $ selection2regionStyle $ selStyle moveTo $ regionStart region deleteRegionB region insertN txt hunk ./Yi/Keymap/Vim.hs 627 -- KeymapM. In this way vis_single is analogous to cmd2other -- vis_single :: SelectionStyle -> VimMode - vis_single selectionStyle = + vis_single selStyle = choice [spec KEsc ?>> return (), hunk ./Yi/Keymap/Vim.hs 629 - char 'V' ?>> change_vis_mode selectionStyle (SelectionStyle Line), - char 'v' ?>> change_vis_mode selectionStyle (SelectionStyle Character), + char 'V' ?>> change_vis_mode selStyle (SelectionStyle Line), + char 'v' ?>> change_vis_mode selStyle (SelectionStyle Character), char ':' ?>>! ex_mode ":'<,'>", char 'y' ?>>! yankSelection, char 'x' ?>>! cutSelection, hunk ./Yi/Keymap/Vim.hs 682 char 'o' ?>> beginIns self $ moveToEol >> insertB '\n', char 'O' ?>> beginIns self $ moveToSol >> insertB '\n' >> lineUp, char 'c' ?>> changeCmds, - char 'C' ?>> beginIns self $ cut Exclusive viMoveToEol, -- alias of "c$" + char 'C' ?>> beginIns self $ cut Exclusive viMoveToEol, -- alias of "c$" FIXME char 'S' ?>> beginIns self $ withBuffer0 moveToSol >> cut Exclusive viMoveToEol, -- non-linewise alias of "cc" char 's' ?>> beginIns self $ cut Exclusive (CharMove Forward), -- non-linewise alias of "cl" char '/' ?>>! ex_mode "/", hunk ./Yi/Keymap/Vim.hs 702 change :: ViMove -> RegionStyle -> ViMove -> I Event Action () change preMove regionStyle move = do write $ do - withBuffer0 $ viMove preMove + withBuffer0 $ viMoveNM preMove cut regionStyle move when (regionStyle == LineWise) $ withBuffer0 (insertB '\n' >> leftB) ins_mode self hunk ./Yi/Keymap/Vim.hs 1057 -- | Insert mode is either insertion actions, or the meta (\ESC) action ins_mode :: ModeMap -> VimMode -ins_mode self = write (setStatus ("-- INSERT --", defaultStyle)) >> many (v_ins_char self <|> kwd_mode) >> leave +ins_mode self = write (setStatus ("-- INSERT --", defaultStyle)) >> many (v_ins_char self <|> kwd_mode) >> leave >> (write leftB) beginIns :: (Show x, YiAction a x) => ModeMap -> a -> I Event Action () beginIns self a = write a >> ins_mode self Context: [Ctrl-t and Ctrl-d in insert mode (indentation) Krzysztof Goj <[EMAIL PROTECTED]>**20081202223751] [Fixed isMakefile: takeBaseName should be takeFileName. Otherwise makefile's named like foo.mk would not be recognized. [EMAIL PROTECTED] [Issue 202: indentation and Vim commands Krzysztof Goj <[EMAIL PROTECTED]>**20081202183446 Added indentation-awareness to cutRegion, pasteBefore and pasteAfter. ] [Better percent move. Krzysztof Goj <[EMAIL PROTECTED]>**20081202162105] [replace all: more helpful message [EMAIL PROTECTED] [fix build [EMAIL PROTECTED] [Better word and WORD motions for Vim keymap. Krzysztof Goj <[EMAIL PROTECTED]>**20081202132813] [doc [EMAIL PROTECTED] [Yi/Users/Gwern.hs: +shorter binding for gotoLn [EMAIL PROTECTED] Ignore-this: 5defc56344c3e1c61bd602d192e06af3 I find the default Emacs binding of M-g g tedious; why not just M-g? ] [doc [EMAIL PROTECTED] [make Accessor instance of Category [EMAIL PROTECTED] [use Control.Category [EMAIL PROTECTED] [Yi.Keymap.Emacs: +standard emacs M-; binding [EMAIL PROTECTED] Ignore-this: 5abf2d7154acfdcce44286f34ec238b9 ] [update to base>=4; replace all Control.Exception with Control.OldException [EMAIL PROTECTED] Ignore-this: 205b7c23a4ffcc16b8612d0b4edc9352 ] [better support for vivid colors [EMAIL PROTECTED] [Main.hs: minor indent [EMAIL PROTECTED] Ignore-this: b53fd55beb556c92b6bba9ee4a49cd61 ] [added C-w and C-u to ex mode Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103414] ['ZZ' closes window, not editor, 'ZQ' == ':q!' Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103311] [bump version number [EMAIL PROTECTED] [TAG 0.5.2 [EMAIL PROTECTED] Patch bundle hash: eac1120ece71b4c1510695f4b02ff138336140c1
Wed Dec 3 00:15:44 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Vim: ctrl+u, ctrl+d scrolling Wed Dec 3 00:35:09 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Vim visual mode: 's' is synonym to 'c' Wed Dec 3 00:58:07 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Ctrl+p, Ctrl+n in Ex mode Wed Dec 3 01:00:17 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Ctrl+h in Ex mode Wed Dec 3 02:26:14 CET 2008 Krzysztof Goj <[EMAIL PROTECTED]> * Ctrl+h in insert and replace mode; Ctrl+w in replace mode New patches: [Vim: ctrl+u, ctrl+d scrolling Krzysztof Goj <[EMAIL PROTECTED]>**20081202231544] hunk ./Yi/Buffer/HighLevel.hs 300 scrollByB f n = do h <- askWindow height scrollB $ n * (f h) +-- | Same as ScrollByB, but also moves the cursor +vimScrollByB :: (Int -> Int) -> Int -> BufferM () +vimScrollByB f n = do h <- askWindow height + scrollB $ n * (f h) + lineMoveRel $ n * (f h) + return () + -- | Scroll by n lines. scrollB :: Int -> BufferM () scrollB n = do setA pointDriveA False hunk ./Yi/Keymap/Vim.hs 377 singleCmdFM = [(ctrl $ char 'b', withBuffer . upScreensB) -- vim does (firstNonSpaceB;moveXorSol) ,(ctrl $ char 'f', withBuffer . downScreensB) - ,(ctrl $ char 'u', withBuffer . scrollByB (negate . (`div` 2))) - ,(ctrl $ char 'd', withBuffer . scrollByB (`div` 2)) + ,(ctrl $ char 'u', withBuffer . vimScrollByB (negate . (`div` 2))) + ,(ctrl $ char 'd', withBuffer . vimScrollByB (`div` 2)) ,(ctrl $ char 'g', const viFileInfo) ,(ctrl $ char 'l', const refreshEditor) ,(ctrl $ char 'r', withBuffer . flip replicateM_ redoB) [Vim visual mode: 's' is synonym to 'c' Krzysztof Goj <[EMAIL PROTECTED]>**20081202233509] hunk ./Yi/Keymap/Vim.hs 628 char 'x' ?>>! cutSelection, char 'd' ?>>! cutSelection, char 'p' ?>>! pasteOverSelection, + char 's' ?>> beginIns self (cutSelection >> withBuffer0 (setVisibleSelection False)), char 'c' ?>> beginIns self (cutSelection >> withBuffer0 (setVisibleSelection False))] [Ctrl+p, Ctrl+n in Ex mode Krzysztof Goj <[EMAIL PROTECTED]>**20081202235807] hunk ./Yi/Keymap/Vim.hs 761 spec KEsc ?>>! closeBufferAndWindowE, spec KBS ?>>! deleteB Character Backward, spec KDel ?>>! deleteB Character Forward, + (ctrl $ char 'p') ?>>! historyUp, spec KUp ?>>! historyUp, hunk ./Yi/Keymap/Vim.hs 763 + (ctrl $ char 'n') ?>>! historyDown, spec KDown ?>>! historyDown, spec KLeft ?>>! moveXorSol 1, spec KRight ?>>! moveXorEol 1, [Ctrl+h in Ex mode Krzysztof Goj <[EMAIL PROTECTED]>**20081203000017] hunk ./Yi/Keymap/Vim.hs 759 choice [spec KEnter ?>>! ex_buffer_finish, spec KTab ?>>! completeMinibuffer, spec KEsc ?>>! closeBufferAndWindowE, + (ctrl $ char 'h') ?>>! deleteB Character Backward, spec KBS ?>>! deleteB Character Backward, spec KDel ?>>! deleteB Character Forward, (ctrl $ char 'p') ?>>! historyUp, [Ctrl+h in insert and replace mode; Ctrl+w in replace mode Krzysztof Goj <[EMAIL PROTECTED]>**20081203012614] hunk ./Yi/Keymap/Vim.hs 713 spec KEnter ?>>! insertB '\n', spec KTab ?>>! insertTabB, (ctrl $ char 't') ?>>! shiftIndentOfLine 1, - (ctrl $ char 'd') ?>>! shiftIndentOfLine (-1), - (ctrl $ char 'w') ?>>! cut Exclusive (GenMove unitViWord (Backward,InsideBound) Backward)] + (ctrl $ char 'd') ?>>! shiftIndentOfLine (-1) + ] -- -- Some ideas for a better insert mode are contained in: hunk ./Yi/Keymap/Vim.hs 725 -- which suggest that movement commands be added to insert mode, along -- with delete. -- - def_ins_char = (spec KBS ?>>! adjBlock (-1) >> deleteB Character Backward) + def_ins_char = + choice [spec KBS ?>>! adjBlock (-1) >> deleteB Character Backward, + (ctrl $ char 'h') ?>>! adjBlock (-1) >> deleteB Character Backward, + (ctrl $ char 'w') ?>>! cut Exclusive (GenMove unitViWord (Backward,InsideBound) Backward) + ] <|> ins_rep_char <|| (textChar >>= write . (adjBlock 1 >>) . insertB) hunk ./Yi/Keymap/Vim.hs 743 -- characters in a line stays the same until you get to the end of the line. -- If a <NL> is typed, a line break is inserted and no character is deleted. rep_char :: VimMode - rep_char = (spec KBS ?>>! leftB) -- should undo unless pointer has been moved + rep_char = choice [spec KBS ?>>! leftB, + (ctrl $ char 'h') ?>>! leftB, + (ctrl $ char 'w') ?>>! genMoveB unitViWord (Backward,InsideBound) Backward + ] -- should undo unless pointer has been moved <|> ins_rep_char <|| do c <- textChar; write (do e <- atEol; if e then insertB c else writeB c) Context: [Ctrl-t and Ctrl-d in insert mode (indentation) Krzysztof Goj <[EMAIL PROTECTED]>**20081202223751] [Fixed isMakefile: takeBaseName should be takeFileName. Otherwise makefile's named like foo.mk would not be recognized. [EMAIL PROTECTED] [Issue 202: indentation and Vim commands Krzysztof Goj <[EMAIL PROTECTED]>**20081202183446 Added indentation-awareness to cutRegion, pasteBefore and pasteAfter. ] [Better percent move. Krzysztof Goj <[EMAIL PROTECTED]>**20081202162105] [replace all: more helpful message [EMAIL PROTECTED] [fix build [EMAIL PROTECTED] [Better word and WORD motions for Vim keymap. Krzysztof Goj <[EMAIL PROTECTED]>**20081202132813] [doc [EMAIL PROTECTED] [Yi/Users/Gwern.hs: +shorter binding for gotoLn [EMAIL PROTECTED] Ignore-this: 5defc56344c3e1c61bd602d192e06af3 I find the default Emacs binding of M-g g tedious; why not just M-g? ] [doc [EMAIL PROTECTED] [make Accessor instance of Category [EMAIL PROTECTED] [use Control.Category [EMAIL PROTECTED] [Yi.Keymap.Emacs: +standard emacs M-; binding [EMAIL PROTECTED] Ignore-this: 5abf2d7154acfdcce44286f34ec238b9 ] [update to base>=4; replace all Control.Exception with Control.OldException [EMAIL PROTECTED] Ignore-this: 205b7c23a4ffcc16b8612d0b4edc9352 ] [better support for vivid colors [EMAIL PROTECTED] [Main.hs: minor indent [EMAIL PROTECTED] Ignore-this: b53fd55beb556c92b6bba9ee4a49cd61 ] [added C-w and C-u to ex mode Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103414] ['ZZ' closes window, not editor, 'ZQ' == ':q!' Aleksandar Dimitrov <[EMAIL PROTECTED]>**20081201103311] [bump version number [EMAIL PROTECTED] [TAG 0.5.2 [EMAIL PROTECTED] Patch bundle hash: ccfac6643ca6b8ad66c1a3d84bcb773b2699bd83