[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.322 and 1.323

version 1.322, 2021/04/05 08:43:48 version 1.323, 2021/06/10 07:56:47
Line 128 
Line 128 
 static void     window_copy_cursor_next_word_end(struct window_mode_entry *,  static void     window_copy_cursor_next_word_end(struct window_mode_entry *,
                     const char *, int);                      const char *, int);
 static void     window_copy_cursor_previous_word_pos(struct window_mode_entry *,  static void     window_copy_cursor_previous_word_pos(struct window_mode_entry *,
                     const char *, int, u_int *, u_int *);                      const char *, u_int *, u_int *);
 static void     window_copy_cursor_previous_word(struct window_mode_entry *,  static void     window_copy_cursor_previous_word(struct window_mode_entry *,
                     const char *, int);                      const char *, int);
 static void     window_copy_scroll_up(struct window_mode_entry *, u_int);  static void     window_copy_scroll_up(struct window_mode_entry *, u_int);
Line 255 
Line 255 
                 SEL_LINE,               /* select one line at a time */                  SEL_LINE,               /* select one line at a time */
         } selflag;          } selflag;
   
         const char      *ws;            /* word separators */          const char      *separators;    /* word separators */
   
         u_int            dx;            /* drag start position */          u_int            dx;            /* drag start position */
         u_int            dy;          u_int            dy;
Line 1321 
Line 1321 
                                         tried = 1;                                          tried = 1;
                                         goto retry;                                          goto retry;
                                 }                                  }
                                 window_copy_cursor_previous_word(wme, "}]) ", 1);                                  window_copy_cursor_previous_word(wme, close, 1);
                         }                          }
                         continue;                          continue;
                 }                  }
Line 1433 
Line 1433 
                                         tried = 1;                                          tried = 1;
                                         goto retry;                                          goto retry;
                                 }                                  }
                                 window_copy_cursor_next_word_end(wme, "{[( ",                                  window_copy_cursor_next_word_end(wme, open, 0);
                                     0);  
                                 continue;                                  continue;
                         }                          }
                         /* For vi, continue searching for bracket until EOL. */                          /* For vi, continue searching for bracket until EOL. */
Line 1506 
Line 1505 
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_next_word(wme, " ");                  window_copy_cursor_next_word(wme, "");
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1517 
Line 1516 
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_next_word_end(wme, " ", 0);                  window_copy_cursor_next_word_end(wme, "", 0);
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1525 
Line 1524 
 window_copy_cmd_next_word(struct window_copy_cmd_state *cs)  window_copy_cmd_next_word(struct window_copy_cmd_state *cs)
 {  {
         struct window_mode_entry        *wme = cs->wme;          struct window_mode_entry        *wme = cs->wme;
         struct session                  *s = cs->s;  
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
         const char                      *ws;          const char                      *separators;
   
         ws = options_get_string(s->options, "word-separators");          separators = options_get_string(cs->s->options, "word-separators");
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_next_word(wme, ws);                  window_copy_cursor_next_word(wme, separators);
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1539 
Line 1538 
 window_copy_cmd_next_word_end(struct window_copy_cmd_state *cs)  window_copy_cmd_next_word_end(struct window_copy_cmd_state *cs)
 {  {
         struct window_mode_entry        *wme = cs->wme;          struct window_mode_entry        *wme = cs->wme;
         struct session                  *s = cs->s;  
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
         const char                      *ws;          const char                      *separators;
   
         ws = options_get_string(s->options, "word-separators");          separators = options_get_string(cs->s->options, "word-separators");
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_next_word_end(wme, ws, 0);                  window_copy_cursor_next_word_end(wme, separators, 0);
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1618 
Line 1617 
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_previous_word(wme, " ", 1);                  window_copy_cursor_previous_word(wme, "", 1);
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1626 
Line 1625 
 window_copy_cmd_previous_word(struct window_copy_cmd_state *cs)  window_copy_cmd_previous_word(struct window_copy_cmd_state *cs)
 {  {
         struct window_mode_entry        *wme = cs->wme;          struct window_mode_entry        *wme = cs->wme;
         struct session                  *s = cs->s;  
         u_int                            np = wme->prefix;          u_int                            np = wme->prefix;
         const char                      *ws;          const char                      *separators;
   
         ws = options_get_string(s->options, "word-separators");          separators = options_get_string(cs->s->options, "word-separators");
   
         for (; np != 0; np--)          for (; np != 0; np--)
                 window_copy_cursor_previous_word(wme, ws, 1);                  window_copy_cursor_previous_word(wme, separators, 1);
         return (WINDOW_COPY_CMD_NOTHING);          return (WINDOW_COPY_CMD_NOTHING);
 }  }
   
Line 1778 
Line 1777 
 window_copy_cmd_select_word(struct window_copy_cmd_state *cs)  window_copy_cmd_select_word(struct window_copy_cmd_state *cs)
 {  {
         struct window_mode_entry        *wme = cs->wme;          struct window_mode_entry        *wme = cs->wme;
         struct session                  *s = cs->s;          struct options                  *session_options = cs->s->options;
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         u_int                            px, py, nextx, nexty;          u_int                            px, py, nextx, nexty;
   
   
         data->lineflag = LINE_SEL_LEFT_RIGHT;          data->lineflag = LINE_SEL_LEFT_RIGHT;
         data->rectflag = 0;          data->rectflag = 0;
         data->selflag = SEL_WORD;          data->selflag = SEL_WORD;
         data->dx = data->cx;          data->dx = data->cx;
         data->dy = screen_hsize(data->backing) + data->cy - data->oy;          data->dy = screen_hsize(data->backing) + data->cy - data->oy;
   
         data->ws = options_get_string(s->options, "word-separators");          data->separators = options_get_string(session_options,
         window_copy_cursor_previous_word(wme, data->ws, 0);              "word-separators");
           window_copy_cursor_previous_word(wme, data->separators, 0);
         px = data->cx;          px = data->cx;
         py = screen_hsize(data->backing) + data->cy - data->oy;          py = screen_hsize(data->backing) + data->cy - data->oy;
         data->selrx = px;          data->selrx = px;
Line 1805 
Line 1806 
                 nexty++;                  nexty++;
         }          }
         if (px >= window_copy_find_length(wme, py) ||          if (px >= window_copy_find_length(wme, py) ||
             !window_copy_in_set(wme, nextx, nexty, data->ws))              !window_copy_in_set(wme, nextx, nexty, WHITESPACE))
                 window_copy_cursor_next_word_end(wme, data->ws, 1);                  window_copy_cursor_next_word_end(wme, data->separators, 1);
         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, 1))                  if (window_copy_update_selection(wme, 1, 1))
Line 3730 
Line 3731 
                 begin = 0;                  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,
                             &xx, &yy);                              data->separators, &xx, &yy);
                         begin = 1;                          begin = 1;
   
                         /* Reset the end. */                          /* Reset the end. */
Line 3740 
Line 3741 
                 } else {                  } else {
                         /* Left to right selection. */                          /* Left to right selection. */
                         if (xx >= window_copy_find_length(wme, yy) ||                          if (xx >= window_copy_find_length(wme, yy) ||
                             !window_copy_in_set(wme, xx + 1, yy, data->ws))                              !window_copy_in_set(wme, xx + 1, yy, WHITESPACE)) {
                                 window_copy_cursor_next_word_end_pos(wme,                                  window_copy_cursor_next_word_end_pos(wme,
                                     data->ws, &xx, &yy);                                      data->separators, &xx, &yy);
                           }
   
                         /* Reset the start. */                          /* Reset the start. */
                         data->selx = data->selrx;                          data->selx = data->selrx;
Line 4666 
Line 4668 
         struct screen                   *back_s = data->backing;          struct screen                   *back_s = data->backing;
         struct grid_reader               gr;          struct grid_reader               gr;
         u_int                            px, py, hsize;          u_int                            px, py, hsize;
         int                              keys;  
   
         px = data->cx;          px = data->cx;
         hsize = screen_hsize(back_s);          hsize = screen_hsize(back_s);
         py =  hsize + data->cy - data->oy;          py =  hsize + data->cy - data->oy;
   
         grid_reader_start(&gr, back_s->grid, px, py);          grid_reader_start(&gr, back_s->grid, px, py);
         keys = options_get_number(oo, "mode-keys");          if (options_get_number(oo, "mode-keys") == MODEKEY_VI) {
         if (keys == MODEKEY_VI && !grid_reader_in_set(&gr, separators))                  if (!grid_reader_in_set(&gr, WHITESPACE))
                 grid_reader_cursor_right(&gr, 0, 0);                          grid_reader_cursor_right(&gr, 0, 0);
         grid_reader_cursor_next_word_end(&gr, separators);                  grid_reader_cursor_next_word_end(&gr, separators);
         if (keys == MODEKEY_VI)  
                 grid_reader_cursor_left(&gr, 1);                  grid_reader_cursor_left(&gr, 1);
           } else
                   grid_reader_cursor_next_word_end(&gr, separators);
         grid_reader_get_cursor(&gr, &px, &py);          grid_reader_get_cursor(&gr, &px, &py);
         *ppx = px;          *ppx = px;
         *ppy = py;          *ppy = py;
Line 4695 
Line 4697 
         struct screen                   *back_s = data->backing;          struct screen                   *back_s = data->backing;
         struct grid_reader               gr;          struct grid_reader               gr;
         u_int                            px, py, oldy, hsize;          u_int                            px, py, oldy, hsize;
         int                              keys;  
   
         px = data->cx;          px = data->cx;
         hsize = screen_hsize(back_s);          hsize = screen_hsize(back_s);
Line 4703 
Line 4704 
         oldy = data->cy;          oldy = data->cy;
   
         grid_reader_start(&gr, back_s->grid, px, py);          grid_reader_start(&gr, back_s->grid, px, py);
         keys = options_get_number(oo, "mode-keys");          if (options_get_number(oo, "mode-keys") == MODEKEY_VI) {
         if (keys == MODEKEY_VI && !grid_reader_in_set(&gr, separators))                  if (!grid_reader_in_set(&gr, WHITESPACE))
                 grid_reader_cursor_right(&gr, 0, 0);                          grid_reader_cursor_right(&gr, 0, 0);
         grid_reader_cursor_next_word_end(&gr, separators);                  grid_reader_cursor_next_word_end(&gr, separators);
         if (keys == MODEKEY_VI)  
                 grid_reader_cursor_left(&gr, 1);                  grid_reader_cursor_left(&gr, 1);
           } else
                   grid_reader_cursor_next_word_end(&gr, separators);
         grid_reader_get_cursor(&gr, &px, &py);          grid_reader_get_cursor(&gr, &px, &py);
         window_copy_acquire_cursor_down(wme, hsize, screen_size_y(back_s),          window_copy_acquire_cursor_down(wme, hsize, screen_size_y(back_s),
             data->oy, oldy, px, py, no_reset);              data->oy, oldy, px, py, no_reset);
Line 4717 
Line 4719 
 /* Compute the previous place where a word begins. */  /* Compute the previous place where a word begins. */
 static void  static void
 window_copy_cursor_previous_word_pos(struct window_mode_entry *wme,  window_copy_cursor_previous_word_pos(struct window_mode_entry *wme,
     const char *separators, int already, u_int *ppx, u_int *ppy)      const char *separators, u_int *ppx, u_int *ppy)
 {  {
         struct window_copy_mode_data    *data = wme->data;          struct window_copy_mode_data    *data = wme->data;
         struct screen                   *back_s = data->backing;          struct screen                   *back_s = data->backing;
Line 4729 
Line 4731 
         py = hsize + data->cy - data->oy;          py = hsize + data->cy - data->oy;
   
         grid_reader_start(&gr, back_s->grid, px, py);          grid_reader_start(&gr, back_s->grid, px, py);
         grid_reader_cursor_previous_word(&gr, separators, already);          grid_reader_cursor_previous_word(&gr, separators, /* already= */ 0,
           /* stop_at_eol= */ 1);
         grid_reader_get_cursor(&gr, &px, &py);          grid_reader_get_cursor(&gr, &px, &py);
         *ppx = px;          *ppx = px;
         *ppy = py;          *ppy = py;
Line 4744 
Line 4747 
         struct screen                   *back_s = data->backing;          struct screen                   *back_s = data->backing;
         struct grid_reader               gr;          struct grid_reader               gr;
         u_int                            px, py, oldy, hsize;          u_int                            px, py, oldy, hsize;
           int                              stop_at_eol;
   
           stop_at_eol =
               options_get_number(wme->wp->window->options, "mode-keys")
                   == MODEKEY_EMACS;
   
         px = data->cx;          px = data->cx;
         hsize = screen_hsize(back_s);          hsize = screen_hsize(back_s);
         py = hsize + data->cy - data->oy;          py = hsize + data->cy - data->oy;
         oldy = data->cy;          oldy = data->cy;
   
         grid_reader_start(&gr, back_s->grid, px, py);          grid_reader_start(&gr, back_s->grid, px, py);
         grid_reader_cursor_previous_word(&gr, separators, already);          grid_reader_cursor_previous_word(&gr, separators, already, stop_at_eol);
         grid_reader_get_cursor(&gr, &px, &py);          grid_reader_get_cursor(&gr, &px, &py);
         window_copy_acquire_cursor_up(wme, hsize, data->oy, oldy, px, py);          window_copy_acquire_cursor_up(wme, hsize, data->oy, oldy, px, py);
 }  }
Line 4893 
Line 4901 
                 data->selflag = SEL_CHAR;                  data->selflag = SEL_CHAR;
         switch (data->selflag) {          switch (data->selflag) {
         case SEL_WORD:          case SEL_WORD:
                 if (data->ws != NULL) {                  if (data->separators != NULL) {
                         window_copy_update_cursor(wme, x, y);                          window_copy_update_cursor(wme, x, y);
                         window_copy_cursor_previous_word_pos(wme, data->ws, 0,                          window_copy_cursor_previous_word_pos(wme,
                             &x, &y);                              data->separators, &x, &y);
                         y -= screen_hsize(data->backing) - data->oy;                          y -= screen_hsize(data->backing) - data->oy;
                 }                  }
                 window_copy_update_cursor(wme, x, y);                  window_copy_update_cursor(wme, x, y);

Legend:
Removed from v.1.322  
changed lines
  Added in v.1.323