Revision: 2755
          http://tmux.svn.sourceforge.net/tmux/?rev=2755&view=rev
Author:   tcunha
Date:     2012-03-29 21:07:28 +0000 (Thu, 29 Mar 2012)
Log Message:
-----------
Sync OpenBSD patchset 1075:

Add -C -N -T flags to find-window to find in content, name, title. From
Jonathan Daugherty.

Modified Paths:
--------------
    trunk/cmd-find-window.c
    trunk/tmux.1

Modified: trunk/cmd-find-window.c
===================================================================
--- trunk/cmd-find-window.c     2012-03-29 21:06:25 UTC (rev 2754)
+++ trunk/cmd-find-window.c     2012-03-29 21:07:28 UTC (rev 2755)
@@ -29,13 +29,25 @@
 
 int    cmd_find_window_exec(struct cmd *, struct cmd_ctx *);
 
+u_int  cmd_find_window_match_flags(struct args *);
 void   cmd_find_window_callback(void *, int);
 void   cmd_find_window_free(void *);
 
+/* Flags for determining matching behavior. */
+#define CMD_FIND_WINDOW_BY_TITLE   0x1
+#define CMD_FIND_WINDOW_BY_CONTENT 0x2
+#define CMD_FIND_WINDOW_BY_NAME    0x4
+
+#define CMD_FIND_WINDOW_ALL            \
+       (CMD_FIND_WINDOW_BY_TITLE |     \
+        CMD_FIND_WINDOW_BY_CONTENT |   \
+        CMD_FIND_WINDOW_BY_NAME)
+
+
 const struct cmd_entry cmd_find_window_entry = {
        "find-window", "findw",
-       "t:", 1, 1,
-       CMD_TARGET_WINDOW_USAGE " match-string",
+       "CNt:T", 1, 4,
+       "[-CNT] " CMD_TARGET_WINDOW_USAGE " match-string",
        0,
        NULL,
        NULL,
@@ -46,6 +58,26 @@
        struct session  *session;
 };
 
+u_int
+cmd_find_window_match_flags(struct args *args)
+{
+       u_int   match_flags = 0;
+
+       /* Turn on flags based on the options. */
+       if (args_has(args, 'T'))
+               match_flags |= CMD_FIND_WINDOW_BY_TITLE;
+       if (args_has(args, 'C'))
+               match_flags |= CMD_FIND_WINDOW_BY_CONTENT;
+       if (args_has(args, 'N'))
+               match_flags |= CMD_FIND_WINDOW_BY_NAME;
+
+       /* If none of the flags were set, default to matching anything. */
+       if (match_flags == 0)
+               match_flags = CMD_FIND_WINDOW_ALL;
+
+       return match_flags;
+}
+
 int
 cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
@@ -58,7 +90,7 @@
        ARRAY_DECL(, u_int)              list_idx;
        ARRAY_DECL(, char *)             list_ctx;
        char                            *str, *sres, *sctx, *searchstr;
-       u_int                            i, line;
+       u_int                            i, line, match_flags;
 
        if (ctx->curclient == NULL) {
                ctx->error(ctx, "must be run interactively");
@@ -69,6 +101,7 @@
        if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
                return (-1);
 
+       match_flags = cmd_find_window_match_flags(args);
        str = args->argv[0];
 
        ARRAY_INIT(&list_idx);
@@ -80,12 +113,25 @@
                TAILQ_FOREACH(wp, &wm->window->panes, entry) {
                        i++;
 
-                       if (fnmatch(searchstr, wm->window->name, 0) == 0)
+                       if ((match_flags & CMD_FIND_WINDOW_BY_NAME) &&
+                           fnmatch(searchstr, wm->window->name, 0) == 0)
                                sctx = xstrdup("");
                        else {
-                               sres = window_pane_search(wp, str, &line);
+                               sres = NULL;
+                               if (match_flags & CMD_FIND_WINDOW_BY_CONTENT) {
+                                       sres = window_pane_search(
+                                           wp, str, &line);
+                               }
+
+                               /*
+                                * If match_title isn't set we don't want to
+                                * bother checking the title, but that also
+                                * constitutes a failure to match so we still
+                                * want to abort.
+                                */
                                if (sres == NULL &&
-                                   fnmatch(searchstr, wp->base.title, 0) != 0)
+                                   (!(match_flags & CMD_FIND_WINDOW_BY_TITLE) 
||
+                                    fnmatch(searchstr, wp->base.title, 0) != 
0))
                                        continue;
 
                                if (sres == NULL) {

Modified: trunk/tmux.1
===================================================================
--- trunk/tmux.1        2012-03-29 21:06:25 UTC (rev 2754)
+++ trunk/tmux.1        2012-03-29 21:07:28 UTC (rev 2755)
@@ -1103,6 +1103,7 @@
 .Ql 9
 keys.
 .It Xo Ic find-window
+.Op Fl CNT
 .Op Fl t Ar target-window
 .Ar match-string
 .Xc
@@ -1112,8 +1113,17 @@
 pattern
 .Ar match-string
 in window names, titles, and visible content (but not history).
-If only one window is matched, it'll be automatically selected, otherwise a
-choice list is shown.
+The flags control matching behavior:
+.Fl C
+matches only visible window contents,
+.Fl N
+matches only the window name and
+.Fl T
+matches only the window title.
+The default is
+.Fl CNT .
+If only one window is matched, it'll be automatically selected,
+otherwise a choice list is shown.
 This command only works from inside
 .Nm .
 .It Xo Ic join-pane

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to