Repository : ssh://darcs.haskell.org//srv/darcs/packages/haskeline

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/b30bf5d22007526483fe961504f5bcf8b7052f46

>---------------------------------------------------------------

commit b30bf5d22007526483fe961504f5bcf8b7052f46
Author: Judah Jacobson <[email protected]>
Date:   Sun Oct 16 21:28:29 2011 +0000

    Fix #115: make the "df" and "dt" commands behave as in vim and readline.

>---------------------------------------------------------------

 System/Console/Haskeline/Vi.hs |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/System/Console/Haskeline/Vi.hs b/System/Console/Haskeline/Vi.hs
index 28a7e16..c5618cb 100644
--- a/System/Console/Haskeline/Vi.hs
+++ b/System/Console/Haskeline/Vi.hs
@@ -144,27 +144,34 @@ repeatedCommands = choiceCmd [argumented, doBefore noArg 
repeatableCommands]
                             ]
 
 pureMovements :: InputKeyCmd (ArgMode CommandMode) CommandMode
-pureMovements = choiceCmd $
-            map mkCharCommand charMovements
-            ++ map mkSimpleCommand movements
+pureMovements = choiceCmd $ charMovements ++ map mkSimpleCommand movements
     where
+        charMovements = [ charMovement 'f' $ \c -> goRightUntil $ overChar 
(==c)
+                        , charMovement 'F' $ \c -> goLeftUntil $ overChar (==c)
+                        , charMovement 't' $ \c -> goRightUntil $ beforeChar 
(==c)
+                        , charMovement 'T' $ \c -> goLeftUntil $ afterChar 
(==c)
+                        ]
         mkSimpleCommand (k,move) = k +> change (applyCmdArg move)
-        mkCharCommand (k,move) = k +> keyChoiceCmd [
+        charMovement c move = simpleChar c +> keyChoiceCmd [
                                         useChar (change . applyCmdArg . move)
                                         , withoutConsuming (change argState)
                                         ]
 
 useMovementsForKill :: Command m s t -> (KillHelper -> Command m s t) -> 
KeyCommand m s t
 useMovementsForKill alternate useHelper = choiceCmd $
-            map mkCharCommand charMovements
-            ++ specialCases
+            specialCases
             ++ map (\(k,move) -> k +> useHelper (SimpleMove move)) movements
     where
         specialCases = [ simpleChar 'e' +> useHelper (SimpleMove 
goToWordDelEnd)
                        , simpleChar 'E' +> useHelper (SimpleMove 
goToBigWordDelEnd)
                        , simpleChar '%' +> useHelper (GenericKill 
deleteMatchingBrace)
+                       -- Note 't' and 'f' behave differently than in 
pureMovements.
+                       , charMovement 'f' $ \c -> goRightUntil $ afterChar 
(==c)
+                       , charMovement 'F' $ \c -> goLeftUntil $ overChar (==c)
+                       , charMovement 't' $ \c -> goRightUntil $ overChar (==c)
+                       , charMovement 'T' $ \c -> goLeftUntil $ afterChar (==c)
                        ]
-        mkCharCommand (k,move) = k +> keyChoiceCmd [
+        charMovement c move = simpleChar c +> keyChoiceCmd [
                                     useChar (useHelper . SimpleMove . move)
                                     , withoutConsuming alternate]
 
@@ -275,13 +282,6 @@ movements = [ (simpleChar 'h', goLeft)
             , (simpleChar 'E', goRightUntil (atEnd isBigWordChar))
             ]
 
-charMovements :: [(Key, Char -> InsertMode -> InsertMode)]
-charMovements = [ (simpleChar 'f', \c -> goRightUntil $ overChar (==c))
-                       , (simpleChar 'F', \c -> goLeftUntil $ overChar (==c))
-                       , (simpleChar 't', \c -> goRightUntil $ beforeChar 
(==c))
-                       , (simpleChar 'T', \c -> goLeftUntil $ afterChar (==c))
-                       ]
-
 {- 
 From IEEE 1003.1:
 A "bigword" consists of: a maximal sequence of non-blanks preceded and 
followed by blanks



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to