From 5c600e15c1c1ab64f385de918c93d2bdb23955d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 6 Jul 2017 21:28:51 +0200 Subject: vis: use marks instead of registers to store selections The key binding remain the same, but the selections are now stored on a per-buffer basis. --- vis-lua.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'vis-lua.c') diff --git a/vis-lua.c b/vis-lua.c index 0866c1b..91ad645 100644 --- a/vis-lua.c +++ b/vis-lua.c @@ -512,7 +512,7 @@ static void pushpos(lua_State *L, size_t pos) { } static void pushrange(lua_State *L, Filerange *r) { - if (!text_range_valid(r)) { + if (!r || !text_range_valid(r)) { lua_pushnil(L); return; } @@ -2245,7 +2245,7 @@ static const struct luaL_Reg file_lines_funcs[] = { }; static int file_marks_index(lua_State *L) { - size_t pos = EPOS; + Filerange *range = NULL; Vis *vis = lua_touserdata(L, lua_upvalueindex(1)); File *file = obj_ref_check_containerof(L, 1, VIS_LUA_TYPE_MARKS, offsetof(File, marks)); if (!file) @@ -2256,9 +2256,11 @@ static int file_marks_index(lua_State *L) { enum VisMark mark = vis_mark_from(vis, symbol[0]); if (mark == VIS_MARK_INVALID) goto err; - pos = text_mark_get(file->text, file->marks[mark]); + Array arr = vis_register_selections_get(vis, mark); + range = array_get(&arr, 0); + array_release(&arr); err: - pushpos(L, pos); + pushrange(L, range); return 1; } @@ -2272,8 +2274,14 @@ static int file_marks_newindex(lua_State *L) { return 0; enum VisMark mark = vis_mark_from(vis, symbol[0]); size_t pos = luaL_checkunsigned(L, 3); - if (mark < LENGTH(file->marks)) - file->marks[mark] = text_mark_set(file->text, pos); + if (mark < LENGTH(file->marks)) { + Array arr; + array_init_sized(&arr, sizeof(Filerange)); + Filerange range = text_range_new(pos, pos); + array_add(&arr, &range); + vis_register_selections_set(vis, mark, &arr); + array_release(&arr); + } return 0; } -- cgit v1.2.3