summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2023-04-02 13:29:53 -0400
committerJakob Kaivo <jkk@ung.org>2023-04-02 13:29:53 -0400
commit35bae7113bbfdd40b98fbff250cf561e678c3739 (patch)
treeceeb2cc0bba75a4a1056a4ac723b283e4d86a5f9
parentf1580e611a3d5e41881f535969df960723c8dea7 (diff)
stop clearing screen on history traversal
-rw-r--r--shed_history.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/shed_history.c b/shed_history.c
index 076554c..00ce0e1 100644
--- a/shed_history.c
+++ b/shed_history.c
@@ -1,18 +1,41 @@
#include <stddef.h>
+#include <string.h>
+#include <unistd.h>
#include "shed.h"
+static int shed_refresh(struct shed *e, struct buffer *next)
+{
+ shed_move_end(e);
+ size_t s = e->cur->pos;
+ char clrbuf[s];
+
+ memset(clrbuf, '\b', s);
+ write(STDOUT_FILENO, clrbuf, s);
+
+ memset(clrbuf, ' ', s);
+ write(STDOUT_FILENO, clrbuf, s);
+
+ memset(clrbuf, '\b', s);
+ write(STDOUT_FILENO, clrbuf, s);
+
+ e->cur = next;
+ e->cur->pos = 0;
+ shed_move_end(e);
+ return 1;
+}
+
int shed_history_forward(struct shed *e)
{
if (e->cur->next != NULL) {
- e->cur = e->cur->next;
+ return shed_refresh(e, e->cur->next);
}
- return shed_redraw(e);
+ return 1;
}
int shed_history_backward(struct shed *e)
{
if (e->cur->prev != NULL) {
- e->cur = e->cur->prev;
+ return shed_refresh(e, e->cur->prev);
}
- return shed_redraw(e);
+ return 1;
}