Mercurial > vim
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 |