From 3c03f89918f4b126553687691cd7d96a93b18f0f Mon Sep 17 00:00:00 2001 From: Scoopta Date: Mon, 25 Nov 2019 14:56:46 -0800 Subject: [PATCH] Added case insensitive searching --- src/main.c | 17 ++++++++++++++++- src/wofi.c | 8 +++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 32409a4..bc9815a 100644 --- a/src/main.c +++ b/src/main.c @@ -69,6 +69,7 @@ static void print_usage(char** argv) { printf("--exec-search\t-e\tMakes enter always use the search contents not the first result\n"); printf("--hide-scroll\t-b\tHides the scroll bars\n"); printf("--matching\t-M\tSets the matching method, default is contains\n"); + printf("--insensitive\t-I\tAllows case insensitive searching\n"); exit(0); } @@ -304,6 +305,12 @@ int main(int argc, char** argv) { .flag = NULL, .val = 'M' }, + { + .name = "insensitive", + .has_arg = no_argument, + .flag = NULL, + .val = 'I' + }, { .name = NULL, .has_arg = 0, @@ -330,8 +337,9 @@ int main(int argc, char** argv) { char* exec_search = NULL; char* hide_scroll = NULL; char* matching = NULL; + char* insensitive = NULL; int opt; - while((opt = getopt_long(argc, argv, "hfc:s:C:dS:W:H:p:x:y:nimk:t:P::ebM:", opts, NULL)) != -1) { + while((opt = getopt_long(argc, argv, "hfc:s:C:dS:W:H:p:x:y:nimk:t:P::ebM:I", opts, NULL)) != -1) { switch(opt) { case 'h': print_usage(argv); @@ -401,6 +409,9 @@ int main(int argc, char** argv) { case 'M': matching = optarg; break; + case 'I': + insensitive = "true"; + break; } } @@ -540,6 +551,10 @@ int main(int argc, char** argv) { if(matching != NULL) { map_put(config, "matching", matching); } + if(insensitive != NULL) { + map_put(config, "insensitive", insensitive); + } + gtk_init(&argc, &argv); diff --git a/src/wofi.c b/src/wofi.c index 39df8eb..b2b86d5 100644 --- a/src/wofi.c +++ b/src/wofi.c @@ -43,6 +43,7 @@ static GtkOrientation outer_orientation; static bool exec_search; static struct map* modes; static enum matching_mode matching; +static bool insensitive; struct node { size_t action_count; @@ -443,7 +444,11 @@ static gboolean do_filter(GtkFlowBoxChild* row, gpointer data) { if(text == NULL) { return FALSE; } - return strstr(text, filter) != NULL; + if(insensitive) { + return strcasestr(text, filter) != NULL; + } else { + return strstr(text, filter) != NULL; + } } static gint do_sort(GtkFlowBoxChild* child1, GtkFlowBoxChild* child2, gpointer data) { @@ -602,6 +607,7 @@ void wofi_init(struct map* config) { exec_search = strcmp(config_get(config, "exec_search", "false"), "true") == 0; bool hide_scroll = strcmp(config_get(config, "hide_scroll", "false"), "true") == 0; matching = config_get_mnemonic(config, "matching", "contains", 2, "contains", "fuzzy"); + insensitive = strcmp(config_get(config, "insensitive", "false"), "true") == 0; modes = map_init_void(); window = gtk_window_new(GTK_WINDOW_TOPLEVEL);