чување 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:
| M | config.def.h | | | 77 | +++++++++++++++++++++++++++++++++++++++++------------------------------------ |
| M | sled.1.in | | | 2 | +- |
| M | sled.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