diff --git a/fcore/cursor.sml b/fcore/cursor.sml index e4c6e9d..aaa500f 100644 --- a/fcore/cursor.sml +++ b/fcore/cursor.sml @@ -559,34 +559,14 @@ struct fun startViK (lg, strIdx, shd, cursorIdx, leftStrings, lhd, leftLines) = if String.sub (shd, strIdx) = #"\n" then + (* ? -> \n *) if strIdx > 0 then (* strIdx - 1 is in shd *) if String.sub (shd, strIdx - 1) = #"\n" then - (* strIdx - 1 is \n *) - if strIdx - 1 > 0 then - (* strIdx - 2 is in shd *) - if String.sub (shd, strIdx - 2) = #"\n" then - (* \n -> \n *) - cursorIdx - 1 - else - (* graphical-chr -> \n *) - helpVi0 - (strIdx - 2, shd, cursorIdx - 2, leftStrings, leftLines) - else - (* strIdx - 2 is in leftStrings *) - case (leftStrings, leftLines) of - (lshd :: lstl, llhd :: lltl) => - if String.sub (lshd, String.size lshd - 1) = #"\n" then - (* \n -> \n *) - cursorIdx - 1 - else - (* graphical-chr -> \n *) - helpVi0 - (String.size lshd - 2, lshd, cursorIdx - 2, lstl, lltl) - | (_, _) => - cursorIdx - 1 + (* \n -> \n *) + cursorIdx else - (* strIdx - 1 is not \n *) + (* non-graphical-chr -> \n *) let val lineColumn = getCursorColumn (lg, cursorIdx) in @@ -601,49 +581,18 @@ struct case (leftStrings, leftLines) of (lshd :: lstl, llhd :: lltl) => if String.sub (lshd, String.size lshd - 1) = #"\n" then - (* ? -> \n *) - if String.size lshd > 1 then - (* if strIdx - 2 is in lshd *) - if String.sub (lshd, String.size lshd - 2) = #"\n" then - (* \n -> \n *) - cursorIdx - 1 - else - (* graphical-chr -> \n *) - helpVi0 - (String.size lshd - 2, lshd, cursorIdx - 2, lstl, lltl) - else - (* strIdx - 2 is in lstl *) - (case (lstl, lltl) of - (stlhd :: stltl, ltlhd :: ltltl) => - if String.sub (stlhd, String.size stlhd - 1) = #"\n" then - (* \n -> \n *) - cursorIdx - 1 - else - (* graphical-chr -> \n *) - helpVi0 - ( String.size stlhd - 2, stlhd - , cursorIdx - 2, stltl, ltltl - ) - | (_, _) => - cursorIdx - 1) + (* \n -> \n *) + cursorIdx else - (* does not start with \n - * so start viK normally *) - let - val lineColumn = getCursorColumn (lg, cursorIdx) - in - helpViK - ( strIdx, shd, cursorIdx - , lineColumn, lineColumn, false - , leftStrings, lhd, leftLines - ) - end + (* graphical-chr -> \n *) + helpVi0 + (String.size lshd - 2, lshd, cursorIdx - 2, lstl, lltl) | (_, _) => cursorIdx else (* strIdx does not start with \n * so start viK normally*) let - val lineColumn = getCursorColumn (lg, cursorIdx) + val lineColumn = getCursorColumn (lg, cursorIdx) + 1 in helpViK ( strIdx, shd, cursorIdx @@ -659,30 +608,13 @@ struct lineGap in case (rightStrings, rightLines) of - (strHd :: strTl, lnHd :: lnTl) => + (strHd :: _, lnHd :: _) => let (* convert absolute cursorIdx to idx relative to hd string *) val strIdx = cursorIdx - bufferIdx in - if strIdx < String.size strHd then - (* strIdx is in this string *) - startViK - (lineGap, strIdx, strHd, cursorIdx, leftStrings, lnHd, leftLines) - else - (* strIdx must be in the strTl *) - (case (strTl, lnTl) of - (nestStrHd :: nestStrTl, nestLnHd :: nestLnTl) => - let - val strIdx = strIdx - String.size strHd - val leftStrings = strHd :: leftStrings - val leftLines = lnHd :: leftLines - in - startViK - ( lineGap, strIdx, nestStrHd, cursorIdx - , leftStrings, nestLnHd, leftLines - ) - end - | (_, _) => cursorIdx) + startViK + (lineGap, strIdx - 1, strHd, cursorIdx - 1, leftStrings, lnHd, leftLines) end | (_, _) => (* nowhere to go rightward, so return cursorIdx *) diff --git a/shf b/shf index 5dfb3a8..629a0be 100755 Binary files a/shf and b/shf differ