From c5afe78b91fda4a8520b4379aa02b8907810d851 Mon Sep 17 00:00:00 2001 From: krzosa Date: Mon, 29 Dec 2025 13:07:28 +0100 Subject: [PATCH] UX improvements --- src/text_editor/buffer.cpp | 9 +++++++++ src/text_editor/commands.cpp | 1 + src/text_editor/draw.cpp | 26 +++++++++++++------------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/text_editor/buffer.cpp b/src/text_editor/buffer.cpp index 5297f69..6a21f23 100644 --- a/src/text_editor/buffer.cpp +++ b/src/text_editor/buffer.cpp @@ -1545,6 +1545,15 @@ bool BufferIsReferenced(BufferID buffer_id) { void ReopenBuffer(Buffer *buffer) { Scratch scratch; + if (buffer->is_dir) { + ResetBuffer(buffer); + RawAppendf(buffer, "..\n"); + for (FileIter it = IterateFiles(scratch, buffer->name); IsValid(it); Advance(&it)) { + RawAppendf(buffer, "%S\n", it.filename); + } + return; + } + String string = ReadFile(scratch, buffer->name); if (string.len == 0) { return; diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index a9acf5a..39e09f2 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -165,6 +165,7 @@ void UIMessagef(const char *fmt, ...) { JumpTempBuffer(&main); NextActiveWindowID = main.window->id; RawAppendf(main.buffer, "\n %S\n :Close\n", string); + main.view->carets[0] = FindNext(main.buffer, u":Close", MakeCaret(0)); AddHook(&main.view->hooks, "Close", "escape", [](){ BSet active = GetBSet(ActiveWindowID); Close(active.buffer->id); diff --git a/src/text_editor/draw.cpp b/src/text_editor/draw.cpp index 95bee22..e1b72ec 100644 --- a/src/text_editor/draw.cpp +++ b/src/text_editor/draw.cpp @@ -200,21 +200,21 @@ void DrawWindow(Window *window, Event &event) { } // Underline word under mouse cursor - if (Ctrl()) { - Caret caret = view->carets[0]; - Vec2I mouse = MouseVec2I(); - bool mouse_in_document = AreOverlapping(mouse, window->document_rect); - if (mouse_in_document) { - View *view = GetView(window->active_view); - Buffer *buffer = GetBuffer(view->active_buffer); - Int p = ScreenSpaceToBufferPosErrorOutOfBounds(window, view, buffer, mouse); - if (p != -1) { - Range range = EncloseLoadWord(buffer, p); - if (InBounds(caret.range, p)) range = caret.range; - DrawUnderline(window, view, buffer, range, ColorMouseUnderline, 2); - } + Caret caret = view->carets[0]; + Vec2I mouse = MouseVec2I(); + bool mouse_in_document = AreOverlapping(mouse, window->document_rect); + if (mouse_in_document) { + View *view = GetView(window->active_view); + Buffer *buffer = GetBuffer(view->active_buffer); + Int p = ScreenSpaceToBufferPosErrorOutOfBounds(window, view, buffer, mouse); + if (p != -1) { + Range range = EncloseLoadWord(buffer, p); + if (InBounds(caret.range, p)) range = caret.range; + DrawUnderline(window, view, buffer, range, ColorMouseUnderline, 2); } + } + if (Ctrl()) { if (is_active) { if (GetSize(caret.range) == 0) { Range range = EncloseLoadWord(buffer, caret.range.min);