summaryrefslogtreecommitdiff
path: root/shed_history.c
blob: 00ce0e1e5fb65c2752eea7ee9c7def61c2cd2fd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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) {
		return shed_refresh(e, e->cur->next);
	}
	return 1;
}

int shed_history_backward(struct shed *e)
{
	if (e->cur->prev != NULL) {
		return shed_refresh(e, e->cur->prev);
	}
	return 1;
}