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