=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/Attic/xterm-keys.c,v retrieving revision 1.19 retrieving revision 1.20 diff -c -r1.19 -r1.20 *** src/usr.bin/tmux/Attic/xterm-keys.c 2016/10/03 22:52:11 1.19 --- src/usr.bin/tmux/Attic/xterm-keys.c 2017/01/25 14:24:54 1.20 *************** *** 1,4 **** ! /* $OpenBSD: xterm-keys.c,v 1.19 2016/10/03 22:52:11 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: xterm-keys.c,v 1.20 2017/01/25 14:24:54 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 50,56 **** const char *template; }; ! static const struct xterm_keys_entry xterm_keys_table[] = { { KEYC_F1, "\033[1;_P" }, { KEYC_F1, "\033O1;_P" }, { KEYC_F1, "\033O_P" }, --- 50,66 ---- const char *template; }; ! static const struct xterm_keys_entry xterm_keys_standard[] = { ! { KEYC_HOME, "\033[H" }, ! { KEYC_END, "\033[F" }, ! }; ! ! static const struct xterm_keys_entry xterm_keys_cursor[] = { ! { KEYC_HOME, "\033OH" }, ! { KEYC_END, "\033OF" }, ! }; ! ! static const struct xterm_keys_entry xterm_keys_modified[] = { { KEYC_F1, "\033[1;_P" }, { KEYC_F1, "\033O1;_P" }, { KEYC_F1, "\033O_P" }, *************** *** 189,196 **** int matched; key_code modifiers; ! for (i = 0; i < nitems(xterm_keys_table); i++) { ! entry = &xterm_keys_table[i]; matched = xterm_keys_match(entry->template, buf, len, size, &modifiers); --- 199,206 ---- int matched; key_code modifiers; ! for (i = 0; i < nitems(xterm_keys_modified); i++) { ! entry = &xterm_keys_modified[i]; matched = xterm_keys_match(entry->template, buf, len, size, &modifiers); *************** *** 205,214 **** /* Lookup a key number from the table. */ char * ! xterm_keys_lookup(key_code key) { ! const struct xterm_keys_entry *entry; ! u_int i; key_code modifiers; char *out; --- 215,224 ---- /* Lookup a key number from the table. */ char * ! xterm_keys_lookup(key_code key, int mode) { ! const struct xterm_keys_entry *table, *entry; ! u_int items, i; key_code modifiers; char *out; *************** *** 224,244 **** * If the key has no modifiers, return NULL and let it fall through to * the normal lookup. */ ! if (modifiers == 1) ! return (NULL); /* Otherwise, find the key in the table. */ key &= ~(KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL); ! for (i = 0; i < nitems(xterm_keys_table); i++) { ! entry = &xterm_keys_table[i]; if (key == entry->key) break; } ! if (i == nitems(xterm_keys_table)) return (NULL); /* Copy the template and replace the modifier. */ out = xstrdup(entry->template); ! out[strcspn(out, "_")] = '0' + modifiers; return (out); } --- 234,265 ---- * If the key has no modifiers, return NULL and let it fall through to * the normal lookup. */ ! if (modifiers != 1) { ! table = xterm_keys_modified; ! items = nitems(xterm_keys_modified); ! } else { ! if (mode & MODE_KCURSOR) { ! table = xterm_keys_cursor; ! items = nitems(xterm_keys_cursor); ! } else { ! table = xterm_keys_standard; ! items = nitems(xterm_keys_standard); ! } ! } /* Otherwise, find the key in the table. */ key &= ~(KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL); ! for (i = 0; i < items; i++) { ! entry = &table[i]; if (key == entry->key) break; } ! if (i == items) return (NULL); /* Copy the template and replace the modifier. */ out = xstrdup(entry->template); ! if (modifiers != 1) ! out[strcspn(out, "_")] = '0' + modifiers; return (out); }