vim-patch:7.4.2236

Problem:    The 'langnoremap' option leads to double negatives.  And it does
            not work for the last character of a mapping.
Solution:   Add 'langremap' with the opposite value.  Keep 'langnoremap' for
            backwards compatibility.  Make it work for the last character of a
            mapping.  Make the test work.

920694c1b6
This commit is contained in:
lonerover 2017-03-22 12:24:07 +08:00
parent 8de53157b6
commit 53da57d27a
6 changed files with 78 additions and 21 deletions

View File

@ -94,7 +94,7 @@
do { \
if (*p_langmap \
&& (condition) \
&& (!p_lnr || (p_lnr && typebuf_maplen() == 0)) \
&& (p_lrm || (!p_lrm && KeyTyped)) \
&& !KeyStuffed \
&& (c) >= 0) \
{ \

View File

@ -3630,6 +3630,12 @@ static char *set_bool_option(const int opt_idx, char_u *const varp,
} else if ((int *)varp == &p_force_off && p_force_off == true) {
p_force_off = false;
return (char *)e_unsupportedoption;
} else if ((int *)varp == &p_lrm) {
// 'langremap' -> !'langnoremap'
p_lnr = !p_lrm;
} else if ((int *)varp == &p_lnr) {
// 'langnoremap' -> !'langremap'
p_lrm = !p_lnr;
// 'undofile'
} else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf) {
// Only take action when the option was set. When reset we do not

View File

@ -476,8 +476,9 @@ EXTERN char_u *p_isp; // 'isprint'
EXTERN int p_js; // 'joinspaces'
EXTERN char_u *p_kp; // 'keywordprg'
EXTERN char_u *p_km; // 'keymodel'
EXTERN char_u *p_langmap; // 'langmap'*/
EXTERN int p_lnr; // 'langnoremap'*/
EXTERN char_u *p_langmap; // 'langmap'
EXTERN int p_lnr; // 'langnoremap'
EXTERN int p_lrm; // 'langremap'
EXTERN char_u *p_lm; // 'langmenu'
EXTERN char_u *p_lispwords; // 'lispwords'
EXTERN long p_ls; // 'laststatus'

View File

@ -1346,6 +1346,12 @@ return {
varname='p_lnr',
defaults={if_true={vi=false, vim=true}}
},
{
full_name='langremap', abbreviation='lrm',
type='bool', scope={'global'},
varname='p_lrm',
defaults={if_true={vi=true, vim=false}}
},
{
full_name='laststatus', abbreviation='ls',
type='number', scope={'global'},

View File

@ -35,29 +35,73 @@ func Test_map_ctrl_c_visual()
endfunc
func Test_map_langmap()
" langmap should not get remapped in insert mode
inoremap { FAIL_ilangmap
set langmap=+{ langnoremap
if !has('langmap')
return
endif
" check langmap applies in normal mode
set langmap=+- nolangremap
new
call setline(1, ['a', 'b', 'c'])
2
call assert_equal('b', getline('.'))
call feedkeys("+", "xt")
call assert_equal('a', getline('.'))
" check no remapping
map x +
2
call feedkeys("x", "xt")
call assert_equal('c', getline('.'))
" check with remapping
set langremap
2
call feedkeys("x", "xt")
call assert_equal('a', getline('.'))
unmap x
bwipe!
" 'langnoremap' follows 'langremap' and vise versa
set langremap
set langnoremap
call assert_equal(0, &langremap)
set langremap
call assert_equal(0, &langnoremap)
set nolangremap
call assert_equal(1, &langnoremap)
" langmap should not apply in insert mode, 'langremap' doesn't matter
set langmap=+{ nolangremap
call feedkeys("Go+\<Esc>", "xt")
call assert_equal('+', getline('$'))
set langmap=+{ langremap
call feedkeys("Go+\<Esc>", "xt")
call assert_equal('+', getline('$'))
" Insert-mode expr mapping with langmap
inoremap <expr> { "FAIL_iexplangmap"
call feedkeys("Go+\<Esc>", "xt")
call assert_equal('+', getline('$'))
iunmap <expr> {
" langmap used for register name in insert mode.
call setreg('a', 'aaaa')
call setreg('b', 'bbbb')
call setreg('c', 'cccc')
set langmap=ab langremap
call feedkeys("Go\<C-R>a\<Esc>", "xt")
call assert_equal('bbbb', getline('$'))
call feedkeys("Go\<C-R>\<C-R>a\<Esc>", "xt")
call assert_equal('bbbb', getline('$'))
" mapping does not apply
imap c a
call feedkeys("Go\<C-R>c\<Esc>", "xt")
call assert_equal('cccc', getline('$'))
imap a c
call feedkeys("Go\<C-R>a\<Esc>", "xt")
call assert_equal('bbbb', getline('$'))
" langmap should not get remapped in Command-line mode
cnoremap { FAIL_clangmap
" langmap should not apply in Command-line mode
set langmap=+{ nolangremap
call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
call assert_equal('+', getline('$'))
cunmap {
" Command-line mode expr mapping with langmap
cnoremap <expr> { "FAIL_cexplangmap"
call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
call assert_equal('+', getline('$'))
cunmap {
set nomodified
endfunc

View File

@ -205,7 +205,7 @@ static const int included_patches[] = {
// 2239,
// 2238 NA
2237,
// 2236,
2236,
2235,
// 2234 NA
2233,