config.h (11430B)
1 /* See the file LICENSE for copyright and license details. */ 2 3 /* Comment out to not create backups */ 4 #define CREATE_BACKUPS 5 6 #ifdef PO_C_GLOBALS 7 static const char* backup_suffix = "~"; 8 #endif /* PO_C_GLOBALS */ 9 10 #define SAVE_WRAP_WIDTH 70 11 #define WRAP_FIRST_MSGSTR 0 12 #define WARN_COUNT_DOTS 0 13 14 #define DLG_FG TB_BLACK 15 #define DLG_BG TB_WHITE 16 #define EDIT_MSGID_FG TB_BLACK | TB_BOLD 17 #define EDIT_MSGID_BG TB_WHITE 18 #define EDIT_MSGID_FOCUS_FG TB_BLACK 19 #define EDIT_MSGID_FOCUS_BG TB_WHITE 20 #define EDIT_MSGID_HEADING_FG TB_WHITE | TB_BOLD 21 #define EDIT_MSGID_HEADING_BG TB_WHITE 22 #define EDIT_MSGSTR_FG TB_BLACK | TB_BOLD 23 #define EDIT_MSGSTR_BG TB_BLACK 24 #define EDIT_MSGSTR_FOCUS_FG TB_YELLOW | TB_BOLD 25 #define EDIT_MSGSTR_FOCUS_BG TB_BLACK 26 #define ERROR_FG TB_WHITE | TB_BOLD 27 #define ERROR_BG TB_RED 28 #define FLAG_FG TB_YELLOW | TB_BOLD 29 #define FLAG_BG TB_DEFAULT 30 #define LIST_FLAGS_FG TB_YELLOW | TB_BOLD 31 #define LIST_FLAGS_BG TB_DEFAULT 32 #define LIST_FLAGS_SEL_FG TB_WHITE | TB_BOLD 33 #define LIST_FLAGS_SEL_BG TB_BLUE 34 #define LIST_MSGID_FG TB_WHITE 35 #define LIST_MSGID_BG TB_DEFAULT 36 #define LIST_MSGID_SEL_FG TB_WHITE 37 #define LIST_MSGID_SEL_BG TB_BLUE 38 #define LIST_MSGID_SPECIAL_FG TB_YELLOW | TB_BOLD 39 #define LIST_MSGID_SPECIAL_BG TB_DEFAULT 40 #define LIST_MSGID_SPECIAL_SEL_FG TB_WHITE | TB_BOLD 41 #define LIST_MSGID_SPECIAL_SEL_BG TB_BLUE 42 #define LIST_MSGSTR_FG TB_GREEN 43 #define LIST_MSGSTR_BG TB_DEFAULT 44 #define LIST_MSGSTR_SEL_FG TB_WHITE | TB_BOLD 45 #define LIST_MSGSTR_SEL_BG TB_BLUE 46 #define LIST_MSGSTR_WARN_FG TB_RED | TB_BOLD 47 #define LIST_MSGSTR_WARN_BG TB_DEFAULT 48 #define LIST_MSGSTR_SEL_WARN_FG TB_RED | TB_BOLD 49 #define LIST_MSGSTR_SEL_WARN_BG TB_BLUE 50 #define LIST_SEL_FG TB_WHITE 51 #define LIST_SEL_BG TB_BLUE 52 #define MSGID_FG TB_GREEN 53 #define MSGID_BG TB_DEFAULT 54 #define MSGSTR_FG TB_WHITE 55 #define MSGSTR_BG TB_DEFAULT 56 #define PROMPT_FG TB_YELLOW | TB_BOLD 57 #define PROMPT_BG TB_MAGENTA 58 #define SEARCH_FG TB_BLACK 59 #define SEARCH_BG TB_WHITE 60 #define SEARCH_EDIT_FG TB_WHITE | TB_BOLD 61 #define SEARCH_EDIT_BG TB_BLACK 62 #define SEARCH_HL_FG TB_WHITE | TB_BOLD 63 #define SEARCH_HL_BG TB_GREEN 64 #define SHADOW_FG TB_BLACK 65 #define SHADOW_BG TB_BLACK | TB_BOLD 66 #define TITLE_FG TB_BLACK 67 #define TITLE_BG TB_WHITE 68 69 #ifdef POE_C_GLOBALS 70 int cancel_close(struct DrawState* state); 71 int cancel_msgstr(struct DrawState* state); 72 int cancel_search(struct DrawState* state); 73 int copy_msgid_to_input(struct DrawState* state); 74 int edit_page_down(struct DrawState* state); 75 int edit_page_up(struct DrawState* state); 76 int erase_backwards(struct DrawState* state); 77 int erase_forward(struct DrawState* state); 78 int erase_prev_word(struct DrawState* state); 79 int erase_search_backwards(struct DrawState* state); 80 int erase_search_forward(struct DrawState* state); 81 int erase_search_prev_word(struct DrawState* state); 82 int erase_search_to_end(struct DrawState* state); 83 int erase_search_to_start(struct DrawState* state); 84 int erase_to_end(struct DrawState* state); 85 int erase_to_start(struct DrawState* state); 86 int exit_program(struct DrawState* state); 87 int hide_search(struct DrawState* state); 88 int insert_line(struct DrawState* state); 89 int insert_search_space(struct DrawState* state); 90 int insert_search_tab(struct DrawState* state); 91 int insert_space(struct DrawState* state); 92 int insert_tab(struct DrawState* state); 93 int move_end(struct DrawState* state); 94 int move_down(struct DrawState* state); 95 int move_left(struct DrawState* state); 96 int move_list_down(struct DrawState* state); 97 int move_list_end(struct DrawState* state); 98 int move_list_page_down(struct DrawState* state); 99 int move_list_page_up(struct DrawState* state); 100 int move_list_start(struct DrawState* state); 101 int move_list_up(struct DrawState* state); 102 int move_next_word(struct DrawState* state); 103 int move_prev_word(struct DrawState* state); 104 int move_right(struct DrawState* state); 105 int move_search_end(struct DrawState* state); 106 int move_search_left(struct DrawState* state); 107 int move_search_next_word(struct DrawState* state); 108 int move_search_prev_word(struct DrawState* state); 109 int move_search_right(struct DrawState* state); 110 int move_search_start(struct DrawState* state); 111 int move_start(struct DrawState* state); 112 int move_up(struct DrawState* state); 113 int next_fuzzy(struct DrawState* state); 114 int next_match(struct DrawState* state); 115 int next_plural(struct DrawState* state); 116 int next_untranslated(struct DrawState* state); 117 int paste_paste_buffer_to_input(struct DrawState* state); 118 int prev_match(struct DrawState* state); 119 int prev_plural(struct DrawState* state); 120 int save_msgstr(struct DrawState* state); 121 int show_edit(struct DrawState* state); 122 int show_help(struct DrawState* state); 123 int show_search(struct DrawState* state); 124 int toggle_fuzzy(struct DrawState* state); 125 int toggle_info_focused(struct DrawState* state); 126 int yank_msgstr_to_paste_buffer(struct DrawState* state); 127 int write_file(struct DrawState* state); 128 129 /* clang-format off */ 130 131 /* Always processed */ 132 static const struct Key top_level_keys[] = { 133 { .ev = { .key = TB_KEY_ESC }, .callback = cancel_close }, 134 { .ev = { .key = TB_KEY_CTRL_Q }, 135 .callback = exit_program }, 136 }; 137 138 /* Edit msgstr box open */ 139 static const struct Key edit_keys[] = { 140 { .ev = { .key = TB_KEY_ARROW_DOWN }, 141 .callback = move_down }, 142 { .ev = { .key = TB_KEY_ARROW_LEFT }, 143 .callback = move_left }, 144 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 145 .callback = move_right }, 146 { .ev = { .key = TB_KEY_ARROW_UP }, 147 .callback = move_up }, 148 { .ev = { .key = TB_KEY_BACKSPACE }, 149 .callback = erase_backwards }, 150 { .ev = { .key = TB_KEY_BACKSPACE2 }, 151 .callback = erase_backwards }, 152 { .ev = { .key = TB_KEY_CTRL_A }, 153 .callback = move_start }, 154 { .ev = { .key = TB_KEY_CTRL_C }, 155 .callback = yank_msgstr_to_paste_buffer }, 156 { .ev = { .key = TB_KEY_CTRL_E }, 157 .callback = move_end }, 158 { .ev = { .key = TB_KEY_CTRL_K }, 159 .callback = erase_to_end }, 160 { .ev = { .key = TB_KEY_CTRL_N }, 161 .callback = next_plural }, 162 { .ev = { .key = TB_KEY_CTRL_P }, 163 .callback = prev_plural }, 164 { .ev = { .key = TB_KEY_CTRL_R }, 165 .callback = move_prev_word }, 166 { .ev = { .key = TB_KEY_CTRL_S }, 167 .callback = save_msgstr }, 168 { .ev = { .key = TB_KEY_CTRL_T }, 169 .callback = move_next_word }, 170 { .ev = { .key = TB_KEY_CTRL_U }, 171 .callback = erase_to_start }, 172 { .ev = { .key = TB_KEY_CTRL_V }, 173 .callback = paste_paste_buffer_to_input }, 174 { .ev = { .key = TB_KEY_CTRL_W }, 175 .callback = erase_prev_word }, 176 { .ev = { .key = TB_KEY_CTRL_Z }, 177 .callback = toggle_fuzzy }, 178 { .ev = { .key = TB_KEY_DELETE }, 179 .callback = erase_forward }, 180 { .ev = { .key = TB_KEY_END }, .callback = move_end }, 181 { .ev = { .key = TB_KEY_ENTER }, 182 .callback = insert_line }, 183 { .ev = { .key = TB_KEY_F5 }, .callback = copy_msgid_to_input }, 184 { .ev = { .key = TB_KEY_F6 }, .callback = toggle_info_focused }, 185 { .ev = { .key = TB_KEY_F8 }, .callback = next_untranslated }, 186 { .ev = { .key = TB_KEY_F9 }, .callback = next_fuzzy }, 187 { .ev = { .key = TB_KEY_HOME }, .callback = move_start }, 188 { .ev = { .key = TB_KEY_PGDN }, .callback = edit_page_down }, 189 { .ev = { .key = TB_KEY_PGUP }, .callback = edit_page_up }, 190 { .ev = { .key = TB_KEY_SPACE }, 191 .callback = insert_space }, 192 { .ev = { .key = TB_KEY_TAB }, .callback = insert_tab }, 193 }; 194 195 /* Search box open */ 196 static const struct Key search_keys[] = { 197 { .ev = { .key = TB_KEY_ARROW_LEFT }, 198 .callback = move_search_left }, 199 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 200 .callback = move_search_right }, 201 { .ev = { .key = TB_KEY_BACKSPACE }, 202 .callback = erase_search_backwards }, 203 { .ev = { .key = TB_KEY_BACKSPACE2 }, 204 .callback = erase_search_backwards }, 205 { .ev = { .key = TB_KEY_CTRL_A }, 206 .callback = move_search_start }, 207 { .ev = { .key = TB_KEY_CTRL_E }, 208 .callback = move_search_end }, 209 { .ev = { .key = TB_KEY_CTRL_K }, 210 .callback = erase_search_to_end }, 211 { .ev = { .key = TB_KEY_CTRL_R }, 212 .callback = move_search_prev_word }, 213 { .ev = { .key = TB_KEY_CTRL_S }, 214 .callback = write_file }, 215 { .ev = { .key = TB_KEY_CTRL_T }, 216 .callback = move_search_next_word }, 217 { .ev = { .key = TB_KEY_CTRL_U }, 218 .callback = erase_search_to_start }, 219 { .ev = { .key = TB_KEY_CTRL_W }, 220 .callback = erase_search_prev_word }, 221 { .ev = { .key = TB_KEY_DELETE }, 222 .callback = erase_search_forward }, 223 { .ev = { .key = TB_KEY_END }, .callback = move_search_end }, 224 { .ev = { .key = TB_KEY_ENTER }, 225 .callback = hide_search }, 226 { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, 227 { .ev = { .key = TB_KEY_F4 }, .callback = prev_match }, 228 { .ev = { .key = TB_KEY_HOME }, .callback = move_search_start }, 229 { .ev = { .key = TB_KEY_SPACE }, 230 .callback = insert_search_space }, 231 { .ev = { .key = TB_KEY_TAB }, .callback = insert_search_tab }, 232 }; 233 234 /* Main window */ 235 static const struct Key main_keys[] = { 236 { .ev = { .key = TB_KEY_ARROW_DOWN }, 237 .callback = move_list_down }, 238 { .ev = { .key = TB_KEY_ARROW_UP }, 239 .callback = move_list_up }, 240 { .ev = { .key = TB_KEY_END }, 241 .callback = move_list_end }, 242 { .ev = { .key = TB_KEY_ENTER }, 243 .callback = show_edit }, 244 { .ev = { .key = TB_KEY_F1 }, .callback = show_help }, 245 { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, 246 { .ev = { .key = TB_KEY_F4 }, .callback = prev_match }, 247 { .ev = { .key = TB_KEY_F7 }, .callback = show_search }, 248 { .ev = { .key = TB_KEY_F8 }, .callback = next_untranslated }, 249 { .ev = { .key = TB_KEY_F9 }, .callback = next_fuzzy }, 250 { .ev = { .key = TB_KEY_HOME }, .callback = move_list_start }, 251 { .ev = { .key = TB_KEY_CTRL_B }, 252 .callback = move_list_page_up }, 253 { .ev = { .key = TB_KEY_CTRL_F }, 254 .callback = move_list_page_down }, 255 { .ev = { .key = TB_KEY_CTRL_S }, 256 .callback = write_file }, 257 { .ev = { .key = TB_KEY_CTRL_Z }, 258 .callback = toggle_fuzzy }, 259 { .ev = { .key = TB_KEY_PGDN }, 260 .callback = move_list_page_down }, 261 { .ev = { .key = TB_KEY_PGUP }, .callback = move_list_page_up }, 262 { .ev = { .ch = '/' }, .callback = show_search }, 263 { .ev = { .ch = 'G' }, .callback = move_list_end }, 264 { .ev = { .ch = 'H' }, .callback = show_help }, 265 { .ev = { .ch = 'f' }, .callback = next_fuzzy }, 266 { .ev = { .ch = 'g' }, .callback = move_list_start }, 267 { .ev = { .ch = 'j' }, .callback = move_list_down }, 268 { .ev = { .ch = 'k' }, .callback = move_list_up }, 269 { .ev = { .ch = 'N' }, .callback = prev_match }, 270 { .ev = { .ch = 'n' }, .callback = next_match }, 271 { .ev = { .ch = 'q' }, .callback = exit_program }, 272 { .ev = { .ch = 'u' }, .callback = next_untranslated }, 273 { .ev = { .ch = 'w' }, .callback = write_file }, 274 { .ev = { .ch = 'z' }, .callback = toggle_fuzzy }, 275 }; 276 277 #endif /* POE_C_GLOBALS */ 278 279 void format_filename(char* result, size_t result_size, const char* format, 280 const struct DrawState* state); 281 void format_msgs(char* result, size_t result_size, const char* format, 282 const struct DrawState* state); 283 284 static const struct StatusSegment status_segments[] = { 285 {.format = "%s%s", 286 .callback = format_filename, 287 .fg = TB_BLACK, 288 .bg = TB_WHITE, 289 .alignment = LEFT}, 290 {.format = "%ld/%ld (%ldu/%ldf/%ldo)", 291 .callback = format_msgs, 292 .fg = TB_WHITE | TB_BOLD, 293 .bg = TB_BLUE, 294 .alignment = CENTER}, 295 {.format = "H=HELP, q=QUIT", 296 .callback = NULL, 297 .fg = TB_BLACK, 298 .bg = TB_WHITE, 299 .alignment = RIGHT}, 300 };