summaryrefslogtreecommitdiff
path: root/shed_edit.c
blob: 44af225ca8688535532f3ec9d15adf9ce997553f (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#define _POSIX_C_SOURCE 200809L
#include <ctype.h>
#include <stdlib.h>
#include "shed.h"

int shed_handle_edit(struct shed *e, struct termios *t, char c)
{
	(void)t;
	int r = -1;

	switch (c) {
	case '\n':	r = shed_execute(e);		break;
	case CTRL_L:	r = shed_redraw(e);		break;
	case '#':	r = shed_comment(e);		break;

	case '=':	// r = shed_complete_wordexp(e);	break;
	case '\\':	// r = shed_complete_pathname(e);	break;
	case '*':	// r = shed_complete_wildcard(e);	break;

	case '@':	// r = shed_insert_alias(e);	// read one letter

	case '~':	r = shed_convert_case(e);	break;
	case '.':	// r = shed_repeat(e);	break;
	case 'v':	// r = shed_invoke_vi(e);	break;

	case 'l':	/* FALLTHROUGH */
	case ' ':	r = shed_move_forward(e);	break;
	case 'h':	r = shed_move_backward(e);	break;
	case 'w':	// r = shed_move_forword(e);	break;
	case 'W':	// r = shed_move_forbigword(e);	break;
	case 'e':	// r = shed_move_endword(e);	break;
	case 'E':	// r = shed_move_endbigword(e);	break;
	case 'b':	// r = shed_move_backword(e);	break;
	case 'B':	// r = shed_move_backbigword(e);	break;
	case '^':	r = shed_move_beginning(e);	break;
	case '$':	r = shed_move_end(e);	break;
	case '0':	r = shed_move_0(e);		break;
	case '|':	r = shed_move_column(e);	break;

	case 'f':	// r = shed_move_first(e);	break;
	case 'F':	// r = shed_move_prev(e);	break;
	case 't':	// r = shed_move_before(e);	break;
	case 'T':	// r = shed_move_after(e);	break;
	case ';':	// r = shed_repeat_fftt(e);	break;
	case ',':	// r = shed_reverse_fftt(e);	break;

	case 'a':	r = shed_append(e);			break;
	case 'A':	r = shed_append_end(e);		break;
	case 'i':	r = shed_insert(e);			break;
	case 'I':	r = shed_insert_beginning(e);	break;
	case 'R':	r = shed_replace(e);			break;

	case 'c':	// r = shed_delete_to(e);	break;
	case 'C':	r = shed_change(e);		break;
	case 'S':	r = shed_start_over(e);	break;

	case 'r':	// r = shed_replace(e);	break;
	case '_':	// ???
	case 'x':	r = shed_delete(e);		break;
	case 'X':	r = shed_backspace(e);	break;
	case 'd':	// r = shed_delete_motion(e);	break;
	case 'D':	r = shed_delete_toend(e);		break;
	case 'y':	// r = shed_yank(e);		break;
	case 'Y':	// r = shed_bigyank(e);	break;
	case 'p':	// r = shed_paste(e);	break;
	case 'P':	// r = shed_bigpaste(e);	break;

	case 'u':	// r = shed_undo(e);		break;
	case 'U':	// r = shed_bigundo(e);	break;

	case 'k':	/* FALLTHROUGH */
	case '-':	// r = shed_history_back(e);	break;

	case 'j':	/* FALLTHOUGH */
	case '+':	// r = shed_history_forward(e);	break;

	case 'G':	// r = shed_history_first(e);	break;
	case '/':	// r = shed_history_backsearch(e);	break;
	case '?':	// r = shed_history_forwardsearch(e);	break;
	case 'n':	// r = shed_history_repeat(e);	break;
	case 'N':	// r = shed_history_reverse(e);	break;

	default:
		break;
	}

	if (isdigit(c)) {
		char digit[2] = { c, '\0' };
		e->count = (e->count * 10) + atoi(digit);
	}

	if (r != -1) {
		e->count = 0;
	}

	return r;
}