summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp107
-rw-r--r--src/main_windows.cpp2
-rw-r--r--src/search.cpp5
3 files changed, 77 insertions, 37 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 18c17c1..f50cd8e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -131,6 +131,66 @@ int _tb_query_input_cb(ImGuiInputTextCallbackData* data) {
return 0;
}
+void _ts_ceate_file_match_rows() {
+ int itemcount = current_search_result == 0 ? 0 : current_search_result->files.length;
+ for (int item = 0; item < itemcount; item++)
+ {
+ ts_found_file *file = *(ts_found_file **)ts_array_at(&current_search_result->files, item);
+
+ char match_info_txt[20];
+ snprintf(match_info_txt, 20, "#%d", item+1);
+
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::TableHeader(match_info_txt);
+
+ ImGui::TableNextColumn();
+ ImGui::TableHeader(file->path);
+
+ ImGui::TableNextColumn();
+ ImGui::TableHeader("");
+ }
+}
+
+void _ts_create_text_match_rows() {
+ int itemcount = current_search_result == 0 ? 0 : current_search_result->matches.length;
+ ts_found_file* prev_file = nullptr;
+ for (int item = 0; item < itemcount; item++)
+ {
+ ts_file_match *file = (ts_file_match *)ts_array_at(&current_search_result->matches, item);
+
+ if (prev_file != file->file) {
+ prev_file = file->file;
+ char match_info_txt[20];
+
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::TableHeader("");
+
+ ImGui::TableNextColumn();
+ ImGui::TableHeader(file->file->path);
+
+ ImGui::TableNextColumn();
+ snprintf(match_info_txt, 20, "%d match(es)", file->file->match_count);
+ ImGui::TableHeader(match_info_txt);
+ }
+
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::Text("#%d", item+1);
+
+ ImGui::TableNextColumn();
+ ImGui::Text("%.*s", file->word_match_offset, file->line_info);
+ ImGui::SameLine(0.0f, 0.0f);
+ ImGui::TextColored({255,0,0,255}, "%.*s", file->word_match_length, file->line_info + file->word_match_offset);
+ ImGui::SameLine(0.0f, 0.0f);
+ ImGui::TextUnformatted(file->line_info + file->word_match_offset + file->word_match_length);
+
+ ImGui::TableNextColumn();
+ ImGui::Text("line %d", file->line_nr);
+ }
+}
+
void ts_create_gui(int window_w, int window_h) {
static float f = 0.0f;
static int counter = 0;
@@ -219,42 +279,14 @@ void ts_create_gui(int window_w, int window_h) {
ImGui::TableSetupColumn("Match", 0, line_w);
ImGui::TableHeadersRow();
- int itemcount = current_search_result == 0 ? 0 : current_search_result->matches.length;
- ts_found_file* prev_file = nullptr;
- for (int item = 0; item < itemcount; item++)
- {
- ts_file_match *file = (ts_file_match *)ts_array_at(&current_search_result->matches, item);
-
- if (prev_file != file->file) {
- prev_file = file->file;
- char match_info_txt[20];
-
- ImGui::TableNextRow();
- ImGui::TableNextColumn();
- ImGui::TableHeader("");
-
- ImGui::TableNextColumn();
- ImGui::TableHeader(file->file->path);
-
- ImGui::TableNextColumn();
- snprintf(match_info_txt, 20, "%d match(es)", file->file->match_count);
- ImGui::TableHeader(match_info_txt);
- }
-
- ImGui::TableNextRow();
- ImGui::TableNextColumn();
- ImGui::Text("#%d", item+1);
-
- ImGui::TableNextColumn();
- ImGui::Text("%.*s", file->word_match_offset, file->line_info);
- ImGui::SameLine(0.0f, 0.0f);
- ImGui::TextColored({255,0,0,255}, "%.*s", file->word_match_length, file->line_info + file->word_match_offset);
- ImGui::SameLine(0.0f, 0.0f);
- ImGui::TextUnformatted(file->line_info + file->word_match_offset + file->word_match_length);
-
- ImGui::TableNextColumn();
- ImGui::Text("line %d", file->line_nr);
+ if (current_search_result) {
+ if (current_search_result->search_text == nullptr) _ts_ceate_file_match_rows();
+ else _ts_create_text_match_rows();
}
+ else {
+ // show info text.
+ }
+
ImGui::EndTable();
}
}
@@ -267,7 +299,10 @@ void ts_create_gui(int window_w, int window_h) {
ImGui::BeginChild("search-statusbar", ImVec2(window_w, statusbar_area_height), ImGuiChildFlags_None, ImGuiWindowFlags_None);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 7.0f);
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10.0f);
- if (current_search_result) ImGui::Text("Found %d matches in %d files", current_search_result->match_count, current_search_result->file_count);
+ if (current_search_result) {
+ if (current_search_result->search_text) ImGui::Text("Found %d matches in %d files", current_search_result->match_count, current_search_result->file_count);
+ else ImGui::Text("Found %d files", current_search_result->files.length);
+ }
else ImGui::Text("No search completed");
ImGui::SameLine();
diff --git a/src/main_windows.cpp b/src/main_windows.cpp
index 229a055..5f6e1e9 100644
--- a/src/main_windows.cpp
+++ b/src/main_windows.cpp
@@ -224,7 +224,7 @@ ts_file_content ts_platform_read_file(char *path, const char *mode)
else
{
result.file_error = FILE_ERROR_GENERIC;
- printf("ERROR: %d\n", errno);
+ printf("ERROR: %d %s\n", errno, path);
}
goto done_failure;
diff --git a/src/search.cpp b/src/search.cpp
index 5be2b33..dc0534a 100644
--- a/src/search.cpp
+++ b/src/search.cpp
@@ -297,6 +297,7 @@ static void _ts_search_file(ts_found_file *ref, ts_file_content content, ts_sear
static void *_ts_search_thread(void *args)
{
ts_search_result *new_result = (ts_search_result *)args;
+ if (new_result->search_text == nullptr) goto finish_early;
keep_going:;
while (new_result->file_list_read_cursor < new_result->files.length)
@@ -376,6 +377,10 @@ void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query)
snprintf(new_result->search_text, MAX_INPUT_LENGTH, "%s", query);
new_result->filters = ts_get_filters(filter);
+ if (utf8len(query) == 0) {
+ new_result->search_text = nullptr;
+ }
+
_ts_list_files(new_result);
for (int i = 0; i < new_result->max_ts_thread_count; i++)
{