diff -ru vim70-orig/src/move.c vim70/src/move.c --- vim70-orig/src/move.c 2006-03-13 13:21:18.000000000 -0800 +++ vim70/src/move.c 2006-08-15 13:54:39.000000000 -0700 @@ -911,7 +911,7 @@ win_col_off(wp) win_T *wp; { - return ((wp->w_p_nu ? number_width(wp) + 1 : 0) + return ((wp->w_p_nu ? abs(number_width(wp)) + 1 : 0) #ifdef FEAT_CMDWIN + (cmdwin_type == 0 || wp != curwin ? 0 : 1) #endif @@ -944,7 +944,7 @@ win_T *wp; { if (wp->w_p_nu && vim_strchr(p_cpo, CPO_NUMCOL) != NULL) - return number_width(wp) + 1; + return abs(number_width(wp)) + 1; return 0; } diff -ru vim70-orig/src/option.c vim70/src/option.c --- vim70-orig/src/option.c 2006-05-03 10:32:28.000000000 -0700 +++ vim70/src/option.c 2006-08-15 13:49:24.000000000 -0700 @@ -7828,15 +7828,15 @@ } #ifdef FEAT_LINEBREAK - /* 'numberwidth' must be positive */ + /* abs('numberwidth') must be between 1 and 10 */ else if (pp == &curwin->w_p_nuw) { - if (curwin->w_p_nuw < 1) + if (abs(curwin->w_p_nuw) < 1) { errmsg = e_positive; curwin->w_p_nuw = 1; } - if (curwin->w_p_nuw > 10) + if (abs(curwin->w_p_nuw) > 10) { errmsg = e_invarg; curwin->w_p_nuw = 10; diff -ru vim70-orig/src/screen.c vim70/src/screen.c --- vim70-orig/src/screen.c 2006-05-05 03:13:55.000000000 -0700 +++ vim70/src/screen.c 2006-08-15 14:02:56.000000000 -0700 @@ -436,7 +436,7 @@ #ifdef FEAT_LINEBREAK /* Force redraw when width of 'number' column changes. */ if (curwin->w_redr_type < NOT_VALID - && curwin->w_nrwidth != (curwin->w_p_nu ? number_width(curwin) : 0)) + && curwin->w_nrwidth != (curwin->w_p_nu ? abs(number_width(curwin)) : 0)) curwin->w_redr_type = NOT_VALID; #endif @@ -867,7 +867,7 @@ #ifdef FEAT_LINEBREAK /* Force redraw when width of 'number' column changes. */ - i = wp->w_p_nu ? number_width(wp) : 0; + i = wp->w_p_nu ? abs(number_width(wp)) : 0; if (wp->w_nrwidth != i) { type = NOT_VALID; @@ -2179,8 +2179,8 @@ { int w = number_width(wp); - if (len > w + 1) - len = w + 1; + if (len > abs(w) + 1) + len = abs(w) + 1; sprintf((char *)buf, "%*ld ", w, (long)lnum); #ifdef FEAT_RIGHTLEFT if (wp->w_p_rl) @@ -3268,7 +3268,7 @@ } else c_extra = ' '; - n_extra = number_width(wp) + 1; + n_extra = abs(number_width(wp)) + 1; char_attr = hl_attr(HLF_N); #ifdef FEAT_SYN_HL /* When 'cursorline' is set highlight the line number of @@ -9368,10 +9368,10 @@ } while (lnum > 0); /* 'numberwidth' gives the minimal width plus one */ - if (n < wp->w_p_nuw - 1) - n = wp->w_p_nuw - 1; + if (n < abs(wp->w_p_nuw) - 1) + n = abs(wp->w_p_nuw) - 1; - wp->w_nrwidth_width = n; - return n; + wp->w_nrwidth_width = (wp->w_p_nuw < 0) ? -n : n; + return wp->w_nrwidth_width; } #endif