mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	Merge #8934 'Remove mb_ptr2len_len, mb_ptr2cells, mb_ptr2cells_len'
This commit is contained in:
		@@ -5649,11 +5649,11 @@ void ex_sign(exarg_T *eap)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Count cells and check for non-printable chars
 | 
					            // Count cells and check for non-printable chars
 | 
				
			||||||
            cells = 0;
 | 
					            cells = 0;
 | 
				
			||||||
            for (s = arg; s < p; s += (*mb_ptr2len)(s)) {
 | 
					            for (s = arg; s < p; s += utfc_ptr2len(s)) {
 | 
				
			||||||
              if (!vim_isprintc(utf_ptr2char(s))) {
 | 
					              if (!vim_isprintc(utf_ptr2char(s))) {
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
              cells += (*mb_ptr2cells)(s);
 | 
					              cells += utf_ptr2cells(s);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // Currently must be one or two display cells
 | 
					            // Currently must be one or two display cells
 | 
				
			||||||
            if (s != p || cells < 1 || cells > 2) {
 | 
					            if (s != p || cells < 1 || cells > 2) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2152,10 +2152,11 @@ static void set_cmdspos_cursor(void)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static void correct_cmdspos(int idx, int cells)
 | 
					static void correct_cmdspos(int idx, int cells)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1
 | 
					  if (utfc_ptr2len(ccline.cmdbuff + idx) > 1
 | 
				
			||||||
      && (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1
 | 
					      && utf_ptr2cells(ccline.cmdbuff + idx) > 1
 | 
				
			||||||
      && ccline.cmdspos % Columns + cells > Columns)
 | 
					      && ccline.cmdspos % Columns + cells > Columns) {
 | 
				
			||||||
    ccline.cmdspos++;
 | 
					    ccline.cmdspos++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -892,10 +892,7 @@ static colnr_T hardcopy_line(prt_settings_T *psettings, int page_line, prt_pos_T
 | 
				
			|||||||
      need_break = 1;
 | 
					      need_break = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      need_break = mch_print_text_out(line + col, (size_t)outputlen);
 | 
					      need_break = mch_print_text_out(line + col, (size_t)outputlen);
 | 
				
			||||||
      if (has_mbyte)
 | 
					      print_pos += utf_ptr2cells(line + col);
 | 
				
			||||||
        print_pos += (*mb_ptr2cells)(line + col);
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
        print_pos++;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2912,7 +2909,7 @@ int mch_print_text_out(char_u *const textp, size_t len)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (prt_out_mbyte) {
 | 
					  if (prt_out_mbyte) {
 | 
				
			||||||
    const bool half_width = ((*mb_ptr2cells)(p) == 1);
 | 
					    const bool half_width = (utf_ptr2cells(p) == 1);
 | 
				
			||||||
    if (half_width) {
 | 
					    if (half_width) {
 | 
				
			||||||
      char_width /= 2;
 | 
					      char_width /= 2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -898,7 +898,7 @@ char_u *replace_termcodes(const char_u *from, const size_t from_len,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // skip multibyte char correctly
 | 
					    // skip multibyte char correctly
 | 
				
			||||||
    for (i = (*mb_ptr2len_len)(src, (int) (end - src) + 1); i > 0; i--) {
 | 
					    for (i = utfc_ptr2len_len(src, (int)(end - src) + 1); i > 0; i--) {
 | 
				
			||||||
      // If the character is K_SPECIAL, replace it with K_SPECIAL
 | 
					      // If the character is K_SPECIAL, replace it with K_SPECIAL
 | 
				
			||||||
      // KS_SPECIAL KE_FILLER.
 | 
					      // KS_SPECIAL KE_FILLER.
 | 
				
			||||||
      // If compiled with the GUI replace CSI with K_CSI.
 | 
					      // If compiled with the GUI replace CSI with K_CSI.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -550,7 +550,7 @@ size_t mb_string2cells(const char_u *str)
 | 
				
			|||||||
  size_t clen = 0;
 | 
					  size_t clen = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (const char_u *p = str; *p != NUL; p += (*mb_ptr2len)(p)) {
 | 
					  for (const char_u *p = str; *p != NUL; p += (*mb_ptr2len)(p)) {
 | 
				
			||||||
    clen += (*mb_ptr2cells)(p);
 | 
					    clen += utf_ptr2cells(p);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return clen;
 | 
					  return clen;
 | 
				
			||||||
@@ -2124,8 +2124,9 @@ static char_u *iconv_string(const vimconv_T *const vcp, char_u *str,
 | 
				
			|||||||
       * conversion from 'encoding' to something else.  In other
 | 
					       * conversion from 'encoding' to something else.  In other
 | 
				
			||||||
       * situations we don't know what to skip anyway. */
 | 
					       * situations we don't know what to skip anyway. */
 | 
				
			||||||
      *to++ = '?';
 | 
					      *to++ = '?';
 | 
				
			||||||
      if ((*mb_ptr2cells)((char_u *)from) > 1)
 | 
					      if (utf_ptr2cells((char_u *)from) > 1) {
 | 
				
			||||||
        *to++ = '?';
 | 
					        *to++ = '?';
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      l = utfc_ptr2len_len((const char_u *)from, (int)fromlen);
 | 
					      l = utfc_ptr2len_len((const char_u *)from, (int)fromlen);
 | 
				
			||||||
      from += l;
 | 
					      from += l;
 | 
				
			||||||
      fromlen -= l;
 | 
					      fromlen -= l;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,11 +47,8 @@ enum { MAX_MCO = 6 };
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// TODO(bfredl): eventually we should keep only one of the namings
 | 
					// TODO(bfredl): eventually we should keep only one of the namings
 | 
				
			||||||
#define mb_ptr2len utfc_ptr2len
 | 
					#define mb_ptr2len utfc_ptr2len
 | 
				
			||||||
#define mb_ptr2len_len utfc_ptr2len_len
 | 
					 | 
				
			||||||
#define mb_char2len utf_char2len
 | 
					#define mb_char2len utf_char2len
 | 
				
			||||||
#define mb_char2bytes utf_char2bytes
 | 
					#define mb_char2bytes utf_char2bytes
 | 
				
			||||||
#define mb_ptr2cells utf_ptr2cells
 | 
					 | 
				
			||||||
#define mb_ptr2cells_len utf_ptr2cells_len
 | 
					 | 
				
			||||||
#define mb_char2cells utf_char2cells
 | 
					#define mb_char2cells utf_char2cells
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Flags for vimconv_T
 | 
					/// Flags for vimconv_T
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -699,8 +699,8 @@ char_u *msg_may_trunc(int force, char_u *s)
 | 
				
			|||||||
        return s;
 | 
					        return s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      for (n = 0; size >= room; ) {
 | 
					      for (n = 0; size >= room; ) {
 | 
				
			||||||
        size -= (*mb_ptr2cells)(s + n);
 | 
					        size -= utf_ptr2cells(s + n);
 | 
				
			||||||
        n += (*mb_ptr2len)(s + n);
 | 
					        n += utfc_ptr2len(s + n);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      --n;
 | 
					      --n;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1222,7 +1222,7 @@ int msg_outtrans_len_attr(char_u *msgstr, int len, int attr)
 | 
				
			|||||||
      c = utf_ptr2char((char_u *)str);
 | 
					      c = utf_ptr2char((char_u *)str);
 | 
				
			||||||
      if (vim_isprintc(c)) {
 | 
					      if (vim_isprintc(c)) {
 | 
				
			||||||
        // Printable multi-byte char: count the cells.
 | 
					        // Printable multi-byte char: count the cells.
 | 
				
			||||||
        retval += (*mb_ptr2cells)((char_u *)str);
 | 
					        retval += utf_ptr2cells((char_u *)str);
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        // Unprintable multi-byte char: print the printable chars so
 | 
					        // Unprintable multi-byte char: print the printable chars so
 | 
				
			||||||
        // far and the translation of the unprintable char.
 | 
					        // far and the translation of the unprintable char.
 | 
				
			||||||
@@ -1476,13 +1476,13 @@ void msg_prt_line(char_u *s, int list)
 | 
				
			|||||||
        c = c_extra;
 | 
					        c = c_extra;
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
        c = *p_extra++;
 | 
					        c = *p_extra++;
 | 
				
			||||||
    } else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1) {
 | 
					    } else if ((l = utfc_ptr2len(s)) > 1) {
 | 
				
			||||||
      col += (*mb_ptr2cells)(s);
 | 
					      col += utf_ptr2cells(s);
 | 
				
			||||||
      char buf[MB_MAXBYTES + 1];
 | 
					      char buf[MB_MAXBYTES + 1];
 | 
				
			||||||
      if (lcs_nbsp != NUL && list
 | 
					      if (lcs_nbsp != NUL && list
 | 
				
			||||||
          && (utf_ptr2char(s) == 160 || utf_ptr2char(s) == 0x202f)) {
 | 
					          && (utf_ptr2char(s) == 160 || utf_ptr2char(s) == 0x202f)) {
 | 
				
			||||||
        mb_char2bytes(lcs_nbsp, (char_u *)buf);
 | 
					        utf_char2bytes(lcs_nbsp, (char_u *)buf);
 | 
				
			||||||
        buf[(*mb_ptr2len)((char_u *)buf)] = NUL;
 | 
					        buf[utfc_ptr2len((char_u *)buf)] = NUL;
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        memmove(buf, s, (size_t)l);
 | 
					        memmove(buf, s, (size_t)l);
 | 
				
			||||||
        buf[l] = NUL;
 | 
					        buf[l] = NUL;
 | 
				
			||||||
@@ -1549,7 +1549,7 @@ static char_u *screen_puts_mbyte(char_u *s, int l, int attr)
 | 
				
			|||||||
  int cw;
 | 
					  int cw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_didout = true;            // remember that line is not empty
 | 
					  msg_didout = true;            // remember that line is not empty
 | 
				
			||||||
  cw = (*mb_ptr2cells)(s);
 | 
					  cw = utf_ptr2cells(s);
 | 
				
			||||||
  if (cw > 1
 | 
					  if (cw > 1
 | 
				
			||||||
      && (cmdmsg_rl ? msg_col <= 1 : msg_col == Columns - 1)) {
 | 
					      && (cmdmsg_rl ? msg_col <= 1 : msg_col == Columns - 1)) {
 | 
				
			||||||
    // Doesn't fit, print a highlighted '>' to fill it up.
 | 
					    // Doesn't fit, print a highlighted '>' to fill it up.
 | 
				
			||||||
@@ -1711,14 +1711,12 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
 | 
				
			|||||||
        && (*s == '\n' || (cmdmsg_rl
 | 
					        && (*s == '\n' || (cmdmsg_rl
 | 
				
			||||||
                           ? (msg_col <= 1
 | 
					                           ? (msg_col <= 1
 | 
				
			||||||
                              || (*s == TAB && msg_col <= 7)
 | 
					                              || (*s == TAB && msg_col <= 7)
 | 
				
			||||||
                              || (has_mbyte
 | 
					                              || (utf_ptr2cells(s) > 1
 | 
				
			||||||
                                  && (*mb_ptr2cells)(s) > 1
 | 
					 | 
				
			||||||
                                  && msg_col <= 2))
 | 
					                                  && msg_col <= 2))
 | 
				
			||||||
                           : (msg_col + t_col >= Columns - 1
 | 
					                           : (msg_col + t_col >= Columns - 1
 | 
				
			||||||
                              || (*s == TAB
 | 
					                              || (*s == TAB
 | 
				
			||||||
                                  && msg_col + t_col >= ((Columns - 1) & ~7))
 | 
					                                  && msg_col + t_col >= ((Columns - 1) & ~7))
 | 
				
			||||||
                              || (has_mbyte
 | 
					                              || (utf_ptr2cells(s) > 1
 | 
				
			||||||
                                  && (*mb_ptr2cells)(s) > 1
 | 
					 | 
				
			||||||
                                  && msg_col + t_col >= Columns - 2))))) {
 | 
					                                  && msg_col + t_col >= Columns - 2))))) {
 | 
				
			||||||
      // The screen is scrolled up when at the last row (some terminals
 | 
					      // The screen is scrolled up when at the last row (some terminals
 | 
				
			||||||
      // scroll automatically, some don't.  To avoid problems we scroll
 | 
					      // scroll automatically, some don't.  To avoid problems we scroll
 | 
				
			||||||
@@ -1787,7 +1785,7 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    wrap = *s == '\n'
 | 
					    wrap = *s == '\n'
 | 
				
			||||||
           || msg_col + t_col >= Columns
 | 
					           || msg_col + t_col >= Columns
 | 
				
			||||||
           || (has_mbyte && (*mb_ptr2cells)(s) > 1
 | 
					           || (utf_ptr2cells(s) > 1
 | 
				
			||||||
               && msg_col + t_col >= Columns - 1)
 | 
					               && msg_col + t_col >= Columns - 1)
 | 
				
			||||||
    ;
 | 
					    ;
 | 
				
			||||||
    if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
 | 
					    if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
 | 
				
			||||||
@@ -1821,7 +1819,7 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
 | 
				
			|||||||
    } else if (*s == BELL) {  // beep (from ":sh")
 | 
					    } else if (*s == BELL) {  // beep (from ":sh")
 | 
				
			||||||
      vim_beep(BO_SH);
 | 
					      vim_beep(BO_SH);
 | 
				
			||||||
    } else if (*s >= 0x20) {  // printable char
 | 
					    } else if (*s >= 0x20) {  // printable char
 | 
				
			||||||
      cw = mb_ptr2cells(s);
 | 
					      cw = utf_ptr2cells(s);
 | 
				
			||||||
      if (maxlen >= 0) {
 | 
					      if (maxlen >= 0) {
 | 
				
			||||||
        // avoid including composing chars after the end
 | 
					        // avoid including composing chars after the end
 | 
				
			||||||
        l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
 | 
					        l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -466,7 +466,7 @@ static void out_data_append_to_screen(char *output, size_t *count, bool eof)
 | 
				
			|||||||
      //    incomplete UTF-8 sequence that could be composing with the last
 | 
					      //    incomplete UTF-8 sequence that could be composing with the last
 | 
				
			||||||
      //    complete sequence.
 | 
					      //    complete sequence.
 | 
				
			||||||
      // This will be corrected when we switch to vterm based implementation
 | 
					      // This will be corrected when we switch to vterm based implementation
 | 
				
			||||||
      int i = *p ? mb_ptr2len_len((char_u *)p, (int)(end-p)) : 1;
 | 
					      int i = *p ? utfc_ptr2len_len((char_u *)p, (int)(end-p)) : 1;
 | 
				
			||||||
      if (!eof && i == 1 && utf8len_tab_zero[*(uint8_t *)p] > (end-p)) {
 | 
					      if (!eof && i == 1 && utf8len_tab_zero[*(uint8_t *)p] > (end-p)) {
 | 
				
			||||||
        *count = (size_t)(p - output);
 | 
					        *count = (size_t)(p - output);
 | 
				
			||||||
        goto end;
 | 
					        goto end;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -399,7 +399,7 @@ void pum_redraw(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
              if (size > pum_width) {
 | 
					              if (size > pum_width) {
 | 
				
			||||||
                do {
 | 
					                do {
 | 
				
			||||||
                  size -= has_mbyte ? (*mb_ptr2cells)(rt) : 1;
 | 
					                  size -= utf_ptr2cells(rt);
 | 
				
			||||||
                  MB_PTR_ADV(rt);
 | 
					                  MB_PTR_ADV(rt);
 | 
				
			||||||
                } while (size > pum_width);
 | 
					                } while (size > pum_width);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1874,8 +1874,8 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Store multibyte characters in ScreenLines[] et al. correctly.
 | 
					  // Store multibyte characters in ScreenLines[] et al. correctly.
 | 
				
			||||||
  for (p = text; *p != NUL; ) {
 | 
					  for (p = text; *p != NUL; ) {
 | 
				
			||||||
    cells = (*mb_ptr2cells)(p);
 | 
					    cells = utf_ptr2cells(p);
 | 
				
			||||||
    c_len = (*mb_ptr2len)(p);
 | 
					    c_len = utfc_ptr2len(p);
 | 
				
			||||||
    if (col + cells > wp->w_width - (wp->w_p_rl ? col : 0)) {
 | 
					    if (col + cells > wp->w_width - (wp->w_p_rl ? col : 0)) {
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -2914,16 +2914,17 @@ win_line (
 | 
				
			|||||||
    if (draw_state == WL_LINE && area_highlighting) {
 | 
					    if (draw_state == WL_LINE && area_highlighting) {
 | 
				
			||||||
      /* handle Visual or match highlighting in this line */
 | 
					      /* handle Visual or match highlighting in this line */
 | 
				
			||||||
      if (vcol == fromcol
 | 
					      if (vcol == fromcol
 | 
				
			||||||
          || (has_mbyte && vcol + 1 == fromcol && n_extra == 0
 | 
					          || (vcol + 1 == fromcol && n_extra == 0
 | 
				
			||||||
              && (*mb_ptr2cells)(ptr) > 1)
 | 
					              && utf_ptr2cells(ptr) > 1)
 | 
				
			||||||
          || ((int)vcol_prev == fromcol_prev
 | 
					          || ((int)vcol_prev == fromcol_prev
 | 
				
			||||||
              && vcol_prev < vcol               /* not at margin */
 | 
					              && vcol_prev < vcol               // not at margin
 | 
				
			||||||
              && vcol < tocol))
 | 
					              && vcol < tocol)) {
 | 
				
			||||||
        area_attr = attr;                       /* start highlighting */
 | 
					        area_attr = attr;                       // start highlighting
 | 
				
			||||||
      else if (area_attr != 0
 | 
					      } else if (area_attr != 0 && (vcol == tocol
 | 
				
			||||||
               && (vcol == tocol
 | 
					                                    || (noinvcur
 | 
				
			||||||
                   || (noinvcur && (colnr_T)vcol == wp->w_virtcol)))
 | 
					                                        && (colnr_T)vcol == wp->w_virtcol))) {
 | 
				
			||||||
        area_attr = 0;                          /* stop highlighting */
 | 
					        area_attr = 0;                          // stop highlighting
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!n_extra) {
 | 
					      if (!n_extra) {
 | 
				
			||||||
        /*
 | 
					        /*
 | 
				
			||||||
@@ -4879,8 +4880,8 @@ static void win_redr_status(win_T *wp, int ignore_pum)
 | 
				
			|||||||
      // Find first character that will fit.
 | 
					      // Find first character that will fit.
 | 
				
			||||||
      // Going from start to end is much faster for DBCS.
 | 
					      // Going from start to end is much faster for DBCS.
 | 
				
			||||||
      for (i = 0; p[i] != NUL && clen >= this_ru_col - 1;
 | 
					      for (i = 0; p[i] != NUL && clen >= this_ru_col - 1;
 | 
				
			||||||
           i += (*mb_ptr2len)(p + i)) {
 | 
					           i += utfc_ptr2len(p + i)) {
 | 
				
			||||||
        clen -= (*mb_ptr2cells)(p + i);
 | 
					        clen -= utf_ptr2cells(p + i);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      len = clen;
 | 
					      len = clen;
 | 
				
			||||||
      if (i > 0) {
 | 
					      if (i > 0) {
 | 
				
			||||||
@@ -6128,16 +6129,16 @@ void setcursor(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  if (redrawing()) {
 | 
					  if (redrawing()) {
 | 
				
			||||||
    validate_cursor();
 | 
					    validate_cursor();
 | 
				
			||||||
 | 
					    int left_offset = curwin->w_wcol;
 | 
				
			||||||
 | 
					    if (curwin->w_p_rl) {
 | 
				
			||||||
 | 
					      // With 'rightleft' set and the cursor on a double-wide character,
 | 
				
			||||||
 | 
					      // position it on the leftmost column.
 | 
				
			||||||
 | 
					      left_offset = curwin->w_width - curwin->w_wcol
 | 
				
			||||||
 | 
					                    - ((utf_ptr2cells(get_cursor_pos_ptr()) == 2
 | 
				
			||||||
 | 
					                        && vim_isprintc(gchar_cursor())) ? 2 : 1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ui_cursor_goto(curwin->w_winrow + curwin->w_wrow,
 | 
					    ui_cursor_goto(curwin->w_winrow + curwin->w_wrow,
 | 
				
			||||||
        curwin->w_wincol + (
 | 
					                   curwin->w_wincol + left_offset);
 | 
				
			||||||
          /* With 'rightleft' set and the cursor on a double-wide
 | 
					 | 
				
			||||||
           * character, position it on the leftmost column. */
 | 
					 | 
				
			||||||
          curwin->w_p_rl ? (curwin->w_width - curwin->w_wcol - (
 | 
					 | 
				
			||||||
                              (has_mbyte
 | 
					 | 
				
			||||||
                               && (*mb_ptr2cells)(get_cursor_pos_ptr()) == 2
 | 
					 | 
				
			||||||
                               && vim_isprintc(gchar_cursor())) ? 2 :
 | 
					 | 
				
			||||||
                              1)) :
 | 
					 | 
				
			||||||
          curwin->w_wcol));
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -6968,18 +6969,15 @@ static void win_redr_ruler(win_T *wp, int always)
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i);
 | 
					      get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /* Truncate at window boundary. */
 | 
					    // Truncate at window boundary.
 | 
				
			||||||
    if (has_mbyte) {
 | 
					    o = 0;
 | 
				
			||||||
      o = 0;
 | 
					    for (i = 0; buffer[i] != NUL; i += utfc_ptr2len(buffer + i)) {
 | 
				
			||||||
      for (i = 0; buffer[i] != NUL; i += (*mb_ptr2len)(buffer + i)) {
 | 
					      o += utf_ptr2cells(buffer + i);
 | 
				
			||||||
        o += (*mb_ptr2cells)(buffer + i);
 | 
					      if (this_ru_col + o > width) {
 | 
				
			||||||
        if (this_ru_col + o > width) {
 | 
					        buffer[i] = NUL;
 | 
				
			||||||
          buffer[i] = NUL;
 | 
					        break;
 | 
				
			||||||
          break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else if (this_ru_col + (int)STRLEN(buffer) > width)
 | 
					    }
 | 
				
			||||||
      buffer[width - this_ru_col] = NUL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    screen_puts(buffer, row, this_ru_col + off, attr);
 | 
					    screen_puts(buffer, row, this_ru_col + off, attr);
 | 
				
			||||||
    i = redraw_cmdline;
 | 
					    i = redraw_cmdline;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user