Compare commits

...

3 Commits

Author SHA1 Message Date
Krzosa Karol
5214ce61ac Hook code cleanup 2025-12-30 12:56:36 +01:00
Krzosa Karol
ebf0f5de27 Remove jump history, Make sure these windows are visible one at a time 2025-12-30 12:42:05 +01:00
Krzosa Karol
ca464c314b Add build window 2025-12-30 12:18:08 +01:00
11 changed files with 141 additions and 129 deletions

View File

@@ -8,16 +8,13 @@ How to go about search/replace, opening code and other considerations
- For fuzzy find number of files is the problem - most likely just getting them in one place is the biggest problem that can be optimized - For fuzzy find number of files is the problem - most likely just getting them in one place is the biggest problem that can be optimized
- Opening code is problematic for large / weird files, they stall for a while, getting them buffered up is hard. And they stall the execution when they go overboard. Maybe just skipping on filesisze on something would be enough, or making a very large skip list. Another solution would be lazy loaded buffers + determining what kind of file we are dealing with on open before loading - Opening code is problematic for large / weird files, they stall for a while, getting them buffered up is hard. And they stall the execution when they go overboard. Maybe just skipping on filesisze on something would be enough, or making a very large skip list. Another solution would be lazy loaded buffers + determining what kind of file we are dealing with on open before loading
- Search everything, like fuzzy panel, on every key stroke we grep immediately and get new results, cancel old, reset - Search everything, like fuzzy panel, on every key stroke we grep immediately and get new results, cancel old, reset
- ARENA CODE POSSIBLY DOMINATES
Use session 2 Use session 2
- Need configs I can't change browser or vcvarsall currently, maybe syntax like :Set InternetBrowser "firefox" - Need configs I can't change browser or vcvarsall currently, maybe syntax like :Set InternetBrowser "firefox"
- BUILD annoying: Console or use the other window / the window which is already being used
- Tutorial - Tutorial
- When jumping should center the view!!! - When jumping should center the view!!!
Debug session: Debug session:
- Should highlight main buffer when clicking on status?
- Report errorf - use coroutine dialogs - Report errorf - use coroutine dialogs
- Replace in render layer also - Replace in render layer also
- BlockAllocator something is not working there which only showed after executing OpenCode on many files - BlockAllocator something is not working there which only showed after executing OpenCode on many files

View File

@@ -1399,9 +1399,6 @@ void InitBuffers() {
EventBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(WorkDir, "events")); EventBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(WorkDir, "events"));
EventBuffer->no_history = true; EventBuffer->no_history = true;
EventBuffer->special = true; EventBuffer->special = true;
BuildBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(WorkDir, "build"));
BuildBuffer->no_history = true;
BuildBuffer->special = true;
} }
Int ConvertUTF8ToUTF16UnixLine(String string, char16_t *buffer, Int buffer_cap) { Int ConvertUTF8ToUTF16UnixLine(String string, char16_t *buffer, Int buffer_cap) {

View File

@@ -398,15 +398,14 @@ BSet Exec(String cmd, String working_dir, bool set_active = true) {
} }
BSet ExecBuild(String cmd) { BSet ExecBuild(String cmd) {
BSet build = GetBSet(BuildWindowID);
BSet main = GetBSet(LastActiveLayoutWindowID); BSet main = GetBSet(LastActiveLayoutWindowID);
NextActiveWindowID = main.window->id; SelectRange(build.view, Range{});
View *view = WindowOpenBufferView(main.window, BuildBuffer->name); ResetBuffer(build.buffer);
SelectRange(view, Range{}); Exec(build.view->id, true, cmd, WorkDir);
ResetBuffer(BuildBuffer); main.window->active_goto_list = build.view->id;
Exec(view->id, false, cmd, WorkDir); // NOTE: IN CASE WE MOVE THIS TO CONSOLE WINDOW, MAKE SURE TO SWITCH HERE the scrolling
main.window->active_goto_list = view->id;
main.window->goto_list_pos = 0; main.window->goto_list_pos = 0;
return main; return build;
} }
void Command_SaveAll() { void Command_SaveAll() {
@@ -425,6 +424,8 @@ void Command_Build() {
#else #else
ExecBuild("sh build.sh"); ExecBuild("sh build.sh");
#endif #endif
BSet main = GetBSet(BuildWindowID);
main.window->visible = true;
} RegisterCommand(Command_Build, "f1"); } RegisterCommand(Command_Build, "f1");
void Command_GotoNextInList() { void Command_GotoNextInList() {
@@ -948,9 +949,6 @@ void Command_MakeFontSmaller() {
void Command_Open() { void Command_Open() {
BSet active = GetBSet(ActiveWindowID); BSet active = GetBSet(ActiveWindowID);
if (active.window->id == CommandWindowID) {
return;
}
Open(FetchLoadWord(active.view)); Open(FetchLoadWord(active.view));
} RegisterCommand(Command_Open, "ctrl-q"); } RegisterCommand(Command_Open, "ctrl-q");
@@ -1171,12 +1169,9 @@ void Command_InsertNewLineDown() {
} RegisterCommand(Command_InsertNewLineDown, "ctrl-enter"); } RegisterCommand(Command_InsertNewLineDown, "ctrl-enter");
void Command_NewLine() { void Command_NewLine() {
if (ActiveWindowID == CommandWindowID || ActiveWindowID == SearchWindowID) {
return;
}
BSet active = GetBSet(ActiveWindowID); BSet active = GetBSet(ActiveWindowID);
IdentedNewLine(active.view); IdentedNewLine(active.view);
} RegisterCommand(Command_NewLine, "enter"); } RegisterCommand(Command_NewLine, "enter | shift-enter");
void Command_CreateCaretOnNextFind() { void Command_CreateCaretOnNextFind() {
BSet active = GetBSet(ActiveWindowID); BSet active = GetBSet(ActiveWindowID);

View File

@@ -27,12 +27,14 @@ WindowID NullWindowID;
WindowID DebugWindowID; WindowID DebugWindowID;
ViewID DebugViewID; ViewID DebugViewID;
BufferID DebugBufferID; BufferID DebugBufferID;
WindowID CommandWindowID; WindowID CommandWindowID;
WindowID StatusBarWindowID; WindowID StatusBarWindowID;
WindowID SearchWindowID; WindowID SearchWindowID;
ViewID SearchViewID; ViewID SearchViewID;
BufferID SearchBufferID; BufferID SearchBufferID;
WindowID BuildWindowID;
ViewID BuildViewID;
BufferID BuildBufferID;
WindowID NextActiveWindowID; WindowID NextActiveWindowID;
WindowID ActiveWindowID; WindowID ActiveWindowID;
@@ -43,7 +45,6 @@ WindowID ResizerSelected = {-1};
WindowID ResizerHover = {-1}; WindowID ResizerHover = {-1};
Caret DocumentAnchor; Caret DocumentAnchor;
Buffer *BuildBuffer;
Buffer *GCInfoBuffer; Buffer *GCInfoBuffer;
Buffer *EventBuffer; Buffer *EventBuffer;
Buffer *TraceBuffer; Buffer *TraceBuffer;
@@ -162,5 +163,4 @@ RegisterVariable(String, ConfigFont, "/home/krz/text_editor/package/CascadiaMono
RegisterVariable(String, ConfigVCVarsall, "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat"); RegisterVariable(String, ConfigVCVarsall, "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat");
RegisterVariable(Float, ConfigUndoMergeTimeWindow, 0.3); RegisterVariable(Float, ConfigUndoMergeTimeWindow, 0.3);
RegisterVariable(Float, ConfigJumpHistoryMergeTimeWindow, 0.3); RegisterVariable(Float, ConfigJumpHistoryMergeTimeWindow, 0.3);
RegisterVariable(Int, ConfigJumpHistorySize, 4096);
RegisterVariable(String, ConfigInternetBrowser, "firefox"); RegisterVariable(String, ConfigInternetBrowser, "firefox");

View File

@@ -31,6 +31,7 @@
#include "window_debug.cpp" #include "window_debug.cpp"
#include "window_status.cpp" #include "window_status.cpp"
#include "window_search.cpp" #include "window_search.cpp"
#include "window_build.cpp"
#include "process.cpp" #include "process.cpp"
#include "event.cpp" #include "event.cpp"
@@ -591,14 +592,6 @@ void Update(Event event) {
} }
} }
it->skip_checkpoint = false; it->skip_checkpoint = false;
if (it->goto_history.len > ConfigJumpHistorySize) {
RemoveByIndex(&it->goto_history, 0);
}
if (it->goto_redo.len > ConfigJumpHistorySize) {
RemoveByIndex(&it->goto_redo, 0);
}
} }
if (it->sync_visibility_with_focus) { if (it->sync_visibility_with_focus) {
@@ -617,6 +610,20 @@ void Update(Event event) {
window = GetWindow(ActiveWindowID); window = GetWindow(ActiveWindowID);
} }
// Behavior where these windows cannot be visible at the same time
{
WindowID id[] = {BuildWindowID, CommandWindowID, SearchWindowID};
for (int i = 0; i < Lengthof(id); i += 1) {
if (ActiveWindowID == id[i]) {
for (int j = 0; j < Lengthof(id); j += 1) {
if (i == j) continue;
Window *window = GetWindow(id[j]);
window->visible = false;
}
}
}
}
if (ActiveWindowID != LastActiveLayoutWindowID) { if (ActiveWindowID != LastActiveLayoutWindowID) {
if (window->layout) { if (window->layout) {
LastActiveLayoutWindowID = ActiveWindowID; LastActiveLayoutWindowID = ActiveWindowID;

View File

@@ -122,6 +122,7 @@ void InitWindows() {
StatusWindowInit(); StatusWindowInit();
DebugWindowInit(); DebugWindowInit();
SearchWindowInit(); SearchWindowInit();
BuildWindowInit();
} }
void CalcNiceties(Window *n) { void CalcNiceties(Window *n) {
@@ -148,10 +149,11 @@ void LayoutWindows(int16_t wx, int16_t wy) {
ProfileFunction(); ProfileFunction();
Rect2I screen_rect = RectI0Size(wx, wy); Rect2I screen_rect = RectI0Size(wx, wy);
CommandWindowLayout(&screen_rect, wx, wy);
StatusWindowLayout(&screen_rect, wx, wy); StatusWindowLayout(&screen_rect, wx, wy);
CommandWindowLayout(&screen_rect, wx, wy);
DebugWindowLayout(&screen_rect, wx, wy); DebugWindowLayout(&screen_rect, wx, wy);
SearchWindowLayout(&screen_rect, wx, wy); SearchWindowLayout(&screen_rect, wx, wy);
BuildWindowLayout(&screen_rect, wx, wy);
// Column layout // Column layout
Int c = 0; Int c = 0;

View File

@@ -63,3 +63,6 @@ void StatusWindowLayout(Rect2I *rect, Int wx, Int wy);
void DebugWindowInit(); void DebugWindowInit();
void DebugWindowLayout(Rect2I *rect, Int wx, Int wy); void DebugWindowLayout(Rect2I *rect, Int wx, Int wy);
void BuildWindowInit();
void BuildWindowLayout(Rect2I *rect, Int wx, Int wy);

View File

@@ -0,0 +1,38 @@
void BuildWindowInit() {
Window *window = CreateWind();
BuildWindowID = window->id;
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(WorkDir, "build"));
buffer->special = true;
buffer->no_history = true;
BuildBufferID = buffer->id;
View *view = CreateView(buffer->id);
view->special = true;
BuildViewID = view->id;
window->active_view = view->id;
window->draw_darker = true;
window->draw_line_highlight = true;
window->layout = false;
window->visible = false;
window->lose_visibility_on_escape = true;
window->jump_history = false;
}
void BuildWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *n = GetWindow(BuildWindowID);
Rect2I copy_rect = *rect;
if (!n->visible) {
rect = &copy_rect;
}
Int barsize = n->font->line_spacing * 10;
n->document_rect = n->total_rect = CutBottom(rect, barsize);
}
void Command_ShowBuildWindow() {
BSet main = GetBSet(BuildWindowID);
if (ActiveWindowID != BuildWindowID) {
main.window->visible = true;
NextActiveWindowID = BuildWindowID;
} else {
main.window->visible = false;
}
} RegisterCommand(Command_ShowBuildWindow, "ctrl-grave");

View File

@@ -1,32 +1,3 @@
void CommandWindowInit() {
Window *window = CreateWind();
CommandWindowID = window->id;
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(WorkDir, "command_bar"));
buffer->special = true;
View *view = CreateView(buffer->id);
view->special = true;
window->active_view = view->id;
window->draw_line_numbers = false;
window->draw_scrollbar = false;
window->draw_darker = true;
window->draw_line_highlight = true;
window->layout = false;
window->visible = false;
window->sync_visibility_with_focus = true;
window->lose_focus_on_escape = true;
window->jump_history = false;
}
void CommandWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *n = GetWindow(CommandWindowID);
Rect2I copy_rect = *rect;
if (!n->visible) {
rect = &copy_rect;
}
Int barsize = Clamp((Int)n->font->line_spacing*10, (Int)0, (Int)wx - 100);
n->document_rect = n->total_rect = CutBottom(rect, barsize);
}
int32_t FuzzyRate(String16 string, String16 with) { int32_t FuzzyRate(String16 string, String16 with) {
ProfileFunction(); ProfileFunction();
if (with.len == 0) return 0; if (with.len == 0) return 0;
@@ -65,7 +36,6 @@ Array<FuzzyPair> FuzzySearchLines(Allocator allocator, Buffer *buffer, Int line_
int32_t rating = FuzzyRate(s, needle); int32_t rating = FuzzyRate(s, needle);
Add(&ratings, {(int32_t)i, rating}); Add(&ratings, {(int32_t)i, rating});
} }
Array<FuzzyPair> temp = Copy(allocator, ratings); Array<FuzzyPair> temp = Copy(allocator, ratings);
MergeSort(ratings.len, ratings.data, temp.data); MergeSort(ratings.len, ratings.data, temp.data);
return ratings; return ratings;
@@ -176,12 +146,39 @@ void OpenCommand(BSet active) {
Open(string); Open(string);
} }
void Command_OpenCommand() { void Command_CommandWindowOpen() {
if (ActiveWindowID != CommandWindowID) {
return;
}
BSet active = GetBSet(ActiveWindowID); BSet active = GetBSet(ActiveWindowID);
BSet main = GetBSet(LastActiveLayoutWindowID); BSet main = GetBSet(LastActiveLayoutWindowID);
NextActiveWindowID = main.window->id; NextActiveWindowID = main.window->id;
OpenCommand(active); OpenCommand(active);
} RegisterCommand(Command_OpenCommand, "ctrl-q | enter"); }
void CommandWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *n = GetWindow(CommandWindowID);
Rect2I copy_rect = *rect;
if (!n->visible) {
rect = &copy_rect;
}
Int barsize = Clamp((Int)n->font->line_spacing*10, (Int)0, (Int)wx - 100);
n->document_rect = n->total_rect = CutBottom(rect, barsize);
}
void CommandWindowInit() {
Window *window = CreateWind();
CommandWindowID = window->id;
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(WorkDir, "command_bar"));
buffer->special = true;
View *view = CreateView(buffer->id);
view->special = true;
window->active_view = view->id;
window->draw_line_numbers = false;
window->draw_scrollbar = false;
window->draw_darker = true;
window->draw_line_highlight = true;
window->layout = false;
window->visible = false;
window->sync_visibility_with_focus = true;
window->lose_focus_on_escape = true;
window->jump_history = false;
AddHook(&view->hooks, "Open", "ctrl-q | enter", Command_CommandWindowOpen);
}

View File

@@ -1,38 +1,3 @@
void SearchWindowInit() {
Window *window = CreateWind();
SearchWindowID = window->id;
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(WorkDir, "search"));
buffer->special = true;
SearchBufferID = buffer->id;
View *view = CreateView(buffer->id);
view->special = true;
SearchViewID = view->id;
window->active_view = view->id;
window->draw_line_numbers = false;
window->draw_scrollbar = false;
window->draw_darker = true;
window->draw_line_highlight = false;
window->layout = false;
window->visible = false;
window->lose_visibility_on_escape = true;
window->jump_history = false;
}
void SearchWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *command_window = GetWindow(CommandWindowID);
if (command_window->visible) {
return;
}
Window *n = GetWindow(SearchWindowID);
Rect2I copy_rect = *rect;
if (!n->visible) {
rect = &copy_rect;
}
Int barsize = GetExpandingBarSize(n);
n->document_rect = n->total_rect = CutBottom(rect, barsize);
n->line_numbers_rect = CutLeft(&n->document_rect, n->font->char_spacing * 6);
}
void Command_Search() { void Command_Search() {
BSet main = GetBSet(ActiveWindowID); BSet main = GetBSet(ActiveWindowID);
String16 string = {}; String16 string = {};
@@ -58,18 +23,12 @@ void SearchWindowFindNext(bool forward = true) {
} }
void Command_SearchNextInSearch() { void Command_SearchNextInSearch() {
if (ActiveWindowID != SearchWindowID) {
return;
}
SearchWindowFindNext(true); SearchWindowFindNext(true);
} RegisterCommand(Command_SearchNextInSearch, "enter"); }
void Command_SearchPrevInSearch() { void Command_SearchPrevInSearch() {
if (ActiveWindowID != SearchWindowID) {
return;
}
SearchWindowFindNext(false); SearchWindowFindNext(false);
} RegisterCommand(Command_SearchPrevInSearch, "shift-enter"); }
void Command_SearchNext() { void Command_SearchNext() {
SearchWindowFindNext(true); SearchWindowFindNext(true);
@@ -100,15 +59,6 @@ void Command_SearchAll() {
set.window->visible = false; set.window->visible = false;
} RegisterCommand(Command_SearchAll, "alt-f3"); } RegisterCommand(Command_SearchAll, "alt-f3");
void Command_SearchAllInSearch() {
if (ActiveWindowID != SearchWindowID) {
return;
}
SearchAll();
BSet set = GetBSet(SearchWindowID);
set.window->visible = false;
} RegisterCommand(Command_SearchAllInSearch, "alt-enter");
void Command_ToggleCaseSensitiveSearch() { void Command_ToggleCaseSensitiveSearch() {
SearchCaseSensitive = !SearchCaseSensitive; SearchCaseSensitive = !SearchCaseSensitive;
} RegisterCommand(Command_ToggleCaseSensitiveSearch, "alt-c"); } RegisterCommand(Command_ToggleCaseSensitiveSearch, "alt-c");
@@ -127,3 +77,37 @@ void SearchWindowUpdate() {
Find(main.view, seek, true); Find(main.view, seek, true);
} }
} }
void SearchWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *n = GetWindow(SearchWindowID);
Rect2I copy_rect = *rect;
if (!n->visible) {
rect = &copy_rect;
}
Int barsize = GetExpandingBarSize(n);
n->document_rect = n->total_rect = CutBottom(rect, barsize);
n->line_numbers_rect = CutLeft(&n->document_rect, n->font->char_spacing * 6);
}
void SearchWindowInit() {
Window *window = CreateWind();
SearchWindowID = window->id;
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(WorkDir, "search"));
buffer->special = true;
SearchBufferID = buffer->id;
View *view = CreateView(buffer->id);
view->special = true;
SearchViewID = view->id;
window->active_view = view->id;
window->draw_line_numbers = false;
window->draw_scrollbar = false;
window->draw_darker = true;
window->draw_line_highlight = false;
window->layout = false;
window->visible = false;
window->lose_visibility_on_escape = true;
window->jump_history = false;
AddHook(&view->hooks, "SearchAll", "alt-enter", Command_SearchAll);
AddHook(&view->hooks, "SearchPrevInSearch", "shift-enter", Command_SearchPrevInSearch);
AddHook(&view->hooks, "SearchNextInSearch", "enter", Command_SearchNextInSearch);
}

View File

@@ -17,10 +17,6 @@ void StatusWindowInit() {
} }
void StatusWindowLayout(Rect2I *rect, Int wx, Int wy) { void StatusWindowLayout(Rect2I *rect, Int wx, Int wy) {
Window *command_window = GetWindow(CommandWindowID);
if (command_window->visible) {
return;
}
Window *n = GetWindow(StatusBarWindowID); Window *n = GetWindow(StatusBarWindowID);
Rect2I copy_rect = *rect; Rect2I copy_rect = *rect;
if (!n->visible) { if (!n->visible) {
@@ -33,10 +29,6 @@ void StatusWindowLayout(Rect2I *rect, Int wx, Int wy) {
void StatusWindowUpdate() { void StatusWindowUpdate() {
ProfileFunction(); ProfileFunction();
Window *status_bar_window = GetWindow(StatusBarWindowID, NULL); Window *status_bar_window = GetWindow(StatusBarWindowID, NULL);
if (status_bar_window == NULL) {
return;
}
Scratch scratch; Scratch scratch;
BSet main = GetBSet(LastActiveLayoutWindowID); BSet main = GetBSet(LastActiveLayoutWindowID);
BSet title = GetBSet(status_bar_window); BSet title = GetBSet(status_bar_window);
@@ -73,8 +65,8 @@ void StatusWindowUpdate() {
return; return;
} }
Caret caret = main.view->carets[0]; Caret caret = main.view->carets[0];
XY xy = PosToXY(main.buffer, GetFront(caret)); XY xy = PosToXY(main.buffer, GetFront(caret));
// add separator at the end of buffer // add separator at the end of buffer
if (!found_separator) { if (!found_separator) {