comparison src/fold.c @ 27301:ebe56a24acb6 v8.2.4179

patch 8.2.4179: 'foldtext' is evaluated in the current script context Commit: https://github.com/vim/vim/commit/9530b580a7b71960dbbdb2b12a3aafeb540bd135 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 22 13:39:08 2022 +0000 patch 8.2.4179: 'foldtext' is evaluated in the current script context Problem: 'foldtext' is evaluated in the current script context. Solution: Use the script context where the option was set.
author Bram Moolenaar <Bram@vim.org>
date Sat, 22 Jan 2022 14:45:02 +0100
parents e11682ba8c80
children 41e0dcf38521
comparison
equal deleted inserted replaced
27300:160b87e56c45 27301:ebe56a24acb6
1921 did_emsg = FALSE; 1921 did_emsg = FALSE;
1922 1922
1923 if (*wp->w_p_fdt != NUL) 1923 if (*wp->w_p_fdt != NUL)
1924 { 1924 {
1925 char_u dashes[MAX_LEVEL + 2]; 1925 char_u dashes[MAX_LEVEL + 2];
1926 win_T *save_curwin;
1927 int level; 1926 int level;
1928 char_u *p; 1927 char_u *p;
1929 1928
1930 // Set "v:foldstart" and "v:foldend". 1929 // Set "v:foldstart" and "v:foldend".
1931 set_vim_var_nr(VV_FOLDSTART, lnum); 1930 set_vim_var_nr(VV_FOLDSTART, lnum);
1939 vim_memset(dashes, '-', (size_t)level); 1938 vim_memset(dashes, '-', (size_t)level);
1940 dashes[level] = NUL; 1939 dashes[level] = NUL;
1941 set_vim_var_string(VV_FOLDDASHES, dashes, -1); 1940 set_vim_var_string(VV_FOLDDASHES, dashes, -1);
1942 set_vim_var_nr(VV_FOLDLEVEL, (long)level); 1941 set_vim_var_nr(VV_FOLDLEVEL, (long)level);
1943 1942
1944 // skip evaluating foldtext on errors 1943 // skip evaluating 'foldtext' on errors
1945 if (!got_fdt_error) 1944 if (!got_fdt_error)
1946 { 1945 {
1947 save_curwin = curwin; 1946 win_T *save_curwin = curwin;
1947 sctx_T saved_sctx = current_sctx;
1948
1948 curwin = wp; 1949 curwin = wp;
1949 curbuf = wp->w_buffer; 1950 curbuf = wp->w_buffer;
1950 1951 current_sctx = wp->w_p_script_ctx[WV_FDT];
1951 ++emsg_silent; // handle exceptions, but don't display errors 1952
1953 ++emsg_off; // handle exceptions, but don't display errors
1952 text = eval_to_string_safe(wp->w_p_fdt, 1954 text = eval_to_string_safe(wp->w_p_fdt,
1953 was_set_insecurely((char_u *)"foldtext", OPT_LOCAL)); 1955 was_set_insecurely((char_u *)"foldtext", OPT_LOCAL), TRUE);
1954 --emsg_silent; 1956 --emsg_off;
1955 1957
1956 if (text == NULL || did_emsg) 1958 if (text == NULL || did_emsg)
1957 got_fdt_error = TRUE; 1959 got_fdt_error = TRUE;
1958 1960
1959 curwin = save_curwin; 1961 curwin = save_curwin;
1960 curbuf = curwin->w_buffer; 1962 curbuf = curwin->w_buffer;
1963 current_sctx = saved_sctx;
1961 } 1964 }
1962 last_lnum = lnum; 1965 last_lnum = lnum;
1963 last_wp = wp; 1966 last_wp = wp;
1964 set_vim_var_string(VV_FOLDDASHES, NULL, -1); 1967 set_vim_var_string(VV_FOLDDASHES, NULL, -1);
1965 1968