To: vim_dev@googlegroups.com Subject: Patch 8.0.0302 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0302 Problem: Cannot set terminal key codes with :let. Solution: Make it work. Files: src/option.c, src/testdir/test_assign.vim *** ../vim-8.0.0301/src/option.c 2017-01-28 15:58:45.348197250 +0100 --- src/option.c 2017-02-04 19:29:50.097068632 +0100 *************** *** 9197,9203 **** --- 9197,9231 ---- 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,9461 **** --- 9483,9515 ---- 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; *** ../vim-8.0.0301/src/testdir/test_assign.vim 2016-03-12 18:59:21.000000000 +0100 --- src/testdir/test_assign.vim 2017-02-04 19:32:17.739978777 +0100 *************** *** 7,9 **** --- 7,29 ---- let v = 3.4 let v = 'hello' endfunc + + func Test_let_termcap() + " Terminal code + let old_t_te = &t_te + let &t_te = "\[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 *** ../vim-8.0.0301/src/version.c 2017-02-04 15:53:27.759771102 +0100 --- src/version.c 2017-02-04 19:21:39.624690924 +0100 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 302, /**/ -- Biting someone with your natural teeth is "simple assault," while biting someone with your false teeth is "aggravated assault." [real standing law in Louisana, United States of America] /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///