add functionality for commands: 'dgg' (delete from cursor to start of buffer), 'dge' (delete from cursor to the end of the previous word) and 'dgE' (delete from cursor to the end of the previous WORD)

This commit is contained in:
2024-11-10 07:34:30 +00:00
parent bc27925e75
commit 58a9c2ec69
2 changed files with 42 additions and 26 deletions

View File

@@ -463,6 +463,26 @@ struct
helpDeleteToChr
(app, #buffer app, #cursorIdx app, #cursorIdx app, count, fMove, fInc, chr)
fun deleteToStart (app: app_type) =
let
val {cursorIdx, buffer, windowWidth, windowHeight, ...} = app
val buffer = LineGap.delete(0, cursorIdx, buffer)
val cursorIdx = 0
val startLine = 0
val buffer = LineGap.goToIdx (cursorIdx, buffer)
val drawMsg =
TextBuilder.build
(startLine, cursorIdx, buffer, windowWidth, windowHeight)
val mode = NORMAL_MODE ""
val newApp = AppWith.bufferAndCursorIdx
(app, buffer, cursorIdx, mode, startLine)
in
(newApp, drawMsg)
end
(* command-parsing functions *)
(** number of characters which are integers *)
fun getNumLength (pos, str) =
@@ -592,44 +612,40 @@ struct
#"t" =>
(* delete till chr, forwards *)
(case newCmd of
CHAR_EVENT chr =>
deleteToChr (app, 1, Cursor.tillNextChr, op+, chr)
| KEY_ESC =>
clearMode app
| RESIZE_EVENT (width, height) =>
resizeText (app, width, height))
CHAR_EVENT chr => deleteToChr (app, 1, Cursor.tillNextChr, op+, chr)
| KEY_ESC => clearMode app
| RESIZE_EVENT (width, height) => resizeText (app, width, height))
| #"T" =>
(* delete till chr, backwards *)
(case newCmd of
CHAR_EVENT chr =>
deleteToChr (app, 1, Cursor.tillPrevChr, op-, chr)
| KEY_ESC =>
clearMode app
| RESIZE_EVENT (width, height) =>
resizeText (app, width, height))
CHAR_EVENT chr => deleteToChr (app, 1, Cursor.tillPrevChr, op-, chr)
| KEY_ESC => clearMode app
| RESIZE_EVENT (width, height) => resizeText (app, width, height))
| #"d" =>
(* delete whole line *)
clearMode app
| #"f" =>
(case newCmd of
CHAR_EVENT chr =>
deleteToChr (app, count, Cursor.toNextChr, op+, chr)
| KEY_ESC =>
clearMode app
| RESIZE_EVENT (width, height) =>
resizeText (app, width, height))
CHAR_EVENT chr => deleteToChr (app, count, Cursor.toNextChr, op+, chr)
| KEY_ESC => clearMode app
| RESIZE_EVENT (width, height) => resizeText (app, width, height))
| #"F" =>
(* delete to chr, backwards *)
(case newCmd of
CHAR_EVENT chr =>
deleteToChr (app, count, Cursor.toPrevChr, op-, chr)
| KEY_ESC =>
clearMode app
| RESIZE_EVENT (width, height) =>
resizeText (app, width, height))
CHAR_EVENT chr => deleteToChr (app, count, Cursor.toPrevChr, op-, chr)
| KEY_ESC => clearMode app
| RESIZE_EVENT (width, height) => resizeText (app, width, height))
| #"g" =>
(* todo: same events as handleGo *)
clearMode app
(* same events as handleGo *)
(case newCmd of
CHAR_EVENT chr =>
(case chr of
#"e" => delete (app, count, Cursor.endOfPrevWord)
| #"E" => delete (app, count, Cursor.endOfPrevWORD)
| #"g" => deleteToStart app
| _ => clearMode app)
| KEY_ESC => clearMode app
| RESIZE_EVENT (width, height) => resizeText (app, width, height))
| _ => clearMode app
(* useful reference as list of non-terminal commands *)

BIN
shf

Binary file not shown.