echo "*** Interface versions ***\n"
echo 'Lua:'
- PrintVer lua print(_VERSION)
+ PrintVer lua print(vim.lua_version, jit and "(LuaJIT)" or "")
echo 'MzScheme:'
PrintVer mzscheme (display (version))
created on demand. Example: >
:lua print(vim.fn.has('timers'))
<
+ vim.lua_version The Lua version Vim was compiled with, in the
+ form {major}.{minor}.{patch}, e.g. "5.1.4".
==============================================================================
3. List userdata *lua-list*
#define LUAVIM_EVALNAME "luaeval"
#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
+#ifdef LUA_RELEASE
+# define LUAVIM_VERSION LUA_RELEASE
+#else
+# define LUAVIM_VERSION LUA_VERSION
+#endif
+
typedef buf_T *luaV_Buffer;
typedef win_T *luaV_Window;
typedef dict_T *luaV_Dict;
{"open", luaV_open},
{"type", luaV_type},
{"call", luaV_call},
+ {"lua_version", NULL},
{NULL, NULL}
};
return 1;
}
+ static int
+luaV_pushversion(lua_State *L)
+{
+ int major = 0;
+ int minor = 0;
+ int patch = 0;
+ char s[16];
+
+ sscanf(LUAVIM_VERSION, "Lua %d.%d.%d", &major, &minor, &patch);
+ vim_snprintf(s, sizeof(s), "%d.%d.%d", major, minor, patch);
+ lua_pushstring(L, s);
+ return 0;
+}
+
#define LUA_VIM_FN_CODE \
"vim.fn = setmetatable({}, {\n"\
" __index = function (t, key)\n"\
lua_newtable(L); // vim table
lua_pushvalue(L, 1); // cache table
luaV_openlib(L, luaV_module, 1);
+ luaV_pushversion(L);
+ lua_setfield(L, -2, "lua_version");
lua_setglobal(L, LUAVIM_NAME);
// custom code
(void)luaL_dostring(L, LUA_VIM_FN_CODE);
CheckFeature float
" Depending on the lua version, the error messages are different.
-let s:luaver = split(split(systemlist('lua -v')[0], ' ')[1], '\.')
-if len(s:luaver) < 3
- " Didn't get something that looks like a version, use _VERSION.
- let s:luaver = split(split(luaeval('_VERSION'), ' ')[1], '\.')
-endif
-let s:major = str2nr(s:luaver[0])
-let s:minor = str2nr(s:luaver[1])
-if len(s:luaver) >= 3
- let s:patch = str2nr(s:luaver[2])
-else
- let s:patch = 0
-endif
+let [s:major, s:minor, s:patch] = luaeval('vim.lua_version')->split('\.')->map({-> str2nr(v:val)})
let s:lua_53_or_later = 0
let s:lua_543_or_later = 0
if (s:major == 5 && s:minor >= 3) || s:major > 5