[BACK]Return to cmd-queue.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/cmd-queue.c between version 1.110 and 1.111

version 1.110, 2022/05/30 13:00:18 version 1.111, 2022/12/07 09:44:44
Line 24 
Line 24 
 #include <string.h>  #include <string.h>
 #include <time.h>  #include <time.h>
 #include <unistd.h>  #include <unistd.h>
   #include <vis.h>
   
 #include "tmux.h"  #include "tmux.h"
   
Line 823 
Line 824 
   
 /* Show message from command. */  /* Show message from command. */
 void  void
 cmdq_print(struct cmdq_item *item, const char *fmt, ...)  cmdq_print_data(struct cmdq_item *item, int parse, struct evbuffer *evb)
 {  {
         struct client                   *c = item->client;          struct client                   *c = item->client;
           void                            *data = EVBUFFER_DATA(evb);
           size_t                           size = EVBUFFER_LENGTH(evb);
         struct window_pane              *wp;          struct window_pane              *wp;
         struct window_mode_entry        *wme;          struct window_mode_entry        *wme;
         va_list                          ap;          char                            *sanitized, *msg, *line;
         char                            *tmp, *msg;  
   
         va_start(ap, fmt);          if (!parse) {
         xvasprintf(&msg, fmt, ap);                  utf8_stravisx(&msg, data, size, VIS_OCTAL|VIS_CSTYLE|VIS_TAB);
         va_end(ap);                  log_debug("%s: %s", __func__, msg);
           } else {
                   msg = EVBUFFER_DATA(evb);
                   if (msg[size - 1] != '\0')
                           evbuffer_add(evb, "", 1);
           }
   
         log_debug("%s: %s", __func__, msg);  
   
         if (c == NULL)          if (c == NULL)
                 /* nothing */;                  goto out;
         else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) {  
           if (c->session == NULL || (c->flags & CLIENT_CONTROL)) {
                 if (~c->flags & CLIENT_UTF8) {                  if (~c->flags & CLIENT_UTF8) {
                         tmp = msg;                          sanitized = utf8_sanitize(msg);
                         msg = utf8_sanitize(tmp);                          if (c->flags & CLIENT_CONTROL)
                         free(tmp);                                  control_write(c, "%s", sanitized);
                           else
                                   file_print(c, "%s\n", sanitized);
                           free(sanitized);
                   } else {
                           if (c->flags & CLIENT_CONTROL)
                                   control_write(c, "%s", msg);
                           else
                                   file_print(c, "%s\n", msg);
                 }                  }
                 if (c->flags & CLIENT_CONTROL)                  goto out;
                         control_write(c, "%s", msg);          }
                 else  
                         file_print(c, "%s\n", msg);          wp = server_client_get_pane(c);
         } else {          wme = TAILQ_FIRST(&wp->modes);
                 wp = server_client_get_pane(c);          if (wme == NULL || wme->mode != &window_view_mode)
                 wme = TAILQ_FIRST(&wp->modes);                  window_pane_set_mode(wp, NULL, &window_view_mode, NULL, NULL);
                 if (wme == NULL || wme->mode != &window_view_mode) {          if (parse) {
                         window_pane_set_mode(wp, NULL, &window_view_mode, NULL,                  do {
                             NULL);                          line = evbuffer_readln(evb, NULL, EVBUFFER_EOL_LF);
                           if (line != NULL) {
                                   window_copy_add(wp, 1, "%s", line);
                                   free(line);
                           }
                   } while (line != NULL);
   
                   size = EVBUFFER_LENGTH(evb);
                   if (size != 0) {
                           line = EVBUFFER_DATA(evb);
                           window_copy_add(wp, 1, "%.*s", (int)size, line);
                 }                  }
           } else
                 window_copy_add(wp, 0, "%s", msg);                  window_copy_add(wp, 0, "%s", msg);
         }  
   
         free(msg);  out:
           if (!parse)
                   free(msg);
   
   }
   
   /* Show message from command. */
   void
   cmdq_print(struct cmdq_item *item, const char *fmt, ...)
   {
           va_list          ap;
           struct evbuffer *evb;
   
           evb = evbuffer_new();
           if (evb == NULL)
                   fatalx("out of memory");
   
           va_start(ap, fmt);
           evbuffer_add_vprintf(evb, fmt, ap);
           va_end(ap);
   
           cmdq_print_data(item, 0, evb);
           evbuffer_free(evb);
 }  }
   
 /* Show error from command. */  /* Show error from command. */

Legend:
Removed from v.1.110  
changed lines
  Added in v.1.111