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

Diff for /src/usr.bin/tmux/window-copy.c between version 1.51 and 1.52

version 1.51, 2010/03/14 23:31:23 version 1.52, 2010/03/22 19:10:42
Line 1 
Line 1 
 /* $OpenBSD$ */  /* $Id$ */
   
 /*  /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>   * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
Line 65 
Line 65 
 void    window_copy_cursor_right(struct window_pane *);  void    window_copy_cursor_right(struct window_pane *);
 void    window_copy_cursor_up(struct window_pane *, int);  void    window_copy_cursor_up(struct window_pane *, int);
 void    window_copy_cursor_down(struct window_pane *, int);  void    window_copy_cursor_down(struct window_pane *, int);
   void    window_copy_cursor_jump(struct window_pane *);
   void    window_copy_cursor_jump_back(struct window_pane *);
 void    window_copy_cursor_next_word(struct window_pane *, const char *);  void    window_copy_cursor_next_word(struct window_pane *, const char *);
 void    window_copy_cursor_next_word_end(struct window_pane *, const char *);  void    window_copy_cursor_next_word_end(struct window_pane *, const char *);
 void    window_copy_cursor_previous_word(struct window_pane *, const char *);  void    window_copy_cursor_previous_word(struct window_pane *, const char *);
Line 86 
Line 88 
         WINDOW_COPY_NUMERICPREFIX,          WINDOW_COPY_NUMERICPREFIX,
         WINDOW_COPY_SEARCHUP,          WINDOW_COPY_SEARCHUP,
         WINDOW_COPY_SEARCHDOWN,          WINDOW_COPY_SEARCHDOWN,
           WINDOW_COPY_JUMPFORWARD,
           WINDOW_COPY_JUMPBACK,
         WINDOW_COPY_GOTOLINE,          WINDOW_COPY_GOTOLINE,
 };  };
   
Line 115 
Line 119 
   
         enum window_copy_input_type searchtype;          enum window_copy_input_type searchtype;
         char           *searchstr;          char           *searchstr;
   
           enum window_copy_input_type jumptype;
           char            jumpchar;
 };  };
   
 struct screen *  struct screen *
Line 147 
Line 154 
         wp->flags |= PANE_FREEZE;          wp->flags |= PANE_FREEZE;
         bufferevent_disable(wp->event, EV_READ|EV_WRITE);          bufferevent_disable(wp->event, EV_READ|EV_WRITE);
   
           data->jumptype = WINDOW_COPY_OFF;
           data->jumpchar = '\0';
   
         s = &data->screen;          s = &data->screen;
         screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);          screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
         if (options_get_number(&wp->window->options, "mode-mouse"))          if (options_get_number(&wp->window->options, "mode-mouse"))
Line 242 
Line 252 
         if (np == 0)          if (np == 0)
                 np = 1;                  np = 1;
   
         if (data->inputtype == WINDOW_COPY_NUMERICPREFIX) {          if (data->inputtype == WINDOW_COPY_JUMPFORWARD
               || data->inputtype == WINDOW_COPY_JUMPBACK) {
                   /* Ignore keys with modifiers. */
                   if ((key & 0xff00) == 0) {
                           data->jumpchar = key;
                           if (data->inputtype == WINDOW_COPY_JUMPFORWARD) {
                                   for (; np != 0; np--)
                                           window_copy_cursor_jump(wp);
                           }  else {
                                   for (; np != 0; np--)
                                           window_copy_cursor_jump_back(wp);
                           }
                   }
                   data->jumptype = data->inputtype;
                   data->inputtype = WINDOW_COPY_OFF;
                   window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1);
                   return;
           } if (data->inputtype == WINDOW_COPY_NUMERICPREFIX) {
                 if (window_copy_key_numeric_prefix(wp, key) == 0)                  if (window_copy_key_numeric_prefix(wp, key) == 0)
                         return;                          return;
                 data->inputtype = WINDOW_COPY_OFF;                  data->inputtype = WINDOW_COPY_OFF;
Line 407 
Line 434 
                 for (; np != 0; np--)                  for (; np != 0; np--)
                         window_copy_cursor_previous_word(wp, word_separators);                          window_copy_cursor_previous_word(wp, word_separators);
                 break;                  break;
           case MODEKEYCOPY_JUMP:
                   data->inputtype = WINDOW_COPY_JUMPFORWARD;
                   data->inputprompt = "Jump Forward";
                   *data->inputstr = '\0';
                   window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1);
                   return; /* skip numprefix reset */
           case MODEKEYCOPY_JUMPAGAIN:
                   if (data->jumptype == WINDOW_COPY_JUMPFORWARD) {
                           for (; np != 0; np--)
                                   window_copy_cursor_jump(wp);
                   } else if (data->jumptype == WINDOW_COPY_JUMPBACK) {
                           for (; np != 0; np--)
                                   window_copy_cursor_jump_back(wp);
                   }
                   break;
           case MODEKEYCOPY_JUMPREVERSE:
                   if (data->jumptype == WINDOW_COPY_JUMPFORWARD) {
                           for (; np != 0; np--)
                                   window_copy_cursor_jump_back(wp);
                   } else if (data->jumptype == WINDOW_COPY_JUMPBACK) {
                           for (; np != 0; np--)
                                   window_copy_cursor_jump(wp);
                   }
                   break;
           case MODEKEYCOPY_JUMPBACK:
                   data->inputtype = WINDOW_COPY_JUMPBACK;
                   data->inputprompt = "Jump Back";
                   *data->inputstr = '\0';
                   window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1);
                   return; /* skip numprefix reset */
         case MODEKEYCOPY_SEARCHUP:          case MODEKEYCOPY_SEARCHUP:
                 data->inputtype = WINDOW_COPY_SEARCHUP;                  data->inputtype = WINDOW_COPY_SEARCHUP;
                 data->inputprompt = "Search Up";                  data->inputprompt = "Search Up";
Line 420 
Line 477 
                 switch (data->searchtype) {                  switch (data->searchtype) {
                 case WINDOW_COPY_OFF:                  case WINDOW_COPY_OFF:
                 case WINDOW_COPY_GOTOLINE:                  case WINDOW_COPY_GOTOLINE:
                   case WINDOW_COPY_JUMPFORWARD:
                   case WINDOW_COPY_JUMPBACK:
                 case WINDOW_COPY_NUMERICPREFIX:                  case WINDOW_COPY_NUMERICPREFIX:
                         break;                          break;
                 case WINDOW_COPY_SEARCHUP:                  case WINDOW_COPY_SEARCHUP:
Line 524 
Line 583 
   
                 switch (data->inputtype) {                  switch (data->inputtype) {
                 case WINDOW_COPY_OFF:                  case WINDOW_COPY_OFF:
                   case WINDOW_COPY_JUMPFORWARD:
                   case WINDOW_COPY_JUMPBACK:
                 case WINDOW_COPY_NUMERICPREFIX:                  case WINDOW_COPY_NUMERICPREFIX:
                         break;                          break;
                 case WINDOW_COPY_SEARCHUP:                  case WINDOW_COPY_SEARCHUP:
Line 1377 
Line 1438 
                 if ((data->cx >= data->lastsx && data->cx != px) ||                  if ((data->cx >= data->lastsx && data->cx != px) ||
                     data->cx > px)                      data->cx > px)
                         window_copy_cursor_end_of_line(wp);                          window_copy_cursor_end_of_line(wp);
           }
   }
   
   void
   window_copy_cursor_jump(struct window_pane *wp)
   {
           struct window_copy_mode_data    *data = wp->modedata;
           struct screen                   *base_s = &wp->base;
           const struct grid_cell          *gc;
           uint                             px, py, xx;
   
           px = data->cx + 1;
           py = screen_hsize(base_s) + data->cy - data->oy;
           xx = window_copy_find_length(wp, py);
   
           while (px < xx) {
                   gc = grid_peek_cell(base_s->grid, px, py);
                   if ((gc->flags & (GRID_FLAG_PADDING|GRID_FLAG_UTF8)) == 0
                       && gc->data == data->jumpchar) {
   
                           window_copy_update_cursor(wp, px, data->cy);
                           if (window_copy_update_selection(wp))
                                   window_copy_redraw_lines(wp, data->cy, 1);
                           return;
                   }
                   px++;
           }
   }
   
   void
   window_copy_cursor_jump_back(struct window_pane *wp)
   {
           struct window_copy_mode_data    *data = wp->modedata;
           struct screen                   *base_s = &wp->base;
           const struct grid_cell          *gc;
           uint                             px, py;
   
           px = data->cx;
           py = screen_hsize(base_s) + data->cy - data->oy;
   
           if (px > 0)
                   px--;
   
           for (;;) {
                   gc = grid_peek_cell(base_s->grid, px, py);
                   if ((gc->flags & (GRID_FLAG_PADDING|GRID_FLAG_UTF8)) == 0
                       && gc->data == data->jumpchar) {
   
                           window_copy_update_cursor(wp, px, data->cy);
                           if (window_copy_update_selection(wp))
                                   window_copy_redraw_lines(wp, data->cy, 1);
                           return;
                   }
                   if (px == 0)
                           break;
                   px--;
         }          }
 }  }
   

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.52