Commit ccc08b4cf04340375f80e12e5d32245ddd2ab582

bug fix: multi-byte characters don't work with <Backspace> and <Del>
Author: houtsnip
Author date (UTC): 2011-06-06 09:41
Committer name: houtsnip
Committer date (UTC): 2011-06-06 09:41
Parent(s): 0e90240b2519a552e3b99821361f1c373ba40c41
Signing key:
Tree: 8d54d34e7eea66935c5c2bbe8062ce3f3998b393
File Lines added Lines deleted
plugin/emacscommandline.vim 12 8
File plugin/emacscommandline.vim changed (mode: 100644) (index 4b5aec9..e9abd79)
... ... cnoremap <Del> <C-\>e<SID>DeleteChar()<CR>
63 63 cmap <C-D> <Del> cmap <C-D> <Del>
64 64 function! <SID>DeleteChar() function! <SID>DeleteChar()
65 65 call <SID>saveUndoHistory(getcmdline(), getcmdpos()) call <SID>saveUndoHistory(getcmdline(), getcmdpos())
66 let l:cmd = getcmdline()
67 let l:rem = strpart(l:cmd, getcmdpos() - 1, 1)
66 let l:cmd = getcmdline()
67 " Get length of character to be deleted (in bytes)
68 let l:charlen = strlen(substitute(strpart(l:cmd, getcmdpos() - 1), '^\(.\).*', '\1', ''))
69 let l:rem = strpart(l:cmd, getcmdpos() - 1, l:charlen)
68 70 if ('' != l:rem) if ('' != l:rem)
69 71 let @c = l:rem let @c = l:rem
70 72 endif endif
71 let l:ret = strpart(l:cmd, 0, getcmdpos() - 1) . strpart(l:cmd, getcmdpos())
73 let l:ret = strpart(l:cmd, 0, getcmdpos() - 1) . strpart(l:cmd, getcmdpos() + l:charlen - 1)
72 74 call <SID>saveUndoHistory(l:ret, getcmdpos()) call <SID>saveUndoHistory(l:ret, getcmdpos())
73 75 return l:ret return l:ret
74 76 endfunction endfunction
 
... ... function! <SID>BackwardDeleteChar()
79 81 if (getcmdpos() < 2) if (getcmdpos() < 2)
80 82 return getcmdline() return getcmdline()
81 83 endif endif
82 let l:cmd = getcmdline()
83 let l:rem = strpart(l:cmd, getcmdpos() - 2, 1)
84 let @c = l:rem
85 let l:pos = getcmdpos() - 1
86 let l:ret = strpart(l:cmd, 0, getcmdpos() - 2) . strpart(l:cmd, getcmdpos() - 1)
84 let l:cmd = getcmdline()
85 " Get length of character to be deleted (in bytes)
86 let l:charlen = strlen(substitute(strpart(l:cmd, 0, getcmdpos() - 1), '.*\(.\)$', '\1', ''))
87 let l:pos = getcmdpos() - l:charlen
88 let l:rem = strpart(l:cmd, getcmdpos() - l:charlen - 1, l:charlen)
89 let @c = l:rem
90 let l:ret = strpart(l:cmd, 0, l:pos - 1) . strpart(l:cmd, getcmdpos() - 1)
87 91 call <SID>saveUndoHistory(l:ret, l:pos) call <SID>saveUndoHistory(l:ret, l:pos)
88 92 call setcmdpos(l:pos) call setcmdpos(l:pos)
89 93 return l:ret return l:ret
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vim-emacscommandline

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vim-emacscommandline

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master