CtrlF Search

This commit is contained in:
Krzosa Karol
2024-08-13 10:52:41 +02:00
parent 26c1180fad
commit 2ada434925
2 changed files with 29 additions and 14 deletions

View File

@@ -866,6 +866,22 @@ void WindowCommand(Event event, Window *window, View *view) {
Command_IdentedNewLine(view); Command_IdentedNewLine(view);
} }
if (Ctrl(SDLK_F)) {
BSet title = GetTitleSet(window);
String16 buffer_string = GetString(title.buffer);
ActiveWindow = title.window->id;
int64_t index = 0;
String16 needle = L"#Search(";
if (Seek(buffer_string, needle, &index)) {
Command_SelectRangeOneCursor(title.view, Rng(index + needle.len + 1));
} else {
Command_SelectRangeOneCursor(title.view, GetEndAsRange(title.buffer));
Command_Replace(title.view, L" #Search(\"\")");
Command_SelectRangeOneCursor(title.view, GetEndAsRange(title.buffer) - 2);
}
}
if (Ctrl(SDLK_S)) { if (Ctrl(SDLK_S)) {
SaveBuffer(view); SaveBuffer(view);
} }

View File

@@ -23,36 +23,35 @@ void UpdateDebugBuffer() {
} }
void ReplaceTitleBarData(Window *window) { void ReplaceTitleBarData(Window *window) {
View *view = GetView(window->active_view); BSet title = GetBSet(window);
Buffer *buffer = GetBuffer(view->active_buffer); title.view->scroll.y = 0;
view->scroll.y = 0;
BSet main = GetMainSet(window); BSet main = GetMainSet(window);
Scratch scratch; Scratch scratch;
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));
Array<Caret> caret_copy = Copy(GetSystemAllocator(), view->carets); Array<Caret> caret_copy = Copy(GetSystemAllocator(), title.view->carets);
defer { defer {
Dealloc(&view->carets); Dealloc(&title.view->carets);
view->carets = caret_copy; title.view->carets = caret_copy;
}; };
String16 buffer_string = GetString(buffer); String16 buffer_string = GetString(title.buffer);
Range replace_range = {0, buffer->len}; Range replace_range = {0, title.buffer->len};
if (!Seek(buffer_string, L" |", &replace_range.max)) { if (!Seek(buffer_string, L" |", &replace_range.max)) {
Command_SelectRangeOneCursor(view, GetEndAsRange(buffer)); Command_SelectRangeOneCursor(title.view, GetEndAsRange(title.buffer));
Array<Edit> edits = Command_ReplaceEx(scratch, view, L" |"); Array<Edit> edits = Command_ReplaceEx(scratch, title.view, L" |");
AdjustCarets(edits, &caret_copy); AdjustCarets(edits, &caret_copy);
} }
String s = Format(scratch, "%.*s:%lld:%lld", FmtString(main.buffer->name), (long long)xy.line + 1ll, (long long)xy.col + 1ll); String s = Format(scratch, "%.*s:%lld:%lld", FmtString(main.buffer->name), (long long)xy.line + 1ll, (long long)xy.col + 1ll);
String16 string = ToString16(scratch, s); String16 string = ToString16(scratch, s);
String16 string_to_replace = GetString(buffer, replace_range); String16 string_to_replace = GetString(title.buffer, replace_range);
if (string_to_replace != string) { if (string_to_replace != string) {
Command_SelectRangeOneCursor(view, replace_range); Command_SelectRangeOneCursor(title.view, replace_range);
Array<Edit> edits = Command_ReplaceEx(scratch, view, string); Array<Edit> edits = Command_ReplaceEx(scratch, title.view, string);
Command_SelectRangeOneCursor(view, {}); Command_SelectRangeOneCursor(title.view, {});
AdjustCarets(edits, &caret_copy); AdjustCarets(edits, &caret_copy);
} }
} }