# HG changeset patch # User Bram Moolenaar # Date 1359550777 -3600 # Node ID 43c15135926fb95fa82b01424677a9c37f4d0e46 # Parent 70eacf4f099dd6ed6f5540e7bf73fd3188e7381f updated for version 7.3.789 Problem: "\k" in regexp does not work in other window. Solution: Use the right buffer. (Yukihiro Nakadaira) diff --git a/src/mbyte.c b/src/mbyte.c --- a/src/mbyte.c +++ b/src/mbyte.c @@ -869,11 +869,19 @@ remove_bom(s) mb_get_class(p) char_u *p; { + return mb_get_class_buf(p, curbuf); +} + + int +mb_get_class_buf(p, buf) + char_u *p; + buf_T *buf; +{ if (MB_BYTE2LEN(p[0]) == 1) { if (p[0] == NUL || vim_iswhite(p[0])) return 0; - if (vim_iswordc(p[0])) + if (vim_iswordc_buf(p[0], buf)) return 2; return 1; } diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro --- a/src/proto/mbyte.pro +++ b/src/proto/mbyte.pro @@ -4,6 +4,7 @@ char_u *mb_init __ARGS((void)); int bomb_size __ARGS((void)); void remove_bom __ARGS((char_u *s)); int mb_get_class __ARGS((char_u *p)); +int mb_get_class_buf __ARGS((char_u *p, buf_T *buf)); int dbcs_class __ARGS((unsigned lead, unsigned trail)); int latin_char2len __ARGS((int c)); int latin_char2bytes __ARGS((int c, char_u *buf)); diff --git a/src/regexp.c b/src/regexp.c --- a/src/regexp.c +++ b/src/regexp.c @@ -4013,8 +4013,8 @@ static int reg_prev_class __ARGS((void)) reg_prev_class() { if (reginput > regline) - return mb_get_class(reginput - 1 - - (*mb_head_off)(regline, reginput - 1)); + return mb_get_class_buf(reginput - 1 + - (*mb_head_off)(regline, reginput - 1), reg_buf); return -1; } @@ -4304,7 +4304,7 @@ regmatch(scan) int this_class; /* Get class of current and previous char (if it exists). */ - this_class = mb_get_class(reginput); + this_class = mb_get_class_buf(reginput, reg_buf); if (this_class <= 1) status = RA_NOMATCH; /* not on a word at all */ else if (reg_prev_class() == this_class) @@ -4328,7 +4328,7 @@ regmatch(scan) int this_class, prev_class; /* Get class of current and previous char (if it exists). */ - this_class = mb_get_class(reginput); + this_class = mb_get_class_buf(reginput, reg_buf); prev_class = reg_prev_class(); if (this_class == prev_class || prev_class == 0 || prev_class == 1) @@ -4365,14 +4365,14 @@ regmatch(scan) break; case KWORD: - if (!vim_iswordp(reginput)) + if (!vim_iswordp_buf(reginput, reg_buf)) status = RA_NOMATCH; else ADVANCE_REGINPUT(); break; case SKWORD: - if (VIM_ISDIGIT(*reginput) || !vim_iswordp(reginput)) + if (VIM_ISDIGIT(*reginput) || !vim_iswordp_buf(reginput, reg_buf)) status = RA_NOMATCH; else ADVANCE_REGINPUT(); @@ -5734,7 +5734,8 @@ regrepeat(p, maxcount) case SKWORD + ADD_NL: while (count < maxcount) { - if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan))) + if (vim_iswordp_buf(scan, reg_buf) + && (testval || !VIM_ISDIGIT(*scan))) { mb_ptr_adv(scan); } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -726,6 +726,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 789, +/**/ 788, /**/ 787,