Applied with some fairly unimportant style changes, thanks.


On Tue, Mar 20, 2012 at 09:15:18AM -0700, Jonathan Daugherty wrote:
> > But that's four diffs... just -T -N -C would be ok but if you do one
> > -T flag I think we should have all three.
> 
> Please see the attached patch, which adds -T, -C, and -N options for
> find-window and defaults to -TCN as discussed.  I've also updated
> tmux.1.
> 
> -- 
>   Jonathan Daugherty
>   Software Engineer
>   Galois, Inc.

> Index: tmux.1
> ===================================================================
> --- tmux.1    (revision 2749)
> +++ tmux.1    (working copy)
> @@ -1103,6 +1103,7 @@
>  .Ql 9
>  keys.
>  .It Xo Ic find-window
> +.Op Fl TCN
>  .Op Fl t Ar target-window
>  .Ar match-string
>  .Xc
> @@ -1112,9 +1113,18 @@
>  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.
> -This command only works from inside
> +Specify one or more of
> +.Fl TCN
> +to control matching behavior:
> +.Fl T
> +matches only the window title,
> +.Fl C
> +matches only visible window contents, and
> +.Fl N
> +matches only the window name.  The default is
> +.Fl TCN .
> +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
>  .Op Fl bdhv
> Index: cmd-find-window.c
> ===================================================================
> --- cmd-find-window.c (revision 2749)
> +++ cmd-find-window.c (working copy)
> @@ -32,10 +32,21 @@
>  void cmd_find_window_callback(void *, int);
>  void cmd_find_window_free(void *);
>  
> +/*
> + * Flags for determining matching behavior.
> + */
> +#define FIND_BY_TITLE      0x1
> +#define FIND_BY_CONTENT    0x2
> +#define FIND_BY_NAME       0x4
> +
> +#define MATCH_NAME(flags)      flags & FIND_BY_NAME
> +#define MATCH_TITLE(flags)     flags & FIND_BY_TITLE
> +#define MATCH_CONTENT(flags)   flags & FIND_BY_CONTENT
> +
>  const struct cmd_entry cmd_find_window_entry = {
>       "find-window", "findw",
> -     "t:", 1, 1,
> -     CMD_TARGET_WINDOW_USAGE " match-string",
> +     "TCNt:", 1, 4,
> +     "[-TCN] " CMD_TARGET_WINDOW_USAGE " match-string",
>       0,
>       NULL,
>       NULL,
> @@ -46,6 +57,31 @@
>       struct session  *session;
>  };
>  
> +u_int
> +match_flags_from_args(struct args *args)
> +{
> +     u_int match_flags = 0;
> +
> +     // Turn on flags based on the options.
> +     if (args_has(args, 'T'))
> +             match_flags |= FIND_BY_TITLE;
> +
> +     if (args_has(args, 'C'))
> +             match_flags |= FIND_BY_CONTENT;
> +
> +     if (args_has(args, 'N'))
> +             match_flags |= FIND_BY_NAME;
> +
> +     // If none of the flags were set, default to matching
> +     // anything.
> +     if (!match_flags)
> +             match_flags = FIND_BY_TITLE |
> +                     FIND_BY_CONTENT |
> +                     FIND_BY_NAME;
> +
> +     return match_flags;
> +}
> +
>  int
>  cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx)
>  {
> @@ -59,6 +95,7 @@
>       ARRAY_DECL(, char *)             list_ctx;
>       char                            *str, *sres, *sctx, *searchstr;
>       u_int                            i, line;
> +        u_int                            match_flags;
>  
>       if (ctx->curclient == NULL) {
>               ctx->error(ctx, "must be run interactively");
> @@ -69,6 +106,7 @@
>       if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
>               return (-1);
>  
> +     match_flags = match_flags_from_args(args);
>       str = args->argv[0];
>  
>       ARRAY_INIT(&list_idx);
> @@ -80,12 +118,21 @@
>               TAILQ_FOREACH(wp, &wm->window->panes, entry) {
>                       i++;
>  
> -                     if (fnmatch(searchstr, wm->window->name, 0) == 0)
> +                     if (MATCH_NAME(match_flags) &&
> +                         fnmatch(searchstr, wm->window->name, 0) == 0)
>                               sctx = xstrdup("");
>                       else {
> -                             sres = window_pane_search(wp, str, &line);
> +                             sres = NULL;
> +                             if (MATCH_CONTENT(match_flags))
> +                                     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_TITLE(match_flags) ||
> +                                  fnmatch(searchstr, wp->base.title, 0) != 
> 0))
>                                       continue;
>  
>                               if (sres == NULL) {


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

Reply via email to