From 1fc175627f3afe938be0b5daa6a864b281725fec Mon Sep 17 00:00:00 2001 From: Rudy Dellomas III Date: Tue, 23 Apr 2024 15:33:13 +1000 Subject: [PATCH] lua: Report viewport lines and bytes in one table This will break all plugins which currently use Win.viewport. --- lua/vis-std.lua | 2 +- vis-lua.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lua/vis-std.lua b/lua/vis-std.lua index 5dd13eb28..1fe93a9d9 100644 --- a/lua/vis-std.lua +++ b/lua/vis-std.lua @@ -54,7 +54,7 @@ vis.events.subscribe(vis.events.WIN_HIGHLIGHT, function(win) if not lexer then return end -- TODO: improve heuristic for initial style - local viewport = win.viewport + local viewport = win.viewport.bytes if not viewport then return end local horizon_max = win.horizon or 32768 local horizon = viewport.start < horizon_max and viewport.start or horizon_max diff --git a/vis-lua.c b/vis-lua.c index b103b1267..a3029fab4 100644 --- a/vis-lua.c +++ b/vis-lua.c @@ -1831,7 +1831,10 @@ static const struct luaL_Reg registers_funcs[] = { /*** * Viewport currently being displayed. - * @tfield Range viewport + * Changing these values will not move the viewport. + * @table viewport + * @tfield Range bytes + * @tfield Range lines */ /*** * The window width. @@ -1867,8 +1870,18 @@ static int window_index(lua_State *L) { const char *key = lua_tostring(L, 2); if (strcmp(key, "viewport") == 0) { - Filerange r = view_viewport_get(win->view); - pushrange(L, &r); + Filerange b = view_viewport_get(win->view); + Filerange l; + l.start = view_lines_first(win->view)->lineno; + l.end = view_lines_last(win->view)->lineno; + + lua_createtable(L, 0, 2); + lua_pushstring(L, "bytes"); + pushrange(L, &b); + lua_settable(L, -3); + lua_pushstring(L, "lines"); + pushrange(L, &l); + lua_settable(L, -3); return 1; }