diff --git a/fcore/cursor.sml b/fcore/cursor.sml index 07e695b..1b82a07 100644 --- a/fcore/cursor.sml +++ b/fcore/cursor.sml @@ -1251,38 +1251,4 @@ struct end | [] => true end - - (* Prerequisite: lineGap is moved to cursorIdx *) - fun clipIdx (lineGap: LineGap.t, cursorIdx) = - let - val {rightStrings, idx = bufferIdx, ...} = lineGap - in - (* We are trying to check if cursorIdx is within the buffer. *) - case rightStrings of - _ :: _ :: _ => - (* if there is a string after the hd, - * we are definitely in a valid idx and should return it *) - cursorIdx - | [hd] => - let - val strIdx = cursorIdx - bufferIdx - in - if strIdx < String.size hd - 1 then - (* if we are before the last char in the string. - * Unix file endings always have \n at the end - * but we do not want cursor to ever go to end - * as vi also does not go to the very end. - * This is why we check strIdx is before the last char. - * *) - cursorIdx - else - (* if end of buffer - 2 is greater than 0, then that; - * else, 0 *) - Int.max (bufferIdx + String.size hd - 2, 0) - end - | [] => - (* if end of buffer - 2 is greater than 0, then that; - * else, 0 *) - Int.max (bufferIdx - 2, 0) - end end diff --git a/fcore/normal-mode/make-normal-delete.sml b/fcore/normal-mode/make-normal-delete.sml index d16d790..110b223 100644 --- a/fcore/normal-mode/make-normal-delete.sml +++ b/fcore/normal-mode/make-normal-delete.sml @@ -164,7 +164,11 @@ struct let val low = Int.min (cursorIdx, otherIdx) val high = Int.max (cursorIdx, otherIdx) - val high = Cursor.clipIdx (buffer, high) + val high = + if high >= #textLength buffer - 2 then + Int.max (#textLength buffer - 2, 0) + else + high val length = high - low val buffer = LineGap.goToIdx (high, buffer) @@ -183,7 +187,11 @@ struct * is no longer a valid idx, * clip cursorIdx to the end. *) val buffer = LineGap.goToIdx (low, buffer) - val cursorIdx = Cursor.clipIdx (buffer, low) + val cursorIdx = + if low >= #textLength buffer then + Int.max (#textLength buffer - 2, low) + else + low in NormalFinish.buildTextAndClear (app, buffer, cursorIdx, searchList, initialMsg, time)