sled

Једноставни уређивач текста
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

config.h (11047B)


      1 /* See the file LICENSE for copyright and license details. */
      2 
      3 /* Comment out to not create backups */
      4 #define CREATE_BACKUPS
      5 /* Comment out to not wrap lines */
      6 #define ENABLE_WRAP
      7 #define WRAP_WIDTH 80
      8 
      9 #ifdef SLED_C_GLOBALS
     10 const char* backup_suffix = "~";
     11 #endif /* SLED_C_GLOBALS */
     12 
     13 #define DLG_FG	      TB_BLACK
     14 #define DLG_BG	      TB_WHITE
     15 #define ERROR_FG      TB_WHITE | TB_BOLD
     16 #define ERROR_BG      TB_RED
     17 #define ACTION_FG     TB_BLACK
     18 #define ACTION_BG     TB_WHITE
     19 #define INPUT_FG      TB_BLACK
     20 #define INPUT_BG      TB_WHITE
     21 #define INPUT_EDIT_FG TB_WHITE
     22 #define INPUT_EDIT_BG TB_BLACK
     23 #define PROMPT_FG     TB_YELLOW | TB_BOLD
     24 #define PROMPT_BG     TB_MAGENTA
     25 #define SEARCH_FG     TB_WHITE | TB_BOLD
     26 #define SEARCH_BG     TB_GREEN
     27 #define SEL_FG	      TB_BLACK
     28 #define SEL_BG	      TB_WHITE
     29 #define SHADOW_FG     TB_BLACK
     30 #define SHADOW_BG     TB_BLACK | TB_BOLD
     31 #define STATUS_1_FG   TB_WHITE | TB_BOLD
     32 #define STATUS_1_BG   TB_BLUE
     33 #define STATUS_2_FG   TB_YELLOW | TB_BOLD
     34 #define STATUS_2_BG   TB_BLUE
     35 #define STATUS_3_FG   TB_WHITE | TB_BOLD
     36 #define STATUS_3_BG   TB_BLUE
     37 #define STATUS_4_FG   TB_WHITE
     38 #define STATUS_4_BG   TB_BLUE
     39 #define TEXT_FG	      TB_WHITE
     40 #define TEXT_BG	      TB_DEFAULT
     41 #define TITLE_FG      TB_BLACK
     42 #define TITLE_BG      TB_WHITE
     43 
     44 #ifdef SLED_C_GLOBALS
     45 int cancel_close(struct DrawState* state);
     46 int cut_to_paste(struct DrawState* state);
     47 int enter_command_mode(struct DrawState* state);
     48 int enter_insert_mode(struct DrawState* state);
     49 int erase_backwards(struct DrawState* state);
     50 int erase_forward(struct DrawState* state);
     51 int erase_line(struct DrawState* state);
     52 int erase_prev_word(struct DrawState* state);
     53 int erase_to_end(struct DrawState* state);
     54 int erase_to_start(struct DrawState* state);
     55 int exit_program(struct DrawState* state);
     56 int input_cancel(struct DrawState* state);
     57 int input_enter(struct DrawState* state);
     58 int input_erase_backwards(struct DrawState* state);
     59 int input_erase_forward(struct DrawState* state);
     60 int input_erase_to_end(struct DrawState* state);
     61 int input_erase_to_start(struct DrawState* state);
     62 int input_insert_space(struct DrawState* state);
     63 int input_insert_tab(struct DrawState* state);
     64 int input_move_end(struct DrawState* state);
     65 int input_move_left(struct DrawState* state);
     66 int input_move_right(struct DrawState* state);
     67 int input_move_start(struct DrawState* state);
     68 int input_move_prev_word(struct DrawState* state);
     69 int input_move_next_word(struct DrawState* state);
     70 int insert_line(struct DrawState* state);
     71 int insert_space(struct DrawState* state);
     72 int insert_tab(struct DrawState* state);
     73 int join_lines(struct DrawState* state);
     74 int move_bottom(struct DrawState* state);
     75 int move_down(struct DrawState* state);
     76 int move_end(struct DrawState* state);
     77 int move_left(struct DrawState* state);
     78 int move_next_word(struct DrawState* state);
     79 int move_page_down(struct DrawState* state);
     80 int move_page_up(struct DrawState* state);
     81 int move_prev_word(struct DrawState* state);
     82 int move_right(struct DrawState* state);
     83 int move_screen_bottom(struct DrawState* state);
     84 int move_screen_middle(struct DrawState* state);
     85 int move_screen_top(struct DrawState* state);
     86 int move_start(struct DrawState* state);
     87 int move_top(struct DrawState* state);
     88 int move_up(struct DrawState* state);
     89 int next_match(struct DrawState* state);
     90 int paste_from_paste(struct DrawState* state);
     91 int prev_match(struct DrawState* state);
     92 int reread_or_callback(struct DrawState* state);
     93 int show_go_to_line(struct DrawState* state);
     94 int show_help(struct DrawState* state);
     95 int show_search(struct DrawState* state);
     96 int toggle_overwrite(struct DrawState* state);
     97 int toggle_selection(struct DrawState* state);
     98 int write_file(struct DrawState* state);
     99 int yank_to_paste(struct DrawState* state);
    100 int suspend_program(struct DrawState* state);
    101 
    102 /* clang-format off */
    103 
    104 /* Always processed */
    105 static const struct Key top_level_keys[] = {
    106 	{ .ev = { .key = TB_KEY_ESC },  .callback = cancel_close },
    107 	{ .ev = { .key = TB_KEY_CTRL_Q },
    108 					.callback = exit_program },
    109 	{ .ev = { .key = TB_KEY_CTRL_Z },
    110 					.callback = suspend_program }
    111 };
    112 
    113 /* Only when no dialog/prompt open */
    114 static const struct Key global_keys[] = {
    115 	{ .ev = { .key = TB_KEY_ARROW_DOWN },
    116 					.callback = move_down },
    117 	{ .ev = { .key = TB_KEY_ARROW_UP },
    118 					.callback = move_up },
    119 	{ .ev = { .key = TB_KEY_ARROW_LEFT },
    120 					.callback = move_left },
    121 	{ .ev = { .key = TB_KEY_ARROW_RIGHT },
    122 					.callback = move_right },
    123 	{ .ev = { .key = TB_KEY_BACKSPACE },
    124 					.callback = erase_backwards },
    125 	{ .ev = { .key = TB_KEY_BACKSPACE2 },
    126 					.callback = erase_backwards },
    127 	{ .ev = { .key = TB_KEY_CTRL_A },
    128 					.callback = move_start },
    129 	{ .ev = { .key = TB_KEY_CTRL_B },
    130 					.callback = move_page_up },
    131 	{ .ev = { .key = TB_KEY_CTRL_C },
    132 					.callback = yank_to_paste },
    133 	{ .ev = { .key = TB_KEY_CTRL_D },
    134 					.callback = erase_forward },
    135 	{ .ev = { .key = TB_KEY_CTRL_E },
    136 					.callback = move_end },
    137 	{ .ev = { .key = TB_KEY_CTRL_F },
    138 					.callback = move_page_down },
    139 	{ .ev = { .key = TB_KEY_CTRL_K },
    140 					.callback = erase_to_end },
    141 	{ .ev = { .key = TB_KEY_CTRL_L },
    142 					.callback = show_go_to_line },
    143 	{ .ev = { .key = TB_KEY_CTRL_N },
    144 					.callback = next_match },
    145 	{ .ev = { .key = TB_KEY_CTRL_O },
    146 					.callback = reread_or_callback },
    147 	{ .ev = { .key = TB_KEY_CTRL_P },
    148 					.callback = prev_match },
    149 	{ .ev = { .key = TB_KEY_CTRL_R },
    150 					.callback = move_prev_word },
    151 	{ .ev = { .key = TB_KEY_CTRL_SPACE },
    152 					.callback = toggle_selection },
    153 	{ .ev = { .key = TB_KEY_CTRL_S },
    154 					.callback = write_file },
    155 	{ .ev = { .key = TB_KEY_CTRL_T },
    156 					.callback = move_next_word },
    157 	{ .ev = { .key = TB_KEY_CTRL_U },
    158 					.callback = erase_to_start },
    159 	{ .ev = { .key = TB_KEY_CTRL_V },
    160 					.callback = paste_from_paste },
    161 	{ .ev = { .key = TB_KEY_CTRL_X },
    162 					.callback = cut_to_paste },
    163 	{ .ev = { .key = TB_KEY_CTRL_Y },
    164 					.callback = erase_line },
    165 	{ .ev = { .key = TB_KEY_CTRL_W },
    166 					.callback = erase_prev_word },
    167 	{ .ev = { .key = TB_KEY_DELETE },
    168 					.callback = erase_forward },
    169 	{ .ev = { .key = TB_KEY_F1 },	.callback = show_help },
    170 	{ .ev = { .key = TB_KEY_F3 },	.callback = next_match },
    171 	{ .ev = { .key = TB_KEY_F4 },	.callback = prev_match },
    172 	{ .ev = { .key = TB_KEY_F7 },	.callback = show_search },
    173 	{ .ev = { .key = TB_KEY_END },	.callback = move_end },
    174 	{ .ev = { .key = TB_KEY_HOME },	.callback = move_start },
    175 	{ .ev = { .key = TB_KEY_INSERT },
    176 					.callback = toggle_overwrite },
    177 	{ .ev = { .key = TB_KEY_PGDN }, .callback = move_page_down },
    178 	{ .ev = { .key = TB_KEY_PGUP }, .callback = move_page_up }
    179 };
    180 
    181 /* Only when input dialog is shown */
    182 static const struct Key input_dialog_keys[] = {
    183 	{ .ev = { .key = TB_KEY_ESC },	.callback = input_cancel },
    184 	{ .ev = { .key = TB_KEY_ARROW_LEFT },
    185 					.callback = input_move_left },
    186 	{ .ev = { .key = TB_KEY_ARROW_RIGHT },
    187 					.callback = input_move_right },
    188 	{ .ev = { .key = TB_KEY_BACKSPACE },
    189 					.callback = input_erase_backwards },
    190 	{ .ev = { .key = TB_KEY_BACKSPACE2 },
    191 					.callback = input_erase_backwards },
    192 	{ .ev = { .key = TB_KEY_CTRL_A },
    193 					.callback = input_move_start },
    194 	{ .ev = { .key = TB_KEY_CTRL_D },
    195 					.callback = input_erase_forward },
    196 	{ .ev = { .key = TB_KEY_CTRL_E },
    197 					.callback = input_move_end },
    198 	{ .ev = { .key = TB_KEY_CTRL_K },
    199 					.callback = input_erase_to_end },
    200 	{ .ev = { .key = TB_KEY_CTRL_R },
    201 					.callback = input_move_prev_word },
    202 	{ .ev = { .key = TB_KEY_CTRL_T },
    203 					.callback = input_move_next_word },
    204 	{ .ev = { .key = TB_KEY_CTRL_U },
    205 					.callback = input_erase_to_start },
    206 	{ .ev = { .key = TB_KEY_DELETE },
    207 					.callback = input_erase_forward },
    208 	{ .ev = { .key = TB_KEY_END },	.callback = input_move_end },
    209 	{ .ev = { .key = TB_KEY_ENTER },
    210 					.callback = input_enter },
    211 	{ .ev = { .key = TB_KEY_HOME },	.callback = input_move_start },
    212 	{ .ev = { .key = TB_KEY_SPACE },
    213 					.callback = input_insert_space },
    214 	{ .ev = { .key = TB_KEY_TAB },	.callback = input_insert_tab }
    215 };
    216 
    217 /* Only when in insert mode */
    218 static const struct Key insert_keys[] = {
    219 	{ .ev = { .key = TB_KEY_CTRL_BACKSLASH },
    220 					.callback = enter_command_mode },
    221 	{ .ev = { .key = TB_KEY_ENTER },
    222 					.callback = insert_line },
    223 	{ .ev = { .key = TB_KEY_INSERT },
    224 					.callback = toggle_overwrite },
    225 	{ .ev = { .key = TB_KEY_SPACE },
    226 					.callback = insert_space },
    227 	{ .ev = { .key = TB_KEY_TAB },	.callback = insert_tab }
    228 };
    229 
    230 /* Only when in command mode */
    231 static const struct Key command_keys[] = {
    232 	{ .ev = { .key = TB_KEY_CTRL_BACKSLASH },
    233 					.callback = enter_insert_mode },
    234 	{ .ev = { .ch = '/' },		.callback = show_search },
    235 	{ .ev = { .ch = ':' },		.callback = show_go_to_line },
    236 	{ .ev = { .ch = '0' },		.callback = move_start },
    237 	{ .ev = { .ch = '$' },		.callback = move_end },
    238 	{ .ev = { .ch = 'd' },		.callback = erase_line },
    239 	{ .ev = { .ch = 'G' },		.callback = move_bottom },
    240 	{ .ev = { .ch = 'g' },		.callback = move_top },
    241 	{ .ev = { .ch = 'H' },		.callback = move_screen_top },
    242 	{ .ev = { .ch = 'h' },		.callback = move_left },
    243 	{ .ev = { .ch = 'J' },		.callback = join_lines },
    244 	{ .ev = { .ch = 'j' },		.callback = move_down },
    245 	{ .ev = { .ch = 'k' },		.callback = move_up },
    246 	{ .ev = { .ch = 'L' },		.callback = move_screen_bottom },
    247 	{ .ev = { .ch = 'l' },		.callback = move_right },
    248 	{ .ev = { .ch = 'M' },		.callback = move_screen_middle },
    249 	{ .ev = { .ch = 'N' },		.callback = prev_match },
    250 	{ .ev = { .ch = 'n' },		.callback = next_match },
    251 	{ .ev = { .ch = 'P' },		.callback = paste_from_paste },
    252 	{ .ev = { .ch = 'q' },		.callback = exit_program },
    253 	{ .ev = { .ch = 'R' },		.callback = toggle_overwrite },
    254 	{ .ev = { .ch = 'r' },		.callback = reread_or_callback },
    255 	{ .ev = { .ch = 'v' },		.callback = toggle_selection },
    256 	{ .ev = { .ch = 'W' },		.callback = move_prev_word },
    257 	{ .ev = { .ch = 'w' },		.callback = move_next_word },
    258 	{ .ev = { .ch = 'X' },		.callback = cut_to_paste },
    259 	{ .ev = { .ch = 'x' },		.callback = erase_forward },
    260 	{ .ev = { .ch = 'y' },		.callback = yank_to_paste },
    261 	{ .ev = { .ch = 'Z' },		.callback = write_file }
    262 };
    263 /* clang-format on */
    264 #endif /* SLED_C_GLOBALS */
    265 
    266 void format_filename(char* result, size_t result_size, const char* format,
    267 	const struct DrawState* state);
    268 void format_mode(char* result, size_t result_size, const char* format,
    269 	const struct DrawState* state);
    270 void format_position(char* result, size_t result_size, const char* format,
    271 	const struct DrawState* state);
    272 
    273 /* clang-format off */
    274 static const struct StatusSegment status_segments[] = {
    275 	{.format	   = "%s%s",
    276 		.callback  = format_filename,
    277 		.fg	   = STATUS_1_FG,
    278 		.bg	   = STATUS_1_BG,
    279 		.alignment = LEFT},
    280 	{ .format	   = "%s",
    281 		.callback  = format_mode,
    282 		.fg	   = STATUS_2_FG,
    283 		.bg	   = STATUS_2_BG,
    284 		.alignment = CENTER},
    285 	{.format	   = "%5ld:%5ld (%3ld%%)",
    286 		.callback  = format_position,
    287 		.fg	   = STATUS_3_FG,
    288 		.bg	   = STATUS_3_BG,
    289 		.alignment = CENTER},
    290 	{.format	   = "F1=HELP, C-Q=QUIT",
    291 		.callback  = NULL,
    292 		.fg	   = STATUS_4_FG,
    293 		.bg	   = STATUS_4_BG,
    294 		.alignment = RIGHT},
    295 };
    296 /* clang-format on */