Add friendly remainders, better console experience

This commit is contained in:
Krzosa Karol
2024-08-06 18:36:58 +02:00
parent b036e48cee
commit fe20d05e13
11 changed files with 49 additions and 39 deletions

View File

@@ -490,7 +490,7 @@ void Insert(Array<T> *arr, T item, int64_t index) {
template <class T>
Array<T> Copy(Allocator alo, Array<T> array) {
Array<T> result = {alo};
result.reserve(array.cap);
Reserve(&result, array.cap);
memcpy(result.data, array.data, sizeof(T) * array.len);
result.len = array.len;
return result;

View File

@@ -78,7 +78,7 @@ void ValidateLineStarts(Buffer *buffer) {
}
}
void ReplaceText(Buffer *buffer, Range range, String16 string) {
void IKnowWhatImDoing_ReplaceText(Buffer *buffer, Range range, String16 string) {
ProfileFunction();
Assert(range.max >= range.min);
Assert(range.max >= 0 && range.max <= buffer->len);
@@ -110,13 +110,13 @@ void ReplaceText(Buffer *buffer, Range range, String16 string) {
#endif
}
void Append(Buffer *buffer, String16 string) {
ReplaceText(buffer, GetEndAsRange(*buffer), string);
void IKnowWhatImDoing_Append(Buffer *buffer, String16 string) {
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), string);
}
void Appendf(Buffer *buffer, const char *fmt, ...) {
void IKnowWhatImDoing_Appendf(Buffer *buffer, const char *fmt, ...) {
Scratch scratch;
STRING_FORMAT(scratch, fmt, string);
String16 string16 = ToString16(scratch, string);
ReplaceText(buffer, GetEndAsRange(*buffer), string16);
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), string16);
}

View File

@@ -48,7 +48,7 @@ void RedoEdit(Buffer *buffer, Array<Caret> *carets) {
SaveHistoryBeforeMergeCursor(buffer, &buffer->undo_stack, *carets);
SaveHistoryBeforeApplyEdits(buffer, &buffer->undo_stack, entry.edits);
_ApplyEdits(buffer, entry.edits);
IKnowWhatImDoing__ApplyEditsMultiCursor(buffer, entry.edits);
Dealloc(carets);
*carets = entry.carets;
@@ -67,7 +67,7 @@ void UndoEdit(Buffer *buffer, Array<Caret> *carets) {
SaveHistoryBeforeMergeCursor(buffer, &buffer->redo_stack, *carets);
SaveHistoryBeforeApplyEdits(buffer, &buffer->redo_stack, entry.edits);
_ApplyEdits(buffer, entry.edits);
IKnowWhatImDoing__ApplyEditsMultiCursor(buffer, entry.edits);
Dealloc(carets);
*carets = entry.carets;
@@ -77,12 +77,12 @@ void UndoEdit(Buffer *buffer, Array<Caret> *carets) {
Dealloc(&entry.edits);
}
void ApplyEdits(Buffer *buffer, Array<Edit> &edits) {
void IKnowWhatImDoing_ApplyEdits(Buffer *buffer, Array<Edit> &edits) {
ProfileFunction();
Assert(buffer->edit_phase == 1);
buffer->edit_phase += 1;
SaveHistoryBeforeApplyEdits(buffer, &buffer->undo_stack, edits);
_ApplyEdits(buffer, edits);
IKnowWhatImDoing__ApplyEditsMultiCursor(buffer, edits);
}
void ClearRedoStack(Buffer *buffer) {
@@ -97,7 +97,6 @@ void ClearRedoStack(Buffer *buffer) {
// @note: !!
// We can invoke this before caret altering commands to save caret history
// and then call some editing command to edit which is not going to save carets
// @todo: this needs to be actually tested though!!!
Array<Edit> BeginEdit(Allocator allocator, Buffer *buffer, Array<Caret> &carets) {
Assert(buffer->edit_phase == 0 || buffer->edit_phase == 1);
if (buffer->edit_phase == 0) {
@@ -117,7 +116,7 @@ void PreBeginEdit_SaveCaretHistory(Buffer *buffer, Array<Caret> &carets) {
bool KILL_SELECTION = true;
void EndEdit(Buffer *buffer, Array<Edit> *edits, Array<Caret> *carets, bool kill_selection = true) {
ProfileFunction();
ApplyEdits(buffer, *edits);
IKnowWhatImDoing_ApplyEdits(buffer, *edits);
Assert(buffer->edit_phase == 2);
buffer->edit_phase -= 2;

View File

@@ -108,7 +108,7 @@ void MergeSort(int64_t Count, Edit *First, Edit *Temp) {
}
}
void _ApplyEdits(Buffer *buffer, Array<Edit> edits) {
void IKnowWhatImDoing__ApplyEditsMultiCursor(Buffer *buffer, Array<Edit> edits) {
ProfileFunction();
#if BUFFER_DEBUG
Assert(buffer->line_starts.len);
@@ -154,7 +154,7 @@ void _ApplyEdits(Buffer *buffer, Array<Edit> edits) {
it.range.min += offset;
it.range.max += offset;
offset += it.string.len - GetSize(it.range);
ReplaceText(buffer, it.range, it.string);
IKnowWhatImDoing_ReplaceText(buffer, it.range, it.string);
}
}

View File

@@ -1,12 +1,12 @@
void LoadBigText(Buffer *buffer, int size = 5000000) {
for (int i = 0; i < size; i += 1) {
ReplaceText(buffer, GetEndAsRange(*buffer), L"Line number and another meme or something of the sort which is here or there frankly somewhere\n");
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), L"Line number and another meme or something of the sort which is here or there frankly somewhere\n");
}
}
void LoadBigLine(Buffer *buffer, int size = 5000000) {
for (int i = 0; i < size; i += 1) {
ReplaceText(buffer, GetEndAsRange(*buffer), L"Line number and another meme or something of the sort which is here or there frankly somewhere");
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), L"Line number and another meme or something of the sort which is here or there frankly somewhere");
}
}
@@ -20,14 +20,14 @@ void LoadTextA(Buffer *buffer) {
for (int i = 0; i < 1000; i += 1) {
String s = Format(scratch, "line1: %d line2: %d line3: %d line4: %d line5: %d line6: %d line1: %d line2: %d line3: %d line4: %d line5: %d line6: %d\r\n", i, i, i, i, i, i, i, i, i, i, i, i);
String16 s16 = ToString16(scratch, s);
ReplaceText(buffer, GetEndAsRange(*buffer), s16);
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), s16);
}
}
void LoadLine(Buffer *buffer) {
Scratch scratch;
String s = "Line number and so on óźćż";
ReplaceText(buffer, {}, ToString16(scratch, s));
IKnowWhatImDoing_ReplaceText(buffer, {}, ToString16(scratch, s));
}
void LoadUnicode(Buffer *buffer) {
@@ -137,7 +137,7 @@ Bopomofo
)===";
Scratch scratch;
ReplaceText(buffer, {}, ToString16(scratch, text));
IKnowWhatImDoing_ReplaceText(buffer, {}, ToString16(scratch, text));
text = R"===(
@@ -153,5 +153,5 @@ CJK Unified Ideographs
丿 乿 ...
Hangul Syllables
갿 걿 ...)===";
ReplaceText(buffer, GetEndAsRange(*buffer), ToString16(scratch, text));
IKnowWhatImDoing_ReplaceText(buffer, GetEndAsRange(*buffer), ToString16(scratch, text));
}

View File

@@ -465,13 +465,21 @@ void AppendToConsole(String16 string) {
View *view = FindView(buffer->id);
Assert(view);
Array<Caret> caret_copy = Copy(GetSystemAllocator(), view->carets);
defer {
Dealloc(&view->carets);
view->carets = caret_copy;
};
bool scroll_to_end = false;
if (view) {
Int line = PosToLine(*buffer, GetFront(view->carets[0]));
if (line == buffer->line_starts.len - 1) scroll_to_end = true;
}
ReplaceText(buffer, GetEndAsRange(*buffer), string);
ReplaceText(buffer, GetEndAsRange(*buffer), L"\n");
Command_SelectRangeOneCursor(view, GetEndAsRange(*buffer));
Command_Replace(view, string);
Command_Replace(view, L"\n");
if (scroll_to_end) {
view->carets[0] = MakeCaret(GetEndAsRange(*buffer).min);

View File

@@ -791,13 +791,13 @@ void WindowCommand(Event event, Window *window, View *view) {
Array<FuzzyPair> ratings = FuzzySearchLines(scratch, buffer, 1, buffer->line_starts.len, first_line_string);
Buffer *temp_buffer = CreateTempBuffer(scratch, buffer->cap);
ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), first_line_string);
ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), L"\n");
IKnowWhatImDoing_ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), first_line_string);
IKnowWhatImDoing_ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), L"\n");
For(ratings) {
String16 s = GetLineStringWithoutNL(*buffer, it.index);
if (s.len == 0) continue;
ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), s);
ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), L"\n");
IKnowWhatImDoing_ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), s);
IKnowWhatImDoing_ReplaceText(temp_buffer, GetEndAsRange(*temp_buffer), L"\n");
}
Caret caret = view->carets[0];

View File

@@ -259,7 +259,8 @@ void ReloadLuaConfig() {
Buffer *lua_buffer = BufferOpenFile(lua_config_path);
if (lua_buffer->len == 0) {
ReplaceText(lua_buffer, {}, ToString16(scratch, BaseLuaConfig));
String16 string16 = ToString16(scratch, BaseLuaConfig);
IKnowWhatImDoing_ReplaceText(lua_buffer, {}, string16);
}
// if we loaded from file this should force to read

View File

@@ -209,9 +209,9 @@ Buffer *BufferOpenFile(String path) {
int i = 1;
for (FileIter it = IterateFiles(scratch, path); IsValid(it); Advance(&it)) {
Appendf(buffer, "%.*s", FmtString(it.filename));
if ((i % 8) == 0) Append(buffer, L"\n");
else Append(buffer, L" ");
IKnowWhatImDoing_Appendf(buffer, "%.*s", FmtString(it.filename));
if ((i % 8) == 0) IKnowWhatImDoing_Append(buffer, L"\n");
else IKnowWhatImDoing_Append(buffer, L" ");
i += 1;
}
} else {

View File

@@ -117,11 +117,13 @@ void AfterEdit(View *view, Array<Edit> edits);
Scroller ComputeScrollerRect(Window *window);
void Command_EvalLua(View *view, String16 string);
void MergeCarets(View *view, Range *mouse_selection_anchor = NULL);
void Command_SelectEntireBuffer(View *view);
void Command_Replace(View *view, String16 string);
void Open(String path);
void Open(String16 path);
void UpdateScroll(Window *window, bool update_caret_scrolling);
void Command_SelectEntireBuffer(View *view);
void Command_Replace(View *view, String16 string);
void Command_SelectRangeOneCursor(View *view, Range range);
void ReportErrorf(const char *fmt, ...);
void ReportWarningf(const char *fmt, ...);

View File

@@ -37,16 +37,16 @@ void ReplaceDebugData() {
Scratch scratch;
String s = Format(scratch, "wid: %d\nvid: %d\nbid: %d\nframe: %lld\n", (int)last_window->id.id, (int)last_view->id.id, (int)last_buffer->id.id, (long long)FrameID);
String16 string = ToString16(scratch, s);
ReplaceText(buffer, GetRange(*buffer), string);
IKnowWhatImDoing_ReplaceText(buffer, GetRange(*buffer), string);
float xmouse, ymouse;
SDL_GetMouseState(&xmouse, &ymouse);
Appendf(buffer, "mouse: [%f, %f]\n", xmouse, ymouse);
Appendf(buffer, "window count: %d view count: %d buffer count: %d\n", (int)Windows.len, (int)Views.len, (int)Buffers.len);
Appendf(buffer, "C:/Work/text_editor/src/text_editor/text_editor.cpp\n");
Appendf(buffer, "working dir: %.*s\n", FmtString(WorkingDir));
Appendf(buffer, "exe dir: %.*s\n", FmtString(ExeDir));
Appendf(buffer, "config dir: %.*s\n", FmtString(ConfigDir));
IKnowWhatImDoing_Appendf(buffer, "mouse: [%f, %f]\n", xmouse, ymouse);
IKnowWhatImDoing_Appendf(buffer, "window count: %d view count: %d buffer count: %d\n", (int)Windows.len, (int)Views.len, (int)Buffers.len);
IKnowWhatImDoing_Appendf(buffer, "C:/Work/text_editor/src/text_editor/text_editor.cpp\n");
IKnowWhatImDoing_Appendf(buffer, "working dir: %.*s\n", FmtString(WorkingDir));
IKnowWhatImDoing_Appendf(buffer, "exe dir: %.*s\n", FmtString(ExeDir));
IKnowWhatImDoing_Appendf(buffer, "config dir: %.*s\n", FmtString(ConfigDir));
// String view_list = DebugViewList(scratch);
// Append(buffer, ToString16(scratch, view_list));