1
0
mirror of https://gittea.dev/nova/th.git synced 2025-10-21 10:20:15 -04:00

smart case search in file search

This commit is contained in:
nova
2025-08-17 23:21:28 +02:00
parent 3a2c226ed9
commit 55cd4077b1
3 changed files with 48 additions and 3 deletions

View File

@@ -1,3 +1,6 @@
#include <stdlib.h>
#include <string.h>
char* concat(const char *s1, const char *s2){
const size_t len1 = strlen(s1);
const size_t len2 = strlen(s2);
@@ -6,5 +9,46 @@ char* concat(const char *s1, const char *s2){
memcpy(result + len1, s2, len2 + 1);
return result;
}
char* smartstrcasestr(char *haystack, const char *needle){
char smart = 0;
char *ret;
char passes = 0;
while (*needle) {
if (*needle >= 'A' && *needle <= 'Z') {
smart = 1;
break;
}
passes++;
needle++;
}
needle -= passes;
if (smart == 0) {
char *needle_case = malloc(strlen(needle)+1);
strcpy(needle_case, needle);
passes = 0;
while (*needle_case) {
*needle_case = *needle_case | ' ';
needle_case++;
passes++;
}
needle_case -= passes;
char *haystack_case = malloc(strlen(haystack)+1);
strcpy(haystack_case, haystack);
passes = 0;
while (*haystack_case) {
*haystack_case = *haystack_case | ' ';
haystack_case++;
passes++;
}
haystack_case -= passes;
ret = strstr(haystack_case, needle_case);
free(needle_case);
free(haystack_case);
} else {
ret = strstr(haystack, needle);
}
return ret;
}

View File

@@ -6,3 +6,4 @@
char* concat(const char *s1, const char *s2);
char* smartstrcasestr(char *haystack, const char *needle);

View File

@@ -772,7 +772,7 @@ void search(){
pass++;
unsigned long i;
for (i = 0; i < mid_file_count; i++) {
if (strstr(mid_content[i].file_name, search_buffer)) {
if (smartstrcasestr(mid_content[i].file_name, search_buffer)) {
selected_file_current = i;
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_0);
update_selected_file();
@@ -794,7 +794,7 @@ void search(){
void search_next(){
unsigned long i;
for (i = selected_file_current+1; i < mid_file_count; i++) {
if (strstr(mid_content[i].file_name, search_buffer)) {
if (smartstrcasestr(mid_content[i].file_name, search_buffer)) {
selected_file_current = i;
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_0);
update_selected_file();
@@ -809,7 +809,7 @@ void search_previous(){
if(i > selected_file_current) {
break;
}
if (strstr(mid_content[i].file_name, search_buffer)) {
if (smartstrcasestr(mid_content[i].file_name, search_buffer)) {
selected_file_current = i;
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_0);
update_selected_file();