config.def.h (11378B)
1 /* This program is licensed under the terms of GNU GPL v3 or (at your option) 2 * any later version. Copyright (C) 2021-2026 Страхиња Радић. 3 * See the file LICENSE for exact copyright and license details. */ 4 5 /* clang-format off */ 6 static const struct Color colors[] = { 7 [C_ACTION] = { .fg = TB_BLACK, .bg = TB_WHITE }, 8 [C_CLEAR] = { .fg = TB_DEFAULT, .bg = TB_DEFAULT }, 9 [C_DLG] = { .fg = TB_BLACK, .bg = TB_WHITE }, 10 [C_EDIT_MSGID] = { .fg = TB_BLACK | TB_BOLD, 11 .bg = TB_WHITE }, 12 [C_EDIT_MSGID_FOCUS] 13 = { .fg = TB_BLACK, .bg = TB_WHITE }, 14 [C_EDIT_MSGID_HEADING] 15 = { .fg = TB_WHITE | TB_BOLD, 16 .bg = TB_WHITE }, 17 [C_EDIT_MSGSTR] = { .fg = TB_BLACK | TB_BOLD, 18 .bg = TB_BLACK }, 19 [C_EDIT_MSGSTR_FOCUS] 20 = { .fg = TB_YELLOW | TB_BOLD, 21 .bg = TB_BLACK }, 22 [C_ERROR] = { .fg = TB_WHITE | TB_BOLD, 23 .bg = TB_RED }, 24 [C_FLAG] = { .fg = TB_YELLOW | TB_BOLD, 25 .bg = TB_DEFAULT }, 26 [C_LIST_FLAGS] = { .fg = TB_YELLOW | TB_BOLD, 27 .bg = TB_DEFAULT }, 28 [C_LIST_FLAGS_SEL] 29 = { .fg = TB_WHITE | TB_BOLD, 30 .bg = TB_BLUE }, 31 [C_LIST_MSGID] = { .fg = TB_WHITE, .bg = TB_DEFAULT }, 32 [C_LIST_MSGID_SEL] 33 = { .fg = TB_WHITE, .bg = TB_BLUE }, 34 [C_LIST_MSGID_SPECIAL] 35 = { .fg = TB_YELLOW | TB_BOLD, 36 .bg = TB_DEFAULT }, 37 [C_LIST_MSGID_SPECIAL_SEL] 38 = { .fg = TB_WHITE | TB_BOLD, 39 .bg = TB_BLUE }, 40 [C_LIST_MSGSTR] = { .fg = TB_GREEN, .bg = TB_DEFAULT }, 41 [C_LIST_MSGSTR_SEL] 42 = { .fg = TB_WHITE | TB_BOLD, 43 .bg = TB_BLUE }, 44 [C_LIST_MSGSTR_WARN] 45 = { .fg = TB_RED | TB_BOLD, 46 .bg = TB_DEFAULT }, 47 [C_LIST_MSGSTR_SEL_WARN] 48 = { .fg = TB_RED | TB_BOLD, 49 .bg = TB_BLUE }, 50 [C_LIST_SEL] = { .fg = TB_WHITE, .bg = TB_BLUE }, 51 [C_MSGID] = { .fg = TB_GREEN, .bg = TB_DEFAULT }, 52 [C_MSGSTR] = { .fg = TB_WHITE, .bg = TB_DEFAULT }, 53 [C_PROMPT] = { .fg = TB_YELLOW | TB_BOLD, 54 .bg = TB_MAGENTA }, 55 [C_SEARCH] = { .fg = TB_BLACK, .bg = TB_WHITE }, 56 [C_SEARCH_EDIT] = { .fg = TB_WHITE | TB_BOLD, 57 .bg = TB_BLACK }, 58 [C_SEARCH_HL] = { .fg = TB_WHITE | TB_BOLD, 59 .bg = TB_GREEN }, 60 [C_SHADOW] = { .fg = TB_BLACK, .bg = TB_BLACK | TB_BOLD 61 }, 62 [C_STATUS_1] = { .fg = TB_BLACK, .bg = TB_WHITE }, 63 [C_STATUS_2] = { .fg = TB_WHITE | TB_BOLD, 64 .bg = TB_BLUE }, 65 [C_STATUS_3] = { .fg = TB_BLACK, .bg = TB_WHITE }, 66 [C_TITLE] = { .fg = TB_BLACK, .bg = TB_WHITE }, 67 }; 68 /* clang-format on */ 69 70 extern int backup_fail; 71 extern char* backup_suffix; 72 extern int break_literals; 73 extern int create_backups; 74 extern int literal_break_threshold; 75 extern int match_msgstr_ending; 76 extern char* plural_string; 77 extern int warn_count_dots; 78 extern int wrap_width; 79 80 #ifdef POE_C_GLOBALS 81 /* clang-format off */ 82 83 /* Fail with error if creating backups is not possible due to file and 84 * directory permissions? */ 85 int backup_fail = 1; 86 char* backup_suffix = "~"; 87 int break_literals = 1; /* break long literals into an empty string + a 88 * literal on a separate line */ 89 int create_backups = 1; /* comment out to not create backups */ 90 int literal_break_threshold 91 = 80; /* if "msgid \"" (or msgstr, etc) + literal are 92 * longer than this, the string will be split 93 * into an empty string + a literal on a 94 * separate line */ 95 int match_msgstr_ending = 1; /* correct the ending of msgstr to 96 * match msgid if ' ', '.' or '\\n'? */ 97 /* Uncomment/comment the appropriate definition to insert this after 98 * Plural-Forms: in the first msgstr (only if Plural-Forms isn't already 99 * present) The plural string given here is for Serbian; adjust to match 100 * your language */ 101 char* plural_string = NULL; 102 /*char* plural_string = "nplurals=3; plural=(n%10==1 && n%100!=11 ?" 103 " 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";*/ 104 int warn_count_dots = 0; 105 int wrap_width = 77; /* set to 0 to turn off wrap */ 106 107 /* Always processed */ 108 static const struct Key top_level_keys[] = { 109 { .ev = { .key = TB_KEY_ESC }, .callback = cancel_close }, 110 { .ev = { .key = TB_KEY_CTRL_Q, .mod = TB_MOD_CTRL }, 111 .callback = exit_program }, 112 }; 113 114 /* Edit msgstr box open */ 115 static const struct Key edit_keys[] = { 116 { .ev = { .key = TB_KEY_ARROW_DOWN }, 117 .callback = move_down }, 118 { .ev = { .key = TB_KEY_ARROW_LEFT }, 119 .callback = move_left }, 120 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 121 .callback = move_right }, 122 { .ev = { .key = TB_KEY_ARROW_UP }, 123 .callback = move_up }, 124 { .ev = { .key = TB_KEY_BACKSPACE, 125 .mod = TB_MOD_CTRL }, 126 .callback = erase_backwards }, 127 { .ev = { .key = TB_KEY_BACKSPACE2, 128 .mod = TB_MOD_CTRL }, 129 .callback = erase_backwards }, 130 { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, 131 .callback = move_start }, 132 { .ev = { .key = TB_KEY_CTRL_C, .mod = TB_MOD_CTRL }, 133 .callback = yank_input_to_paste_buffer }, 134 { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, 135 .callback = move_end }, 136 { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, 137 .callback = erase_to_end }, 138 { .ev = { .key = TB_KEY_CTRL_N, .mod = TB_MOD_CTRL }, 139 .callback = next_plural }, 140 { .ev = { .key = TB_KEY_CTRL_P, .mod = TB_MOD_CTRL }, 141 .callback = prev_plural }, 142 { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, 143 .callback = move_prev_word }, 144 { .ev = { .key = TB_KEY_CTRL_S, .mod = TB_MOD_CTRL }, 145 .callback = save_msgstr }, 146 { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, 147 .callback = move_next_word }, 148 { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, 149 .callback = erase_to_start }, 150 { .ev = { .key = TB_KEY_CTRL_V, .mod = TB_MOD_CTRL }, 151 .callback = paste_paste_buffer_to_input }, 152 { .ev = { .key = TB_KEY_CTRL_W, .mod = TB_MOD_CTRL }, 153 .callback = erase_prev_word }, 154 { .ev = { .key = TB_KEY_CTRL_Z, .mod = TB_MOD_CTRL }, 155 .callback = toggle_fuzzy }, 156 { .ev = { .key = TB_KEY_DELETE }, 157 .callback = erase_forward }, 158 { .ev = { .key = TB_KEY_END }, .callback = move_end }, 159 /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference 160 * between C-Enter and Enter... */ 161 { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, 162 .callback = insert_line }, 163 { .ev = { .key = TB_KEY_F5 }, .callback = copy_msgid_to_input }, 164 { .ev = { .key = TB_KEY_F6 }, .callback = toggle_info_focused }, 165 { .ev = { .key = TB_KEY_F8 }, .callback = next_untranslated }, 166 { .ev = { .key = TB_KEY_F9 }, .callback = next_fuzzy }, 167 { .ev = { .key = TB_KEY_HOME }, .callback = move_start }, 168 { .ev = { .key = TB_KEY_PGDN }, .callback = edit_page_down }, 169 { .ev = { .key = TB_KEY_PGUP }, .callback = edit_page_up }, 170 { .ev = { .key = TB_KEY_SPACE }, 171 .callback = insert_space }, 172 /* Tab = C-I, hence the TB_MOD_CTRL; tb doesn't make a difference 173 * between C-I and Tab... */ 174 { .ev = { .key = TB_KEY_TAB, .mod = TB_MOD_CTRL }, 175 .callback = insert_tab }, 176 }; 177 178 /* Search box open */ 179 static const struct Key search_keys[] = { 180 { .ev = { .key = TB_KEY_ARROW_LEFT }, 181 .callback = move_search_left }, 182 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 183 .callback = move_search_right }, 184 { .ev = { .key = TB_KEY_BACKSPACE, 185 .mod = TB_MOD_CTRL }, 186 .callback = erase_search_backwards }, 187 { .ev = { .key = TB_KEY_BACKSPACE2, 188 .mod = TB_MOD_CTRL }, 189 .callback = erase_search_backwards }, 190 { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, 191 .callback = move_search_start }, 192 { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, 193 .callback = move_search_end }, 194 { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, 195 .callback = erase_search_to_end }, 196 { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, 197 .callback = move_search_prev_word }, 198 { .ev = { .key = TB_KEY_CTRL_S, .mod = TB_MOD_CTRL }, 199 .callback = write_file }, 200 { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, 201 .callback = move_search_next_word }, 202 { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, 203 .callback = erase_search_to_start }, 204 { .ev = { .key = TB_KEY_CTRL_W, .mod = TB_MOD_CTRL }, 205 .callback = erase_search_prev_word }, 206 { .ev = { .key = TB_KEY_DELETE }, 207 .callback = erase_search_forward }, 208 { .ev = { .key = TB_KEY_END }, .callback = move_search_end }, 209 /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference 210 * between C-Enter and Enter... */ 211 { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, 212 .callback = hide_search }, 213 { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, 214 { .ev = { .key = TB_KEY_F4 }, .callback = prev_match }, 215 { .ev = { .key = TB_KEY_HOME }, .callback = move_search_start }, 216 { .ev = { .key = TB_KEY_SPACE }, 217 .callback = insert_search_space }, 218 /* Tab = C-I, hence the TB_MOD_CTRL; tb doesn't make a difference 219 * between C-I and Tab... */ 220 { .ev = { .key = TB_KEY_TAB, .mod = TB_MOD_CTRL }, 221 .callback = insert_search_tab }, 222 }; 223 224 /* Help dialog */ 225 static const struct Key help_keys[] = { 226 { .ev = { .ch = 'q' }, .callback = exit_program }, 227 }; 228 229 /* Main window */ 230 static const struct Key main_keys[] = { 231 { .ev = { .key = TB_KEY_ARROW_DOWN }, 232 .callback = move_list_down }, 233 { .ev = { .key = TB_KEY_ARROW_UP }, 234 .callback = move_list_up }, 235 { .ev = { .key = TB_KEY_END }, 236 .callback = move_list_end }, 237 /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference 238 * between C-Enter and Enter... */ 239 { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, 240 .callback = show_edit }, 241 { .ev = { .key = TB_KEY_F1 }, .callback = show_help }, 242 { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, 243 { .ev = { .key = TB_KEY_F4 }, .callback = prev_match }, 244 { .ev = { .key = TB_KEY_F7 }, .callback = show_search }, 245 { .ev = { .key = TB_KEY_F8 }, .callback = next_untranslated }, 246 { .ev = { .key = TB_KEY_F9 }, .callback = next_fuzzy }, 247 { .ev = { .key = TB_KEY_HOME }, .callback = move_list_start }, 248 { .ev = { .key = TB_KEY_CTRL_B, .mod = TB_MOD_CTRL }, 249 .callback = move_list_page_up }, 250 { .ev = { .key = TB_KEY_CTRL_F, .mod = TB_MOD_CTRL }, 251 .callback = move_list_page_down }, 252 { .ev = { .key = TB_KEY_CTRL_S, .mod = TB_MOD_CTRL }, 253 .callback = write_file }, 254 { .ev = { .key = TB_KEY_CTRL_Z, .mod = TB_MOD_CTRL }, 255 .callback = toggle_fuzzy }, 256 { .ev = { .key = TB_KEY_PGDN }, 257 .callback = move_list_page_down }, 258 { .ev = { .key = TB_KEY_PGUP }, .callback = move_list_page_up }, 259 { .ev = { .ch = '/' }, .callback = show_search }, 260 { .ev = { .ch = 'G' }, .callback = move_list_end }, 261 { .ev = { .ch = 'H' }, .callback = show_help }, 262 { .ev = { .ch = 'f' }, .callback = next_fuzzy }, 263 { .ev = { .ch = 'g' }, .callback = move_list_start }, 264 { .ev = { .ch = 'j' }, .callback = move_list_down }, 265 { .ev = { .ch = 'k' }, .callback = move_list_up }, 266 { .ev = { .ch = 'N' }, .callback = prev_match }, 267 { .ev = { .ch = 'n' }, .callback = next_match }, 268 { .ev = { .ch = 'q' }, .callback = exit_program }, 269 { .ev = { .ch = 'u' }, .callback = next_untranslated }, 270 { .ev = { .ch = 'w' }, .callback = write_file }, 271 { .ev = { .ch = 'z' }, .callback = toggle_fuzzy }, 272 }; 273 274 /* clang-format on */ 275 #endif /* POE_C_GLOBALS */ 276 277 /* clang-format off */ 278 static const struct StatusSegment status_segments[] = { 279 {.format = "%s%s", 280 .callback = format_filename, 281 .color_index = C_STATUS_1, 282 .alignment = LEFT}, 283 {.format = "%ld/%ld (%ldu/%ldf/%ldo)", 284 .callback = format_msgs, 285 .color_index = C_STATUS_2, 286 .alignment = CENTER}, 287 {.format = "H=HELP, q=QUIT", 288 .callback = NULL, 289 .color_index = C_STATUS_3, 290 .alignment = RIGHT}, 291 }; 292 /* clang-format on */