The branch, master has been updated
       via  c41d92d27a8083286793a58bc02ffc015d8c70ac (commit)
      from  a060aa2bf091c7befbb37f86ef450cd575a3e53e (commit)

- Log -----------------------------------------------------------------
commit c41d92d27a8083286793a58bc02ffc015d8c70ac
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>

    Add time and a command count to control mode guards, based on code from 
George
    Nachman.
---
 cmd-queue.c |   39 +++++++++++++++++++++++++--------------
 control.c   |    9 +++++++--
 tmux.h      |    4 ++++
 3 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/cmd-queue.c b/cmd-queue.c
index 4b00fce..5267444 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -151,6 +151,22 @@ cmdq_error(struct cmd_q *cmdq, const char *fmt, ...)
        free(msg);
 }
 
+/* Print a guard line. */
+void
+cmdq_guard(struct cmd_q *cmdq, const char *guard)
+{
+       struct client   *c = cmdq->client;
+
+       if (c == NULL || c->session == NULL)
+               return;
+       if (!(c->flags & CLIENT_CONTROL))
+               return;
+
+       evbuffer_add_printf(c->stdout_data, "%%%s %ld %u\n", guard,
+           cmdq->time, cmdq->number);
+       server_push_stdout(c);
+}
+
 /* Add command list to queue and begin processing if needed. */
 void
 cmdq_run(struct cmd_q *cmdq, struct cmd_list *cmdlist)
@@ -179,16 +195,11 @@ cmdq_append(struct cmd_q *cmdq, struct cmd_list *cmdlist)
 int
 cmdq_continue(struct cmd_q *cmdq)
 {
-       struct client           *c = cmdq->client;
        struct cmd_q_item       *next;
        enum cmd_retval          retval;
-       int                      guards, empty;
+       int                      empty;
        char                     s[1024];
 
-       guards = 0;
-       if (c != NULL && c->session != NULL)
-               guards = c->flags & CLIENT_CONTROL;
-
        notify_disable();
 
        empty = TAILQ_EMPTY(&cmdq->queue);
@@ -209,15 +220,15 @@ cmdq_continue(struct cmd_q *cmdq)
                        log_debug("cmdq %p: %s (client %d)", cmdq, s,
                            cmdq->client != NULL ? cmdq->client->ibuf.fd : -1);
 
-                       if (guards)
-                               cmdq_print(cmdq, "%%begin");
+                       cmdq->time = time(NULL);
+                       cmdq->number++;
+
+                       cmdq_guard(cmdq, "begin");
                        retval = cmdq->cmd->entry->exec(cmdq->cmd, cmdq);
-                       if (guards) {
-                               if (retval == CMD_RETURN_ERROR)
-                                       cmdq_print(cmdq, "%%error");
-                               else
-                                       cmdq_print(cmdq, "%%end");
-                       }
+                       if (retval == CMD_RETURN_ERROR)
+                               cmdq_guard(cmdq, "error");
+                       else
+                               cmdq_guard(cmdq, "end");
 
                        if (retval == CMD_RETURN_ERROR)
                                break;
diff --git a/control.c b/control.c
index 06f20bb..c888877 100644
--- a/control.c
+++ b/control.c
@@ -68,8 +68,13 @@ control_callback(struct client *c, int closed, unused void 
*data)
                }
 
                if (cmd_string_parse(line, &cmdlist, NULL, 0, &cause) != 0) {
-                       control_write(c, "%%error in line \"%s\": %s", line,
-                           cause);
+                       c->cmdq->time = time(NULL);
+                       c->cmdq->number++;
+
+                       cmdq_guard(c->cmdq, "begin");
+                       control_write(c, "parse error: %s", cause);
+                       cmdq_guard(c->cmdq, "error");
+
                        free(cause);
                } else {
                        cmdq_run(c->cmdq, cmdlist);
diff --git a/tmux.h b/tmux.h
index e45cd48..89860cb 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1412,6 +1412,9 @@ struct cmd_q {
        struct cmd_q_item       *item;
        struct cmd              *cmd;
 
+       time_t                   time;
+       u_int                    number;
+
        void                     (*emptyfn)(struct cmd_q *);
        void                    *data;
 
@@ -1853,6 +1856,7 @@ int                cmdq_free(struct cmd_q *);
 void printflike2 cmdq_print(struct cmd_q *, const char *, ...);
 void printflike2 cmdq_info(struct cmd_q *, const char *, ...);
 void printflike2 cmdq_error(struct cmd_q *, const char *, ...);
+void            cmdq_guard(struct cmd_q *, const char *);
 void            cmdq_run(struct cmd_q *, struct cmd_list *);
 void            cmdq_append(struct cmd_q *, struct cmd_list *);
 int             cmdq_continue(struct cmd_q *);


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

Summary of changes:
 cmd-queue.c |   39 +++++++++++++++++++++++++--------------
 control.c   |    9 +++++++--
 tmux.h      |    4 ++++
 3 files changed, 36 insertions(+), 16 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to