poe

Уређивач .po фајлова
git clone https://git.sr.ht/~strahinja/poe
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

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 */