The lv_keyboard widget currently supports custom keymaps which is great. Unfortunately, though the number of layers is limited by the lv_keyboard_mode_t
enum:
enum {
LV_KEYBOARD_MODE_TEXT_LOWER,
LV_KEYBOARD_MODE_TEXT_UPPER,
LV_KEYBOARD_MODE_SPECIAL,
LV_KEYBOARD_MODE_NUMBER,
};
typedef uint8_t lv_keyboard_mode_t;
This is quite limiting, especially for non-English layouts. German, for instance, has additional characters such as ä, ö, ü, and ß and also symbols such as @, § and €.
When comparing to squeekboard, their default US layout has 4 layers and the Czech layout even has 6.
It would be great if the keyboard widget supported a larger number of layers so that suitable keymaps for different locales can be created.
For instance, the enum could be extended to
LV_KEYBOARD_MODE_TEXT_LOWER,
LV_KEYBOARD_MODE_TEXT_UPPER,
LV_KEYBOARD_MODE_TEXT_NUMBER,
LV_KEYBOARD_MODE_TEXT_SYMBOL,
LV_KEYBOARD_MODE_TEXT_CUSTOM_1,
LV_KEYBOARD_MODE_TEXT_CUSTOM_2,
LV_KEYBOARD_MODE_NUMBER,
where the two custom layers could just be configured blank / unused in the default layout.