Deal with $shell from lua from now on.
[apps/madmutt.git] / lib-lua / madmutt.c
index 31ee28a..dfcf084 100644 (file)
  */
 
 #include <lib-lib/lib-lib.h>
+
+#include <sys/types.h>
+#include <pwd.h>
+
 #include "lib-lua_priv.h"
 
 #include "../mutt.h"
@@ -144,13 +148,13 @@ static const struct {
      */
 #ifdef USE_HCACHE
 #if defined(HAVE_QDBM)
-    {"hcache_backend", "qdbm" },
+    { "hcache_backend", "qdbm" },
 #elif defined(HAVE_GDBM)
-    {"hcache_backend", "gdbm" },
+    { "hcache_backend", "gdbm" },
 #elif defined(HAVE_DB4)
-    {"hcache_backend", "db4" },
+    { "hcache_backend", "db4" },
 #else
-    {"hcache_backend", "unknown" },
+    { "hcache_backend", "unknown" },
 #endif
     /*
      ** .pp
@@ -160,6 +164,27 @@ static const struct {
 #endif
 };
 
+static const char *madmutt_init_shell(void)
+{
+    struct passwd *pw = getpwuid(getuid());
+
+    if (pw)
+        return pw->pw_shell;
+    return getenv("SHELL") ?: "/bin/sh";
+}
+
+static const struct {
+    const char *k;
+    const char *(*f)(void);
+} madmutt_module_vars2[] = {
+    { "shell",          madmutt_init_shell },
+    /*
+     ** .pp
+     ** Command to use when spawning a subshell.  By default, the user's login
+     ** shell from \fT/etc/passwd\fP is used.
+     */
+};
+
 int luaopen_madmutt(lua_State *L)
 {
     int i;
@@ -174,6 +199,11 @@ int luaopen_madmutt(lua_State *L)
         lua_setfield(L, -2, madmutt_module_vars[i].key);
     }
 
+    for (i = 0; i < countof(madmutt_module_vars2); i++) {
+        lua_pushstring(L, madmutt_module_vars2[i].f());
+        lua_setfield(L, -2, madmutt_module_vars2[i].k);
+    }
+
     lua_pushstring(L, "__index");
     lua_pushvalue(L, -2);
     lua_settable(L, -3);