ref: 15cc6b688b0c510976fc0bb802dcbcc8f1b043c5
parent: 802df8d23433934b946358c215585ed01ef8586e
author: phil9 <telephil9@gmail.com>
date: Wed Dec 29 07:18:40 EST 2021
make undo keep track of modification state modification state is now properly reflected when performing undo/redo.
--- a/a.h
+++ b/a.h
@@ -31,6 +31,7 @@
int index;
uchar value;
uchar newvalue;
+ int modified;
};
int canundo(void);
@@ -37,7 +38,7 @@
void undo(Undo*);
int canredo(void);
void redo(Undo*);
-void pushundo(int, int, uchar, uchar);
+void pushundo(int, int, uchar, uchar, int);
void patchundo(uchar);
/* COLORS */
--- a/undo.c
+++ b/undo.c
@@ -21,6 +21,7 @@
undo->index = ustack[ucur].index;
undo->value = ustack[ucur].value;
undo->newvalue = ustack[ucur].newvalue;
+ undo->modified = ustack[ucur].modified;
ucur -= 1;
}
@@ -38,10 +39,11 @@
undo->index = ustack[ucur].index;
undo->value = ustack[ucur].value;
undo->newvalue = ustack[ucur].newvalue;
+ undo->modified = ustack[ucur].modified;
}
void
-pushundo(int action, int index, uchar value, uchar newvalue)
+pushundo(int action, int index, uchar value, uchar newvalue, int modified)
{
if(ucur == Stacksize - 1)
return;
@@ -51,6 +53,7 @@
ustack[ucur].index = index;
ustack[ucur].value = value;
ustack[ucur].newvalue = newvalue;
+ ustack[ucur].modified = modified;
}
void
--- a/vexed.c
+++ b/vexed.c
@@ -74,7 +74,7 @@
break;
}
sel = u.index;
- modified = 1;
+ modified = u.modified;
blines = buf.count / 16;
redraw();
}
@@ -134,7 +134,7 @@
void
xdelete(void)
{
- pushundo(Udelete, sel, buf.data[sel], 0);
+ pushundo(Udelete, sel, buf.data[sel], 0, modified);
if(delete(&buf, sel) < 0)
sysfatal("delete: %r");
if(sel == buf.count)
@@ -147,7 +147,7 @@
void
xinsert(void)
{
- pushundo(Uinsert, sel, 0, 0);
+ pushundo(Uinsert, sel, 0, 0, modified);
if(insert(&buf, sel) < 0)
sysfatal("insert: %r");
modified = 1;
@@ -158,7 +158,7 @@
void
xappend(void)
{
- pushundo(Uappend, sel, 0, 0);
+ pushundo(Uappend, sel, 0, 0, modified);
if(append(&buf, sel) < 0)
sysfatal("append: %r");
sel += 1;
@@ -529,7 +529,7 @@
lastv = -1;
}else{
lastv = hexval(k);
- pushundo(Uset, sel, buf.data[sel], lastv);
+ pushundo(Uset, sel, buf.data[sel], lastv, modified);
buf.data[sel] = lastv;
}
modified = 1;