commit e5f164eb8cb1dd73aa3840943abc9928d3a0d4fb
parent 4ae2a4ff3a376d8f04b13f455454a358d3fe90a6
Author: ssnf <ssnf@ssnf.xyz>
Date: Thu, 30 Jan 2025 22:30:26 +0000
add full undo/redo commands
Diffstat:
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -54,7 +54,9 @@ Key keys[] = {
{ '?', search, '?' },
{ 'n', search, 'n' },
{ 'N', search, 'N' },
- { 'u', undo },
- { Ctrl + 'r', redo },
+ { 'u', undo, 0 },
+ { 'U', undo, 1 },
+ { Ctrl + 'r', redo, 0 },
+ { 'R', redo, 1 },
{ 'y', yank }
};
diff --git a/sim.c b/sim.c
@@ -409,6 +409,11 @@ redo(int arg)
{
if (f->i == buf->n - 1)
return;
+ if (arg) {
+ for (;f->i != buf->n - 1;)
+ redo(0);
+ return;
+ }
if (buf->ds[++f->i].n)
str_delete(
&f->s, buf->p0[f->i], buf->p0[f->i] + buf->ds[f->i].n
@@ -1112,6 +1117,11 @@ undo(int arg)
{
if (f->i < 0)
return;
+ if (arg) {
+ for (;f->i != -1;)
+ undo(0);
+ return;
+ }
if (buf->is[f->i].n)
str_delete(
&f->s, buf->p0[f->i], buf->p0[f->i] + buf->is[f->i].n