Skip to content

Commit

Permalink
Report viewport lines and bytes in one table
Browse files Browse the repository at this point in the history
This will break all plugins which currently use Win.viewport.
  • Loading branch information
dther committed Apr 25, 2024
1 parent c18dd35 commit 2a3caee
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 31 deletions.
2 changes: 1 addition & 1 deletion lua/vis-std.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
46 changes: 16 additions & 30 deletions vis-lua.c
Original file line number Diff line number Diff line change
Expand Up @@ -531,24 +531,6 @@ static void pushrange(lua_State *L, Filerange *r) {
lua_settable(L, -3);
}

static void pushlinemap(lua_State *L, Win *win) {
if (!win || !win->view) {
lua_pushnil(L);
return;
}
View *view = win->view;
Line *line = view_lines_first(view);
size_t lines = view_height_get(view);
lua_createtable(L, lines, 0);
for (lua_Integer l = 1; l <= lines; l++) {
if (!line)
break;
lua_pushunsigned(L, line->lineno);
lua_seti(L, -2, l);
line = line->next;
}
}

static Filerange getrange(lua_State *L, int index) {
Filerange range = text_range_empty();
if (lua_istable(L, index)) {
Expand Down Expand Up @@ -1849,11 +1831,10 @@ static const struct luaL_Reg registers_funcs[] = {

/***
* Viewport currently being displayed.
* @tfield Range viewport
*/
/***
* A list mapping lines in the viewport to logical lines in the file.
* @tfield list linemap
* Changing these values will not move the viewport.
* @table viewport
* @tfield Range bytes
* @tfield Range lines
*/
/***
* The window width.
Expand Down Expand Up @@ -1889,13 +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);
return 1;
}

if (strcmp(key, "linemap") == 0) {
pushlinemap(L, win);
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;
}

Expand Down

0 comments on commit 2a3caee

Please sign in to comment.