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

Diff for /src/usr.bin/tmux/cmd-new-window.c between version 1.76 and 1.77

version 1.76, 2018/07/15 06:57:13 version 1.77, 2019/04/17 14:37:48
Line 53 
Line 53 
 {  {
         struct args             *args = self->args;          struct args             *args = self->args;
         struct cmd_find_state   *current = &item->shared->current;          struct cmd_find_state   *current = &item->shared->current;
           struct spawn_context     sc;
           struct client           *c = cmd_find_client(item, NULL, 1);
         struct session          *s = item->target.s;          struct session          *s = item->target.s;
         struct winlink          *wl = item->target.wl;          struct winlink          *wl = item->target.wl;
         struct client           *c = cmd_find_client(item, NULL, 1);  
         int                      idx = item->target.idx;          int                      idx = item->target.idx;
         const char              *cmd, *path, *template, *tmp;          struct winlink          *new_wl;
         char                   **argv, *cause, *cp, *cwd, *name;          char                    *cause = NULL, *cp;
         int                      argc, detached;          const char              *template;
         struct environ_entry    *envent;  
         struct cmd_find_state    fs;          struct cmd_find_state    fs;
   
         if (args_has(args, 'a') && wl != NULL) {          if (args_has(args, 'a') && (idx = winlink_shuffle_up(s, wl)) == -1) {
                 if ((idx = winlink_shuffle_up(s, wl)) == -1) {                  cmdq_error(item, "couldn't get a window index");
                         cmdq_error(item, "no free window indexes");                  return (CMD_RETURN_ERROR);
                         return (CMD_RETURN_ERROR);  
                 }  
         }          }
         detached = args_has(args, 'd');  
   
         if (args->argc == 0) {          memset(&sc, 0, sizeof sc);
                 cmd = options_get_string(s->options, "default-command");          sc.item = item;
                 if (cmd != NULL && *cmd != '\0') {          sc.s = s;
                         argc = 1;  
                         argv = (char **)&cmd;  
                 } else {  
                         argc = 0;  
                         argv = NULL;  
                 }  
         } else {  
                 argc = args->argc;  
                 argv = args->argv;  
         }  
   
         path = NULL;          sc.name = args_get(args, 'n');
         if (item->client != NULL && item->client->session == NULL)          sc.argc = args->argc;
                 envent = environ_find(item->client->environ, "PATH");          sc.argv = args->argv;
         else  
                 envent = environ_find(s->environ, "PATH");  
         if (envent != NULL)  
                 path = envent->value;  
   
         if ((tmp = args_get(args, 'c')) != NULL)          sc.idx = idx;
                 cwd = format_single(item, tmp, c, s, NULL, NULL);          sc.cwd = args_get(args, 'c');
         else  
                 cwd = xstrdup(server_client_get_cwd(item->client, s));  
   
         if ((tmp = args_get(args, 'n')) != NULL)          sc.flags = 0;
                 name = format_single(item, tmp, c, s, NULL, NULL);          if (args_has(args, 'd'))
         else                  sc.flags |= SPAWN_DETACHED;
                 name = NULL;          if (args_has(args, 'k'))
                   sc.flags |= SPAWN_KILL;
   
         if (idx != -1)          if ((new_wl = spawn_window(&sc, &cause)) == NULL) {
                 wl = winlink_find_by_index(&s->windows, idx);  
         if (wl != NULL && args_has(args, 'k')) {  
                 /*  
                  * Can't use session_detach as it will destroy session if this  
                  * makes it empty.  
                  */  
                 notify_session_window("window-unlinked", s, wl->window);  
                 wl->flags &= ~WINLINK_ALERTFLAGS;  
                 winlink_stack_remove(&s->lastw, wl);  
                 winlink_remove(&s->windows, wl);  
   
                 /* Force select/redraw if current. */  
                 if (wl == s->curw) {  
                         detached = 0;  
                         s->curw = NULL;  
                 }  
         }  
   
         if (idx == -1)  
                 idx = -1 - options_get_number(s->options, "base-index");  
         wl = session_new(s, name, argc, argv, path, cwd, idx,  
                 &cause);  
         if (wl == NULL) {  
                 cmdq_error(item, "create window failed: %s", cause);                  cmdq_error(item, "create window failed: %s", cause);
                 free(cause);                  free(cause);
                 goto error;                  return (CMD_RETURN_ERROR);
         }          }
         if (!detached) {          if (!args_has(args, 'd') || new_wl == s->curw) {
                 session_select(s, wl->idx);                  cmd_find_from_winlink(current, new_wl, 0);
                 cmd_find_from_winlink(current, wl, 0);  
                 server_redraw_session_group(s);                  server_redraw_session_group(s);
         } else          } else
                 server_status_session_group(s);                  server_status_session_group(s);
Line 141 
Line 99 
         if (args_has(args, 'P')) {          if (args_has(args, 'P')) {
                 if ((template = args_get(args, 'F')) == NULL)                  if ((template = args_get(args, 'F')) == NULL)
                         template = NEW_WINDOW_TEMPLATE;                          template = NEW_WINDOW_TEMPLATE;
                 cp = format_single(item, template, c, s, wl, NULL);                  cp = format_single(item, template, c, s, new_wl, NULL);
                 cmdq_print(item, "%s", cp);                  cmdq_print(item, "%s", cp);
                 free(cp);                  free(cp);
         }          }
   
         cmd_find_from_winlink(&fs, wl, 0);          cmd_find_from_winlink(&fs, new_wl, 0);
         hooks_insert(s->hooks, item, &fs, "after-new-window");          hooks_insert(s->hooks, item, &fs, "after-new-window");
   
         free(name);  
         free(cwd);  
         return (CMD_RETURN_NORMAL);          return (CMD_RETURN_NORMAL);
   
 error:  
         free(name);  
         free(cwd);  
         return (CMD_RETURN_ERROR);  
 }  }

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.77