summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/main.c b/main.c
index ceae415..ac2c1f3 100644
--- a/main.c
+++ b/main.c
@@ -108,6 +108,7 @@ int ed_buf_open(Editor *e, const char *path) {
txt_load_empty(b.txt);
}
b.cur = txt_end(b.txt);
+ txt_hist_push(b.txt, b.cur);
e->buf[e->bufn] = b;
return e->bufn++;
}
@@ -129,6 +130,7 @@ void ed_init(Editor *e) {
e->bufi = ed_buf_open(e, NULL);
Str s = S("(Scratch buffer, type whatever)");
e->buf[e->bufi].cur = txt_insert(e->buf[e->bufi].cur, s.s, s.n);
+ txt_hist_push(e->buf[e->bufi].txt, e->buf[e->bufi].cur);
}
void ed_fini(Editor *e) {
@@ -1415,11 +1417,6 @@ void mode_key_normal(Editor *e, u32 c) {
yank_range(e, eb->cur, end_of_line(eb->cur));
eb->cur = txt_delete_range(eb->cur, end_of_line(eb->cur));
break;
- case 'C':
- yank_range(e, eb->cur, end_of_line(eb->cur));
- eb->cur = txt_delete_range(eb->cur, end_of_line(eb->cur));
- e->mode = 1;
- break;
case 'S': {
TxtLoc start = start_of_line(eb->cur);
TxtLoc end = end_of_line(eb->cur);
@@ -1445,6 +1442,11 @@ void mode_key_normal(Editor *e, u32 c) {
}
break;
}
+ case 'C':
+ yank_range(e, eb->cur, end_of_line(eb->cur));
+ eb->cur = txt_delete_range(eb->cur, end_of_line(eb->cur));
+ e->mode = 1;
+ break;
case 'x':
yank_range(e, eb->cur, cnext(eb->cur));
eb->cur = txt_delete_c(cnext(eb->cur));
@@ -1554,10 +1556,23 @@ void mode_key_normal(Editor *e, u32 c) {
if (s.n > 0) ed_buf_change_path(e, e->bufi, s);
} break;
+ case 'u':
+ txt_hist_back(eb->txt, &eb->cur);
+ break;
+
+ case 'U':
+ txt_hist_fwd(eb->txt, &eb->cur);
+ break;
+
default:
motion(&eb->cur, c);
break;
}
+
+ if (e->bufn > 0) {
+ eb = &e->buf[e->bufi];
+ txt_hist_push(eb->txt, eb->cur);
+ }
}
void mode_key_insert(Editor *e, u32 c) {
@@ -1567,6 +1582,7 @@ void mode_key_insert(Editor *e, u32 c) {
if (txt_after(eb->cur, start_of_line(eb->cur))) {
eb->cur = cprev(eb->cur);
}
+ txt_hist_push(eb->txt, eb->cur);
e->mode = 0;
break;
case KEY_BKSP: