summaryrefslogtreecommitdiffstats
path: root/cmd-find-window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2009-06-25 16:04:24 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2009-06-25 16:04:24 +0000
commitf7a9eb46fc0c0be659912b0cf9c2e7d7ced86bf9 (patch)
tree045e08db5ffd7da586326ab3f19968a92e2798c4 /cmd-find-window.c
parent853ad681620e9a031f41549a39c78d11b2da8990 (diff)
Change find-window and monitor-content to use fnmatch(3). For convenience and
compatibility, *s are implicitly added at the start and end of the pattern.
Diffstat (limited to 'cmd-find-window.c')
-rw-r--r--cmd-find-window.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/cmd-find-window.c b/cmd-find-window.c
index fd0d9c60..213935dd 100644
--- a/cmd-find-window.c
+++ b/cmd-find-window.c
@@ -1,4 +1,4 @@
-/* $Id: cmd-find-window.c,v 1.8 2009-05-19 13:32:55 tcunha Exp $ */
+/* $OpenBSD: cmd-find-window.c,v 1.2 2009/06/24 22:49:56 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -18,6 +18,7 @@
#include <sys/types.h>
+#include <fnmatch.h>
#include <string.h>
#include "tmux.h"
@@ -58,8 +59,8 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
struct window_pane *wp;
ARRAY_DECL(, u_int) list_idx;
ARRAY_DECL(, char *) list_ctx;
- char *sres, *sctx;
- u_int i;
+ char *sres, *sctx, *searchstr;
+ u_int i, line;
if (ctx->curclient == NULL) {
ctx->error(ctx, "must be run interactively");
@@ -73,17 +74,18 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
ARRAY_INIT(&list_idx);
ARRAY_INIT(&list_ctx);
+ xasprintf(&searchstr, "*%s*", data->arg);
RB_FOREACH(wm, winlinks, &s->windows) {
i = 0;
TAILQ_FOREACH(wp, &wm->window->panes, entry) {
i++;
- if (strstr(wm->window->name, data->arg) != NULL)
+ if (fnmatch(searchstr, wm->window->name, 0) == 0)
sctx = xstrdup("");
else {
- sres = window_pane_search(wp, data->arg);
+ sres = window_pane_search(wp, data->arg, &line);
if (sres == NULL &&
- strstr(wp->base.title, data->arg) == NULL)
+ fnmatch(searchstr, wp->base.title, 0) != 0)
continue;
if (sres == NULL) {
@@ -91,7 +93,9 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
"pane %u title: \"%s\"", i - 1,
wp->base.title);
} else {
- xasprintf(&sctx, "\"%s\"", sres);
+ xasprintf(&sctx,
+ "pane %u line %u: \"%s\"", i - 1,
+ line + 1, sres);
xfree(sres);
}
}
@@ -100,6 +104,7 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
ARRAY_ADD(&list_ctx, sctx);
}
}
+ xfree(searchstr);
if (ARRAY_LENGTH(&list_idx) == 0) {
ctx->error(ctx, "no windows matching: %s", data->arg);