diff options
author | Michael Vetter <jubalh@iodoru.org> | 2021-09-29 14:48:33 +0200 |
---|---|---|
committer | Michael Vetter <jubalh@iodoru.org> | 2021-09-29 17:32:54 +0200 |
commit | 7486e22b77d2d5467af2b21d3e38ba66a5bddf69 (patch) | |
tree | 909966b2d3b36fa367d347dc7836f9cdf4369f72 | |
parent | ba7b6c2e96be57c24e11c64f4d6e5c97f025516b (diff) | |
download | profani-tty-7486e22b77d2d5467af2b21d3e38ba66a5bddf69.tar.gz |
Look for plugins to install in global location
Two options to install plugins. Mention the whole path: `/plugins install ~/src/profanity-plugins/my.py` Mention only the plugin name: `/plugins install my.py` The latter will look in `/usr/local/share/profanity/plugins/` for the file and copy it over to `~/.local/share/profanity/plugins`. At first I was thinking about loading the plugins from the global location. But users most likely don't want to have all plugins activated that an admin installs on a system. Regards https://github.com/profanity-im/profanity/issues/945
-rw-r--r-- | configure.ac | 28 | ||||
-rw-r--r-- | src/command/cmd_funcs.c | 22 |
2 files changed, 38 insertions, 12 deletions
diff --git a/configure.ac b/configure.ac index 3151cdc8..2061a3df 100644 --- a/configure.ac +++ b/configure.ac @@ -96,6 +96,9 @@ elif test "x$enable_python_plugins" != xno; then fi fi AS_IF([test "x$PLATFORM" = xosx], [rm -f Python.framework]) + # set path to look for global python plugins + GLOBAL_PYTHON_PLUGINS_PATH='${pkgdatadir}/plugins' + AC_SUBST(GLOBAL_PYTHON_PLUGINS_PATH) else AM_CONDITIONAL([BUILD_PYTHON_API], [false]) fi @@ -119,6 +122,9 @@ else [AC_MSG_ERROR([dl library needed to run C plugins])], [AM_CONDITIONAL([BUILD_C_API], [false])]) ])]) + # set path to look for global c plugins + GLOBAL_C_PLUGINS_PATH='${pkglibdir}/plugins' + AC_SUBST(GLOBAL_C_PLUGINS_PATH) else AM_CONDITIONAL([BUILD_C_API], [false]) fi @@ -360,7 +366,7 @@ AS_IF([test "x$PLATFORM" = xosx], [AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"]) AM_LDFLAGS="$AM_LDFLAGS -export-dynamic" AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS} ${SQLITE_CFLAGS}" -AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\"" +AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\" -DGLOBAL_PYTHON_PLUGINS_PATH=\"\\\"$GLOBAL_PYTHON_PLUGINS_PATH\\\"\" -DGLOBAL_C_PLUGINS_PATH=\"\\\"$GLOBAL_C_PLUGINS_PATH\\\"\"" LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS" AC_SUBST(AM_LDFLAGS) @@ -374,14 +380,16 @@ AC_CONFIG_FILES([Makefile]) AC_OUTPUT echo "" -echo "PLATFORM : $host_os" -echo "PACKAGE_STATUS : $PACKAGE_STATUS" -echo "AM_CFLAGS : $AM_CFLAGS" -echo "AM_CPPFLAGS : $AM_CPPFLAGS" -echo "AM_LDFLAGS : $AM_LDFLAGS" -echo "LIBS : $LIBS" -echo "Install themes : $THEMES_INSTALL" -echo "Themes path : $THEMES_PATH" -echo "Icons path : $ICONS_PATH" +echo "PLATFORM : $host_os" +echo "PACKAGE_STATUS : $PACKAGE_STATUS" +echo "AM_CFLAGS : $AM_CFLAGS" +echo "AM_CPPFLAGS : $AM_CPPFLAGS" +echo "AM_LDFLAGS : $AM_LDFLAGS" +echo "LIBS : $LIBS" +echo "Install themes : $THEMES_INSTALL" +echo "Themes path : $THEMES_PATH" +echo "Icons path : $ICONS_PATH" +echo "Global Python plugins path : $GLOBAL_PYTHON_PLUGINS_PATH" +echo "Global C plugins path : $GLOBAL_C_PLUGINS_PATH" echo "" echo "Now you can run \`make' to build profanity" diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index b970c73b..302de659 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -6927,13 +6927,31 @@ cmd_receipts(ProfWin* window, const char* const command, gchar** args) gboolean cmd_plugins_install(ProfWin* window, const char* const command, gchar** args) { - char* path; + char* path = NULL; if (args[1] == NULL) { cons_show("Please provide a path to the plugin file or directory, see /help plugins"); return TRUE; - } else { + } + + // take whole path or build it in case it's just the plugin name + if (strchr(args[1], '/')) { path = get_expanded_path(args[1]); + } else { + if (g_str_has_suffix(args[1], ".py")) { + path = g_strdup_printf("%s/%s", GLOBAL_PYTHON_PLUGINS_PATH, args[1]); + } else if (g_str_has_suffix(args[1], ".so")) { + path = g_strdup_printf("%s/%s", GLOBAL_C_PLUGINS_PATH, args[1]); + } else { + cons_show("Plugins must have one of the following extensions: '.py' '.so'"); + return TRUE; + } + } + + if (access(path, R_OK) != 0) { + cons_show("Cannot access: %s", path); + free(path); + return TRUE; } if (is_regular_file(path)) { |