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

Diff for /src/usr.bin/tmux/names.c between version 1.8 and 1.9

version 1.8, 2009/10/10 15:23:13 version 1.9, 2009/11/04 23:54:57
Line 25 
Line 25 
   
 #include "tmux.h"  #include "tmux.h"
   
   void     window_name_callback(unused int, unused short, void *);
 char    *parse_window_name(const char *);  char    *parse_window_name(const char *);
   
 void  void
 set_window_names(void)  queue_window_name(struct window *w)
 {  {
         struct window   *w;          struct timeval  tv;
         u_int            i;  
         char            *name, *wname;  
         struct timeval   tv, tv2;  
   
         if (gettimeofday(&tv, NULL) != 0)          tv.tv_sec = 0;
                 fatal("gettimeofday failed");          tv.tv_usec = NAME_INTERVAL * 1000L;
   
         for (i = 0; i < ARRAY_LENGTH(&windows); i++) {          evtimer_del(&w->name_timer);
                 w = ARRAY_ITEM(&windows, i);          evtimer_set(&w->name_timer, window_name_callback, w);
                 if (w == NULL || w->active == NULL)          evtimer_add(&w->name_timer, &tv);
                         continue;  }
   
                 if (timercmp(&tv, &w->name_timer, <))  void
                         continue;  window_name_callback(unused int fd, unused short events, void *data)
                 memcpy(&w->name_timer, &tv, sizeof w->name_timer);  {
                 tv2.tv_sec = 0;          struct window   *w = data;
                 tv2.tv_usec = NAME_INTERVAL * 1000L;          char            *name, *wname;
                 timeradd(&w->name_timer, &tv2, &w->name_timer);  
   
                 if (!options_get_number(&w->options, "automatic-rename"))          queue_window_name(w);   /* XXX even if the option is off? */
                         continue;          if (!options_get_number(&w->options, "automatic-rename"))
                   return;
   
                 if (w->active->screen != &w->active->base)          if (w->active->screen != &w->active->base)
                         name = NULL;                  name = NULL;
           else
                   name = get_proc_name(w->active->fd, w->active->tty);
           if (name == NULL)
                   wname = default_window_name(w);
           else {
                   /*
                    * If tmux is using the default command, it will be a login
                    * shell and argv[0] may have a - prefix. Remove this if it is
                    * present. Ick.
                    */
                   if (w->active->cmd != NULL && *w->active->cmd == '\0' &&
                       name != NULL && name[0] == '-' && name[1] != '\0')
                           wname = parse_window_name(name + 1);
                 else                  else
                         name = get_proc_name(w->active->fd, w->active->tty);  
                 if (name == NULL)  
                         wname = default_window_name(w);  
                 else {  
                         /*  
                          * If tmux is using the default command, it will be a  
                          * login shell and argv[0] may have a - prefix. Remove  
                          * this if it is present. Ick.  
                          */  
                         if (w->active->cmd != NULL && *w->active->cmd == '\0' &&  
                             name != NULL && name[0] == '-' && name[1] != '\0')  
                                 wname = parse_window_name(name + 1);  
                         else  
                                 wname = parse_window_name(name);                                  wname = parse_window_name(name);
                         xfree(name);                  xfree(name);
                 }          }
   
                 if (w->active->fd == -1) {          if (w->active->fd == -1) {
                         xasprintf(&name, "%s[dead]", wname);                  xasprintf(&name, "%s[dead]", wname);
                         xfree(wname);                  xfree(wname);
                         wname = name;                  wname = name;
                 }          }
   
                 if (strcmp(wname, w->name) == 0)          if (strcmp(wname, w->name) == 0)
                         xfree(wname);                  xfree(wname);
                 else {          else {
                         xfree(w->name);                  xfree(w->name);
                         w->name = wname;                  w->name = wname;
                         server_status_window(w);                  server_status_window(w);
                 }  
         }          }
 }  }
   

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9