diff options
Diffstat (limited to 'data/vim/patches/8.1.0445')
-rw-r--r-- | data/vim/patches/8.1.0445 | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0445 b/data/vim/patches/8.1.0445 new file mode 100644 index 000000000..41076aeeb --- /dev/null +++ b/data/vim/patches/8.1.0445 @@ -0,0 +1,317 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0445 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0445 +Problem: Setting 'term' does not store location for termcap options. +Solution: Set the script context for termcap options that are changed when + 'term' is set. +Files: src/option.c, src/proto/option.pro, src/term.c, + src/testdir/test_options.vim + + +*** ../vim-8.1.0444/src/option.c 2018-09-30 21:43:17.199693265 +0200 +--- src/option.c 2018-10-02 14:12:11.856267373 +0200 +*************** +*** 1755,1766 **** + {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE, + #ifdef FEAT_LANGMAP + (char_u *)&p_langmap, PV_NONE, +! {(char_u *)"", /* unmatched } */ + #else + (char_u *)NULL, PV_NONE, +! {(char_u *)NULL, + #endif +! (char_u *)0L} SCTX_INIT}, + {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME, + #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG) + (char_u *)&p_lm, PV_NONE, +--- 1755,1766 ---- + {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE, + #ifdef FEAT_LANGMAP + (char_u *)&p_langmap, PV_NONE, +! {(char_u *)"", (char_u *)0L} + #else + (char_u *)NULL, PV_NONE, +! {(char_u *)NULL, (char_u *)0L} + #endif +! SCTX_INIT}, + {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME, + #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG) + (char_u *)&p_lm, PV_NONE, +*************** +*** 5790,5809 **** + } + + /* +! * Mark a terminal option as allocated, found by a pointer into term_strings[]. + */ +! void +! set_term_option_alloced(char_u **p) + { +! int opt_idx; + + for (opt_idx = 1; options[opt_idx].fullname != NULL; opt_idx++) + if (options[opt_idx].var == (char_u *)p) +! { +! options[opt_idx].flags |= P_ALLOCED; +! return; +! } +! return; /* cannot happen: didn't find it! */ + } + + #if defined(FEAT_EVAL) || defined(PROTO) +--- 5790,5821 ---- + } + + /* +! * Return the option index found by a pointer into term_strings[]. +! * Return -1 if not found. + */ +! int +! get_term_opt_idx(char_u **p) + { +! int opt_idx; + + for (opt_idx = 1; options[opt_idx].fullname != NULL; opt_idx++) + if (options[opt_idx].var == (char_u *)p) +! return opt_idx; +! return -1; // cannot happen: didn't find it! +! } +! +! /* +! * Mark a terminal option as allocated, found by a pointer into term_strings[]. +! * Return the option index or -1 if not found. +! */ +! int +! set_term_option_alloced(char_u **p) +! { +! int opt_idx = get_term_opt_idx(p); +! +! if (opt_idx >= 0) +! options[opt_idx].flags |= P_ALLOCED; +! return opt_idx; + } + + #if defined(FEAT_EVAL) || defined(PROTO) +*************** +*** 8237,8242 **** +--- 8249,8280 ---- + curwin->w_p_script_ctx[indir & PV_MASK] = new_script_ctx; + } + } ++ ++ /* ++ * Set the script_ctx for a termcap option. ++ * "name" must be the two character code, e.g. "RV". ++ * When "name" is NULL use "opt_idx". ++ */ ++ void ++ set_term_option_sctx_idx(char *name, int opt_idx) ++ { ++ char_u buf[5]; ++ int idx; ++ ++ if (name == NULL) ++ idx = opt_idx; ++ else ++ { ++ buf[0] = 't'; ++ buf[1] = '_'; ++ buf[2] = name[0]; ++ buf[3] = name[1]; ++ buf[4] = 0; ++ idx = findoption(buf); ++ } ++ if (idx >= 0) ++ set_option_sctx_idx(idx, OPT_GLOBAL, current_sctx); ++ } + #endif + + /* +*************** +*** 10445,10451 **** + { + struct vimoption *p; + +! for (p = &options[0]; p->fullname != NULL; p++) + if (istermoption(p)) + { + if (p->flags & P_ALLOCED) +--- 10483,10489 ---- + { + struct vimoption *p; + +! for (p = options; p->fullname != NULL; p++) + if (istermoption(p)) + { + if (p->flags & P_ALLOCED) +*************** +*** 10455,10460 **** +--- 10493,10502 ---- + *(char_u **)(p->var) = empty_option; + p->def_val[VI_DEFAULT] = empty_option; + p->flags &= ~(P_ALLOCED|P_DEF_ALLOCED); ++ #ifdef FEAT_EVAL ++ // remember where the option was cleared ++ set_option_sctx_idx((int)(p - options), OPT_GLOBAL, current_sctx); ++ #endif + } + clear_termcodes(); + } +*** ../vim-8.1.0444/src/proto/option.pro 2018-09-13 20:31:47.103018229 +0200 +--- src/proto/option.pro 2018-10-02 14:12:15.040243605 +0200 +*************** +*** 17,27 **** + void check_buf_options(buf_T *buf); + void free_string_option(char_u *p); + void clear_string_option(char_u **pp); +! void set_term_option_alloced(char_u **p); + int was_set_insecurely(char_u *opt, int opt_flags); + void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid); + char_u *check_colorcolumn(win_T *wp); + char_u *check_stl_option(char_u *s); + int get_option_value(char_u *name, long *numval, char_u **stringval, int opt_flags); + int get_option_value_strict(char_u *name, long *numval, char_u **stringval, int opt_type, void *from); + char_u *option_iter_next(void **option, int opt_type); +--- 17,29 ---- + void check_buf_options(buf_T *buf); + void free_string_option(char_u *p); + void clear_string_option(char_u **pp); +! int get_term_opt_idx(char_u **p); +! int set_term_option_alloced(char_u **p); + int was_set_insecurely(char_u *opt, int opt_flags); + void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid); + char_u *check_colorcolumn(win_T *wp); + char_u *check_stl_option(char_u *s); ++ void set_term_option_sctx_idx(char *name, int opt_idx); + int get_option_value(char_u *name, long *numval, char_u **stringval, int opt_flags); + int get_option_value_strict(char_u *name, long *numval, char_u **stringval, int opt_type, void *from); + char_u *option_iter_next(void **option, int opt_type); +*** ../vim-8.1.0444/src/term.c 2018-09-30 21:43:17.207693209 +0200 +--- src/term.c 2018-10-02 14:44:51.335763377 +0200 +*************** +*** 1471,1476 **** +--- 1471,1479 ---- + if (term_strings[p->bt_entry] == NULL + || term_strings[p->bt_entry] == empty_option) + { ++ #ifdef FEAT_EVAL ++ int opt_idx = -1; ++ #endif + /* 8bit terminal: use CSI instead of <Esc>[ */ + if (term_8bit && term_7to8bit((char_u *)p->bt_string) != 0) + { +*************** +*** 1486,1496 **** + STRMOVE(t + 1, t + 2); + } + term_strings[p->bt_entry] = s; +! set_term_option_alloced(&term_strings[p->bt_entry]); + } + } + else + term_strings[p->bt_entry] = (char_u *)p->bt_string; + } + } + else +--- 1489,1511 ---- + STRMOVE(t + 1, t + 2); + } + term_strings[p->bt_entry] = s; +! #ifdef FEAT_EVAL +! opt_idx = +! #endif +! set_term_option_alloced( +! &term_strings[p->bt_entry]); + } + } + else ++ { + term_strings[p->bt_entry] = (char_u *)p->bt_string; ++ #ifdef FEAT_EVAL ++ opt_idx = get_term_opt_idx(&term_strings[p->bt_entry]); ++ #endif ++ } ++ #ifdef FEAT_EVAL ++ set_term_option_sctx_idx(NULL, opt_idx); ++ #endif + } + } + else +*************** +*** 1616,1622 **** +--- 1631,1642 ---- + { + if (TERM_STR(string_names[i].dest) == NULL + || TERM_STR(string_names[i].dest) == empty_option) ++ { + TERM_STR(string_names[i].dest) = TGETSTR(string_names[i].name, &tp); ++ #ifdef FEAT_EVAL ++ set_term_option_sctx_idx(string_names[i].name, -1); ++ #endif ++ } + } + + /* tgetflag() returns 1 if the flag is present, 0 if not and +*************** +*** 1658,1664 **** +--- 1678,1689 ---- + * Get number of colors (if not done already). + */ + if (TERM_STR(KS_CCO) == NULL || TERM_STR(KS_CCO) == empty_option) ++ { + set_color_count(tgetnum("Co")); ++ #ifdef FEAT_EVAL ++ set_term_option_sctx_idx("Co", -1); ++ #endif ++ } + + # ifndef hpux + BC = (char *)TGETSTR("bc", &tp); +*** ../vim-8.1.0444/src/testdir/test_options.vim 2018-08-23 22:20:31.449852029 +0200 +--- src/testdir/test_options.vim 2018-10-02 14:42:18.764840113 +0200 +*************** +*** 270,275 **** +--- 270,287 ---- + call assert_fails('set t_foo=', 'E846:') + endfunc + ++ " Must be executed before other tests that set 'term'. ++ func Test_000_term_option_verbose() ++ let verb_cm = execute('verbose set t_cm') ++ call assert_notmatch('Last set from', verb_cm) ++ ++ let term_save = &term ++ set term=ansi ++ let verb_cm = execute('verbose set t_cm') ++ call assert_match('Last set from.*test_options.vim', verb_cm) ++ let &term = term_save ++ endfunc ++ + func Test_set_ttytype() + if !has('gui_running') && has('unix') + " Setting 'ttytype' used to cause a double-free when exiting vim and +*** ../vim-8.1.0444/src/version.c 2018-10-02 14:15:08.991376909 +0200 +--- src/version.c 2018-10-02 14:42:46.984641236 +0200 +*************** +*** 794,795 **** +--- 794,797 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 445, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +132. You come back and check this list every half-hour. + + /// 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 /// |