From 6f0a91579f3b5d30d23420249a74fba432a27a24 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 9 Feb 2025 08:30:58 +0800 Subject: vim-patch:9.1.1083: setreg() doesn't correctly handle mbyte chars in blockwise mode Problem: setreg() doesn't correctly handle mbyte chars in blockwise mode Solution: use mb_ptr2len_len function pointer (Yee Cheng Chin) setreg() will automatically calculate the width when a blockwise mode is specified, but it does not properly calculate the line widths of mbyte characters when value is passed as newline-terminated string. It does work when value is passed as a list of lines though. Fix this by properly using the mbyte function pointer to increment the loop counter. closes: vim/vim#16596 https://github.com/vim/vim/commit/a17f8bfb282805ee8ded014089d3094ef6dbf913 Co-authored-by: Yee Cheng Chin --- test/old/testdir/test_registers.vim | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'test/old/testdir') diff --git a/test/old/testdir/test_registers.vim b/test/old/testdir/test_registers.vim index e5add9414f..fbacdaa2a0 100644 --- a/test/old/testdir/test_registers.vim +++ b/test/old/testdir/test_registers.vim @@ -435,6 +435,23 @@ func Test_set_register() enew! endfunc +" Test for blockwise register width calculations +func Test_set_register_blockwise_width() + " Test for regular calculations and overriding the width + call setreg('a', "12\n1234\n123", 'b') + call assert_equal("\4", getreginfo('a').regtype) + call setreg('a', "12\n1234\n123", 'b1') + call assert_equal("\1", getreginfo('a').regtype) + call setreg('a', "12\n1234\n123", 'b6') + call assert_equal("\6", getreginfo('a').regtype) + + " Test for Unicode parsing + call setreg('a', "z😅😅z\n12345", 'b') + call assert_equal("\6", getreginfo('a').regtype) + call setreg('a', ["z😅😅z", "12345"], 'b') + call assert_equal("\6", getreginfo('a').regtype) +endfunc + " Test for clipboard registers (* and +) func Test_clipboard_regs() throw 'skipped: needs clipboard=autoselect,autoselectplus' -- cgit