From f56f23bed7913d4b3174c274f5abee4161e6fe98 Mon Sep 17 00:00:00 2001 From: Adam Saponara Date: Thu, 6 Jul 2023 23:04:48 -0400 Subject: [PATCH] ignore cap collisions many terms have duplicate escape codes even for our modest subset of caps. see inline comment for an example as well as a todo. --- termbox2.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/termbox2.h b/termbox2.h index ac1d743..db00c53 100644 --- a/termbox2.h +++ b/termbox2.h @@ -1996,20 +1996,26 @@ static int init_cap_trie(void) { int rv, i; // Add caps from terminfo or built-in + // + // Collisions are expected as some terminfo entries have dupes. (For + // example, att605-pc collides on TB_CAP_F4 and TB_CAP_DELETE.) First cap + // in TB_CAP_* index order will win. + // + // TODO Reorder TB_CAP_* so more critical caps come first. for (i = 0; i < TB_CAP__COUNT_KEYS; i++) { - if_err_return(rv, cap_trie_add(global.caps[i], tb_key_i(i), 0)); + rv = cap_trie_add(global.caps[i], tb_key_i(i), 0); + if (rv != TB_OK && rv != TB_ERR_CAP_COLLISION) return rv; } // Add built-in mod caps + // + // Collisions are OK here as well. This can happen if global.caps collides + // with builtin_mod_caps. It is desirable to give precedence to global.caps + // here. for (i = 0; builtin_mod_caps[i].cap != NULL; i++) { rv = cap_trie_add(builtin_mod_caps[i].cap, builtin_mod_caps[i].key, builtin_mod_caps[i].mod); - // Collisions are OK. This can happen if global.caps collides with - // builtin_mod_caps. It is desirable to give precedence to global.caps - // here. - if (rv != TB_OK && rv != TB_ERR_CAP_COLLISION) { - return rv; - } + if (rv != TB_OK && rv != TB_ERR_CAP_COLLISION) return rv; } return TB_OK; -- 2.39.5