[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.251 and 1.252

version 1.251, 2020/03/16 14:17:56 version 1.252, 2020/03/19 13:28:52
Line 87 
Line 87 
 static void     window_copy_start_selection(struct window_mode_entry *);  static void     window_copy_start_selection(struct window_mode_entry *);
 static int      window_copy_adjust_selection(struct window_mode_entry *,  static int      window_copy_adjust_selection(struct window_mode_entry *,
                     u_int *, u_int *);                      u_int *, u_int *);
 static int      window_copy_set_selection(struct window_mode_entry *, int);  static int      window_copy_set_selection(struct window_mode_entry *, int, int);
 static int      window_copy_update_selection(struct window_mode_entry *, int);  static int      window_copy_update_selection(struct window_mode_entry *, int,
 static void     window_copy_synchronize_cursor(struct window_mode_entry *);                      int);
   static void     window_copy_synchronize_cursor(struct window_mode_entry *, int);
 static void    *window_copy_get_selection(struct window_mode_entry *, size_t *);  static void    *window_copy_get_selection(struct window_mode_entry *, size_t *);
 static void     window_copy_copy_buffer(struct window_mode_entry *,  static void     window_copy_copy_buffer(struct window_mode_entry *,
                     const char *, void *, size_t);                      const char *, void *, size_t);
Line 505 
Line 506 
                         window_copy_cursor_end_of_line(wme);                          window_copy_cursor_end_of_line(wme);
         }          }
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
 }  }
   
Line 553 
Line 554 
   
         if (scroll_exit && data->oy == 0)          if (scroll_exit && data->oy == 0)
                 return (1);                  return (1);
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
         return (0);          return (0);
 }  }
Line 718 
Line 719 
         struct client                   *c = cs->c;          struct client                   *c = cs->c;
         struct mouse_event              *m = cs->m;          struct mouse_event              *m = cs->m;
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         struct options                  *oo = cs->s->options;  
   
         data->ws = options_get_string(oo, "word-separators");  
   
         if (m != NULL) {          if (m != NULL) {
                 window_copy_start_drag(c, m);                  window_copy_start_drag(c, m);
                 return (WINDOW_COPY_CMD_NOTHING);                  return (WINDOW_COPY_CMD_NOTHING);
         }          }
   
         data->lineflag = LINE_SEL_NONE;          data->lineflag = LINE_SEL_NONE;
           data->selflag = SEL_CHAR;
         window_copy_start_selection(wme);          window_copy_start_selection(wme);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
Line 753 
Line 752 
         data->cx = 0;          data->cx = 0;
         data->cy = screen_size_y(&data->screen) - 1;          data->cy = screen_size_y(&data->screen) - 1;
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
   
Line 810 
Line 809 
         struct session                  *s = cs->s;          struct session                  *s = cs->s;
         struct winlink                  *wl = cs->wl;          struct winlink                  *wl = cs->wl;
         struct window_pane              *wp = wme->wp;          struct window_pane              *wp = wme->wp;
           struct window_copy_mode_data    *data = wme->data;
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
         char                            *prefix = NULL;          char                            *prefix = NULL;
   
         if (cs->args->argc == 2)          if (cs->args->argc == 2)
                 prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp);                  prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp);
   
           data->selflag = SEL_CHAR;
         window_copy_cursor_start_of_line(wme);          window_copy_cursor_start_of_line(wme);
         window_copy_start_selection(wme);          window_copy_start_selection(wme);
         for (; np > 1; np--)          for (; np > 1; np--)
Line 995 
Line 996 
         data->cx = window_copy_find_length(wme, data->cy);          data->cx = window_copy_find_length(wme, data->cy);
         data->oy = 0;          data->oy = 0;
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
   
Line 1014 
Line 1015 
         data->cx = 0;          data->cx = 0;
         data->oy = screen_hsize(data->backing);          data->oy = screen_hsize(data->backing);
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
   
Line 1083 
Line 1084 
         data->cx = 0;          data->cx = 0;
         data->cy = (screen_size_y(&data->screen) - 1) / 2;          data->cy = (screen_size_y(&data->screen) - 1) / 2;
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
   
Line 1557 
Line 1558 
         struct window_mode_entry        *wme = cs->wme;          struct window_mode_entry        *wme = cs->wme;
         struct session                  *s = cs->s;          struct session                  *s = cs->s;
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         const char                      *ws;  
         u_int                            px, py;          u_int                            px, py;
   
         data->lineflag = LINE_SEL_LEFT_RIGHT;          data->lineflag = LINE_SEL_LEFT_RIGHT;
Line 1569 
Line 1569 
         px = data->cx;          px = data->cx;
         py = screen_hsize(data->backing) + data->cy - data->oy;          py = screen_hsize(data->backing) + data->cy - data->oy;
   
         ws = options_get_string(s->options, "word-separators");          data->ws = options_get_string(s->options, "word-separators");
         window_copy_cursor_previous_word(wme, ws, 0);          window_copy_cursor_previous_word(wme, data->ws, 0);
         data->selrx = data->cx;          data->selrx = data->cx;
         data->selry = screen_hsize(data->backing) + data->cy - data->oy;          data->selry = screen_hsize(data->backing) + data->cy - data->oy;
         window_copy_start_selection(wme);          window_copy_start_selection(wme);
   
         if (px >= window_copy_find_length(wme, py) ||          if (px >= window_copy_find_length(wme, py) ||
             !window_copy_in_set(wme, px + 1, py, ws))              !window_copy_in_set(wme, px + 1, py, data->ws))
                 window_copy_cursor_next_word_end(wme, ws);                  window_copy_cursor_next_word_end(wme, data->ws);
         else {          else {
                 window_copy_update_cursor(wme, px, data->cy);                  window_copy_update_cursor(wme, px, data->cy);
                 if (window_copy_update_selection(wme, 1))                  if (window_copy_update_selection(wme, 1, 0))
                         window_copy_redraw_lines(wme, data->cy, 1);                          window_copy_redraw_lines(wme, data->cy, 1);
         }          }
         data->endselrx = data->cx;          data->endselrx = data->cx;
Line 1607 
Line 1607 
         data->cx = 0;          data->cx = 0;
         data->cy = 0;          data->cy = 0;
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         return (WINDOW_COPY_CMD_REDRAW);          return (WINDOW_COPY_CMD_REDRAW);
 }  }
   
Line 2121 
Line 2121 
                 data->oy = gd->hsize - offset;                  data->oy = gd->hsize - offset;
         }          }
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
 }  }
   
Line 2759 
Line 2759 
                 lineno = screen_hsize(data->backing);                  lineno = screen_hsize(data->backing);
   
         data->oy = lineno;          data->oy = lineno;
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
 }  }
   
Line 2877 
Line 2877 
 }  }
   
 static void  static void
 window_copy_synchronize_cursor_end(struct window_mode_entry *wme, int begin)  window_copy_synchronize_cursor_end(struct window_mode_entry *wme, int begin,
       int no_reset)
 {  {
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         u_int                            xx, yy;          u_int                            xx, yy;
Line 2885 
Line 2886 
         yy = screen_hsize(data->backing) + data->cy - data->oy;          yy = screen_hsize(data->backing) + data->cy - data->oy;
         switch (data->selflag) {          switch (data->selflag) {
         case SEL_WORD:          case SEL_WORD:
                 begin = 0;  
                 xx = data->cx;                  xx = data->cx;
                 if (data->ws == NULL)                  if (no_reset)
                         break;                          break;
                   begin = 0;
                 if (data->dy > yy || (data->dy == yy && data->dx > xx)) {                  if (data->dy > yy || (data->dy == yy && data->dx > xx)) {
                         /* Right to left selection. */                          /* Right to left selection. */
                         window_copy_cursor_previous_word_pos(wme, data->ws, 0,                          window_copy_cursor_previous_word_pos(wme, data->ws, 0,
Line 2911 
Line 2912 
                 }                  }
                 break;                  break;
         case SEL_LINE:          case SEL_LINE:
                   if (no_reset) {
                           xx = data->cx;
                           break;
                   }
                 begin = 0;                  begin = 0;
                 if (data->dy > yy) {                  if (data->dy > yy) {
                         /* Right to left selection. */                          /* Right to left selection. */
Line 2943 
Line 2948 
 }  }
   
 static void  static void
 window_copy_synchronize_cursor(struct window_mode_entry *wme)  window_copy_synchronize_cursor(struct window_mode_entry *wme, int no_reset)
 {  {
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
   
         switch (data->cursordrag) {          switch (data->cursordrag) {
         case CURSORDRAG_ENDSEL:          case CURSORDRAG_ENDSEL:
                 window_copy_synchronize_cursor_end(wme, 0);                  window_copy_synchronize_cursor_end(wme, 0, no_reset);
                 break;                  break;
         case CURSORDRAG_SEL:          case CURSORDRAG_SEL:
                 window_copy_synchronize_cursor_end(wme, 1);                  window_copy_synchronize_cursor_end(wme, 1, no_reset);
                 break;                  break;
         case CURSORDRAG_NONE:          case CURSORDRAG_NONE:
                 break;                  break;
Line 2994 
Line 2999 
   
         data->cursordrag = CURSORDRAG_ENDSEL;          data->cursordrag = CURSORDRAG_ENDSEL;
   
         window_copy_set_selection(wme, 1);          window_copy_set_selection(wme, 1, 0);
 }  }
   
 static int  static int
Line 3031 
Line 3036 
 }  }
   
 static int  static int
 window_copy_update_selection(struct window_mode_entry *wme, int may_redraw)  window_copy_update_selection(struct window_mode_entry *wme, int may_redraw,
       int no_reset)
 {  {
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         struct screen                   *s = &data->screen;          struct screen                   *s = &data->screen;
   
         if (s->sel == NULL && data->lineflag == LINE_SEL_NONE)          if (s->sel == NULL && data->lineflag == LINE_SEL_NONE)
                 return (0);                  return (0);
         return (window_copy_set_selection(wme, may_redraw));          return (window_copy_set_selection(wme, may_redraw, no_reset));
 }  }
   
 static int  static int
 window_copy_set_selection(struct window_mode_entry *wme, int may_redraw)  window_copy_set_selection(struct window_mode_entry *wme, int may_redraw,
       int no_reset)
 {  {
         struct window_pane              *wp = wme->wp;          struct window_pane              *wp = wme->wp;
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
Line 3052 
Line 3059 
         u_int                            sx, sy, cy, endsx, endsy;          u_int                            sx, sy, cy, endsx, endsy;
         int                              startrelpos, endrelpos;          int                              startrelpos, endrelpos;
   
         window_copy_synchronize_cursor(wme);          window_copy_synchronize_cursor(wme, no_reset);
   
         /* Adjust the selection. */          /* Adjust the selection. */
         sx = data->selx;          sx = data->selx;
Line 3408 
Line 3415 
                 }                  }
         }          }
         window_copy_update_cursor(wme, 0, data->cy);          window_copy_update_cursor(wme, 0, data->cy);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 3431 
Line 3438 
         }          }
   
         window_copy_update_cursor(wme, px, data->cy);          window_copy_update_cursor(wme, px, data->cy);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 3464 
Line 3471 
         }          }
         window_copy_update_cursor(wme, px, data->cy);          window_copy_update_cursor(wme, px, data->cy);
   
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 3515 
Line 3522 
         } else          } else
                 data->cy = cy + sely - yy;                  data->cy = cy + sely - yy;
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 1);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
 }  }
   
Line 3539 
Line 3546 
                 window_copy_cursor_end_of_line(wme);                  window_copy_cursor_end_of_line(wme);
         } else if (cx > 0) {          } else if (cx > 0) {
                 window_copy_update_cursor(wme, cx - 1, data->cy);                  window_copy_update_cursor(wme, cx - 1, data->cy);
                 if (window_copy_update_selection(wme, 1))                  if (window_copy_update_selection(wme, 1, 0))
                         window_copy_redraw_lines(wme, data->cy, 1);                          window_copy_redraw_lines(wme, data->cy, 1);
         }          }
 }  }
Line 3571 
Line 3578 
                         cx++;                          cx++;
                 }                  }
                 window_copy_update_cursor(wme, cx, data->cy);                  window_copy_update_cursor(wme, cx, data->cy);
                 if (window_copy_update_selection(wme, 1))                  if (window_copy_update_selection(wme, 1, 0))
                         window_copy_redraw_lines(wme, data->cy, 1);                          window_copy_redraw_lines(wme, data->cy, 1);
         }          }
 }  }
Line 3604 
Line 3611 
                 }                  }
         } else {          } else {
                 window_copy_update_cursor(wme, data->lastcx, data->cy - 1);                  window_copy_update_cursor(wme, data->lastcx, data->cy - 1);
                 if (window_copy_update_selection(wme, 1)) {                  if (window_copy_update_selection(wme, 1, 0)) {
                         if (data->cy == screen_size_y(s) - 1)                          if (data->cy == screen_size_y(s) - 1)
                                 window_copy_redraw_lines(wme, data->cy, 1);                                  window_copy_redraw_lines(wme, data->cy, 1);
                         else                          else
Line 3650 
Line 3657 
                         window_copy_redraw_lines(wme, data->cy - 1, 2);                          window_copy_redraw_lines(wme, data->cy - 1, 2);
         } else {          } else {
                 window_copy_update_cursor(wme, data->lastcx, data->cy + 1);                  window_copy_update_cursor(wme, data->lastcx, data->cy + 1);
                 if (window_copy_update_selection(wme, 1))                  if (window_copy_update_selection(wme, 1, 0))
                         window_copy_redraw_lines(wme, data->cy - 1, 2);                          window_copy_redraw_lines(wme, data->cy - 1, 2);
         }          }
   
Line 3685 
Line 3692 
                 if (!(gc.flags & GRID_FLAG_PADDING) &&                  if (!(gc.flags & GRID_FLAG_PADDING) &&
                     gc.data.size == 1 && *gc.data.data == data->jumpchar) {                      gc.data.size == 1 && *gc.data.data == data->jumpchar) {
                         window_copy_update_cursor(wme, px, data->cy);                          window_copy_update_cursor(wme, px, data->cy);
                         if (window_copy_update_selection(wme, 1))                          if (window_copy_update_selection(wme, 1, 0))
                                 window_copy_redraw_lines(wme, data->cy, 1);                                  window_copy_redraw_lines(wme, data->cy, 1);
                         return;                          return;
                 }                  }
Line 3712 
Line 3719 
                 if (!(gc.flags & GRID_FLAG_PADDING) &&                  if (!(gc.flags & GRID_FLAG_PADDING) &&
                     gc.data.size == 1 && *gc.data.data == data->jumpchar) {                      gc.data.size == 1 && *gc.data.data == data->jumpchar) {
                         window_copy_update_cursor(wme, px, data->cy);                          window_copy_update_cursor(wme, px, data->cy);
                         if (window_copy_update_selection(wme, 1))                          if (window_copy_update_selection(wme, 1, 0))
                                 window_copy_redraw_lines(wme, data->cy, 1);                                  window_copy_redraw_lines(wme, data->cy, 1);
                         return;                          return;
                 }                  }
Line 3739 
Line 3746 
                 if (!(gc.flags & GRID_FLAG_PADDING) &&                  if (!(gc.flags & GRID_FLAG_PADDING) &&
                     gc.data.size == 1 && *gc.data.data == data->jumpchar) {                      gc.data.size == 1 && *gc.data.data == data->jumpchar) {
                         window_copy_update_cursor(wme, px - 1, data->cy);                          window_copy_update_cursor(wme, px - 1, data->cy);
                         if (window_copy_update_selection(wme, 1))                          if (window_copy_update_selection(wme, 1, 0))
                                 window_copy_redraw_lines(wme, data->cy, 1);                                  window_copy_redraw_lines(wme, data->cy, 1);
                         return;                          return;
                 }                  }
Line 3769 
Line 3776 
                 if (!(gc.flags & GRID_FLAG_PADDING) &&                  if (!(gc.flags & GRID_FLAG_PADDING) &&
                     gc.data.size == 1 && *gc.data.data == data->jumpchar) {                      gc.data.size == 1 && *gc.data.data == data->jumpchar) {
                         window_copy_update_cursor(wme, px + 1, data->cy);                          window_copy_update_cursor(wme, px + 1, data->cy);
                         if (window_copy_update_selection(wme, 1))                          if (window_copy_update_selection(wme, 1, 0))
                                 window_copy_redraw_lines(wme, data->cy, 1);                                  window_copy_redraw_lines(wme, data->cy, 1);
                         return;                          return;
                 }                  }
Line 3818 
Line 3825 
         } while (expected == 1);          } while (expected == 1);
   
         window_copy_update_cursor(wme, px, data->cy);          window_copy_update_cursor(wme, px, data->cy);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 3919 
Line 3926 
                 px--;                  px--;
   
         window_copy_update_cursor(wme, px, data->cy);          window_copy_update_cursor(wme, px, data->cy);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 4016 
Line 4023 
   
 out:  out:
         window_copy_update_cursor(wme, px, data->cy);          window_copy_update_cursor(wme, px, data->cy);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_lines(wme, data->cy, 1);                  window_copy_redraw_lines(wme, data->cy, 1);
 }  }
   
Line 4034 
Line 4041 
                 return;                  return;
         data->oy -= ny;          data->oy -= ny;
   
         window_copy_update_selection(wme, 0);          window_copy_update_selection(wme, 0, 0);
   
         screen_write_start(&ctx, wp, NULL);          screen_write_start(&ctx, wp, NULL);
         screen_write_cursormove(&ctx, 0, 0, 0);          screen_write_cursormove(&ctx, 0, 0, 0);
Line 4068 
Line 4075 
                 return;                  return;
         data->oy += ny;          data->oy += ny;
   
         window_copy_update_selection(wme, 0);          window_copy_update_selection(wme, 0, 0);
   
         screen_write_start(&ctx, wp, NULL);          screen_write_start(&ctx, wp, NULL);
         screen_write_cursormove(&ctx, 0, 0, 0);          screen_write_cursormove(&ctx, 0, 0, 0);
Line 4095 
Line 4102 
         if (data->cx > px)          if (data->cx > px)
                 window_copy_update_cursor(wme, px, data->cy);                  window_copy_update_cursor(wme, px, data->cy);
   
         window_copy_update_selection(wme, 1);          window_copy_update_selection(wme, 1, 0);
         window_copy_redraw_screen(wme);          window_copy_redraw_screen(wme);
 }  }
   
Line 4206 
Line 4213 
         old_cy = data->cy;          old_cy = data->cy;
   
         window_copy_update_cursor(wme, x, y);          window_copy_update_cursor(wme, x, y);
         if (window_copy_update_selection(wme, 1))          if (window_copy_update_selection(wme, 1, 0))
                 window_copy_redraw_selection(wme, old_cy);                  window_copy_redraw_selection(wme, old_cy);
         if (old_cy != data->cy || old_cx == data->cx) {          if (old_cy != data->cy || old_cx == data->cx) {
                 if (y == 0) {                  if (y == 0) {

Legend:
Removed from v.1.251  
changed lines
  Added in v.1.252