comparison src/evalfunc.c @ 17221:a8fc7d97b54d v8.1.1610

patch 8.1.1610: there is no way to add or load a buffer without side effects commit https://github.com/vim/vim/commit/15e248e37f3925d430f96e945d52d3dc423cdc83 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 30 20:21:37 2019 +0200 patch 8.1.1610: there is no way to add or load a buffer without side effects Problem: There is no way to add or load a buffer without side effects. Solution: Add the bufadd() and bufload() functions.
author Bram Moolenaar <Bram@vim.org>
date Sun, 30 Jun 2019 20:30:05 +0200
parents 210c4c5f783d
children 07bbe73b8e74
comparison
equal deleted inserted replaced
17220:646872542fb3 17221:a8fc7d97b54d
69 static void f_balloon_split(typval_T *argvars, typval_T *rettv); 69 static void f_balloon_split(typval_T *argvars, typval_T *rettv);
70 # endif 70 # endif
71 #endif 71 #endif
72 static void f_browse(typval_T *argvars, typval_T *rettv); 72 static void f_browse(typval_T *argvars, typval_T *rettv);
73 static void f_browsedir(typval_T *argvars, typval_T *rettv); 73 static void f_browsedir(typval_T *argvars, typval_T *rettv);
74 static void f_bufadd(typval_T *argvars, typval_T *rettv);
74 static void f_bufexists(typval_T *argvars, typval_T *rettv); 75 static void f_bufexists(typval_T *argvars, typval_T *rettv);
75 static void f_buflisted(typval_T *argvars, typval_T *rettv); 76 static void f_buflisted(typval_T *argvars, typval_T *rettv);
77 static void f_bufload(typval_T *argvars, typval_T *rettv);
76 static void f_bufloaded(typval_T *argvars, typval_T *rettv); 78 static void f_bufloaded(typval_T *argvars, typval_T *rettv);
77 static void f_bufname(typval_T *argvars, typval_T *rettv); 79 static void f_bufname(typval_T *argvars, typval_T *rettv);
78 static void f_bufnr(typval_T *argvars, typval_T *rettv); 80 static void f_bufnr(typval_T *argvars, typval_T *rettv);
79 static void f_bufwinid(typval_T *argvars, typval_T *rettv); 81 static void f_bufwinid(typval_T *argvars, typval_T *rettv);
80 static void f_bufwinnr(typval_T *argvars, typval_T *rettv); 82 static void f_bufwinnr(typval_T *argvars, typval_T *rettv);
524 {"balloon_split", 1, 1, f_balloon_split}, 526 {"balloon_split", 1, 1, f_balloon_split},
525 # endif 527 # endif
526 #endif 528 #endif
527 {"browse", 4, 4, f_browse}, 529 {"browse", 4, 4, f_browse},
528 {"browsedir", 2, 2, f_browsedir}, 530 {"browsedir", 2, 2, f_browsedir},
531 {"bufadd", 1, 1, f_bufadd},
529 {"bufexists", 1, 1, f_bufexists}, 532 {"bufexists", 1, 1, f_bufexists},
530 {"buffer_exists", 1, 1, f_bufexists}, /* obsolete */ 533 {"buffer_exists", 1, 1, f_bufexists}, /* obsolete */
531 {"buffer_name", 1, 1, f_bufname}, /* obsolete */ 534 {"buffer_name", 1, 1, f_bufname}, /* obsolete */
532 {"buffer_number", 1, 1, f_bufnr}, /* obsolete */ 535 {"buffer_number", 1, 1, f_bufnr}, /* obsolete */
533 {"buflisted", 1, 1, f_buflisted}, 536 {"buflisted", 1, 1, f_buflisted},
537 {"bufload", 1, 1, f_bufload},
534 {"bufloaded", 1, 1, f_bufloaded}, 538 {"bufloaded", 1, 1, f_bufloaded},
535 {"bufname", 1, 1, f_bufname}, 539 {"bufname", 1, 1, f_bufname},
536 {"bufnr", 1, 2, f_bufnr}, 540 {"bufnr", 1, 2, f_bufnr},
537 {"bufwinid", 1, 1, f_bufwinid}, 541 {"bufwinid", 1, 1, f_bufwinid},
538 {"bufwinnr", 1, 1, f_bufwinnr}, 542 {"bufwinnr", 1, 1, f_bufwinnr},
1918 } 1922 }
1919 return buf; 1923 return buf;
1920 } 1924 }
1921 1925
1922 /* 1926 /*
1927 * "bufadd(expr)" function
1928 */
1929 static void
1930 f_bufadd(typval_T *argvars, typval_T *rettv)
1931 {
1932 rettv->vval.v_number = buflist_add(tv_get_string(&argvars[0]), 0);
1933 }
1934
1935 /*
1923 * "bufexists(expr)" function 1936 * "bufexists(expr)" function
1924 */ 1937 */
1925 static void 1938 static void
1926 f_bufexists(typval_T *argvars, typval_T *rettv) 1939 f_bufexists(typval_T *argvars, typval_T *rettv)
1927 { 1940 {
1936 { 1949 {
1937 buf_T *buf; 1950 buf_T *buf;
1938 1951
1939 buf = find_buffer(&argvars[0]); 1952 buf = find_buffer(&argvars[0]);
1940 rettv->vval.v_number = (buf != NULL && buf->b_p_bl); 1953 rettv->vval.v_number = (buf != NULL && buf->b_p_bl);
1954 }
1955
1956 /*
1957 * "bufload(expr)" function
1958 */
1959 static void
1960 f_bufload(typval_T *argvars, typval_T *rettv UNUSED)
1961 {
1962 buf_T *buf = get_buf_arg(&argvars[0]);
1963
1964 if (buf != NULL && buf->b_ml.ml_mfp == NULL)
1965 {
1966 aco_save_T aco;
1967
1968 aucmd_prepbuf(&aco, buf);
1969 swap_exists_action = SEA_NONE;
1970 open_buffer(FALSE, NULL, 0);
1971 aucmd_restbuf(&aco);
1972 }
1941 } 1973 }
1942 1974
1943 /* 1975 /*
1944 * "bufloaded(expr)" function 1976 * "bufloaded(expr)" function
1945 */ 1977 */