[automaton] combine modifiers

This commit is contained in:
nick black 2022-01-04 11:34:12 -05:00 committed by nick black
parent 4b49cb4592
commit 91a8d85707
3 changed files with 15 additions and 24 deletions

View File

@ -501,7 +501,6 @@ int inputctx_add_cflow(automaton* a, const char* seq, triefunc fxn){
// multiple input escapes might map to the same input
int inputctx_add_input_escape(automaton* a, const char* esc, uint32_t special,
unsigned shift, unsigned ctrl, unsigned alt,
unsigned modifiers){
if(esc[0] != NCKEY_ESC || strlen(esc) < 2){ // assume ESC prefix + content
logerror("not an escape (0x%x)", special);
@ -519,9 +518,9 @@ int inputctx_add_input_escape(automaton* a, const char* esc, uint32_t special,
}
}else{
eptr->ni.id = special;
eptr->ni.shift = shift;
eptr->ni.ctrl = ctrl;
eptr->ni.alt = alt;
eptr->ni.shift = modifiers & NCKEY_MOD_SHIFT;
eptr->ni.ctrl = modifiers & NCKEY_MOD_CTRL;
eptr->ni.alt = modifiers & NCKEY_MOD_ALT;
eptr->ni.y = 0;
eptr->ni.x = 0;
eptr->ni.modifiers = modifiers;

View File

@ -34,9 +34,7 @@ typedef struct automaton {
void input_free_esctrie(automaton *a);
int inputctx_add_input_escape(automaton* a, const char* esc,
uint32_t special, unsigned shift,
unsigned ctrl, unsigned alt,
unsigned modifiers);
uint32_t special, unsigned modifiers);
int inputctx_add_cflow(automaton* a, const char* csi, triefunc fxn)
__attribute__ ((nonnull (1, 2)));

View File

@ -166,7 +166,6 @@ prep_xtmodkeys(inputctx* ictx){
}, *k;
for(k = keys ; k->esc ; ++k){
if(inputctx_add_input_escape(&ictx->amata, k->esc, k->key,
k->shift, k->ctrl, k->alt,
k->modifiers)){
return -1;
}
@ -355,7 +354,7 @@ prep_special_keys(inputctx* ictx){
unsigned modifiers = (k->shift ? NCKEY_MOD_SHIFT : 0)
| (k->alt ? NCKEY_MOD_ALT : 0)
| (k->ctrl ? NCKEY_MOD_CTRL : 0);
if(inputctx_add_input_escape(&ictx->amata, seq, k->key, k->shift, k->ctrl, k->alt, modifiers)){
if(inputctx_add_input_escape(&ictx->amata, seq, k->key, modifiers)){
return -1;
}
logdebug("support for terminfo's %s: %s", k->tinfo, seq);
@ -365,7 +364,7 @@ prep_special_keys(inputctx* ictx){
logwarn("no backspace key was defined");
}else{
if(bs[0] == NCKEY_ESC){
if(inputctx_add_input_escape(&ictx->amata, bs, NCKEY_BACKSPACE, 0, 0, 0, 0)){
if(inputctx_add_input_escape(&ictx->amata, bs, NCKEY_BACKSPACE, 0)){
return -1;
}
}else{
@ -1753,24 +1752,22 @@ prep_kitty_special_keys(inputctx* ictx){
static const struct {
const char* esc;
uint32_t key;
bool shift, ctrl, alt;
unsigned modifiers;
} keys[] = {
{ .esc = "\x1b[P", .key = NCKEY_F01, },
{ .esc = "\x1b[Q", .key = NCKEY_F02, },
{ .esc = "\x1b[R", .key = NCKEY_F03, },
{ .esc = "\x1b[S", .key = NCKEY_F04, },
{ .esc = "\x1b[127;2u", .key = NCKEY_BACKSPACE, .shift = 1,
{ .esc = "\x1b[127;2u", .key = NCKEY_BACKSPACE,
.modifiers = NCKEY_MOD_SHIFT, },
{ .esc = "\x1b[127;3u", .key = NCKEY_BACKSPACE, .alt = 1,
{ .esc = "\x1b[127;3u", .key = NCKEY_BACKSPACE,
.modifiers = NCKEY_MOD_ALT, },
{ .esc = "\x1b[127;5u", .key = NCKEY_BACKSPACE, .ctrl = 1,
{ .esc = "\x1b[127;5u", .key = NCKEY_BACKSPACE,
.modifiers = NCKEY_MOD_CTRL, },
{ .esc = NULL, .key = 0, },
}, *k;
for(k = keys ; k->esc ; ++k){
if(inputctx_add_input_escape(&ictx->amata, k->esc, k->key,
k->shift, k->ctrl, k->alt, k->modifiers)){
if(inputctx_add_input_escape(&ictx->amata, k->esc, k->key, k->modifiers)){
return -1;
}
}
@ -1788,20 +1785,19 @@ prep_windows_special_keys(inputctx* ictx){
static const struct {
const char* esc;
uint32_t key;
bool shift, ctrl, alt;
unsigned modifiers;
} keys[] = {
{ .esc = "\x1b[A", .key = NCKEY_UP, },
{ .esc = "\x1b[B", .key = NCKEY_DOWN, },
{ .esc = "\x1b[C", .key = NCKEY_RIGHT, },
{ .esc = "\x1b[D", .key = NCKEY_LEFT, },
{ .esc = "\x1b[1;5A", .key = NCKEY_UP, .ctrl = 1,
{ .esc = "\x1b[1;5A", .key = NCKEY_UP,
.modifiers = NCKEY_MOD_CTRL, },
{ .esc = "\x1b[1;5B", .key = NCKEY_DOWN, .ctrl = 1,
{ .esc = "\x1b[1;5B", .key = NCKEY_DOWN,
.modifiers = NCKEY_MOD_CTRL, },
{ .esc = "\x1b[1;5C", .key = NCKEY_RIGHT, .ctrl = 1,
{ .esc = "\x1b[1;5C", .key = NCKEY_RIGHT,
.modifiers = NCKEY_MOD_CTRL, },
{ .esc = "\x1b[1;5D", .key = NCKEY_LEFT, .ctrl = 1,
{ .esc = "\x1b[1;5D", .key = NCKEY_LEFT,
.modifiers = NCKEY_MOD_CTRL, },
{ .esc = "\x1b[H", .key = NCKEY_HOME, },
{ .esc = "\x1b[F", .key = NCKEY_END, },
@ -1824,9 +1820,7 @@ prep_windows_special_keys(inputctx* ictx){
{ .esc = NULL, .key = 0, },
}, *k;
for(k = keys ; k->esc ; ++k){
if(inputctx_add_input_escape(&ictx->amata, k->esc, k->key,
k->shift, k->ctrl, k->alt,
k->modifiers)){
if(inputctx_add_input_escape(&ictx->amata, k->esc, k->key, k->modifiers)){
return -1;
}
logdebug("added %s %u", k->esc, k->key);