Define the structure for lists of items (window_choose_mode_item) and ensure
that window_choose_add can store them.
---
 trunk/tmux.h          |   20 ++++++++++++++++++--
 trunk/window-choose.c |   23 ++++++++++-------------
 2 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/trunk/tmux.h b/trunk/tmux.h
index d0dc122..26c0ceb 100644
--- a/trunk/tmux.h
+++ b/trunk/tmux.h
@@ -840,6 +840,22 @@ struct window_mode {
        void    (*timer)(struct window_pane *);
 };
 
+/* Structures for choose mode. */
+struct window_choose_data {
+       struct client           *client;
+       struct session          *session;
+       struct format_tree      *ft;
+       char                    *ft_template;
+       char                    *raw_format;
+       char                    *action;
+       u_int                    idx;
+};
+
+struct window_choose_mode_item {
+    struct window_choose_data   *wcd;
+    char                        *name;
+};
+
 /* Child window structure. */
 struct window_pane {
        u_int            id;
@@ -2114,8 +2130,8 @@ void               window_copy_pageup(struct window_pane 
*);
 extern const struct window_mode window_choose_mode;
 void            window_choose_vadd(
                     struct window_pane *, int, const char *, va_list);
-void printflike3 window_choose_add(
-                    struct window_pane *, int, const char *, ...);
+void            window_choose_add(struct window_pane *,
+                        struct window_choose_data *);
 void            window_choose_ready(struct window_pane *,
                     u_int, void (*)(void *, int), void (*)(void *), void *);
 
diff --git a/trunk/window-choose.c b/trunk/window-choose.c
index 073c8c4..a8b8230 100644
--- a/trunk/window-choose.c
+++ b/trunk/window-choose.c
@@ -53,13 +53,12 @@ struct window_choose_mode_data {
 
        struct mode_key_data    mdata;
 
-       ARRAY_DECL(, struct window_choose_mode_item) list;
+       ARRAY_DECL(, struct window_choose_item) list;
        u_int                   top;
        u_int                   selected;
 
        void                    (*callbackfn)(void *, int);
        void                    (*freefn)(void *);
-       void                   *data;
 };
 
 int    window_choose_key_index(struct window_choose_mode_data *, u_int);
@@ -68,23 +67,21 @@ int window_choose_index_key(struct window_choose_mode_data 
*, int);
 void
 window_choose_vadd(struct window_pane *wp, int idx, const char *fmt, va_list 
ap)
 {
-       struct window_choose_mode_data  *data = wp->modedata;
-       struct window_choose_mode_item  *item;
-
-       ARRAY_EXPAND(&data->list, 1);
-       item = &ARRAY_LAST(&data->list);
        xvasprintf(&item->name, fmt, ap);
        item->idx = idx;
 }
 
-void printflike3
-window_choose_add(struct window_pane *wp, int idx, const char *fmt, ...)
+void
+window_choose_add(struct window_pane *wp, struct window_choose_data *wcd)
 {
-       va_list ap;
+       struct window_choose_mode_data  *data = wp->modedata;
+       struct window_choose_mode_item  *item;
+
+       ARRAY_EXPAND(&data->list, 1);
+       item = &ARRAY_LAST(&data->list);
 
-       va_start(ap, fmt);
-       window_choose_vadd(wp, idx, fmt, ap);
-       va_end(ap);
+       item->name = format_expand(data->ft, data->ft_template);
+       item->wcd = wcd;
 }
 
 void
-- 
1.7.10


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to