diff --git a/src/text_editor.cpp b/src/text_editor.cpp index c49a98d..7e9d0fc 100644 --- a/src/text_editor.cpp +++ b/src/text_editor.cpp @@ -315,9 +315,30 @@ void OnCommand(Event event) { } } - Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse); + Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse); Caret &caret = selected.view->carets[0]; caret = SetFrontWithAnchor(caret, DocumentAnchor, p); + + if (event.alt && event.shift) { + Int front = GetFront(DocumentAnchor); + XY from = PosToXY(selected.buffer, front); + XY to = ScreenSpaceToXY(selected.window, selected.view, mouse); + Int min_line = Min(from.y, to.y); + Int max_line = Max(from.y, to.y); + Int min_col = Min(from.x, to.x); + Int max_col = Max(from.x, to.x); + + selected.view->carets.len = 0; + for (Int line = min_line; line <= max_line; line += 1) { + XY left_xy = {min_col, line}; + XY right_xy = {max_col, line}; + Int left = XYToPosWithoutNL(selected.buffer, left_xy); + Int right = XYToPosWithoutNL(selected.buffer, right_xy); + Caret new_selection = MakeCaret(left, right); + Add(&selected.view->carets, new_selection); + } + MergeCarets(selected.buffer, &selected.view->carets); + } } if (ResizerSelected.id != -1 && Mouse(LEFT_UP)) {