Add xterm-256color as a valid terminal.
[eco.git] / key.c
blob8a426846c66dba19f0d65b009ddc0937555b2782
1 /*
2 * Copyright (C) 2008 Diego Hernan Borghetti.
3 * Eco
4 */
6 #include <stdio.h>
7 #include <stdlib.h>
9 #include "term.h"
10 #include "screen.h"
11 #include "buffer.h"
12 #include "view.h"
13 #include "eco.h"
14 #include "status.h"
15 #include "key.h"
18 /* key list. */
19 E_Key *keys= NULL;
21 void e_key_free(void)
23 E_Key *p;
25 while (keys) {
26 p= keys->next;
27 free((void *)keys);
28 keys= p;
32 E_Key *__e_key_find(short code, short ctrl_x)
34 E_Key *p;
36 p= keys;
37 while (p) {
38 if (p->code == code && p->ctrl_x == ctrl_x)
39 return(p);
40 p= p->next;
42 return(NULL);
45 void e_key_add(short code, short ctrl_x, void (*cb)(E_Eco *))
47 E_Key *key= __e_key_find(code, ctrl_x);
49 if (key)
50 return;
52 key= (E_Key *)malloc(sizeof(E_Key));
53 if (!key)
54 return;
56 key->next= keys;
57 key->ctrl_x= ctrl_x;
58 key->code= code;
59 key->exec= cb;
60 keys= key;
63 void e_key_remove(short code, short ctrl_x)
65 E_Key *p, *p1;
67 p= keys;
68 p1= NULL;
69 while (p) {
70 if (p->code == code && p->ctrl_x == ctrl_x) {
71 if (p1)
72 p1->next= p->next;
73 else
74 keys= p->next;
76 free((void *)p);
77 return;
79 p1= p;
80 p= p->next;
84 int e_key_exec(E_Eco *ec, short code, short ctrl_x)
86 E_Key *key;
88 key= __e_key_find(code, ctrl_x);
89 if (key) {
90 (*key->exec) (ec);
91 return(0);
93 return(1);