vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit f18a48d4e1c9b0c474e3ff83db62d421f963fb02
parent f57f7a939e27c7423fc2a66af9a4afc84f064930
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat, 23 Apr 2016 11:44:11 +0200

vis: display lua search paths in :help output

Diffstat:
Mvis-cmds.c | 15+++++++++++++++
Mvis-lua.c | 13++++++++++++-
Mvis-lua.h | 6++++++
3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/vis-cmds.c b/vis-cmds.c @@ -1,6 +1,7 @@ /* this file is included from sam.c */ #include <termkey.h> +#include "vis-lua.h" #ifndef VIS_OPEN #define VIS_OPEN "vis-open" @@ -659,6 +660,20 @@ static bool cmd_help(Vis *vis, Win *win, Command *cmd, const char *argv[], Curso "(prefix with C-, S-, and M- for Ctrl, Shift and Alt respectively)\n\n"); print_symbolic_keys(vis, txt); + const char *paths = vis_lua_paths_get(vis); + if (paths) { + char *copy = strdup(paths); + text_appendf(txt, "\n Lua paths used to load runtime files " + "(? will be replaced by filename):\n\n"); + for (char *elem = copy, *next; elem; elem = next) { + if ((next = strstr(elem, ";"))) + *next++ = '\0'; + if (*elem) + text_appendf(txt, " %s\n", elem); + } + free (copy); + } + text_save(txt, NULL); return true; } diff --git a/vis-lua.c b/vis-lua.c @@ -17,6 +17,8 @@ #if !CONFIG_LUA +bool vis_lua_path_add(Vis *vis, const char *path) { return true; } +const char *vis_lua_paths_get(Vis *vis) { return NULL; } void vis_lua_init(Vis *vis) { } void vis_lua_start(Vis *vis) { } void vis_lua_quit(Vis *vis) { } @@ -1033,7 +1035,7 @@ static bool vis_lua_path_strip(Vis *vis) { return true; } -static bool vis_lua_path_add(Vis *vis, const char *path) { +bool vis_lua_path_add(Vis *vis, const char *path) { if (!path) return false; lua_State *L = vis->lua; @@ -1049,6 +1051,15 @@ static bool vis_lua_path_add(Vis *vis, const char *path) { return true; } +const char *vis_lua_paths_get(Vis *vis) { + lua_State *L = vis->lua; + if (!L) + return NULL; + lua_getglobal(L, "package"); + lua_getfield(L, -1, "path"); + return lua_tostring(L, -1); +} + void vis_lua_init(Vis *vis) { lua_State *L = luaL_newstate(); if (!L) diff --git a/vis-lua.h b/vis-lua.h @@ -11,6 +11,12 @@ typedef struct lua_State lua_State; #include "vis.h" +/* add a directory to consider when loading lua files */ +bool vis_lua_path_add(Vis*, const char *path); +/* get semi colon separated list of paths to load lua files */ +const char *vis_lua_paths_get(Vis*); + +/* various event handlers, triggered by the vis core */ void vis_lua_init(Vis*); void vis_lua_start(Vis*); void vis_lua_quit(Vis*);