Blame
Date:
Sun Apr 24 15:02:52 2022 UTC
Message:
add forgotten include for string.h
001
2021-03-13
op
/*
002
2021-03-13
op
* Copyright (c) 2021 Omar Polo <op@omarpolo.com>
003
2021-03-13
op
*
004
2021-03-13
op
* Permission to use, copy, modify, and distribute this software for any
005
2021-03-13
op
* purpose with or without fee is hereby granted, provided that the above
006
2021-03-13
op
* copyright notice and this permission notice appear in all copies.
007
2021-03-13
op
*
008
2021-03-13
op
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
009
2021-03-13
op
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
010
2021-03-13
op
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
011
2021-03-13
op
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
012
2021-03-13
op
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
013
2021-03-13
op
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
014
2021-03-13
op
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
015
2021-03-13
op
*/
016
2021-03-13
op
017
2021-07-21
op
#include "compat.h"
018
2021-03-13
op
019
2021-03-13
op
#include <ctype.h>
020
2021-03-13
op
#include <curses.h>
021
2021-03-13
op
#include <stdlib.h>
022
2022-04-24
op
#include <string.h>
023
2021-03-13
op
024
2021-11-05
op
#include "keymap.h"
025
2021-07-21
op
#include "telescope.h"
026
2022-01-11
op
#include "utils.h"
027
2021-07-21
op
028
2021-03-13
op
#define CTRL(n) ((n)&0x1F)
029
2021-03-13
op
030
2021-03-13
op
static struct keytable {
031
2021-03-15
op
const char *p;
032
2021-03-15
op
int k;
033
2021-03-13
op
} keytable[] = {
034
2021-03-13
op
{ "<up>", KEY_UP },
035
2021-03-13
op
{ "<down>", KEY_DOWN },
036
2021-03-13
op
{ "<left>", KEY_LEFT },
037
2021-03-13
op
{ "<right>", KEY_RIGHT },
038
2021-03-13
op
{ "<prior>", KEY_PPAGE },
039
2021-03-13
op
{ "<next>", KEY_NPAGE },
040
2021-03-13
op
{ "<home>", KEY_HOME },
041
2021-03-13
op
{ "<end>", KEY_END },
042
2021-03-13
op
/* ... */
043
2021-03-15
op
{ "<f0>", KEY_F(0) },
044
2021-03-15
op
{ "<f1>", KEY_F(1) },
045
2021-03-15
op
{ "<f2>", KEY_F(2) },
046
2021-03-15
op
{ "<f3>", KEY_F(3) },
047
2021-03-15
op
{ "<f4>", KEY_F(4) },
048
2021-03-15
op
{ "<f5>", KEY_F(5) },
049
2021-03-15
op
{ "<f6>", KEY_F(6) },
050
2021-03-15
op
{ "<f7>", KEY_F(7) },
051
2021-03-15
op
{ "<f8>", KEY_F(8) },
052
2021-03-15
op
{ "<f9>", KEY_F(9) },
053
2021-03-15
op
{ "<f10>", KEY_F(10) },
054
2021-03-15
op
{ "<f11>", KEY_F(11) },
055
2021-03-15
op
{ "<f12>", KEY_F(12) },
056
2021-03-15
op
{ "<f13>", KEY_F(13) },
057
2021-03-15
op
{ "<f14>", KEY_F(14) },
058
2021-03-15
op
{ "<f15>", KEY_F(15) },
059
2021-03-15
op
{ "<f16>", KEY_F(16) },
060
2021-03-15
op
{ "<f17>", KEY_F(17) },
061
2021-03-15
op
{ "<f18>", KEY_F(18) },
062
2021-03-15
op
{ "<f19>", KEY_F(19) },
063
2021-03-15
op
{ "<f20>", KEY_F(20) },
064
2021-03-15
op
{ "<f21>", KEY_F(21) },
065
2021-03-15
op
{ "<f22>", KEY_F(22) },
066
2021-03-15
op
{ "<f23>", KEY_F(23) },
067
2021-03-15
op
{ "<f24>", KEY_F(24) },
068
2021-03-15
op
{ "<f25>", KEY_F(25) },
069
2021-03-15
op
{ "<f26>", KEY_F(26) },
070
2021-03-15
op
{ "<f27>", KEY_F(27) },
071
2021-03-15
op
{ "<f28>", KEY_F(28) },
072
2021-03-15
op
{ "<f29>", KEY_F(29) },
073
2021-03-15
op
{ "<f30>", KEY_F(30) },
074
2021-03-15
op
{ "<f31>", KEY_F(31) },
075
2021-03-15
op
{ "<f32>", KEY_F(32) },
076
2021-03-15
op
{ "<f33>", KEY_F(33) },
077
2021-03-15
op
{ "<f34>", KEY_F(34) },
078
2021-03-15
op
{ "<f35>", KEY_F(35) },
079
2021-03-15
op
{ "<f36>", KEY_F(36) },
080
2021-03-15
op
{ "<f37>", KEY_F(37) },
081
2021-03-15
op
{ "<f38>", KEY_F(38) },
082
2021-03-15
op
{ "<f39>", KEY_F(39) },
083
2021-03-15
op
{ "<f40>", KEY_F(40) },
084
2021-03-15
op
{ "<f41>", KEY_F(41) },
085
2021-03-15
op
{ "<f42>", KEY_F(42) },
086
2021-03-15
op
{ "<f43>", KEY_F(43) },
087
2021-03-15
op
{ "<f44>", KEY_F(44) },
088
2021-03-15
op
{ "<f45>", KEY_F(45) },
089
2021-03-15
op
{ "<f46>", KEY_F(46) },
090
2021-03-15
op
{ "<f47>", KEY_F(47) },
091
2021-03-15
op
{ "<f48>", KEY_F(48) },
092
2021-03-15
op
{ "<f49>", KEY_F(49) },
093
2021-03-15
op
{ "<f50>", KEY_F(50) },
094
2021-03-15
op
{ "<f51>", KEY_F(51) },
095
2021-03-15
op
{ "<f52>", KEY_F(52) },
096
2021-03-15
op
{ "<f53>", KEY_F(53) },
097
2021-03-15
op
{ "<f54>", KEY_F(54) },
098
2021-03-15
op
{ "<f55>", KEY_F(55) },
099
2021-03-15
op
{ "<f56>", KEY_F(56) },
100
2021-03-15
op
{ "<f57>", KEY_F(57) },
101
2021-03-15
op
{ "<f58>", KEY_F(58) },
102
2021-03-15
op
{ "<f59>", KEY_F(59) },
103
2021-03-15
op
{ "<f60>", KEY_F(60) },
104
2021-03-15
op
{ "<f61>", KEY_F(61) },
105
2021-03-15
op
{ "<f62>", KEY_F(62) },
106
2021-03-15
op
{ "<f63>", KEY_F(63) },
107
2021-03-15
op
/* ... */
108
2021-03-13
op
{ "del", KEY_BACKSPACE },
109
2021-03-26
op
{ "backspace", 127 },
110
2021-12-01
op
{ "esc", '\e' },
111
2021-03-13
op
{ "space", ' ' },
112
2021-03-13
op
{ "spc", ' ' },
113
2021-03-13
op
{ "enter", CTRL('m') },
114
2021-03-13
op
{ "ret", CTRL('m' )},
115
2021-03-13
op
{ "tab", CTRL('i') },
116
2021-06-15
op
{ "backtab", KEY_BTAB },
117
2021-03-13
op
/* ... */
118
2021-03-13
op
{ NULL, 0 },
119
2021-03-13
op
};
120
2021-03-13
op
121
2021-03-13
op
int
122
2021-03-13
op
kbd(const char *key)
123
2021-03-13
op
{
124
2021-03-13
op
struct keytable *t;
125
2021-03-13
op
126
2021-03-13
op
for (t = keytable; t->p != NULL; ++t) {
127
2022-04-24
op
if (!strncmp(key, t->p, strlen(t->p)))
128
2021-03-13
op
return t->k;
129
2021-03-13
op
}
130
2021-03-13
op
131
2021-03-13
op
return *key;
132
2021-03-13
op
}
133
2021-03-13
op
134
2021-03-13
op
const char *
135
2021-03-13
op
unkbd(int k)
136
2021-03-13
op
{
137
2021-03-13
op
struct keytable *t;
138
2021-03-13
op
139
2021-03-13
op
for (t = keytable; t->p != NULL; ++t) {
140
2021-03-13
op
if (k == t->k)
141
2021-03-13
op
return t->p;
142
2021-03-13
op
}
143
2021-03-13
op
144
2021-03-13
op
return NULL;
145
2021-03-13
op
}
146
2021-03-13
op
147
2021-03-13
op
int
148
2021-05-17
op
kmap_define_key(struct kmap *map, const char *key, void (*fn)(struct buffer*))
149
2021-03-13
op
{
150
2021-03-13
op
int ctrl, meta, k;
151
2021-03-13
op
struct keymap *entry;
152
2021-03-13
op
153
2021-03-13
op
again:
154
2022-04-24
op
if ((ctrl = !strncmp(key, "C-", 2)))
155
2021-03-13
op
key += 2;
156
2022-04-24
op
if ((meta = !strncmp(key, "M-", 2)))
157
2021-03-13
op
key += 2;
158
2021-03-13
op
if (*key == '\0')
159
2021-03-13
op
return 0;
160
2021-03-13
op
k = kbd(key);
161
2021-03-13
op
162
2021-03-13
op
if (ctrl)
163
2021-03-13
op
k = CTRL(k);
164
2021-03-13
op
165
2021-03-13
op
/* skip key & spaces */
166
2021-03-13
op
while (*key != '\0' && !isspace(*key))
167
2021-03-13
op
++key;
168
2021-03-13
op
while (*key != '\0' && isspace(*key))
169
2021-03-13
op
++key;
170
2021-03-13
op
171
2021-03-13
op
TAILQ_FOREACH(entry, &map->m, keymaps) {
172
2021-03-13
op
if (entry->meta == meta && entry->key == k) {
173
2021-03-13
op
if (*key == '\0') {
174
2021-03-13
op
entry->fn = fn;
175
2021-03-13
op
return 1;
176
2021-03-13
op
}
177
2021-03-13
op
map = &entry->map;
178
2021-03-13
op
goto again;
179
2021-03-13
op
}
180
2021-03-13
op
}
181
2021-03-13
op
182
2021-03-13
op
if ((entry = calloc(1, sizeof(*entry))) == NULL)
183
2021-03-13
op
return 0;
184
2021-03-13
op
185
2021-03-13
op
entry->meta = meta;
186
2021-03-13
op
entry->key = k;
187
2021-03-13
op
TAILQ_INIT(&entry->map.m);
188
2021-03-13
op
189
2021-08-12
op
TAILQ_INSERT_TAIL(&map->m, entry, keymaps);
190
2021-03-13
op
191
2021-03-13
op
if (*key != '\0') {
192
2021-03-13
op
map = &entry->map;
193
2021-03-13
op
goto again;
194
2021-03-13
op
}
195
2021-03-13
op
196
2021-03-13
op
entry->fn = fn;
197
2021-03-13
op
198
2021-03-13
op
return 1;
199
2021-03-13
op
}
200
2021-03-13
op
201
2021-11-05
op
int
202
2021-11-05
op
lookup_key(struct kmap **map, struct thiskey *key, struct buffer *buf)
203
2021-11-05
op
{
204
2021-11-05
op
struct keymap *k;
205
2021-11-05
op
206
2021-11-05
op
TAILQ_FOREACH(k, &(*map)->m, keymaps) {
207
2021-11-05
op
if (k->meta == key->meta &&
208
2021-11-05
op
k->key == key->key) {
209
2021-11-05
op
if (k->fn == NULL) {
210
2021-11-05
op
*map = &k->map;
211
2021-11-05
op
return LK_ADVANCED_MAP;
212
2021-11-05
op
} else {
213
2021-11-05
op
k->fn(buf);
214
2021-11-05
op
return LK_MATCHED;
215
2021-11-05
op
}
216
2021-11-05
op
}
217
2021-11-05
op
}
218
2021-11-05
op
219
2021-11-05
op
return LK_UNBOUND;
220
2021-11-05
op
}
Omar Polo