diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-03-21 22:21:02 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-03-21 22:41:27 +0100 |
| commit | 9b3cd2462a48ca942309e24f511db2ea1fddc95b (patch) | |
| tree | 009da77782848cfc8e6c1e83a49a0a1d7e6a08bb /vis-lua.c | |
| parent | 83b495b0c10f065897cc420a92afc7ac41448c26 (diff) | |
| download | vis-9b3cd2462a48ca942309e24f511db2ea1fddc95b.tar.gz vis-9b3cd2462a48ca942309e24f511db2ea1fddc95b.tar.xz | |
vis: also lookup Lua support files relative to the binary location
This simplifies deployment of vis on remote systems without root
access. The idea is to extract a statically linked binary together with
the lexer syntax files into some directory, adjust $PATH to include it
and have everything just work.
For now this uses /proc/self/exe and thus only works on Linux based
systems.
Diffstat (limited to 'vis-lua.c')
| -rw-r--r-- | vis-lua.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -1,6 +1,9 @@ #include <stdarg.h> #include <stdio.h> #include <string.h> +#include <limits.h> +#include <unistd.h> +#include <libgen.h> #include <sys/types.h> #include <pwd.h> @@ -823,6 +826,7 @@ void vis_lua_start(Vis *vis) { /* extends lua's package.path with: * - $VIS_PATH/{,lexers} + * - {,lexers} relative to the binary location * - $XDG_CONFIG_HOME/vis/{,lexers} (defaulting to $HOME/.config/vis/{,lexers}) * - /usr/local/share/vis/{,lexers} * - /usr/share/vis/{,lexers} @@ -841,6 +845,19 @@ void vis_lua_start(Vis *vis) { paths++; } + char exe[PATH_MAX]; + ssize_t len = readlink("/proc/self/exe", exe, sizeof(exe)-1); + if (len > 0) { + exe[len] = '\0'; + char *exe_path = dirname(exe); + lua_pushstring(L, exe_path); + lua_pushstring(L, "/?.lua;"); + lua_pushstring(L, exe_path); + lua_pushstring(L, "/lexers/?.lua;"); + lua_concat(L, 4); + paths++; + } + /* try to get users home directory */ const char *home = getenv("HOME"); if (!home || !*home) { |
