diff --git a/src/text_editor/main.cpp b/src/text_editor/main.cpp index 47631a5..a704e8e 100644 --- a/src/text_editor/main.cpp +++ b/src/text_editor/main.cpp @@ -328,7 +328,56 @@ int main() { } } + if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_C)) { + Array strings = {FrameArena}; + For(focused_window->cursors) { + String string = GetString(focused_window->buffer, it.range); + strings.add(string); + } + String to_save = Merge(FrameArena, strings, "\n"); + SetClipboardText(to_save.data); + } + if (IsKeyDown(KEY_LEFT_CONTROL) && (IsKeyPressed(KEY_V) || IsKeyPressedRepeat(KEY_V))) { + BeforeEdit(focused_window); + Array edits = {FrameArena}; + const char *text = GetClipboardText(); + String string = text; + For(focused_window->cursors) { + AddEdit(&edits, it.range, string); + } + ApplyEdits(&focused_window->buffer, edits); + AfterEdit(focused_window, edits); + } + if (IsKeyDown(KEY_LEFT_CONTROL) && (IsKeyPressed(KEY_X) || IsKeyPressedRepeat(KEY_X))) { + BeforeEdit(focused_window); + Array edits = {FrameArena}; + Array strings = {FrameArena}; + For(focused_window->cursors) { + Range range = {}; + if (GetRangeSize(it.range)) { + range = it.range; + } else { + Line line = FindLine(focused_window->buffer, it.range.min); + range = {line.range.min, line.range.max + 1}; + } + AddEdit(&edits, range, ""); + String string = GetString(focused_window->buffer, range); + strings.add(string); + } + String to_save = Merge(FrameArena, strings, "\n"); + SetClipboardText(to_save.data); + ApplyEdits(&focused_window->buffer, edits); + AfterEdit(focused_window, edits); + } + + // @todo: scrolling + if (IsKeyPressed(KEY_DELETE) || IsKeyPressedRepeat(KEY_DELETE)) { + if (IsKeyDown(KEY_LEFT_SHIFT)) { + } + } if (IsKeyPressed(KEY_BACKSPACE) || IsKeyPressedRepeat(KEY_BACKSPACE)) { + if (IsKeyDown(KEY_LEFT_SHIFT)) { + } BeforeEdit(focused_window); Array edits = {FrameArena}; String string = {};