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

Diff for /src/usr.bin/tmux/status.c between version 1.64 and 1.65

version 1.64, 2010/12/06 22:51:02 version 1.65, 2010/12/11 16:05:57
Line 41 
Line 41 
             struct winlink *, char **, char **, char *, size_t, int);              struct winlink *, char **, char **, char *, size_t, int);
 void    status_message_callback(int, short, void *);  void    status_message_callback(int, short, void *);
   
 void    status_prompt_add_history(struct client *);  const char *status_prompt_up_history(u_int *);
   const char *status_prompt_down_history(u_int *);
   void    status_prompt_add_history(const char *);
 char   *status_prompt_complete(const char *);  char   *status_prompt_complete(const char *);
   
   /* Status prompt history. */
   ARRAY_DECL(, char *) status_prompt_history = ARRAY_INITIALIZER;
   
 /* Retrieve options for left string. */  /* Retrieve options for left string. */
 char *  char *
 status_redraw_get_left(struct client *c,  status_redraw_get_left(struct client *c,
Line 972 
Line 977 
                 }                  }
                 break;                  break;
         case MODEKEYEDIT_HISTORYUP:          case MODEKEYEDIT_HISTORYUP:
                 if (ARRAY_LENGTH(&c->prompt_hdata) == 0)                  s = status_prompt_up_history(&c->prompt_hindex);
                   if (s == NULL)
                         break;                          break;
                 xfree(c->prompt_buffer);                  xfree(c->prompt_buffer);
                   c->prompt_buffer = xstrdup(s);
                 c->prompt_buffer = xstrdup(ARRAY_ITEM(&c->prompt_hdata,  
                     ARRAY_LENGTH(&c->prompt_hdata) - 1 - c->prompt_hindex));  
                 if (c->prompt_hindex != ARRAY_LENGTH(&c->prompt_hdata) - 1)  
                         c->prompt_hindex++;  
   
                 c->prompt_index = strlen(c->prompt_buffer);                  c->prompt_index = strlen(c->prompt_buffer);
                 c->flags |= CLIENT_STATUS;                  c->flags |= CLIENT_STATUS;
                 break;                  break;
         case MODEKEYEDIT_HISTORYDOWN:          case MODEKEYEDIT_HISTORYDOWN:
                   s = status_prompt_down_history(&c->prompt_hindex);
                   if (s == NULL)
                           break;
                 xfree(c->prompt_buffer);                  xfree(c->prompt_buffer);
                   c->prompt_buffer = xstrdup(s);
                 if (c->prompt_hindex != 0) {  
                         c->prompt_hindex--;  
                         c->prompt_buffer = xstrdup(ARRAY_ITEM(  
                             &c->prompt_hdata, ARRAY_LENGTH(  
                             &c->prompt_hdata) - 1 - c->prompt_hindex));  
                 } else  
                         c->prompt_buffer = xstrdup("");  
   
                 c->prompt_index = strlen(c->prompt_buffer);                  c->prompt_index = strlen(c->prompt_buffer);
                 c->flags |= CLIENT_STATUS;                  c->flags |= CLIENT_STATUS;
                 break;                  break;
Line 1036 
Line 1032 
                 break;                  break;
         case MODEKEYEDIT_ENTER:          case MODEKEYEDIT_ENTER:
                 if (*c->prompt_buffer != '\0')                  if (*c->prompt_buffer != '\0')
                         status_prompt_add_history(c);                          status_prompt_add_history(c->prompt_buffer);
                 if (c->prompt_callbackfn(c->prompt_data, c->prompt_buffer) == 0)                  if (c->prompt_callbackfn(c->prompt_data, c->prompt_buffer) == 0)
                         status_prompt_clear(c);                          status_prompt_clear(c);
                 break;                  break;
Line 1072 
Line 1068 
         }          }
 }  }
   
   /* Get previous line from the history. */
   const char *
   status_prompt_up_history(u_int *idx)
   {
           u_int size;
   
           /*
            * History runs from 0 to size - 1.
            *
            * Index is from 0 to size. Zero is empty.
            */
   
           size = ARRAY_LENGTH(&status_prompt_history);
           if (size == 0 || *idx == size)
                   return (NULL);
           (*idx)++;
           return (ARRAY_ITEM(&status_prompt_history, size - *idx));
   }
   
   /* Get next line from the history. */
   const char *
   status_prompt_down_history(u_int *idx)
   {
           u_int size;
   
           size = ARRAY_LENGTH(&status_prompt_history);
           if (size == 0 || *idx == 0)
                   return ("");
           (*idx)--;
           if (*idx == 0)
                   return ("");
           return (ARRAY_ITEM(&status_prompt_history, size - *idx));
   }
   
 /* Add line to the history. */  /* Add line to the history. */
 void  void
 status_prompt_add_history(struct client *c)  status_prompt_add_history(const char *line)
 {  {
         if (ARRAY_LENGTH(&c->prompt_hdata) > 0 &&          u_int size;
             strcmp(ARRAY_LAST(&c->prompt_hdata), c->prompt_buffer) == 0)  
           size = ARRAY_LENGTH(&status_prompt_history);
           if (size > 0 && strcmp(ARRAY_LAST(&status_prompt_history), line) == 0)
                 return;                  return;
   
         if (ARRAY_LENGTH(&c->prompt_hdata) == PROMPT_HISTORY) {          if (size == PROMPT_HISTORY) {
                 xfree(ARRAY_FIRST(&c->prompt_hdata));                  xfree(ARRAY_FIRST(&status_prompt_history));
                 ARRAY_REMOVE(&c->prompt_hdata, 0);                  ARRAY_REMOVE(&status_prompt_history, 0);
         }          }
   
         ARRAY_ADD(&c->prompt_hdata, xstrdup(c->prompt_buffer));          ARRAY_ADD(&status_prompt_history, xstrdup(line));
 }  }
   
 /* Complete word. */  /* Complete word. */

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.65