Allow selecting blanks at the start of the top line

This commit is contained in:
Kovid Goyal 2021-07-04 18:49:17 +05:30
parent 3dee3aba59
commit 05d0bda044
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 2 deletions

View File

@ -2835,8 +2835,12 @@ screen_update_selection(Screen *self, index_type x, index_type y, bool in_left_h
if (upd.set_as_nearest_extend) { if (upd.set_as_nearest_extend) {
bool start_is_nearer = false; bool start_is_nearer = false;
if (self->selections.extend_mode == EXTEND_LINE || self->selections.extend_mode == EXTEND_LINE_FROM_POINT) { if (self->selections.extend_mode == EXTEND_LINE || self->selections.extend_mode == EXTEND_LINE_FROM_POINT) {
if (s->start.y == s->end.y) start_is_nearer = selection_boundary_less_than(&abs_start, &abs_end) ? (abs_current_input.y > abs_start.y) : (abs_current_input.y < abs_end.y); if (abs_start.y == abs_end.y) {
else start_is_nearer = num_lines_between_selection_boundaries(&abs_start, &abs_current_input) < num_lines_between_selection_boundaries(&abs_end, &abs_current_input); if (abs_current_input.y == abs_start.y) start_is_nearer = selection_boundary_less_than(&abs_start, &abs_end) ? (abs_current_input.x <= abs_start.x) : (abs_current_input.x <= abs_end.x);
else start_is_nearer = selection_boundary_less_than(&abs_start, &abs_end) ? (abs_current_input.y > abs_start.y) : (abs_current_input.y < abs_end.y);
} else {
start_is_nearer = num_lines_between_selection_boundaries(&abs_start, &abs_current_input) < num_lines_between_selection_boundaries(&abs_end, &abs_current_input);
}
} else start_is_nearer = num_cells_between_selection_boundaries(self, &abs_start, &abs_current_input) < num_cells_between_selection_boundaries(self, &abs_end, &abs_current_input); } else start_is_nearer = num_cells_between_selection_boundaries(self, &abs_start, &abs_current_input) < num_cells_between_selection_boundaries(self, &abs_end, &abs_current_input);
if (start_is_nearer) s->adjusting_start = true; if (start_is_nearer) s->adjusting_start = true;
} }
@ -2905,6 +2909,8 @@ screen_update_selection(Screen *self, index_type x, index_type y, bool in_left_h
} else { } else {
a->in_left_half_of_cell = false; a->x = down_end.x; a->y = bottom_line; a->in_left_half_of_cell = false; a->x = down_end.x; a->y = bottom_line;
} }
// allow selecting whitespace at the start of the top line
if (a->y == top_line && s->input_current.y == top_line && s->input_current.x < a->x && adjusted_boundary_is_before) a->x = s->input_current.x;
} }
} }
} }

View File

@ -179,6 +179,12 @@ class TestMouse(BaseTest):
move(x=2, y=1) move(x=2, y=1)
self.ae(sel(), '123\n 456') self.ae(sel(), '123\n 456')
release() release()
press(x=2, y=1, button=GLFW_MOUSE_BUTTON_RIGHT)
release(x=2, y=1, button=GLFW_MOUSE_BUTTON_RIGHT)
self.ae(sel(), '123\n 456')
press(button=GLFW_MOUSE_BUTTON_RIGHT)
release(button=GLFW_MOUSE_BUTTON_RIGHT)
self.ae(sel(), ' 123\n 456')
# Rectangle select # Rectangle select
init() init()