From 175e45005f4572b19a4aa34094f9a8c69ced5475 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 29 May 2020 13:42:13 +0000 Subject: [PATCH] Add -i to find-window to ignore case. --- cmd-find-window.c | 91 ++++++++++++++++++----------------------------- tmux.1 | 4 ++- 2 files changed, 38 insertions(+), 57 deletions(-) diff --git a/cmd-find-window.c b/cmd-find-window.c index e1faeb2f..4cd155e4 100644 --- a/cmd-find-window.c +++ b/cmd-find-window.c @@ -32,8 +32,8 @@ const struct cmd_entry cmd_find_window_entry = { .name = "find-window", .alias = "findw", - .args = { "CNrt:TZ", 1, 1 }, - .usage = "[-CNrTZ] " CMD_TARGET_PANE_USAGE " match-string", + .args = { "CiNrt:TZ", 1, 1 }, + .usage = "[-CiNrTZ] " CMD_TARGET_PANE_USAGE " match-string", .target = { 't', CMD_FIND_PANE, 0 }, @@ -47,7 +47,7 @@ cmd_find_window_exec(struct cmd *self, struct cmdq_item *item) struct args *args = cmd_get_args(self), *new_args; struct cmd_find_state *target = cmdq_get_target(item); struct window_pane *wp = target->wp; - const char *s = args->argv[0]; + const char *s = args->argv[0], *suffix = ""; char *filter, *argv = { NULL }; int C, N, T; @@ -55,62 +55,41 @@ cmd_find_window_exec(struct cmd *self, struct cmdq_item *item) N = args_has(args, 'N'); T = args_has(args, 'T'); + if (args_has(args, 'r') && args_has(args, 'i')) + suffix = "/ri"; + else if (args_has(args, 'r')) + suffix = "/r"; + else if (args_has(args, 'i')) + suffix = "/i"; + if (!C && !N && !T) C = N = T = 1; - if (!args_has(args, 'r')) { - if (C && N && T) { - xasprintf(&filter, - "#{||:" - "#{C:%s},#{||:#{m:*%s*,#{window_name}}," - "#{m:*%s*,#{pane_title}}}}", - s, s, s); - } else if (C && N) { - xasprintf(&filter, - "#{||:#{C:%s},#{m:*%s*,#{window_name}}}", - s, s); - } else if (C && T) { - xasprintf(&filter, - "#{||:#{C:%s},#{m:*%s*,#{pane_title}}}", - s, s); - } else if (N && T) { - xasprintf(&filter, - "#{||:#{m:*%s*,#{window_name}}," - "#{m:*%s*,#{pane_title}}}", - s, s); - } else if (C) - xasprintf(&filter, "#{C:%s}", s); - else if (N) - xasprintf(&filter, "#{m:*%s*,#{window_name}}", s); - else - xasprintf(&filter, "#{m:*%s*,#{pane_title}}", s); - } else { - if (C && N && T) { - xasprintf(&filter, - "#{||:" - "#{C/r:%s},#{||:#{m/r:%s,#{window_name}}," - "#{m/r:%s,#{pane_title}}}}", - s, s, s); - } else if (C && N) { - xasprintf(&filter, - "#{||:#{C/r:%s},#{m/r:%s,#{window_name}}}", - s, s); - } else if (C && T) { - xasprintf(&filter, - "#{||:#{C/r:%s},#{m/r:%s,#{pane_title}}}", - s, s); - } else if (N && T) { - xasprintf(&filter, - "#{||:#{m/r:%s,#{window_name}}," - "#{m/r:%s,#{pane_title}}}", - s, s); - } else if (C) - xasprintf(&filter, "#{C/r:%s}", s); - else if (N) - xasprintf(&filter, "#{m/r:%s,#{window_name}}", s); - else - xasprintf(&filter, "#{m/r:%s,#{pane_title}}", s); - } + if (C && N && T) { + xasprintf(&filter, + "#{||:" + "#{C%s:%s},#{||:#{m%s:*%s*,#{window_name}}," + "#{m%s:*%s*,#{pane_title}}}}", + suffix, s, suffix, s, suffix, s); + } else if (C && N) { + xasprintf(&filter, + "#{||:#{C%s:%s},#{m%s:*%s*,#{window_name}}}", + suffix, s, suffix, s); + } else if (C && T) { + xasprintf(&filter, + "#{||:#{C%s:%s},#{m%s:*%s*,#{pane_title}}}", + suffix, s, suffix, s); + } else if (N && T) { + xasprintf(&filter, + "#{||:#{m%s:*%s*,#{window_name}}," + "#{m%s:*%s*,#{pane_title}}}", + suffix, s, suffix, s); + } else if (C) + xasprintf(&filter, "#{C%s:%s}", suffix, s); + else if (N) + xasprintf(&filter, "#{m%s:*%s*,#{window_name}}", suffix, s); + else + xasprintf(&filter, "#{m%s:*%s*,#{pane_title}}", suffix, s); new_args = args_parse("", 1, &argv); if (args_has(args, 'Z')) diff --git a/tmux.1 b/tmux.1 index 8fdb9360..2ba3362b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -2079,7 +2079,7 @@ With .Fl b , other commands are not blocked from running until the indicator is closed. .It Xo Ic find-window -.Op Fl rCNTZ +.Op Fl iCNrTZ .Op Fl t Ar target-pane .Ar match-string .Xc @@ -2098,6 +2098,8 @@ matches only visible window contents, matches only the window name and .Fl T matches only the window title. +.Fl i +makes the search ignore case. The default is .Fl CNT . .Fl Z