Add -O option to choose-* to set initial sort order.
authornicm <nicm@openbsd.org>
Fri, 9 Jun 2017 15:29:15 +0000 (15:29 +0000)
committernicm <nicm@openbsd.org>
Fri, 9 Jun 2017 15:29:15 +0000 (15:29 +0000)
usr.bin/tmux/cmd-choose-tree.c
usr.bin/tmux/mode-tree.c
usr.bin/tmux/tmux.1
usr.bin/tmux/tmux.h
usr.bin/tmux/window-buffer.c
usr.bin/tmux/window-client.c
usr.bin/tmux/window-tree.c

index 354fa91..a8268ff 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-choose-tree.c,v 1.35 2017/05/30 21:44:59 nicm Exp $ */
+/* $OpenBSD: cmd-choose-tree.c,v 1.36 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2012 Thomas Adam <thomas@xteddy.org>
@@ -30,8 +30,8 @@ const struct cmd_entry cmd_choose_tree_entry = {
        .name = "choose-tree",
        .alias = NULL,
 
-       .args = { "st:w", 0, 1 },
-       .usage = "[-sw] " CMD_TARGET_PANE_USAGE,
+       .args = { "O:st:w", 0, 1 },
+       .usage = "[-sw] [-O sort-order] " CMD_TARGET_PANE_USAGE,
 
        .target = { 't', CMD_FIND_PANE, 0 },
 
@@ -43,8 +43,8 @@ const struct cmd_entry cmd_choose_client_entry = {
        .name = "choose-client",
        .alias = NULL,
 
-       .args = { "t:", 0, 1 },
-       .usage = CMD_TARGET_PANE_USAGE,
+       .args = { "O:t:", 0, 1 },
+       .usage = "[-O sort-order] " CMD_TARGET_PANE_USAGE,
 
        .target = { 't', CMD_FIND_PANE, 0 },
 
@@ -56,8 +56,8 @@ const struct cmd_entry cmd_choose_buffer_entry = {
        .name = "choose-buffer",
        .alias = NULL,
 
-       .args = { "t:", 0, 1 },
-       .usage = CMD_TARGET_PANE_USAGE,
+       .args = { "O:t:", 0, 1 },
+       .usage = "[-O sort-order] " CMD_TARGET_PANE_USAGE,
 
        .target = { 't', CMD_FIND_PANE, 0 },
 
index 49a123d..b9ffe63 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: mode-tree.c,v 1.4 2017/06/07 15:27:46 nicm Exp $ */
+/* $OpenBSD: mode-tree.c,v 1.5 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -273,12 +273,15 @@ mode_tree_each_tagged(struct mode_tree_data *mtd, void (*cb)(void *, void *,
 }
 
 struct mode_tree_data *
-mode_tree_start(struct window_pane *wp, void (*buildcb)(void *, u_int,
-    uint64_t *), struct screen *(*drawcb)(void *, void *, u_int, u_int),
+mode_tree_start(struct window_pane *wp, struct args *args,
+    void (*buildcb)(void *, u_int, uint64_t *),
+    struct screen *(*drawcb)(void *, void *, u_int, u_int),
     int (*searchcb)(void *, void *, const char *), void *modedata,
     const char **sort_list, u_int sort_size, struct screen **s)
 {
        struct mode_tree_data   *mtd;
+       const char              *sort;
+       u_int                    i;
 
        mtd = xcalloc(1, sizeof *mtd);
        mtd->references = 1;
@@ -290,6 +293,14 @@ mode_tree_start(struct window_pane *wp, void (*buildcb)(void *, u_int,
        mtd->sort_size = sort_size;
        mtd->sort_type = 0;
 
+       sort = args_get(args, 'O');
+       if (sort != NULL) {
+               for (i = 0; i < sort_size; i++) {
+                       if (strcasecmp(sort, sort_list[i]) == 0)
+                               mtd->sort_type = i;
+               }
+       }
+
        mtd->buildcb = buildcb;
        mtd->drawcb = drawcb;
        mtd->searchcb = searchcb;
index 27eedeb..310640a 100644 (file)
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tmux.1,v 1.560 2017/06/09 09:21:24 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.561 2017/06/09 15:29:15 nicm Exp $
 .\"
 .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
 .\"
@@ -1354,6 +1354,7 @@ the end of the visible pane.
 The default is to capture only the visible contents of the pane.
 .It Xo
 .Ic choose-client
+.Op Fl O Ar sort-order
 .Op Fl t Ar target-pane
 .Op Ar template
 .Xc
@@ -1389,10 +1390,18 @@ If
 .Ar template
 is not given, "detach-client -t '%%'" is used.
 .Pp
+.Fl O
+specifies the initial sort order: one of
+.Ql name ,
+.Ql size ,
+.Ql creation ,
+or
+.Ql activity .
 This command works only if at least one client is attached.
 .It Xo
 .Ic choose-tree
 .Op Fl sw
+.Op Fl O Ar sort-order
 .Op Fl t Ar target-pane
 .Op Ar template
 .Xc
@@ -1428,6 +1437,12 @@ If
 .Ar template
 is not given, "switch-client -t '%%'" is used.
 .Pp
+.Fl O
+specifies the initial sort order: one of
+.Ql index ,
+.Ql name ,
+or
+.Ql time .
 This command works only if at least one client is attached.
 .It Xo
 .Ic display-panes
@@ -3957,6 +3972,7 @@ The buffer commands are as follows:
 .Bl -tag -width Ds
 .It Xo
 .Ic choose-buffer
+.Op Fl O Ar sort-order
 .Op Fl t Ar target-pane
 .Op Ar template
 .Xc
@@ -3988,6 +4004,12 @@ If
 .Ar template
 is not given, "paste-buffer -b '%%'" is used.
 .Pp
+.Fl O
+specifies the initial sort order: one of
+.Ql time ,
+.Ql name
+or
+.Ql size .
 This command works only if at least one client is attached.
 .It Ic clear-history Op Fl t Ar target-pane
 .D1 (alias: Ic clearhist )
index 346fefe..00b1ad9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.783 2017/06/07 15:27:46 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.784 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -2201,7 +2201,7 @@ void       mode_tree_each_tagged(struct mode_tree_data *, void (*)(void *, void *,
             key_code), key_code, int);
 void    mode_tree_up(struct mode_tree_data *, int);
 void    mode_tree_down(struct mode_tree_data *, int);
-struct mode_tree_data *mode_tree_start(struct window_pane *,
+struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *,
             void (*)(void *, u_int, uint64_t *), struct screen *(*)(void *,
             void *, u_int, u_int), int (*)(void *, void *, const char *),
             void *, const char **, u_int, struct screen **);
index 17d9c8b..12995e6 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-buffer.c,v 1.6 2017/06/09 15:17:20 nicm Exp $ */
+/* $OpenBSD: window-buffer.c,v 1.7 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -257,7 +257,7 @@ window_buffer_init(struct window_pane *wp, __unused struct cmd_find_state *fs,
        else
                data->command = xstrdup(args->argv[0]);
 
-       data->data = mode_tree_start(wp, window_buffer_build,
+       data->data = mode_tree_start(wp, args, window_buffer_build,
            window_buffer_draw, window_buffer_search, data,
            window_buffer_sort_list, nitems(window_buffer_sort_list), &s);
 
index 3aa67ef..e3feb40 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-client.c,v 1.4 2017/06/08 07:48:04 nicm Exp $ */
+/* $OpenBSD: window-client.c,v 1.5 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -54,8 +54,8 @@ enum window_client_sort_type {
 static const char *window_client_sort_list[] = {
        "name",
        "size",
-       "creation time",
-       "activity time"
+       "creation",
+       "activity"
 };
 
 struct window_client_itemdata {
@@ -247,7 +247,7 @@ window_client_init(struct window_pane *wp, __unused struct cmd_find_state *fs,
        else
                data->command = xstrdup(args->argv[0]);
 
-       data->data = mode_tree_start(wp, window_client_build,
+       data->data = mode_tree_start(wp, args, window_client_build,
            window_client_draw, NULL, data, window_client_sort_list,
            nitems(window_client_sort_list), &s);
 
index fea3279..aed2e49 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-tree.c,v 1.3 2017/06/07 14:37:30 nicm Exp $ */
+/* $OpenBSD: window-tree.c,v 1.4 2017/06/09 15:29:15 nicm Exp $ */
 
 /*
  * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -503,8 +503,8 @@ window_tree_init(struct window_pane *wp, struct cmd_find_state *fs,
        else
                data->command = xstrdup(args->argv[0]);
 
-       data->data = mode_tree_start(wp, window_tree_build, window_tree_draw,
-           window_tree_search, data, window_tree_sort_list,
+       data->data = mode_tree_start(wp, args, window_tree_build,
+           window_tree_draw, window_tree_search, data, window_tree_sort_list,
            nitems(window_tree_sort_list), &s);
 
        mode_tree_build(data->data);