| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include <string.h> | ||
| 2 | #include "cursor.h" | ||
| 3 | #include "style.h" | ||
| 4 | #include "util/array.h" | ||
| 5 | #include "util/debug.h" | ||
| 6 | |||
| 7 | static const char cursor_modes[NR_CURSOR_MODES][12] = { | ||
| 8 | [CURSOR_MODE_DEFAULT] = "default", | ||
| 9 | [CURSOR_MODE_INSERT] = "insert", | ||
| 10 | [CURSOR_MODE_OVERWRITE] = "overwrite", | ||
| 11 | [CURSOR_MODE_CMDLINE] = "cmdline", | ||
| 12 | }; | ||
| 13 | |||
| 14 | static const char cursor_types[][20] = { | ||
| 15 | [CURSOR_DEFAULT] = "default", | ||
| 16 | [CURSOR_BLINKING_BLOCK] = "blinking-block", | ||
| 17 | [CURSOR_STEADY_BLOCK] = "block", | ||
| 18 | [CURSOR_BLINKING_UNDERLINE] = "blinking-underline", | ||
| 19 | [CURSOR_STEADY_UNDERLINE] = "underline", | ||
| 20 | [CURSOR_BLINKING_BAR] = "blinking-bar", | ||
| 21 | [CURSOR_STEADY_BAR] = "bar", | ||
| 22 | [CURSOR_KEEP] = "keep", | ||
| 23 | }; | ||
| 24 | |||
| 25 | static const char cursor_colors[][8] = { | ||
| 26 | "keep", | ||
| 27 | "default", | ||
| 28 | }; | ||
| 29 | |||
| 30 | 24 | UNITTEST { | |
| 31 | 24 | CHECK_STRING_ARRAY(cursor_modes); | |
| 32 | 24 | CHECK_STRING_ARRAY(cursor_types); | |
| 33 | 24 | CHECK_STRING_ARRAY(cursor_colors); | |
| 34 | 24 | } | |
| 35 | |||
| 36 | 4 | const char *cursor_mode_to_str(CursorInputMode mode) | |
| 37 | { | ||
| 38 | 4 | BUG_ON(mode < 0 || mode >= ARRAYLEN(cursor_modes)); | |
| 39 | 4 | return cursor_modes[mode]; | |
| 40 | } | ||
| 41 | |||
| 42 | 5 | const char *cursor_type_to_str(TermCursorType type) | |
| 43 | { | ||
| 44 | 5 | BUG_ON(type < 0 || type >= ARRAYLEN(cursor_types)); | |
| 45 | 5 | return cursor_types[type]; | |
| 46 | } | ||
| 47 | |||
| 48 | 7 | const char *cursor_color_to_str(char buf[static COLOR_STR_BUFSIZE], int32_t color) | |
| 49 | { | ||
| 50 | 7 | BUG_ON(!cursor_color_is_valid(color)); | |
| 51 | 7 | size_t n = color_to_str(buf, color); | |
| 52 | 7 | BUG_ON(n < STRLEN("keep") || n >= COLOR_STR_BUFSIZE); | |
| 53 | 7 | buf[n] = '\0'; | |
| 54 | 7 | return buf; | |
| 55 | } | ||
| 56 | |||
| 57 | 12 | CursorInputMode cursor_mode_from_str(const char *name) | |
| 58 | { | ||
| 59 | 12 | return STR_TO_ENUM(name, cursor_modes, NR_CURSOR_MODES); | |
| 60 | } | ||
| 61 | |||
| 62 | 15 | TermCursorType cursor_type_from_str(const char *name) | |
| 63 | { | ||
| 64 | 15 | return STR_TO_ENUM(name, cursor_types, CURSOR_INVALID); | |
| 65 | } | ||
| 66 | |||
| 67 | 12 | int32_t cursor_color_from_str(const char *str) | |
| 68 | { | ||
| 69 |
2/2✓ Branch 2 → 3 taken 5 times.
✓ Branch 2 → 4 taken 7 times.
|
12 | if (str[0] == '#') { |
| 70 | 5 | return parse_rgb(str + 1, strlen(str + 1)); | |
| 71 | } | ||
| 72 | 7 | return STR_TO_ENUM_WITH_OFFSET(str, cursor_colors, COLOR_INVALID, -2); | |
| 73 | } | ||
| 74 | |||
| 75 | 1 | void collect_cursor_modes(PointerArray *a, const char *prefix) | |
| 76 | { | ||
| 77 | 1 | COLLECT_STRINGS(cursor_modes, a, prefix); | |
| 78 | 1 | } | |
| 79 | |||
| 80 | 2 | void collect_cursor_types(PointerArray *a, const char *prefix) | |
| 81 | { | ||
| 82 | 2 | COLLECT_STRINGS(cursor_types, a, prefix); | |
| 83 | 2 | } | |
| 84 | |||
| 85 | 1 | void collect_cursor_colors(PointerArray *a, const char *prefix) | |
| 86 | { | ||
| 87 | 1 | COLLECT_STRINGS(cursor_colors, a, prefix); | |
| 88 | 1 | } | |
| 89 |