mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 17:19:03 -04:00
[automaton] combine modifiers
This commit is contained in:
parent
4b49cb4592
commit
91a8d85707
@ -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;
|
||||
|
@ -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)));
|
||||
|
28
src/lib/in.c
28
src/lib/in.c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user