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

Diff for /src/usr.bin/tmux/cmd.c between version 1.120 and 1.121

version 1.120, 2016/01/19 15:59:12 version 1.121, 2016/01/19 16:01:30
Line 389 
Line 389 
 }  }
   
 static int  static int
 cmd_prepare_state_flag(struct cmd_find_state *fs, enum cmd_entry_flag flag,  cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag,
     const char *target, struct cmd_q *cmdq)      struct cmd_q *cmdq, struct cmd_q *parent)
 {  {
         int     targetflags, error;          int                      targetflags, error;
           struct cmd_find_state   *fs = NULL;
           struct cmd_find_state   *current = NULL;
           struct cmd_find_state    tmp;
   
           if (flag == CMD_NONE ||
               flag == CMD_CLIENT ||
               flag == CMD_CLIENT_CANFAIL)
                   return (0);
   
           if (c == 't')
                   fs = &cmdq->state.tflag;
           else if (c == 's')
                   fs = &cmdq->state.sflag;
   
         if (flag == CMD_SESSION_WITHPANE) {          if (flag == CMD_SESSION_WITHPANE) {
                 if (target != NULL && target[strcspn(target, ":.")] != '\0')                  if (target != NULL && target[strcspn(target, ":.")] != '\0')
                         flag = CMD_PANE;                          flag = CMD_PANE;
Line 401 
Line 414 
                         flag = CMD_SESSION;                          flag = CMD_SESSION;
         }          }
   
           targetflags = 0;
         switch (flag) {          switch (flag) {
         case CMD_NONE:  
         case CMD_CLIENT:  
         case CMD_CLIENT_CANFAIL:  
                 return (0);  
         case CMD_SESSION:          case CMD_SESSION:
         case CMD_SESSION_CANFAIL:          case CMD_SESSION_CANFAIL:
         case CMD_SESSION_PREFERUNATTACHED:          case CMD_SESSION_PREFERUNATTACHED:
         case CMD_SESSION_WITHPANE:  
                 targetflags = 0;  
                 if (flag == CMD_SESSION_CANFAIL)                  if (flag == CMD_SESSION_CANFAIL)
                         targetflags |= CMD_FIND_QUIET;                          targetflags |= CMD_FIND_QUIET;
                 if (flag == CMD_SESSION_PREFERUNATTACHED)                  if (flag == CMD_SESSION_PREFERUNATTACHED)
                         targetflags |= CMD_FIND_PREFER_UNATTACHED;                          targetflags |= CMD_FIND_PREFER_UNATTACHED;
   
                 error = cmd_find_target(fs, cmdq, target, CMD_FIND_SESSION,  
                     targetflags);  
                 if (error != 0 && flag != CMD_SESSION_CANFAIL)  
                         return (-1);  
                 break;                  break;
         case CMD_MOVEW_R:          case CMD_MOVEW_R:
                 error = cmd_find_target(fs, cmdq, target, CMD_FIND_SESSION,  
                     CMD_FIND_QUIET);  
                 if (error == 0)  
                         break;  
                 flag = CMD_WINDOW_INDEX;                  flag = CMD_WINDOW_INDEX;
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case CMD_WINDOW:          case CMD_WINDOW:
         case CMD_WINDOW_CANFAIL:          case CMD_WINDOW_CANFAIL:
         case CMD_WINDOW_MARKED:          case CMD_WINDOW_MARKED:
         case CMD_WINDOW_INDEX:          case CMD_WINDOW_INDEX:
                 targetflags = 0;  
                 if (flag == CMD_WINDOW_CANFAIL)                  if (flag == CMD_WINDOW_CANFAIL)
                         targetflags |= CMD_FIND_QUIET;                          targetflags |= CMD_FIND_QUIET;
                 if (flag == CMD_WINDOW_MARKED)                  if (flag == CMD_WINDOW_MARKED)
                         targetflags |= CMD_FIND_DEFAULT_MARKED;                          targetflags |= CMD_FIND_DEFAULT_MARKED;
                 if (flag == CMD_WINDOW_INDEX)                  if (flag == CMD_WINDOW_INDEX)
                         targetflags |= CMD_FIND_WINDOW_INDEX;                          targetflags |= CMD_FIND_WINDOW_INDEX;
   
                 error = cmd_find_target(fs, cmdq, target, CMD_FIND_WINDOW,  
                     targetflags);  
                 if (error != 0 && flag != CMD_WINDOW_CANFAIL)  
                         return (-1);  
                 break;                  break;
         case CMD_PANE:          case CMD_PANE:
         case CMD_PANE_CANFAIL:          case CMD_PANE_CANFAIL:
         case CMD_PANE_MARKED:          case CMD_PANE_MARKED:
                 targetflags = 0;  
                 if (flag == CMD_PANE_CANFAIL)                  if (flag == CMD_PANE_CANFAIL)
                         targetflags |= CMD_FIND_QUIET;                          targetflags |= CMD_FIND_QUIET;
                 if (flag == CMD_PANE_MARKED)                  if (flag == CMD_PANE_MARKED)
                         targetflags |= CMD_FIND_DEFAULT_MARKED;                          targetflags |= CMD_FIND_DEFAULT_MARKED;
                   break;
           default:
                   fatalx("unknown %cflag %d", c, flag);
           }
   
                 error = cmd_find_target(fs, cmdq, target, CMD_FIND_PANE,          log_debug("%s: flag %c %d %#x", __func__, c, flag, targetflags);
                     targetflags);          if (parent != NULL) {
                 if (error != 0 && flag != CMD_PANE_CANFAIL)                  if (c == 't')
                           current = &parent->state.tflag;
                   else if (c == 's')
                           current = &parent->state.sflag;
           } else {
                   error = cmd_find_current(&tmp, cmdq, targetflags);
                   if (error != 0 && ~targetflags & CMD_FIND_QUIET)
                         return (-1);                          return (-1);
                   current = &tmp;
           }
   
           switch (flag) {
           case CMD_NONE:
           case CMD_CLIENT:
           case CMD_CLIENT_CANFAIL:
                   return (0);
           case CMD_SESSION:
           case CMD_SESSION_CANFAIL:
           case CMD_SESSION_PREFERUNATTACHED:
           case CMD_SESSION_WITHPANE:
                   error = cmd_find_target(fs, current, cmdq, target,
                       CMD_FIND_SESSION, targetflags);
                   if (error != 0 && ~targetflags & CMD_FIND_QUIET)
                           return (-1);
                 break;                  break;
           case CMD_MOVEW_R:
                   error = cmd_find_target(fs, current, cmdq, target,
                       CMD_FIND_SESSION, CMD_FIND_QUIET);
                   if (error == 0)
                           break;
                   flag = CMD_WINDOW_INDEX;
                   /* FALLTHROUGH */
           case CMD_WINDOW:
           case CMD_WINDOW_CANFAIL:
           case CMD_WINDOW_MARKED:
           case CMD_WINDOW_INDEX:
                   error = cmd_find_target(fs, current, cmdq, target,
                       CMD_FIND_WINDOW, targetflags);
                   if (error != 0 && ~targetflags & CMD_FIND_QUIET)
                           return (-1);
                   break;
           case CMD_PANE:
           case CMD_PANE_CANFAIL:
           case CMD_PANE_MARKED:
                   error = cmd_find_target(fs, current, cmdq, target,
                       CMD_FIND_PANE, targetflags);
                   if (error != 0 && ~targetflags & CMD_FIND_QUIET)
                           return (-1);
                   break;
           default:
                   fatalx("unknown %cflag %d", c, flag);
         }          }
         return (0);          return (0);
 }  }
   
 int  int
 cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)  cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq, struct cmd_q *parent)
 {  {
         const struct cmd_entry          *entry = cmd->entry;          const struct cmd_entry          *entry = cmd->entry;
         struct cmd_state                *state = &cmdq->state;          struct cmd_state                *state = &cmdq->state;
Line 504 
Line 548 
         s = args_get(cmd->args, 't');          s = args_get(cmd->args, 't');
         log_debug("preparing -t state: target %s", s == NULL ? "none" : s);          log_debug("preparing -t state: target %s", s == NULL ? "none" : s);
   
         error = cmd_prepare_state_flag(&state->tflag, entry->tflag, s, cmdq);          error = cmd_prepare_state_flag('t', s, entry->tflag, cmdq, parent);
         if (error != 0)          if (error != 0)
                 return (error);                  return (error);
   
         s = args_get(cmd->args, 's');          s = args_get(cmd->args, 's');
         log_debug("preparing -s state: target %s", s == NULL ? "none" : s);          log_debug("preparing -s state: target %s", s == NULL ? "none" : s);
   
         error = cmd_prepare_state_flag(&state->sflag, entry->sflag, s, cmdq);          error = cmd_prepare_state_flag('s', s, entry->sflag, cmdq, parent);
         if (error != 0)          if (error != 0)
                 return (error);                  return (error);
   

Legend:
Removed from v.1.120  
changed lines
  Added in v.1.121