mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
config: mouse bindings: add select-begin-block and select-row
This commit is contained in:
parent
f14b49068a
commit
4d2bc54fa2
5 changed files with 40 additions and 19 deletions
8
config.c
8
config.c
|
|
@ -72,9 +72,11 @@ static const char *const binding_action_map[] = {
|
|||
|
||||
/* Mouse-specific actions */
|
||||
[BIND_ACTION_SELECT_BEGIN] = "select-begin",
|
||||
[BIND_ACTION_SELECT_BEGIN_BLOCK] = "select-begin-block",
|
||||
[BIND_ACTION_SELECT_EXTEND] = "select-extend",
|
||||
[BIND_ACTION_SELECT_WORD] = "select-word",
|
||||
[BIND_ACTION_SELECT_WORD_WS] = "select-word-whitespace",
|
||||
[BIND_ACTION_SELECT_EXTEND] = "select-extend",
|
||||
[BIND_ACTION_SELECT_ROW] = "select-row",
|
||||
};
|
||||
|
||||
static_assert(ALEN(binding_action_map) == BIND_ACTION_COUNT,
|
||||
|
|
@ -1534,9 +1536,11 @@ add_default_mouse_bindings(struct config *conf)
|
|||
|
||||
add_binding(BIND_ACTION_PRIMARY_PASTE, none, BTN_MIDDLE, 1);
|
||||
add_binding(BIND_ACTION_SELECT_BEGIN, none, BTN_LEFT, 1);
|
||||
add_binding(BIND_ACTION_SELECT_BEGIN_BLOCK, ctrl, BTN_LEFT, 1);
|
||||
add_binding(BIND_ACTION_SELECT_EXTEND, none, BTN_RIGHT, 1);
|
||||
add_binding(BIND_ACTION_SELECT_WORD, none, BTN_LEFT, 2);
|
||||
add_binding(BIND_ACTION_SELECT_WORD_WS, ctrl, BTN_LEFT, 2);
|
||||
add_binding(BIND_ACTION_SELECT_EXTEND, none, BTN_RIGHT, 1);
|
||||
add_binding(BIND_ACTION_SELECT_ROW, none, BTN_LEFT, 3);
|
||||
|
||||
#undef add_binding
|
||||
}
|
||||
|
|
|
|||
|
|
@ -388,7 +388,12 @@ All actions listed under *key-bindings* can be user here as well.
|
|||
*select-begin*
|
||||
Begin an interactive selection. The selection is finalized, and
|
||||
copied to the _primary selection_, when the button is
|
||||
released..Default: _BTN\_LEFT_.
|
||||
released. Default: _BTN\_LEFT_.
|
||||
|
||||
*select-begin-block*
|
||||
Begin an interactive block selection. The selection is finalized,
|
||||
and copied to the _primary selection_, when the button is
|
||||
released. Default: _Control+BTN\_LEFT_.
|
||||
|
||||
*select-extend*
|
||||
Interactively extend an existing selection. The selection is
|
||||
|
|
@ -403,6 +408,9 @@ All actions listed under *key-bindings* can be user here as well.
|
|||
Select the _word_ (separated by spaces _only_) under the
|
||||
pointer. Default: Control+_BTN\_LEFT-2_.
|
||||
|
||||
*select-row*
|
||||
Select the whole row under the pointer. Default: _BTN\_LEFT-3_.
|
||||
|
||||
*primary-paste*
|
||||
Pastes from the _primary selection_. Default: _BTN\_MIDDLE_.
|
||||
|
||||
|
|
|
|||
4
footrc
4
footrc
|
|
@ -94,6 +94,8 @@
|
|||
[mouse-bindings]
|
||||
# primary-paste=BTN_MIDDLE
|
||||
# select-begin=BTN_LEFT
|
||||
# select-begin-block=Control=BTN_LEFT
|
||||
# select-extend=BTN_RIGHT
|
||||
# select-word=BTN_LEFT-2
|
||||
# select-word-whitespace=Control+BTN_LEFT-2
|
||||
# select-extend=BTN_RIGHT
|
||||
# select-row=BTN_LEFT-3
|
||||
|
|
|
|||
33
input.c
33
input.c
|
|
@ -255,11 +255,22 @@ execute_binding(struct seat *seat, struct terminal *term,
|
|||
}
|
||||
|
||||
case BIND_ACTION_SELECT_BEGIN:
|
||||
selection_start(
|
||||
term, seat->mouse.col, seat->mouse.row,
|
||||
seat->kbd.ctrl ? SELECTION_BLOCK : SELECTION_NORMAL);
|
||||
selection_start(term, seat->mouse.col, seat->mouse.row, SELECTION_NORMAL);
|
||||
break;
|
||||
|
||||
case BIND_ACTION_SELECT_BEGIN_BLOCK:
|
||||
selection_start(term, seat->mouse.col, seat->mouse.row, SELECTION_BLOCK);
|
||||
break;
|
||||
|
||||
case BIND_ACTION_SELECT_EXTEND: {
|
||||
bool cursor_is_on_grid = seat->mouse.col >= 0 && seat->mouse.row >= 0;
|
||||
if (selection_enabled(term, seat) && cursor_is_on_grid) {
|
||||
selection_extend(
|
||||
seat, term, seat->mouse.col, seat->mouse.row, serial);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case BIND_ACTION_SELECT_WORD:
|
||||
selection_mark_word(
|
||||
seat, term, seat->mouse.col, seat->mouse.row, false, serial);
|
||||
|
|
@ -270,14 +281,10 @@ execute_binding(struct seat *seat, struct terminal *term,
|
|||
seat, term, seat->mouse.col, seat->mouse.row, true, serial);
|
||||
break;
|
||||
|
||||
case BIND_ACTION_SELECT_EXTEND: {
|
||||
bool cursor_is_on_grid = seat->mouse.col >= 0 && seat->mouse.row >= 0;
|
||||
if (selection_enabled(term, seat) && cursor_is_on_grid) {
|
||||
selection_extend(
|
||||
seat, term, seat->mouse.col, seat->mouse.row, serial);
|
||||
}
|
||||
case BIND_ACTION_SELECT_ROW:
|
||||
selection_mark_row(seat, term, seat->mouse.row, serial);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case BIND_ACTION_COUNT:
|
||||
assert(false);
|
||||
|
|
@ -1279,10 +1286,8 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer,
|
|||
bool cursor_is_on_grid = seat->mouse.col >= 0 && seat->mouse.row >= 0;
|
||||
|
||||
/* Update selection */
|
||||
if (seat->mouse.button == BTN_LEFT || seat->mouse.button == BTN_RIGHT) {
|
||||
if (cursor_is_on_new_cell || term->selection.end.row < 0)
|
||||
selection_update(term, selection_col, selection_row);
|
||||
}
|
||||
if (cursor_is_on_new_cell || term->selection.end.row < 0)
|
||||
selection_update(term, selection_col, selection_row);
|
||||
|
||||
/* Send mouse event to client application */
|
||||
if (!term_mouse_grabbed(term, seat) &&
|
||||
|
|
|
|||
|
|
@ -47,9 +47,11 @@ enum bind_action_normal {
|
|||
|
||||
/* Mouse specific actions - i.e. they require a mouse coordinate */
|
||||
BIND_ACTION_SELECT_BEGIN,
|
||||
BIND_ACTION_SELECT_BEGIN_BLOCK,
|
||||
BIND_ACTION_SELECT_EXTEND,
|
||||
BIND_ACTION_SELECT_WORD,
|
||||
BIND_ACTION_SELECT_WORD_WS,
|
||||
BIND_ACTION_SELECT_EXTEND,
|
||||
BIND_ACTION_SELECT_ROW,
|
||||
|
||||
BIND_ACTION_COUNT,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue