Auto-refresh views when changes are detected in the repository
[tig.git] / include / tig / types.h
blob90c8a9de6bc7d5faa35157f28c6f90e0ad86bc3f
1 /* Copyright (c) 2006-2014 Jonas Fonseca <jonas.fonseca@gmail.com>
3 * This program is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU General Public License as
5 * published by the Free Software Foundation; either version 2 of
6 * the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
14 #ifndef TIG_TYPES_H
15 #define TIG_TYPES_H
17 #include "tig/tig.h"
20 * Enumerations
23 struct enum_map_entry {
24 const char *name;
25 int namelen;
26 int value;
29 struct enum_map {
30 const struct enum_map_entry *entries;
31 const int size;
34 int string_enum_compare(const char *str1, const char *str2, int len);
36 #define enum_equals(entry, str, len) \
37 ((entry).namelen == (len) && !string_enum_compare((entry).name, str, len))
39 #define enum_equals_static(str, name, namelen) \
40 (namelen == STRING_SIZE(str) && !string_enum_compare(str, name, namelen))
42 const char *enum_name(const char *name);
43 bool enum_name_copy(char *buf, size_t bufsize, const char *name);
44 bool enum_name_prefixed(char buf[], size_t bufsize, const char *prefix, const char *name);
46 const struct enum_map *find_enum_map(const char *type);
48 bool map_enum_do(const struct enum_map_entry *map, size_t map_size, int *value, const char *name);
50 #define map_enum(attr, map, name) \
51 map_enum_do(map, ARRAY_SIZE(map), attr, name)
53 #define ENUM_MAP_ENTRY(name, value) { name, STRING_SIZE(name), value }
55 #define ENUM_SYM_MACRO(prefix, name) prefix##_##name
56 #define ENUM_MAP_MACRO(prefix, name) ENUM_MAP_ENTRY(#name, ENUM_SYM_MACRO(prefix, name))
58 #define DEFINE_ENUM(name, info) \
59 enum name { info(ENUM_SYM_MACRO) }; \
60 extern const struct enum_map name##_map[];
62 #define DEFINE_ENUM_MAP(name, info) \
63 const struct enum_map_entry name##_map_entries[] = { info(ENUM_MAP_MACRO) }; \
64 const struct enum_map name##_map[] = { { name##_map_entries, ARRAY_SIZE(name##_map_entries) } }
66 #define VERTICAL_SPLIT_ENUM(_) \
67 _(VERTICAL_SPLIT, HORIZONTAL), \
68 _(VERTICAL_SPLIT, VERTICAL), \
69 _(VERTICAL_SPLIT, AUTO)
71 #define GRAPHIC_ENUM(_) \
72 _(GRAPHIC, ASCII), \
73 _(GRAPHIC, DEFAULT), \
74 _(GRAPHIC, UTF_8)
76 #define DATE_ENUM(_) \
77 _(DATE, NO), \
78 _(DATE, DEFAULT), \
79 _(DATE, LOCAL), \
80 _(DATE, RELATIVE), \
81 _(DATE, SHORT)
83 #define FILE_SIZE_ENUM(_) \
84 _(FILE_SIZE, NO), \
85 _(FILE_SIZE, DEFAULT), \
86 _(FILE_SIZE, UNITS)
88 #define AUTHOR_ENUM(_) \
89 _(AUTHOR, NO), \
90 _(AUTHOR, FULL), \
91 _(AUTHOR, ABBREVIATED), \
92 _(AUTHOR, EMAIL), \
93 _(AUTHOR, EMAIL_USER)
95 #define FILENAME_ENUM(_) \
96 _(FILENAME, NO), \
97 _(FILENAME, AUTO), \
98 _(FILENAME, ALWAYS)
100 #define IGNORE_SPACE_ENUM(_) \
101 _(IGNORE_SPACE, NO), \
102 _(IGNORE_SPACE, ALL), \
103 _(IGNORE_SPACE, SOME), \
104 _(IGNORE_SPACE, AT_EOL)
106 #define COMMIT_ORDER_ENUM(_) \
107 _(COMMIT_ORDER, DEFAULT), \
108 _(COMMIT_ORDER, TOPO), \
109 _(COMMIT_ORDER, DATE), \
110 _(COMMIT_ORDER, AUTHOR_DATE), \
111 _(COMMIT_ORDER, REVERSE)
113 #define VIEW_COLUMN_ENUM(_) \
114 _(VIEW_COLUMN, AUTHOR), \
115 _(VIEW_COLUMN, COMMIT_TITLE), \
116 _(VIEW_COLUMN, DATE), \
117 _(VIEW_COLUMN, FILE_NAME), \
118 _(VIEW_COLUMN, FILE_SIZE), \
119 _(VIEW_COLUMN, ID), \
120 _(VIEW_COLUMN, LINE_NUMBER), \
121 _(VIEW_COLUMN, MODE), \
122 _(VIEW_COLUMN, REF), \
123 _(VIEW_COLUMN, SECTION), \
124 _(VIEW_COLUMN, STATUS), \
125 _(VIEW_COLUMN, TEXT)
127 #define REFERENCE_ENUM(_) \
128 _(REFERENCE, HEAD), \
129 _(REFERENCE, BRANCH), \
130 _(REFERENCE, TRACKED_REMOTE), \
131 _(REFERENCE, REMOTE), \
132 _(REFERENCE, TAG), \
133 _(REFERENCE, LOCAL_TAG), \
134 _(REFERENCE, REPLACE), \
136 #define STATUS_LABEL_ENUM(_) \
137 _(STATUS_LABEL, NO), \
138 _(STATUS_LABEL, SHORT), \
139 _(STATUS_LABEL, LONG), \
141 #define REFRESH_MODE_ENUM(_) \
142 _(REFRESH_MODE, MANUEL), \
143 _(REFRESH_MODE, AUTO), \
144 _(REFRESH_MODE, ON_RETURN), \
145 _(REFRESH_MODE, PERIODIC), \
147 #define ENUM_INFO(_) \
148 _(author, AUTHOR_ENUM) \
149 _(commit_order, COMMIT_ORDER_ENUM) \
150 _(date, DATE_ENUM) \
151 _(file_size, FILE_SIZE_ENUM) \
152 _(filename, FILENAME_ENUM) \
153 _(graphic, GRAPHIC_ENUM) \
154 _(ignore_space, IGNORE_SPACE_ENUM) \
155 _(vertical_split, VERTICAL_SPLIT_ENUM) \
156 _(view_column_type, VIEW_COLUMN_ENUM) \
157 _(reference_type, REFERENCE_ENUM) \
158 _(refresh_mode, REFRESH_MODE_ENUM) \
159 _(status_label, STATUS_LABEL_ENUM) \
161 #define DEFINE_ENUMS(name, macro) DEFINE_ENUM(name, macro);
162 ENUM_INFO(DEFINE_ENUMS);
164 #endif
165 /* vim: set ts=8 sw=8 noexpandtab: */