diff options
author | erw7 <erw7.github@gmail.com> | 2021-10-30 08:55:32 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-29 16:55:32 -0700 |
commit | 16d06fa3eb74ed96b659736ea504c31ed81c325e (patch) | |
tree | a8e3e1b7e2426b697d10746378e61f9587d15432 /src | |
parent | ac358bfb2f644b79ab1f6f17dddcec1bf32f8d97 (diff) | |
download | rneovim-16d06fa3eb74ed96b659736ea504c31ed81c325e.tar.gz rneovim-16d06fa3eb74ed96b659736ea504c31ed81c325e.tar.bz2 rneovim-16d06fa3eb74ed96b659736ea504c31ed81c325e.zip |
fix(eval): fix has('wsl') #16153
Problem:
has('wsl') is decided at build-time.
Solution:
Check os_uname().
Fixes #12642, #16143
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval/funcs.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index b6ea3ad0dd..29f7d22317 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -4553,9 +4553,6 @@ static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr) "windows", "winaltkeys", "writebackup", -#if defined(HAVE_WSL) - "wsl", -#endif "nvim", }; @@ -4602,6 +4599,8 @@ static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr) n = syntax_present(curwin); } else if (STRICMP(name, "clipboard_working") == 0) { n = eval_has_provider("clipboard"); + } else if (STRICMP(name, "wsl") == 0) { + n = has_wsl(); #ifdef UNIX } else if (STRICMP(name, "unnamedplus") == 0) { n = eval_has_provider("clipboard"); @@ -4616,9 +4615,24 @@ static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr) rettv->vval.v_number = n; } -/* - * "has_key()" function - */ +static bool has_wsl(void) +{ + static TriState has_wsl = kNone; + if (has_wsl == kNone) { + Error err = ERROR_INIT; + Object o = nlua_exec( + STATIC_CSTR_AS_STRING("return vim.loop.os_uname()['release']:lower()" + ":match('microsoft') and true or false"), + (Array)ARRAY_DICT_INIT, &err); + assert(!ERROR_SET(&err)); + assert(o.type == kObjectTypeBoolean); + has_wsl = o.data.boolean ? kTrue : kFalse; + api_free_object(o); + } + return has_wsl == kTrue; +} + +/// "has_key()" function static void f_has_key(typval_T *argvars, typval_T *rettv, FunPtr fptr) { if (argvars[0].v_type != VAR_DICT) { |