Mercurial > vim
changeset 10825:4dea7c96fc82 v8.0.0302
patch 8.0.0302: cannot set terminal key codes with :let
commit https://github.com/vim/vim/commit/e353c402e63b9b0a0bc06acf390e352d9e7eeaeb
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Feb 4 19:49:16 2017 +0100
patch 8.0.0302: cannot set terminal key codes with :let
Problem: Cannot set terminal key codes with :let.
Solution: Make it work.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 04 Feb 2017 20:00:04 +0100 |
parents | fa27bdf7bf41 |
children | c87e4d47304a |
files | src/option.c src/testdir/test_assign.vim src/version.c |
diffstat | 3 files changed, 76 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/option.c +++ b/src/option.c @@ -9197,7 +9197,35 @@ get_option_value( opt_idx = findoption(name); if (opt_idx < 0) /* unknown option */ + { + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' + && (key = find_key_option(name)) != 0) + { + char_u key_name[2]; + char_u *p; + + if (key < 0) + { + key_name[0] = KEY2TERMCAP0(key); + key_name[1] = KEY2TERMCAP1(key); + } + else + { + key_name[0] = KS_KEY; + key_name[1] = (key & 0xff); + } + p = find_termcode(key_name); + if (p != NULL) + { + if (stringval != NULL) + *stringval = vim_strsave(p); + return 0; + } + } return -3; + } varp = get_varp_scope(&(options[opt_idx]), opt_flags); @@ -9455,7 +9483,33 @@ set_option_value( opt_idx = findoption(name); if (opt_idx < 0) + { + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' + && (key = find_key_option(name)) != 0) + { + char_u key_name[2]; + + if (key < 0) + { + key_name[0] = KEY2TERMCAP0(key); + key_name[1] = KEY2TERMCAP1(key); + } + else + { + key_name[0] = KS_KEY; + key_name[1] = (key & 0xff); + } + add_termcode(key_name, string, FALSE); + if (full_screen) + ttest(FALSE); + redraw_all_later(CLEAR); + return NULL; + } + EMSG2(_("E355: Unknown option: %s"), name); + } else { flags = options[opt_idx].flags;
--- a/src/testdir/test_assign.vim +++ b/src/testdir/test_assign.vim @@ -7,3 +7,23 @@ func Test_no_type_checking() let v = 3.4 let v = 'hello' endfunc + +func Test_let_termcap() + " Terminal code + let old_t_te = &t_te + let &t_te = "\<Esc>[yes;" + call assert_match('t_te.*^[[yes;', execute("set termcap")) + let &t_te = old_t_te + + " Key code + let old_t_k1 = &t_k1 + let &t_k1 = "that" + call assert_match('t_k1.*that', execute("set termcap")) + let &t_k1 = old_t_k1 + + call assert_fails('let x = &t_xx', 'E15') + let &t_xx = "yes" + call assert_equal("yes", &t_xx) + let &t_xx = "" + call assert_fails('let x = &t_xx', 'E15') +endfunc