sled

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

чување dfa7b862be705e9ff60ff29e3d504b73f3445884
родитељ 6a31034f24d393ba63e2c7787b2ef27d807d7082
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Thu, 30 Mar 2023 21:49:29 +0200

sled.c(handle_key_event): Add termbox mode into key comparison; change F4 -> S-F3

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mconfig.def.h | 77+++++++++++++++++++++++++++++++++++++++++------------------------------------
Msled.1.in | 2+-
Msled.c | 15++++++++++-----
измењених датотека: 3, додавања: 52(+), брисања: 42(-)

diff --git a/config.def.h b/config.def.h @@ -111,9 +111,9 @@ int suspend_program(struct DrawState* state); /* Always processed */ static const struct Key top_level_keys[] = { { .ev = { .key = TB_KEY_ESC }, .callback = cancel_close }, - { .ev = { .key = TB_KEY_CTRL_Q }, + { .ev = { .key = TB_KEY_CTRL_Q, .mod = TB_MOD_CTRL }, .callback = exit_program }, - { .ev = { .key = TB_KEY_CTRL_Z }, + { .ev = { .key = TB_KEY_CTRL_Z, .mod = TB_MOD_CTRL }, .callback = suspend_program } }; @@ -127,55 +127,56 @@ static const struct Key global_keys[] = { .callback = move_left }, { .ev = { .key = TB_KEY_ARROW_RIGHT }, .callback = move_right }, - { .ev = { .key = TB_KEY_BACKSPACE }, + { .ev = { .key = TB_KEY_BACKSPACE, .mod = TB_MOD_CTRL }, .callback = erase_backwards }, - { .ev = { .key = TB_KEY_BACKSPACE2 }, + { .ev = { .key = TB_KEY_BACKSPACE2, .mod = TB_MOD_CTRL }, .callback = erase_backwards }, - { .ev = { .key = TB_KEY_CTRL_A }, + { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, .callback = move_start }, - { .ev = { .key = TB_KEY_CTRL_B }, + { .ev = { .key = TB_KEY_CTRL_B, .mod = TB_MOD_CTRL }, .callback = move_page_up }, - { .ev = { .key = TB_KEY_CTRL_C }, + { .ev = { .key = TB_KEY_CTRL_C, .mod = TB_MOD_CTRL }, .callback = yank_to_paste }, - { .ev = { .key = TB_KEY_CTRL_D }, + { .ev = { .key = TB_KEY_CTRL_D, .mod = TB_MOD_CTRL }, .callback = erase_forward }, - { .ev = { .key = TB_KEY_CTRL_E }, + { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, .callback = move_end }, - { .ev = { .key = TB_KEY_CTRL_F }, + { .ev = { .key = TB_KEY_CTRL_F, .mod = TB_MOD_CTRL }, .callback = move_page_down }, - { .ev = { .key = TB_KEY_CTRL_K }, + { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, .callback = erase_to_end }, - { .ev = { .key = TB_KEY_CTRL_L }, + { .ev = { .key = TB_KEY_CTRL_L, .mod = TB_MOD_CTRL }, .callback = show_go_to_line }, - { .ev = { .key = TB_KEY_CTRL_N }, + { .ev = { .key = TB_KEY_CTRL_N, .mod = TB_MOD_CTRL }, .callback = next_match }, - { .ev = { .key = TB_KEY_CTRL_O }, + { .ev = { .key = TB_KEY_CTRL_O, .mod = TB_MOD_CTRL }, .callback = reread_or_callback }, - { .ev = { .key = TB_KEY_CTRL_P }, + { .ev = { .key = TB_KEY_CTRL_P, .mod = TB_MOD_CTRL }, .callback = prev_match }, - { .ev = { .key = TB_KEY_CTRL_R }, + { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, .callback = move_prev_word }, - { .ev = { .key = TB_KEY_CTRL_SPACE }, + { .ev = { .key = TB_KEY_CTRL_SPACE, .mod = TB_MOD_CTRL }, .callback = toggle_selection }, - { .ev = { .key = TB_KEY_CTRL_S }, + { .ev = { .key = TB_KEY_CTRL_S, .mod = TB_MOD_CTRL }, .callback = write_file }, - { .ev = { .key = TB_KEY_CTRL_T }, + { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, .callback = move_next_word }, - { .ev = { .key = TB_KEY_CTRL_U }, + { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, .callback = erase_to_start }, - { .ev = { .key = TB_KEY_CTRL_V }, + { .ev = { .key = TB_KEY_CTRL_V, .mod = TB_MOD_CTRL }, .callback = paste_from_paste }, - { .ev = { .key = TB_KEY_CTRL_X }, + { .ev = { .key = TB_KEY_CTRL_X, .mod = TB_MOD_CTRL }, .callback = cut_to_paste }, - { .ev = { .key = TB_KEY_CTRL_Y }, + { .ev = { .key = TB_KEY_CTRL_Y, .mod = TB_MOD_CTRL }, .callback = erase_line }, - { .ev = { .key = TB_KEY_CTRL_W }, + { .ev = { .key = TB_KEY_CTRL_W, .mod = TB_MOD_CTRL }, .callback = erase_prev_word }, { .ev = { .key = TB_KEY_DELETE }, .callback = erase_forward }, { .ev = { .key = TB_KEY_F1 }, .callback = show_help }, { .ev = { .key = TB_KEY_F3 }, .callback = next_match }, - { .ev = { .key = TB_KEY_F4 }, .callback = prev_match }, + { .ev = { .key = TB_KEY_F3, .mod = TB_MOD_SHIFT }, + .callback = prev_match }, { .ev = { .key = TB_KEY_F7 }, .callback = show_search }, { .ev = { .key = TB_KEY_END }, .callback = move_end }, { .ev = { .key = TB_KEY_HOME }, .callback = move_start }, @@ -196,24 +197,26 @@ static const struct Key input_dialog_keys[] = { .callback = input_erase_backwards }, { .ev = { .key = TB_KEY_BACKSPACE2 }, .callback = input_erase_backwards }, - { .ev = { .key = TB_KEY_CTRL_A }, + { .ev = { .key = TB_KEY_CTRL_A, .mod = TB_MOD_CTRL }, .callback = input_move_start }, - { .ev = { .key = TB_KEY_CTRL_D }, + { .ev = { .key = TB_KEY_CTRL_D, .mod = TB_MOD_CTRL }, .callback = input_erase_forward }, - { .ev = { .key = TB_KEY_CTRL_E }, + { .ev = { .key = TB_KEY_CTRL_E, .mod = TB_MOD_CTRL }, .callback = input_move_end }, - { .ev = { .key = TB_KEY_CTRL_K }, + { .ev = { .key = TB_KEY_CTRL_K, .mod = TB_MOD_CTRL }, .callback = input_erase_to_end }, - { .ev = { .key = TB_KEY_CTRL_R }, + { .ev = { .key = TB_KEY_CTRL_R, .mod = TB_MOD_CTRL }, .callback = input_move_prev_word }, - { .ev = { .key = TB_KEY_CTRL_T }, + { .ev = { .key = TB_KEY_CTRL_T, .mod = TB_MOD_CTRL }, .callback = input_move_next_word }, - { .ev = { .key = TB_KEY_CTRL_U }, + { .ev = { .key = TB_KEY_CTRL_U, .mod = TB_MOD_CTRL }, .callback = input_erase_to_start }, { .ev = { .key = TB_KEY_DELETE }, .callback = input_erase_forward }, { .ev = { .key = TB_KEY_END }, .callback = input_move_end }, - { .ev = { .key = TB_KEY_ENTER }, + /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference + * between C-Enter and Enter... */ + { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, .callback = input_enter }, { .ev = { .key = TB_KEY_HOME }, .callback = input_move_start }, { .ev = { .key = TB_KEY_SPACE }, @@ -223,9 +226,11 @@ static const struct Key input_dialog_keys[] = { /* Only when in insert mode */ static const struct Key insert_keys[] = { - { .ev = { .key = TB_KEY_CTRL_BACKSLASH }, + { .ev = { .key = TB_KEY_CTRL_BACKSLASH, .mod = TB_MOD_CTRL }, .callback = enter_command_mode }, - { .ev = { .key = TB_KEY_ENTER }, + /* Enter = C-M, hence the TB_MOD_CTRL; tb doesn't make a difference + * between C-Enter and Enter... */ + { .ev = { .key = TB_KEY_ENTER, .mod = TB_MOD_CTRL }, .callback = insert_line }, { .ev = { .key = TB_KEY_INSERT }, .callback = toggle_overwrite }, @@ -236,7 +241,7 @@ static const struct Key insert_keys[] = { /* Only when in command mode */ static const struct Key command_keys[] = { - { .ev = { .key = TB_KEY_CTRL_BACKSLASH }, + { .ev = { .key = TB_KEY_CTRL_BACKSLASH, .mod = TB_MOD_CTRL }, .callback = enter_insert_mode }, { .ev = { .ch = '/' }, .callback = show_search }, { .ev = { .ch = ':' }, .callback = show_go_to_line }, diff --git a/sled.1.in b/sled.1.in @@ -91,7 +91,7 @@ _ \fCEsc\fP@Close dialog, clear error, cancel selection \fCF1\fP@Show help dialog \fCF3\fP@Go to next found match -\fCF4\fP@Go to previous found match +\fCS-F3\fP@Go to previous found match \fCF7\fP@Show search dialog \fCHome\fP or \fCC-A\fP@Go to start of line \fCPgUp\fP or \fCC-B\fP@Go to previous page diff --git a/sled.c b/sled.c @@ -261,7 +261,8 @@ handle_key_event(struct tb_event* ev, struct DrawState* state) for (int key = 0; key < LEN(input_dialog_keys); key++) { current = input_dialog_keys + key; - if (((current->ev.key == ev->key) && !ev->ch) + if (((current->ev.mod == ev->mod) + && (current->ev.key == ev->key) && !ev->ch) || (current->ev.ch && (current->ev.ch == ev->ch))) if (current->callback @@ -283,7 +284,8 @@ handle_key_event(struct tb_event* ev, struct DrawState* state) for (int key = 0; key < LEN(top_level_keys); key++) { current = &top_level_keys[key]; - if (((current->ev.key == ev->key) && !ev->ch) + if (((current->ev.mod == ev->mod) + && (current->ev.key == ev->key) && !ev->ch) || (current->ev.ch && (current->ev.ch == ev->ch))) if (current->callback && !current->callback(state)) return; @@ -298,7 +300,8 @@ handle_key_event(struct tb_event* ev, struct DrawState* state) for (int key = 0; key < LEN(global_keys); key++) { current = &global_keys[key]; - if (((current->ev.key == ev->key) && !ev->ch) + if (((current->ev.mod == ev->mod) + && (current->ev.key == ev->key) && !ev->ch) || (current->ev.ch && (current->ev.ch == ev->ch))) if (current->callback && !current->callback(state)) return; @@ -309,7 +312,8 @@ handle_key_event(struct tb_event* ev, struct DrawState* state) for (int key = 0; key < LEN(command_keys); key++) { current = &command_keys[key]; - if (((current->ev.key == ev->key) && !ev->ch) + if (((current->ev.mod == ev->mod) + && (current->ev.key == ev->key) && !ev->ch) || (current->ev.ch && (current->ev.ch == ev->ch))) if (current->callback @@ -322,7 +326,8 @@ handle_key_event(struct tb_event* ev, struct DrawState* state) for (int key = 0; key < LEN(insert_keys); key++) { current = &insert_keys[key]; - if (((current->ev.key == ev->key) && !ev->ch) + if (((current->ev.mod == ev->mod) + && (current->ev.key == ev->key) && !ev->ch) || (current->ev.ch && (current->ev.ch == ev->ch))) if (current->callback