summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c8af481)
raw | patch | inline | side by side (parent: c8af481)
author | Jonas Fonseca <fonseca@diku.dk> | |
Sun, 10 Apr 2011 23:19:59 +0000 (19:19 -0400) | ||
committer | Jonas Fonseca <fonseca@diku.dk> | |
Sun, 10 Apr 2011 23:19:59 +0000 (19:19 -0400) |
tig.c | patch | blob | history | |
tig.h | patch | blob | history |
index 51c84b8a936d713fbbd987764055c1f5dce9d7cd..dd9437f5f39f29d3da373c80e9df443571d68adc 100644 (file)
--- a/tig.c
+++ b/tig.c
static bool prompt_menu(const char *prompt, const struct menu_item *items, int *selected);
-enum graphic {
- GRAPHIC_ASCII = 0,
- GRAPHIC_DEFAULT,
- GRAPHIC_UTF_8
-};
+#define GRAPHIC_ENUM(_) \
+ _(GRAPHIC, ASCII), \
+ _(GRAPHIC, DEFAULT), \
+ _(GRAPHIC, UTF_8)
-static const struct enum_map graphic_map[] = {
-#define GRAPHIC_(name) ENUM_MAP(#name, GRAPHIC_##name)
- GRAPHIC_(ASCII),
- GRAPHIC_(DEFAULT),
- GRAPHIC_(UTF_8)
-#undef GRAPHIC_
-};
+DEFINE_ENUM(graphic, GRAPHIC_ENUM);
-#define DATE_INFO \
- DATE_(NO), \
- DATE_(DEFAULT), \
- DATE_(LOCAL), \
- DATE_(RELATIVE), \
- DATE_(SHORT)
-
-enum date {
-#define DATE_(name) DATE_##name
- DATE_INFO
-#undef DATE_
-};
+#define DATE_ENUM(_) \
+ _(DATE, NO), \
+ _(DATE, DEFAULT), \
+ _(DATE, LOCAL), \
+ _(DATE, RELATIVE), \
+ _(DATE, SHORT)
-static const struct enum_map date_map[] = {
-#define DATE_(name) ENUM_MAP(#name, DATE_##name)
- DATE_INFO
-#undef DATE_
-};
+DEFINE_ENUM(date, DATE_ENUM);
struct time {
time_t sec;
}
-#define AUTHOR_VALUES \
- AUTHOR_(NO), \
- AUTHOR_(FULL), \
- AUTHOR_(ABBREVIATED)
+#define AUTHOR_ENUM(_) \
+ _(AUTHOR, NO), \
+ _(AUTHOR, FULL), \
+ _(AUTHOR, ABBREVIATED)
-enum author {
-#define AUTHOR_(name) AUTHOR_##name
- AUTHOR_VALUES,
-#undef AUTHOR_
- AUTHOR_DEFAULT = AUTHOR_FULL
-};
-
-static const struct enum_map author_map[] = {
-#define AUTHOR_(name) ENUM_MAP(#name, AUTHOR_##name)
- AUTHOR_VALUES
-#undef AUTHOR_
-};
+DEFINE_ENUM(author, AUTHOR_ENUM);
static const char *
get_author_initials(const char *author)
/* Option and state variables. */
static enum graphic opt_line_graphics = GRAPHIC_DEFAULT;
static enum date opt_date = DATE_DEFAULT;
-static enum author opt_author = AUTHOR_DEFAULT;
+static enum author opt_author = AUTHOR_FULL;
static bool opt_rev_graph = TRUE;
static bool opt_line_number = FALSE;
static bool opt_show_refs = TRUE;
{ 'e', REQ_EDIT },
};
-#define KEYMAP_INFO \
- KEYMAP_(GENERIC), \
- KEYMAP_(MAIN), \
- KEYMAP_(DIFF), \
- KEYMAP_(LOG), \
- KEYMAP_(TREE), \
- KEYMAP_(BLOB), \
- KEYMAP_(BLAME), \
- KEYMAP_(BRANCH), \
- KEYMAP_(PAGER), \
- KEYMAP_(HELP), \
- KEYMAP_(STATUS), \
- KEYMAP_(STAGE)
-
-enum keymap {
-#define KEYMAP_(name) KEYMAP_##name
- KEYMAP_INFO
-#undef KEYMAP_
-};
+#define KEYMAP_ENUM(_) \
+ _(KEYMAP, GENERIC), \
+ _(KEYMAP, MAIN), \
+ _(KEYMAP, DIFF), \
+ _(KEYMAP, LOG), \
+ _(KEYMAP, TREE), \
+ _(KEYMAP, BLOB), \
+ _(KEYMAP, BLAME), \
+ _(KEYMAP, BRANCH), \
+ _(KEYMAP, PAGER), \
+ _(KEYMAP, HELP), \
+ _(KEYMAP, STATUS), \
+ _(KEYMAP, STAGE)
-static const struct enum_map keymap_table[] = {
-#define KEYMAP_(name) ENUM_MAP(#name, KEYMAP_##name)
- KEYMAP_INFO
-#undef KEYMAP_
-};
+DEFINE_ENUM(keymap, KEYMAP_ENUM);
-#define set_keymap(map, name) map_enum(map, keymap_table, name)
+#define set_keymap(map, name) map_enum(map, keymap_map, name)
struct keybinding_table {
struct keybinding *data;
size_t size;
};
-static struct keybinding_table keybindings[ARRAY_SIZE(keymap_table)];
+static struct keybinding_table keybindings[ARRAY_SIZE(keymap_map)];
static void
add_keybinding(enum keymap keymap, enum request request, int key)
* Help backend
*/
-static bool help_keymap_hidden[ARRAY_SIZE(keymap_table)];
+static bool help_keymap_hidden[ARRAY_SIZE(keymap_map)];
static bool
help_open_keymap_title(struct view *view, enum keymap keymap)
line = add_line_format(view, LINE_HELP_KEYMAP, "[%c] %s bindings",
help_keymap_hidden[keymap] ? '+' : '-',
- enum_name(keymap_table[keymap]));
+ enum_name(keymap_map[keymap]));
if (line)
line->other = keymap;
add_line_text(view, "Quick reference for tig keybindings:", LINE_DEFAULT);
add_line_text(view, "", LINE_DEFAULT);
- for (keymap = 0; keymap < ARRAY_SIZE(keymap_table); keymap++)
+ for (keymap = 0; keymap < ARRAY_SIZE(keymap_map); keymap++)
help_open_keymap(view, keymap);
return TRUE;
index 85b639bea72a0649869e27383bb056bb16b26936..ef298c736a1aea2a922e7f92c91499ad2a653826 100644 (file)
--- a/tig.h
+++ b/tig.h
#define ENUM_MAP(name, value) { name, STRING_SIZE(name), value }
+#define ENUM_SYM_MACRO(prefix, name) prefix##_##name
+#define ENUM_MAP_MACRO(prefix, name) ENUM_MAP(#name, ENUM_SYM_MACRO(prefix, name))
+
+#define DEFINE_ENUM(name, info) \
+ enum name { info(ENUM_SYM_MACRO) }; \
+ static const struct enum_map name##_map[] = { info(ENUM_MAP_MACRO) }
+
static inline int
string_enum_compare(const char *str1, const char *str2, int len)
{