SungHyun Nam wrote: > Hello, > > With the attached files (vimrc and mb.txt), if I open the mb.txt > and just type A, > gvim -u vimrc -U NONE --noplugin mb.txt > A, > > Now, I should saw (X = cursor): > ....aaaa,X > But, I saw > ....aaaa, X > > It occurs on 3 different versions of gvim, > win32/cygwin-gtk2/linux-gtk2. I included cygwin-gtk2 version info > below. > > Thanks, > namsh
This bug happens because the ':set listchars=precedes:...' character printed on the left of the line is interfering with the '<' character also printed on the left of the line when a double-width char is partially present on the left of the window. Another consequence of this bug, is that columns in different lines can be displayed misaligned. Example: 1) Load misaligned.txt attached file (utf-8 file): vim -u NONE misalign.txt 2) Type Ex command: :set nu columns=80 tw=0 nowrap listchars=precedes:@ sidescroll=1 enc=utf-8 fenc=utf-8 3) Scroll horizontally in command mode with zl and zh 4) Observe that while scrolling horizontally, vertical alignment of columns is not preserved. See screenshots before and after scrolling with zl: http://dominique.pelle.free.fr/pic/misaligned-1.png (OK) http://dominique.pelle.free.fr/pic/misaligned-2.png (BAD!) Notice that not only line 4 is not aligned vertically with other lines in second screenshot, but the '<' character displayed at line 3 should not be there since no double-width multi-byte char is truncated at line 3! So given these lines in buffer... abcdefghijklmnopqrstuvwxyz 한cde한h한klmnopqrstuvwxyz a한defg한jklmnopqrstuvwxyz after scrolling horizontally, Vim-7.2.411 currently displays: @cdefghijklmnopqrstuvwxyz <cde한h한klmnopqrstuvwxyz @defg한jklmnopqrstuvwxyz I think that Vim should display this (vertically aligned): @cdefghijklmnopqrstuvwxyz @cde한h한klmnopqrstuvwxyz @<defg한jklmnopqrstuvwxyz Looking at the code, it's unclear to me how to implement it. win_line() function is quite complicated. The '<' char and '@' char (listchar=precedes:@) are printed in screen.c around those locations: screen.c: 3872 /* If a double-width char doesn't fit at the left side display 3873 * a '<' in the first column. */ 3874 if (n_skip > 0 && mb_l > 1) 3875 { 3876 n_extra = 1; 3877 c_extra = '<'; .... 4326 /* 4327 * Handle the case where we are in column 0 but not on the first 4328 * character of the line and the user wants us to show us a 4329 * special character (via 'listchars' option "precedes:<char>". 4330 */ 4331 if (lcs_prec_todo != NUL 4332 && (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0) 4333 #ifdef FEAT_DIFF 4334 && filler_todo <= 0 4335 #endif 4336 && draw_state > WL_NR 4337 && c != NUL) 4338 { 4339 c = lcs_prec; 4340 lcs_prec_todo = NUL; 4341 #ifdef FEAT_MBYTE 4342 mb_c = c; -- Dominique -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php To unsubscribe, reply using "remove me" as the subject.
--------------------------------------------------------------------------------------------------- abcdefghijklmnopqrstuvwxyz 한cde한h한klmnopqrstuvwxyz a한defg한jklmnopqrstuvwxyz