config.def.h (10557B)
1 /* This program is licensed under the terms of GNU GPL v3 or (at your option) 2 * any later version. Copyright (C) 2022-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_DLG] = { .fg = TB_BLACK, .bg = TB_WHITE }, 8 [C_ERROR] = { .fg = TB_WHITE | TB_BOLD, 9 .bg = TB_RED }, 10 [C_ACTION] = { .fg = TB_BLACK, .bg = TB_WHITE }, 11 [C_INPUT] = { .fg = TB_BLACK, .bg = TB_WHITE }, 12 [C_INPUT_EDIT] = { .fg = TB_WHITE, .bg = TB_BLACK }, 13 [C_LINENO] = { .fg = TB_BLACK, .bg = TB_CYAN }, 14 [C_PROMPT] = { .fg = TB_YELLOW | TB_BOLD, 15 .bg = TB_MAGENTA }, 16 [C_SEARCH] = { .fg = TB_WHITE | TB_BOLD, 17 .bg = TB_GREEN }, 18 [C_SEL] = { .fg = TB_BLACK, .bg = TB_WHITE }, 19 [C_SHADOW] = { .fg = TB_BLACK, .bg = TB_BLACK | TB_BOLD}, 20 [C_STATUS_1] = { .fg = TB_WHITE | TB_BOLD, 21 .bg = TB_BLUE }, 22 [C_STATUS_2] = { .fg = TB_YELLOW | TB_BOLD, 23 .bg = TB_BLUE }, 24 [C_STATUS_3] = { .fg = TB_WHITE, .bg = TB_BLUE }, 25 [C_STATUS_4] = { .fg = TB_WHITE | TB_BOLD, 26 .bg = TB_BLUE }, 27 [C_STATUS_5] = { .fg = TB_WHITE, .bg = TB_BLUE }, 28 [C_TEXT] = { .fg = TB_DEFAULT, .bg = TB_DEFAULT }, 29 [C_TITLE] = { .fg = TB_BLACK, .bg = TB_WHITE }, 30 }; 31 /* clang-format on */ 32 33 extern int backup_fail; 34 extern char* backup_suffix; 35 extern int create_backups; 36 extern int enable_wrap; 37 extern int line_numbers; 38 extern int line_numbers_width; 39 extern int open_binary; 40 extern int wrap_width; 41 42 #ifdef SLED_C_GLOBALS 43 /* clang-format off */ 44 45 /* Fail with error if creating backups is not possible due to file and 46 * directory permissions? */ 47 int backup_fail = 1; 48 char* backup_suffix = "~"; 49 int create_backups = 1; /* comment out to not create backups */ 50 int enable_wrap = 1; 51 int line_numbers = 0; /* draw line numbers? initial value */ 52 int open_binary = 0; /* open binary files? */ 53 /* - ideally, wrap_width + line_numbers_width (automatic) <= 80 */ 54 /* - wrap width of 72 is recommended on https://useplaintext.email/ */ 55 int wrap_width = 72; 56 57 /* Always processed */ 58 static const struct Key top_level_keys[] = { 59 { .ev = { .key = TB_KEY_ESC }, .callback = cancel_close }, 60 { .ev = { .key = TB_KEY_CTRL_Q, .mod = TB_MOD_CTRL }, 61 .callback = exit_program }, 62 { .ev = { .key = TB_KEY_CTRL_Z, .mod = TB_MOD_CTRL }, 63 .callback = suspend_program } 64 }; 65 66 /* Only when no dialog/prompt open */ 67 static const struct Key global_keys[] = { 68 { .ev = { .key = TB_KEY_ARROW_DOWN }, 69 .callback = move_down }, 70 { .ev = { .key = TB_KEY_ARROW_UP }, 71 .callback = move_up }, 72 { .ev = { .key = TB_KEY_ARROW_LEFT }, 73 .callback = move_left }, 74 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 75 .callback = move_right }, 76 { .ev = { .key = TB_KEY_BACKSPACE, .mod = TB_MOD_CTRL }, 77 .callback = erase_backwards }, 78 { .ev = { .key = TB_KEY_BACKSPACE2, .mod = TB_MOD_CTRL }, 79 .callback = erase_backwards }, 80 { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, 81 .callback = move_start }, 82 { .ev = { .key = TB_KEY_CTRL_B, .mod = TB_MOD_CTRL }, 83 .callback = move_page_up }, 84 { .ev = { .key = TB_KEY_CTRL_C, .mod = TB_MOD_CTRL }, 85 .callback = yank_to_paste }, 86 { .ev = { .key = TB_KEY_CTRL_D, .mod = TB_MOD_CTRL }, 87 .callback = erase_forward }, 88 { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, 89 .callback = move_end }, 90 { .ev = { .key = TB_KEY_CTRL_F, .mod = TB_MOD_CTRL }, 91 .callback = move_page_down }, 92 { .ev = { .key = TB_KEY_CTRL_J, .mod = TB_MOD_CTRL }, 93 .callback = wrap_para }, 94 { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, 95 .callback = erase_to_end }, 96 { .ev = { .key = TB_KEY_CTRL_L, .mod = TB_MOD_CTRL }, 97 .callback = show_go_to_line }, 98 { .ev = { .key = TB_KEY_CTRL_N, .mod = TB_MOD_CTRL }, 99 .callback = next_match }, 100 { .ev = { .key = TB_KEY_CTRL_O, .mod = TB_MOD_CTRL }, 101 .callback = reread_or_callback }, 102 { .ev = { .key = TB_KEY_CTRL_P, .mod = TB_MOD_CTRL }, 103 .callback = prev_match }, 104 { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, 105 .callback = move_prev_word }, 106 { .ev = { .key = TB_KEY_CTRL_SPACE, .mod = TB_MOD_CTRL }, 107 .callback = toggle_selection }, 108 { .ev = { .key = TB_KEY_CTRL_S, .mod = TB_MOD_CTRL }, 109 .callback = write_file }, 110 { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, 111 .callback = move_next_word }, 112 { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, 113 .callback = erase_to_start }, 114 { .ev = { .key = TB_KEY_CTRL_V, .mod = TB_MOD_CTRL }, 115 .callback = paste_from_paste }, 116 { .ev = { .key = TB_KEY_CTRL_X, .mod = TB_MOD_CTRL }, 117 .callback = cut_to_paste }, 118 { .ev = { .key = TB_KEY_CTRL_Y, .mod = TB_MOD_CTRL }, 119 .callback = erase_line }, 120 { .ev = { .key = TB_KEY_CTRL_W, .mod = TB_MOD_CTRL }, 121 .callback = erase_prev_word }, 122 { .ev = { .key = TB_KEY_DELETE }, 123 .callback = erase_forward }, 124 { .ev = { .key = TB_KEY_F1 }, .callback = show_help }, 125 { .ev = { .key = TB_KEY_F2 }, .callback = toggle_line_numbers }, 126 { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, 127 { .ev = { .key = TB_KEY_F3, .mod = TB_MOD_SHIFT }, 128 .callback = prev_match }, 129 { .ev = { .key = TB_KEY_F4 }, .callback = show_search_replace }, 130 { .ev = { .key = TB_KEY_F7 }, .callback = show_search }, 131 { .ev = { .key = TB_KEY_END }, .callback = move_end }, 132 { .ev = { .key = TB_KEY_HOME }, .callback = move_start }, 133 { .ev = { .key = TB_KEY_INSERT }, 134 .callback = toggle_overwrite }, 135 { .ev = { .key = TB_KEY_PGDN }, .callback = move_page_down }, 136 { .ev = { .key = TB_KEY_PGUP }, .callback = move_page_up } 137 }; 138 139 /* Only when input dialog is shown */ 140 static const struct Key input_dialog_keys[] = { 141 { .ev = { .key = TB_KEY_ESC }, .callback = input_cancel }, 142 { .ev = { .key = TB_KEY_ARROW_LEFT }, 143 .callback = input_move_left }, 144 { .ev = { .key = TB_KEY_ARROW_RIGHT }, 145 .callback = input_move_right }, 146 { .ev = { .key = TB_KEY_BACKSPACE, .mod = TB_MOD_CTRL }, 147 .callback = input_erase_backwards }, 148 { .ev = { .key = TB_KEY_BACKSPACE2, .mod = TB_MOD_CTRL }, 149 .callback = input_erase_backwards }, 150 { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, 151 .callback = input_move_start }, 152 { .ev = { .key = TB_KEY_CTRL_D, .mod = TB_MOD_CTRL }, 153 .callback = input_erase_forward }, 154 { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, 155 .callback = input_move_end }, 156 { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, 157 .callback = input_erase_to_end }, 158 { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, 159 .callback = input_move_prev_word }, 160 { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, 161 .callback = input_move_next_word }, 162 { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, 163 .callback = input_erase_to_start }, 164 { .ev = { .key = TB_KEY_DELETE }, 165 .callback = input_erase_forward }, 166 { .ev = { .key = TB_KEY_END }, .callback = input_move_end }, 167 /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference 168 * between C-Enter and Enter... */ 169 { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, 170 .callback = input_enter }, 171 { .ev = { .key = TB_KEY_HOME }, .callback = input_move_start }, 172 { .ev = { .key = TB_KEY_SPACE }, 173 .callback = input_insert_space }, 174 /* Tab = C-I, hence the TB_MOD_CTRL; tb doesn't make a difference 175 * between C-I and Tab... */ 176 { .ev = { .key = TB_KEY_TAB, .mod = TB_MOD_CTRL }, 177 .callback = input_insert_tab } 178 }; 179 180 /* Only when in insert mode */ 181 static const struct Key insert_keys[] = { 182 { .ev = { .key = TB_KEY_CTRL_BACKSLASH, .mod = TB_MOD_CTRL }, 183 .callback = enter_command_mode }, 184 /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference 185 * between C-Enter and Enter... */ 186 { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, 187 .callback = insert_line }, 188 { .ev = { .key = TB_KEY_INSERT }, 189 .callback = toggle_overwrite }, 190 { .ev = { .key = TB_KEY_SPACE }, 191 .callback = insert_space }, 192 /* Tab = C-I, hence the TB_MOD_CTRL; tb doesn't make a difference 193 * between C-I and Tab... */ 194 { .ev = { .key = TB_KEY_TAB, .mod = TB_MOD_CTRL }, 195 .callback = insert_tab } 196 }; 197 198 /* Only when in command mode */ 199 static const struct Key command_keys[] = { 200 { .ev = { .key = TB_KEY_CTRL_BACKSLASH, .mod = TB_MOD_CTRL }, 201 .callback = enter_insert_mode }, 202 { .ev = { .ch = '/' }, .callback = show_search }, 203 { .ev = { .ch = '\\' }, .callback = show_search_replace }, 204 { .ev = { .ch = ':' }, .callback = show_go_to_line }, 205 { .ev = { .ch = '0' }, .callback = move_start }, 206 { .ev = { .ch = '$' }, .callback = move_end }, 207 { .ev = { .ch = 'd' }, .callback = erase_line }, 208 { .ev = { .ch = 'G' }, .callback = move_bottom }, 209 { .ev = { .ch = 'g' }, .callback = move_top }, 210 { .ev = { .ch = 'H' }, .callback = move_screen_top }, 211 { .ev = { .ch = 'h' }, .callback = move_left }, 212 { .ev = { .ch = 'J' }, .callback = join_lines }, 213 { .ev = { .ch = 'j' }, .callback = move_down }, 214 { .ev = { .ch = 'k' }, .callback = move_up }, 215 { .ev = { .ch = 'L' }, .callback = move_screen_bottom }, 216 { .ev = { .ch = 'l' }, .callback = move_right }, 217 { .ev = { .ch = 'M' }, .callback = move_screen_middle }, 218 { .ev = { .ch = 'N' }, .callback = prev_match }, 219 { .ev = { .ch = 'n' }, .callback = next_match }, 220 { .ev = { .ch = 'P' }, .callback = paste_from_paste }, 221 { .ev = { .ch = 'q' }, .callback = exit_program }, 222 { .ev = { .ch = 'R' }, .callback = toggle_overwrite }, 223 { .ev = { .ch = 'r' }, .callback = reread_or_callback }, 224 { .ev = { .ch = 'v' }, .callback = toggle_selection }, 225 { .ev = { .ch = 'W' }, .callback = move_prev_word }, 226 { .ev = { .ch = 'w' }, .callback = move_next_word }, 227 { .ev = { .ch = 'X' }, .callback = cut_to_paste }, 228 { .ev = { .ch = 'x' }, .callback = erase_forward }, 229 { .ev = { .ch = 'y' }, .callback = yank_to_paste }, 230 { .ev = { .ch = 'Z' }, .callback = write_file } 231 }; 232 233 /* clang-format on */ 234 #endif /* SLED_C_GLOBALS */ 235 236 /* clang-format off */ 237 static const struct StatusSegment status_segments[] = { 238 {.format = "%s%s", 239 .callback = format_filename, 240 .color_index = C_STATUS_1, 241 .alignment = LEFT}, 242 {.format = "%s", 243 .callback = format_mode, 244 .color_index = C_STATUS_2, 245 .alignment = CENTER}, 246 {.format = "[%s]", 247 .callback = format_codep, 248 .color_index = C_STATUS_3, 249 .alignment = CENTER}, 250 {.format = "+%d %d:%d (%d%%)", 251 .callback = format_position, 252 .color_index = C_STATUS_4, 253 .alignment = CENTER}, 254 {.format = "F1=HELP", 255 .callback = NULL, 256 .color_index = C_STATUS_5, 257 .alignment = RIGHT}, 258 }; 259 /* clang-format on */