[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.10 and 1.11

version 1.10, 2009/07/26 12:58:44 version 1.11, 2009/07/29 17:03:16
Line 103 
Line 103 
         NULL          NULL
 };  };
   
 struct session  *cmd_newest_session(void);  struct session  *cmd_newest_session(struct sessions *);
 struct client   *cmd_lookup_client(const char *);  struct client   *cmd_lookup_client(const char *);
 struct session  *cmd_lookup_session(const char *, int *);  struct session  *cmd_lookup_session(const char *, int *);
 struct winlink  *cmd_lookup_window(struct session *, const char *, int *);  struct winlink  *cmd_lookup_window(struct session *, const char *, int *);
Line 281 
Line 281 
   
 /*  /*
  * Figure out the current session. Use: 1) the current session, if the command   * Figure out the current session. Use: 1) the current session, if the command
  * context has one; 2) the session specified in the TMUX variable from the   * context has one; 2) the session containing the pty of the calling client, if
  * environment (as passed from the client); 3) the newest session.   * any 3) the session specified in the TMUX variable from the environment (as
    * passed from the client); 3) the newest session.
  */   */
 struct session *  struct session *
 cmd_current_session(struct cmd_ctx *ctx)  cmd_current_session(struct cmd_ctx *ctx)
 {  {
         struct msg_command_data *data = ctx->msgdata;          struct msg_command_data *data = ctx->msgdata;
           struct client           *c = ctx->cmdclient;
         struct session          *s;          struct session          *s;
           struct sessions          ss;
           struct winlink          *wl;
           struct window_pane      *wp;
           u_int                    i;
           int                      found;
   
         if (ctx->cursession != NULL)          if (ctx->cursession != NULL)
                 return (ctx->cursession);                  return (ctx->cursession);
   
           /*
            * If the name of the calling client's pty is know, build a list of the
            * sessions that contain it and if any choose either the first or the
            * newest.
            */
           if (c != NULL && c->tty.path != NULL) {
                   ARRAY_INIT(&ss);
                   for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
                           if ((s = ARRAY_ITEM(&sessions, i)) == NULL)
                                   continue;
                           found = 0;
                           RB_FOREACH(wl, winlinks, &s->windows) {
                                   TAILQ_FOREACH(wp, &wl->window->panes, entry) {
                                           if (strcmp(wp->tty, c->tty.path) == 0) {
                                                   found = 1;
                                                   break;
                                           }
                                   }
                                   if (found)
                                           break;
                           }
                           if (found)
                                   ARRAY_ADD(&ss, s);
                   }
   
                   s = cmd_newest_session(&ss);
                   ARRAY_FREE(&ss);
                   if (s != NULL)
                           return (s);
           }
   
           /* Use the session from the TMUX environment variable. */
         if (data != NULL && data->pid != -1) {          if (data != NULL && data->pid != -1) {
                 if (data->pid != getpid())                  if (data->pid != getpid())
                         return (NULL);                          return (NULL);
Line 303 
Line 342 
                 return (s);                  return (s);
         }          }
   
         return (cmd_newest_session());          return (cmd_newest_session(&sessions));
 }  }
   
 /* Find the newest session. */  /* Find the newest session. */
 struct session *  struct session *
 cmd_newest_session(void)  cmd_newest_session(struct sessions *ss)
 {  {
         struct session  *s, *snewest;          struct session  *s, *snewest;
         struct timeval  *tv = NULL;          struct timeval  *tv = NULL;
         u_int            i;          u_int            i;
   
         snewest = NULL;          snewest = NULL;
         for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {          for (i = 0; i < ARRAY_LENGTH(ss); i++) {
                 if ((s = ARRAY_ITEM(&sessions, i)) == NULL)                  if ((s = ARRAY_ITEM(ss, i)) == NULL)
                         continue;                          continue;
   
                 if (tv == NULL || timercmp(&s->tv, tv, >)) {                  if (tv == NULL || timercmp(&s->tv, tv, >)) {

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11