Add friendly remainders, better console experience
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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, ...);
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user