The branch, master has been updated
       via  72e9ebf2ece28c986050162bf4f401a6a7679f53 (commit)
       via  a568b9cadce002f6f7e8ee914c995242bd70cce5 (commit)
       via  07dfdb974d36f1eee084b9739d2b8a5b64172ec8 (commit)
       via  6dbd63ba4f2da666d55267692c610b9ed8d1d8dd (commit)
       via  d23af6cca0c4d55097d567bbfea42aecf0ca36b0 (commit)
      from  56e1132db485aeb0730ce7782533ca441e63afef (commit)

- Log -----------------------------------------------------------------
commit 72e9ebf2ece28c986050162bf4f401a6a7679f53
Merge: 56e1132 a568b9c
Author: Thomas Adam <tho...@xteddy.org>
Commit: Thomas Adam <tho...@xteddy.org>

    Merge branch 'obsd-master'

 cfg.c                |   33 ++++++++++++++------------
 cmd-attach-session.c |    9 +++++--
 cmd-show-messages.c  |    5 +---
 cmd-switch-client.c  |   10 +++++---
 cmd.c                |   61 +++++--------------------------------------------
 server-client.c      |   11 ++++-----
 session.c            |   16 +++++++++++++
 status.c             |   26 +++++++++++---------
 tmux.h               |   12 +++++----
 tty.c                |    4 +-
 window.c             |   33 ++++++++++++++++++++++++++-
 11 files changed, 114 insertions(+), 106 deletions(-)



commit a568b9cadce002f6f7e8ee914c995242bd70cce5
Author: nicm <nicm>
Commit: nicm <nicm>

    Use a char **,u_int pair for cfg_causes.
---
 cfg.c |   33 ++++++++++++++++++---------------
 1 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/cfg.c b/cfg.c
index b4c9bff..54ba7f7 100644
--- a/cfg.c
+++ b/cfg.c
@@ -30,7 +30,8 @@
 struct cmd_q           *cfg_cmd_q;
 int                     cfg_finished;
 int                     cfg_references;
-ARRAY_DECL (, char *)   cfg_causes = ARRAY_INITIALIZER;
+char**                  cfg_causes;
+u_int                   cfg_ncauses;
 struct client          *cfg_client;
 
 int
@@ -122,40 +123,42 @@ cfg_add_cause(const char* fmt, ...)
        xvasprintf(&msg, fmt, ap);
        va_end (ap);
 
-       ARRAY_ADD(&cfg_causes, msg);
+       cfg_ncauses++;
+       cfg_causes = xreallocarray(cfg_causes, cfg_ncauses, sizeof *cfg_causes);
+       cfg_causes[cfg_ncauses - 1] = msg;
 }
 
 void
 cfg_print_causes(struct cmd_q *cmdq)
 {
-       char    *cause;
        u_int    i;
 
-       for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) {
-               cause = ARRAY_ITEM(&cfg_causes, i);
-               cmdq_print(cmdq, "%s", cause);
-               free(cause);
+       for (i = 0; i < cfg_ncauses; i++) {
+               cmdq_print(cmdq, "%s", cfg_causes[i]);
+               free(cfg_causes[i]);
        }
-       ARRAY_FREE(&cfg_causes);
+
+       free(cfg_causes);
+       cfg_causes = NULL;
 }
 
 void
 cfg_show_causes(struct session *s)
 {
        struct window_pane      *wp;
-       char                    *cause;
        u_int                    i;
 
-       if (s == NULL || ARRAY_EMPTY(&cfg_causes))
+       if (s == NULL || cfg_ncauses == 0)
                return;
        wp = s->curw->window->active;
 
        window_pane_set_mode(wp, &window_copy_mode);
        window_copy_init_for_output(wp);
-       for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) {
-               cause = ARRAY_ITEM(&cfg_causes, i);
-               window_copy_add(wp, "%s", cause);
-               free(cause);
+       for (i = 0; i < cfg_ncauses; i++) {
+               window_copy_add(wp, "%s", cfg_causes[i]);
+               free(cfg_causes[i]);
        }
-       ARRAY_FREE(&cfg_causes);
+
+       free(cfg_causes);
+       cfg_causes = NULL;
 }


commit 07dfdb974d36f1eee084b9739d2b8a5b64172ec8
Author: nicm <nicm>
Commit: nicm <nicm>

    Make message log a TAILQ.
---
 cmd-show-messages.c |    5 +----
 cmd.c               |    1 +
 server-client.c     |   11 +++++------
 status.c            |   26 ++++++++++++++------------
 tmux.h              |    7 ++++---
 window.c            |    2 ++
 6 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/cmd-show-messages.c b/cmd-show-messages.c
index 3b7baa8..028b4bb 100644
--- a/cmd-show-messages.c
+++ b/cmd-show-messages.c
@@ -130,7 +130,6 @@ cmd_show_messages_exec(struct cmd *self, struct cmd_q *cmdq)
        struct client           *c;
        struct message_entry    *msg;
        char                    *tim;
-       u_int                    i;
        int                      done;
 
        done = 0;
@@ -156,9 +155,7 @@ cmd_show_messages_exec(struct cmd *self, struct cmd_q *cmdq)
        if ((c = cmd_find_client(cmdq, args_get(args, 't'), 0)) == NULL)
                return (CMD_RETURN_ERROR);
 
-       for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) {
-               msg = &ARRAY_ITEM(&c->message_log, i);
-
+       TAILQ_FOREACH(msg, &c->message_log, entry) {
                tim = ctime(&msg->msg_time);
                *strchr(tim, '\n') = '\0';
 
diff --git a/cmd.c b/cmd.c
index 4be5a4d..ea1a29d 100644
--- a/cmd.c
+++ b/cmd.c
@@ -117,6 +117,7 @@ const struct cmd_entry *cmd_table[] = {
 };
 
 ARRAY_DECL(client_list, struct client *);
+ARRAY_DECL(sessionslist, struct session *);
 
 int             cmd_session_better(struct session *, struct session *, int);
 struct session *cmd_choose_session_list(struct sessionslist *);
diff --git a/server-client.c b/server-client.c
index a0f81b7..b24e1af 100644
--- a/server-client.c
+++ b/server-client.c
@@ -94,7 +94,7 @@ server_client_create(int fd)
        RB_INIT(&c->status_old);
 
        c->message_string = NULL;
-       ARRAY_INIT(&c->message_log);
+       TAILQ_INIT(&c->message_log);
 
        c->prompt_string = NULL;
        c->prompt_buffer = NULL;
@@ -138,8 +138,7 @@ server_client_open(struct client *c, char **cause)
 void
 server_client_lost(struct client *c)
 {
-       struct message_entry    *msg;
-       u_int                    i;
+       struct message_entry    *msg, *msg1;
 
        TAILQ_REMOVE(&clients, c, entry);
        log_debug("lost client %d", c->ibuf.fd);
@@ -175,11 +174,11 @@ server_client_lost(struct client *c)
        free(c->message_string);
        if (event_initialized(&c->message_timer))
                evtimer_del(&c->message_timer);
-       for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) {
-               msg = &ARRAY_ITEM(&c->message_log, i);
+       TAILQ_FOREACH_SAFE(msg, &c->message_log, entry, msg1) {
                free(msg->msg);
+               TAILQ_REMOVE(&c->message_log, msg, entry);
+               free(msg);
        }
-       ARRAY_FREE(&c->message_log);
 
        free(c->prompt_string);
        free(c->prompt_buffer);
diff --git a/status.c b/status.c
index fd0292c..e3d335f 100644
--- a/status.c
+++ b/status.c
@@ -636,10 +636,12 @@ void
 status_message_set(struct client *c, const char *fmt, ...)
 {
        struct timeval           tv;
-       struct message_entry    *msg;
+       struct message_entry    *msg, *msg1;
        va_list                  ap;
        int                      delay;
-       u_int                    i, limit;
+       u_int                    first, limit;
+
+       limit = options_get_number(&global_options, "message-limit");
 
        status_prompt_clear(c);
        status_message_clear(c);
@@ -648,19 +650,19 @@ status_message_set(struct client *c, const char *fmt, ...)
        xvasprintf(&c->message_string, fmt, ap);
        va_end(ap);
 
-       ARRAY_EXPAND(&c->message_log, 1);
-       msg = &ARRAY_LAST(&c->message_log);
+       msg = xcalloc(1, sizeof *msg);
        msg->msg_time = time(NULL);
+       msg->msg_num = c->message_next++;
        msg->msg = xstrdup(c->message_string);
+       TAILQ_INSERT_TAIL(&c->message_log, msg, entry);
 
-       limit = options_get_number(&global_options, "message-limit");
-       if (ARRAY_LENGTH(&c->message_log) > limit) {
-               limit = ARRAY_LENGTH(&c->message_log) - limit;
-               for (i = 0; i < limit; i++) {
-                       msg = &ARRAY_FIRST(&c->message_log);
-                       free(msg->msg);
-                       ARRAY_REMOVE(&c->message_log, 0);
-               }
+       first = c->message_next - limit;
+       TAILQ_FOREACH_SAFE(msg, &c->message_log, entry, msg1) {
+               if (msg->msg_num >= first)
+                       continue;
+               free(msg->msg);
+               TAILQ_REMOVE(&c->message_log, msg, entry);
+               free(msg);
        }
 
        delay = options_get_number(&c->session->options, "display-time");
diff --git a/tmux.h b/tmux.h
index 3f8829c..170ad69 100644
--- a/tmux.h
+++ b/tmux.h
@@ -950,7 +950,6 @@ struct window_pane {
 };
 TAILQ_HEAD(window_panes, window_pane);
 RB_HEAD(window_pane_tree, window_pane);
-ARRAY_DECL(window_pane_list, struct window_pane *);
 
 /* Window structure. */
 struct window {
@@ -1101,7 +1100,6 @@ struct session {
        RB_ENTRY(session)    entry;
 };
 RB_HEAD(sessions, session);
-ARRAY_DECL(sessionslist, struct session *);
 
 /* TTY information. */
 struct tty_key {
@@ -1255,7 +1253,9 @@ struct tty_ctx {
 /* Saved message entry. */
 struct message_entry {
        char   *msg;
+       u_int   msg_num;
        time_t  msg_time;
+       TAILQ_ENTRY(message_entry) entry;
 };
 
 /* Status output data from a job. */
@@ -1327,7 +1327,8 @@ struct client {
 
        char            *message_string;
        struct event     message_timer;
-       ARRAY_DECL(, struct message_entry) message_log;
+       u_int            message_next;
+       TAILQ_HEAD(, message_entry) message_log;
 
        char            *prompt_string;
        char            *prompt_buffer;
diff --git a/window.c b/window.c
index acbcd33..c60404d 100644
--- a/window.c
+++ b/window.c
@@ -49,6 +49,8 @@
  * it reaches zero.
  */
 
+ARRAY_DECL(window_pane_list, struct window_pane *);
+
 /* Global window list. */
 struct windows windows;
 


commit 6dbd63ba4f2da666d55267692c610b9ed8d1d8dd
Author: nicm <nicm>
Commit: nicm <nicm>

    Move the functions to convert ids from strings into session.c and window.c.
---
 cmd-attach-session.c |    9 +++++--
 cmd-switch-client.c  |   10 +++++---
 cmd.c                |   60 +++++---------------------------------------------
 session.c            |   16 +++++++++++++
 tmux.h               |    5 ++-
 window.c             |   31 +++++++++++++++++++++++++-
 6 files changed, 67 insertions(+), 64 deletions(-)

diff --git a/cmd-attach-session.c b/cmd-attach-session.c
index 79e1461..46d568b 100644
--- a/cmd-attach-session.c
+++ b/cmd-attach-session.c
@@ -69,9 +69,12 @@ cmd_attach_session(struct cmd_q *cmdq, const char *tflag, 
int dflag, int rflag,
        } else {
                if ((s = cmd_find_session(cmdq, tflag, 1)) == NULL)
                        return (CMD_RETURN_ERROR);
-               w = cmd_lookup_windowid(tflag);
-               if (w == NULL && (wp = cmd_lookup_paneid(tflag)) != NULL)
-                       w = wp->window;
+               w = window_find_by_id_str(tflag);
+               if (w == NULL) {
+                       wp = window_pane_find_by_id_str(tflag);
+                       if (wp != NULL)
+                               w = wp->window;
+               }
                if (w != NULL)
                        wl = winlink_find_by_window(&s->windows, w);
        }
diff --git a/cmd-switch-client.c b/cmd-switch-client.c
index 8c4daf9..18de0eb 100644
--- a/cmd-switch-client.c
+++ b/cmd-switch-client.c
@@ -99,10 +99,12 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q *cmdq)
                } else {
                        if ((s = cmd_find_session(cmdq, tflag, 1)) == NULL)
                                return (CMD_RETURN_ERROR);
-                       w = cmd_lookup_windowid(tflag);
-                       if (w == NULL &&
-                           (wp = cmd_lookup_paneid(tflag)) != NULL)
-                               w = wp->window;
+                       w = window_find_by_id_str(tflag);
+                       if (w == NULL) {
+                               wp = window_pane_find_by_id_str(tflag);
+                               if (wp != NULL)
+                                       w = wp->window;
+                       }
                        if (w != NULL)
                                wl = winlink_find_by_window(&s->windows, w);
                }
diff --git a/cmd.c b/cmd.c
index b81ffb3..4be5a4d 100644
--- a/cmd.c
+++ b/cmd.c
@@ -124,7 +124,6 @@ struct session      *cmd_choose_session(int);
 struct client  *cmd_choose_client(struct client_list *);
 struct client  *cmd_lookup_client(const char *);
 struct session *cmd_lookup_session(struct cmd_q *, const char *, int *);
-struct session *cmd_lookup_session_id(const char *);
 struct winlink *cmd_lookup_window(struct session *, const char *, int *);
 int             cmd_lookup_index(struct session *, const char *, int *);
 struct winlink *cmd_lookup_winlink_windowid(struct session *, const char *);
@@ -639,21 +638,6 @@ cmd_lookup_client(const char *name)
        return (NULL);
 }
 
-/* Find the target session or report an error and return NULL. */
-struct session *
-cmd_lookup_session_id(const char *arg)
-{
-       char    *endptr;
-       long     id;
-
-       if (arg[0] != '$')
-               return (NULL);
-       id = strtol(arg + 1, &endptr, 10);
-       if (arg[1] != '\0' && *endptr == '\0')
-               return (session_find_by_id(id));
-       return (NULL);
-}
-
 /* Lookup a session by name. If no session is found, NULL is returned. */
 struct session *
 cmd_lookup_session(struct cmd_q *cmdq, const char *name, int *ambiguous)
@@ -665,13 +649,13 @@ cmd_lookup_session(struct cmd_q *cmdq, const char *name, 
int *ambiguous)
        *ambiguous = 0;
 
        /* Look for $id first. */
-       if ((s = cmd_lookup_session_id(name)) != NULL)
+       if ((s = session_find_by_id_str(name)) != NULL)
                return (s);
 
        /* Try as pane or window id. */
-       if ((wp = cmd_lookup_paneid(name)) != NULL)
+       if ((wp = window_pane_find_by_id_str(name)) != NULL)
                return (cmd_window_session(cmdq, wp->window, NULL));
-       if ((w = cmd_lookup_windowid(name)) != NULL)
+       if ((w = window_find_by_id_str(name)) != NULL)
                return (cmd_window_session(cmdq, w, NULL));
 
        /*
@@ -722,12 +706,12 @@ cmd_lookup_window(struct session *s, const char *name, 
int *ambiguous)
            return (wl);
 
        /* Lookup as pane or window id. */
-       if ((wp = cmd_lookup_paneid(name)) != NULL) {
+       if ((wp = window_pane_find_by_id_str(name)) != NULL) {
                wl = winlink_find_by_window(&s->windows, wp->window);
                if (wl != NULL)
                        return (wl);
        }
-       if ((w = cmd_lookup_windowid(name)) != NULL) {
+       if ((w = window_find_by_id_str(name)) != NULL) {
                wl = winlink_find_by_window(&s->windows, w);
                if (wl != NULL)
                        return (wl);
@@ -795,22 +779,6 @@ cmd_lookup_index(struct session *s, const char *name, int 
*ambiguous)
        return (-1);
 }
 
-/* Lookup pane id. An initial % means a pane id. */
-struct window_pane *
-cmd_lookup_paneid(const char *arg)
-{
-       const char      *errstr;
-       u_int            paneid;
-
-       if (*arg != '%')
-               return (NULL);
-
-       paneid = strtonum(arg + 1, 0, UINT_MAX, &errstr);
-       if (errstr != NULL)
-               return (NULL);
-       return (window_pane_find_by_id(paneid));
-}
-
 /* Lookup window id in a session. An initial @ means a window id. */
 struct winlink *
 cmd_lookup_winlink_windowid(struct session *s, const char *arg)
@@ -827,22 +795,6 @@ cmd_lookup_winlink_windowid(struct session *s, const char 
*arg)
        return (winlink_find_by_window_id(&s->windows, windowid));
 }
 
-/* Lookup window id. An initial @ means a window id. */
-struct window *
-cmd_lookup_windowid(const char *arg)
-{
-       const char      *errstr;
-       u_int            windowid;
-
-       if (*arg != '@')
-               return (NULL);
-
-       windowid = strtonum(arg + 1, 0, UINT_MAX, &errstr);
-       if (errstr != NULL)
-               return (NULL);
-       return (window_find_by_id(windowid));
-}
-
 /* Find session and winlink for window. */
 struct session *
 cmd_window_session(struct cmd_q *cmdq, struct window *w, struct winlink **wlp)
@@ -1252,7 +1204,7 @@ cmd_find_pane(struct cmd_q *cmdq,
        }
 
        /* Lookup as pane id. */
-       if ((*wpp = cmd_lookup_paneid(arg)) != NULL) {
+       if ((*wpp = window_pane_find_by_id_str(arg)) != NULL) {
                s = cmd_window_session(cmdq, (*wpp)->window, &wl);
                if (sp != NULL)
                        *sp = s;
diff --git a/session.c b/session.c
index c053572..224f1f3 100644
--- a/session.c
+++ b/session.c
@@ -70,6 +70,22 @@ session_find(const char *name)
        return (RB_FIND(sessions, &sessions, &s));
 }
 
+/* Find session by id parsed from a string. */
+struct session *
+session_find_by_id_str(const char *s)
+{
+       const char      *errstr;
+       u_int            id;
+
+       if (*s != '$')
+               return (NULL);
+
+       id = strtonum(s + 1, 0, UINT_MAX, &errstr);
+       if (errstr != NULL)
+               return (NULL);
+       return (session_find_by_id(id));
+}
+
 /* Find session by id. */
 struct session *
 session_find_by_id(u_int id)
diff --git a/tmux.h b/tmux.h
index c38149a..3f8829c 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1766,8 +1766,6 @@ int                cmd_find_index(struct cmd_q *, const 
char *,
 struct winlink *cmd_find_pane(struct cmd_q *, const char *, struct session **,
                     struct window_pane **);
 char           *cmd_template_replace(const char *, const char *, int);
-struct window  *cmd_lookup_windowid(const char *);
-struct window_pane *cmd_lookup_paneid(const char *);
 extern const struct cmd_entry *cmd_table[];
 extern const struct cmd_entry cmd_attach_session_entry;
 extern const struct cmd_entry cmd_bind_key_entry;
@@ -2147,6 +2145,7 @@ struct winlink    *winlink_previous_by_number(struct 
winlink *, struct session *,
                     int);
 void            winlink_stack_push(struct winlink_stack *, struct winlink *);
 void            winlink_stack_remove(struct winlink_stack *, struct winlink *);
+struct window  *window_find_by_id_str(const char *);
 struct window  *window_find_by_id(u_int);
 struct window  *window_create1(u_int, u_int);
 struct window  *window_create(const char *, int, char **, const char *,
@@ -2172,6 +2171,7 @@ struct window_pane *window_pane_previous_by_number(struct 
window *,
 int             window_pane_index(struct window_pane *, u_int *);
 u_int           window_count_panes(struct window *);
 void            window_destroy_panes(struct window *);
+struct window_pane *window_pane_find_by_id_str(const char *);
 struct window_pane *window_pane_find_by_id(u_int);
 struct window_pane *window_pane_create(struct window *, u_int, u_int, u_int);
 void            window_pane_destroy(struct window_pane *);
@@ -2309,6 +2309,7 @@ int       session_cmp(struct session *, struct session *);
 RB_PROTOTYPE(sessions, session, entry, session_cmp);
 int             session_alive(struct session *);
 struct session *session_find(const char *);
+struct session *session_find_by_id_str(const char *);
 struct session *session_find_by_id(u_int);
 struct session *session_create(const char *, int, char **, const char *,
                     int, struct environ *, struct termios *, int, u_int,
diff --git a/window.c b/window.c
index 5ca8aa0..acbcd33 100644
--- a/window.c
+++ b/window.c
@@ -254,6 +254,21 @@ winlink_stack_remove(struct winlink_stack *stack, struct 
winlink *wl)
 }
 
 struct window *
+window_find_by_id_str(const char* s)
+{
+       const char      *errstr;
+       u_int            id;
+
+       if (*s != '@')
+               return (NULL);
+
+       id = strtonum(s + 1, 0, UINT_MAX, &errstr);
+       if (errstr != NULL)
+               return (NULL);
+       return (window_find_by_id(id));
+}
+
+struct window *
 window_find_by_id(u_int id)
 {
        struct window   w;
@@ -653,7 +668,21 @@ window_printable_flags(struct session *s, struct winlink 
*wl)
        return (xstrdup(flags));
 }
 
-/* Find pane in global tree by id. */
+struct window_pane *
+window_pane_find_by_id_str(const char *s)
+{
+       const char      *errstr;
+       u_int            id;
+
+       if (*s != '%')
+               return (NULL);
+
+       id = strtonum(s + 1, 0, UINT_MAX, &errstr);
+       if (errstr != NULL)
+               return (NULL);
+       return (window_pane_find_by_id(id));
+}
+
 struct window_pane *
 window_pane_find_by_id(u_int id)
 {


commit d23af6cca0c4d55097d567bbfea42aecf0ca36b0
Author: nicm <nicm>
Commit: nicm <nicm>

    Explicitly cancel mouse "button" mode, this happens implicitly with some
    one of the other things we send with xterm, but not with urxvt. Reported
    by sthen@.
---
 tty.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tty.c b/tty.c
index aae7b89..ee52d03 100644
--- a/tty.c
+++ b/tty.c
@@ -220,7 +220,7 @@ tty_start_tty(struct tty *tty)
 
        tty_putcode(tty, TTYC_CNORM);
        if (tty_term_has(tty->term, TTYC_KMOUS))
-               tty_puts(tty, "\033[?1000l\033[?1006l\033[?1005l");
+               tty_puts(tty, "\033[?1000l\033[?1002l\033[?1006l\033[?1005l");
 
        if (tty_term_has(tty->term, TTYC_XT)) {
                if (options_get_number(&global_options, "focus-events")) {
@@ -294,7 +294,7 @@ tty_stop_tty(struct tty *tty)
 
        tty_raw(tty, tty_term_string(tty->term, TTYC_CNORM));
        if (tty_term_has(tty->term, TTYC_KMOUS))
-               tty_raw(tty, "\033[?1000l\033[?1006l\033[?1005l");
+               tty_raw(tty, "\033[?1000l\033[?1002l\033[?1006l\033[?1005l");
 
        if (tty_term_has(tty->term, TTYC_XT)) {
                if (tty->flags & TTY_FOCUS) {


-----------------------------------------------------------------------

Summary of changes:
 cfg.c                |   33 ++++++++++++++------------
 cmd-attach-session.c |    9 +++++--
 cmd-show-messages.c  |    5 +---
 cmd-switch-client.c  |   10 +++++---
 cmd.c                |   61 +++++--------------------------------------------
 server-client.c      |   11 ++++-----
 session.c            |   16 +++++++++++++
 status.c             |   26 +++++++++++---------
 tmux.h               |   12 +++++----
 tty.c                |    4 +-
 window.c             |   33 ++++++++++++++++++++++++++-
 11 files changed, 114 insertions(+), 106 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
tmux-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to