To: vim-dev@vim.org Subject: Patch 5.7a.003 Fcc: outbox From: Bram Moolenaar ------------ Patch 5.7a.003 Problem: Multi-byte: After using CTRL-O in Insert mode with the cursor at the end of the line on a multi-byte character the cursor moves to the left. Solution: Check for multi-byte character at end-of-line. (Taro Muraoka) Also: fix cls() to detect a double-byte character. (Chong-Dae Park) Files: src/edit.c, src/search.c *** ../vim-5.7a.2/src/edit.c Wed Jun 7 12:24:52 2000 --- src/edit.c Sat Jun 17 21:32:18 2000 *************** *** 351,359 **** update_curswant(); if ( ((o_eol && curwin->w_cursor.lnum == o_lnum) || curwin->w_curswant > curwin->w_virtcol) ! && *(ptr = ml_get_curline() + curwin->w_cursor.col) != NUL ! && *(ptr + 1) == NUL) ! ++curwin->w_cursor.col; } else { --- 351,366 ---- update_curswant(); if ( ((o_eol && curwin->w_cursor.lnum == o_lnum) || curwin->w_curswant > curwin->w_virtcol) ! && *(ptr = ml_get_curline() + curwin->w_cursor.col) != NUL) ! { ! if (ptr[1] == NUL) ! ++curwin->w_cursor.col; ! #ifdef MULTI_BYTE ! else if (is_dbcs && ptr[2] == NUL && IsLeadByte(ptr[0]) ! && IsTrailByte(ptr - curwin->w_cursor.col, ptr + 1)) ! curwin->w_cursor.col += 2; ! #endif ! } } else { *** ../vim-5.7a.2/src/search.c Sun Apr 2 11:47:17 2000 --- src/search.c Sat Jun 17 21:48:57 2000 *************** *** 2069,2075 **** if (c == ' ' || c == '\t' || c == NUL) return 0; #ifdef MULTI_BYTE ! if (is_dbcs && IsLeadByte(c)) { /* process code leading/trailing bytes */ unsigned char pcode_lb = c & 0xff; --- 2070,2076 ---- if (c == ' ' || c == '\t' || c == NUL) return 0; #ifdef MULTI_BYTE ! if (is_dbcs && c > 0xff) { /* process code leading/trailing bytes */ unsigned char pcode_lb = c & 0xff; *************** *** 2084,2090 **** lb = pcode_lb; tb = pcode_tb; /* convert process code to JIS */ ! #ifdef WIN32 /* process code is SJIS */ if (lb <= 0x9f) lb = (lb - 0x81) * 2 + 0x21; --- 2085,2091 ---- lb = pcode_lb; tb = pcode_tb; /* convert process code to JIS */ ! # if defined(WIN32) || defined(macintosh) /* process code is SJIS */ if (lb <= 0x9f) lb = (lb - 0x81) * 2 + 0x21; *************** *** 2099,2105 **** tb -= 0x7e; lb += 1; } ! #else /* * XXX: Code page identification can not use with all * system! So, some other encoding information --- 2100,2106 ---- tb -= 0x7e; lb += 1; } ! # else /* * XXX: Code page identification can not use with all * system! So, some other encoding information *************** *** 2112,2118 **** /* assume process code is JAPANESE-EUC */ lb &= 0x7f; tb &= 0x7f; ! #endif /* exceptions */ switch (lb << 8 | tb) { --- 2113,2119 ---- /* assume process code is JAPANESE-EUC */ lb &= 0x7f; tb &= 0x7f; ! # endif /* exceptions */ switch (lb << 8 | tb) { *** ../vim-5.7a.2/src/version.c Sun Jun 18 15:33:53 2000 --- src/version.c Sun Jun 18 15:34:54 2000 *************** *** 420,421 **** --- 420,423 ---- { /* Add new patch number below this line */ + /**/ + 3, /**/ -- hundred-and-one symptoms of being an internet addict: 50. The last girl you picked up was only a jpeg. /-/-- Bram Moolenaar --- Bram@moolenaar.net --- http://www.moolenaar.net --\-\ \-\-- Vim: http://www.vim.org ---- ICCF Holland: http://www.vim.org/iccf --/-/