diff options
Diffstat (limited to 'shed_history.c')
-rw-r--r-- | shed_history.c | 31 |
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; } |