From 2b3e1f46e36ee0726dcf9d55593cadab9d42fcb1 Mon Sep 17 00:00:00 2001 From: Berke Viktor Date: Sat, 21 Jul 2012 19:16:31 +0200 Subject: Use /scripts to (auto)load Lua/Perl/Python/Tcl scripts --- plugins/lua/lua.c | 30 +++++++++++++++++------------- plugins/perl/perl.c | 8 +++++++- plugins/python/python.c | 17 ++++++++++++----- plugins/tcl/tclplugin.c | 6 ++++-- 4 files changed, 40 insertions(+), 21 deletions(-) (limited to 'plugins') diff --git a/plugins/lua/lua.c b/plugins/lua/lua.c index 6ccddf2c..a70ad0d6 100644 --- a/plugins/lua/lua.c +++ b/plugins/lua/lua.c @@ -518,13 +518,15 @@ static int lxc_cb_load(char *word[], char *word_eol[], void *userdata) strncpy(file, word[2], PATH_MAX); else { if (stat(word[2], st) == 0) - xdir = getcwd(buf, PATH_MAX); - else { - xdir = xchat_get_info(ph, "xchatdirfs"); - if (!xdir) /* xchatdirfs is new for 2.0.9, will fail on older */ - xdir = xchat_get_info (ph, "xchatdir"); + { + xdir = getcwd (buf, PATH_MAX); + snprintf (file, PATH_MAX, "%s/%s", xdir, word[2]); + } + else + { + xdir = xchat_get_info (ph, "xchatdirfs"); + snprintf (file, PATH_MAX, "%s/scripts/%s", xdir, word[2]); } - snprintf(file, PATH_MAX, "%s/%s", xdir, word[2]); } if (lxc_load_file((const char *)file) == 0) { @@ -663,6 +665,7 @@ int xchat_plugin_init(xchat_plugin *plugin_handle, lua_State *L; const char *xdir; const char *name, *desc, *vers; + char *xsubdir; /* we need to save this for use with any xchat_* functions */ ph = plugin_handle; @@ -675,11 +678,13 @@ int xchat_plugin_init(xchat_plugin *plugin_handle, xchat_hook_command(ph, "UNLOAD", XCHAT_PRI_NORM, lxc_cb_unload, NULL, NULL); xchat_hook_command(ph, "LUA", XCHAT_PRI_NORM, lxc_cb_lua, "Usage: LUA , executes in a new lua state", NULL); - xdir = xchat_get_info(ph, "xchatdirfs"); - if (!xdir) /* xchatdirfs is new for 2.0.9, will fail on older */ - xdir = xchat_get_info (ph, "xchatdir"); - - lxc_autoload_from_path(xdir); + xdir = xchat_get_info (ph, "xchatdirfs"); + xsubdir = g_build_filename (xdir, "scripts", NULL); + lxc_autoload_from_path (xsubdir); + g_free (xsubdir); + + /* put this here, otherwise it's only displayed when a script is autoloaded upon start */ + xchat_printf(ph, "Lua interface loaded"); if (!lxc_states) /* no scripts loaded */ return 1; @@ -716,7 +721,6 @@ int xchat_plugin_init(xchat_plugin *plugin_handle, } state = state->next; } - xchat_printf(ph, "Lua interface (v%s) loaded", LXC_VERSION); return 1; } @@ -732,7 +736,7 @@ int xchat_plugin_deinit(xchat_plugin *plug_handle) state = state->next; free(st); } - xchat_printf(plug_handle, "Lua plugin v%s removed", LXC_VERSION); + xchat_printf(plug_handle, "Lua interface unloaded"); return 1; } diff --git a/plugins/perl/perl.c b/plugins/perl/perl.c index 2898fed5..7eea9efb 100644 --- a/plugins/perl/perl.c +++ b/plugins/perl/perl.c @@ -144,15 +144,20 @@ perl_auto_load (void *unused) if (!xdir) /* xchatdirfs is new for 2.0.9, will fail on older */ xdir = xchat_get_info (ph, "xchatdir"); + /* don't pollute the filesystem with script files, this only causes misuse of the folders + * only use ~/.config/hexchat/scripts/ and %APPDATA%\HexChat\scripts */ +#if 0 /* autoload from ~/.config/hexchat/ or %APPDATA%\HexChat\ on win32 */ perl_auto_load_from_path (xdir); +#endif sub_dir = malloc (strlen (xdir) + 9); strcpy (sub_dir, xdir); - strcat (sub_dir, "/plugins"); + strcat (sub_dir, "/scripts"); perl_auto_load_from_path (sub_dir); free (sub_dir); +#if 0 #ifdef WIN32 /* autoload from C:\Program Files\HexChat\plugins\ */ sub_dir = malloc (1025 + 9); @@ -164,6 +169,7 @@ perl_auto_load (void *unused) } perl_auto_load_from_path ( strncat (sub_dir, "\\plugins", 9)); free (sub_dir); +#endif #endif return 0; } diff --git a/plugins/python/python.c b/plugins/python/python.c index ebbf4f38..477cbc74 100644 --- a/plugins/python/python.c +++ b/plugins/python/python.c @@ -389,20 +389,27 @@ Util_Autoload() char *sub_dir; /* we need local filesystem encoding for chdir, opendir etc */ - /* auto-load from ~/.config/hexchat/ or %APPDATA%\HexChat\ */ xdir = xchat_get_info(ph, "xchatdirfs"); + + /* don't pollute the filesystem with script files, this only causes misuse of the folders + * only use ~/.config/hexchat/scripts/ and %APPDATA%\HexChat\scripts */ +#if 0 + /* auto-load from ~/.config/hexchat/ or %APPDATA%\HexChat\ */ Util_Autoload_from(xchat_get_info(ph, "xchatdirfs")); +#endif - /* auto-load from subdirectory plugins */ + /* auto-load from subdirectory scripts */ sub_dir = malloc (strlen (xdir) + 9); strcpy (sub_dir, xdir); - strcat (sub_dir, "/plugins"); + strcat (sub_dir, "/scripts"); Util_Autoload_from(sub_dir); free (sub_dir); +#if 0 #ifdef WIN32 /* also auto-load C:\Program Files\HexChat\Plugins\*.py */ Util_Autoload_from(HEXCHATLIBDIR"/plugins"); #endif +#endif } static char * @@ -437,9 +444,9 @@ Util_Expand(char *filename) return expanded; g_free(expanded); - /* Check if ~/.config/hexchat/ exists. */ + /* Check if ~/.config/hexchat/scripts/ exists. */ expanded = g_build_filename(xchat_get_info(ph, "xchatdir"), - filename, NULL); + "scripts", filename, NULL); if (g_file_test(expanded, G_FILE_TEST_EXISTS)) return expanded; g_free(expanded); diff --git a/plugins/tcl/tclplugin.c b/plugins/tcl/tclplugin.c index 30a0a1b5..168e0f54 100644 --- a/plugins/tcl/tclplugin.c +++ b/plugins/tcl/tclplugin.c @@ -89,8 +89,10 @@ static char unknown[] = { "}\n" }; +/* don't pollute the filesystem with script files, this only causes misuse of the folders + * only use ~/.config/hexchat/scripts/ and %APPDATA%\HexChat\scripts */ static char sourcedirs[] = { - "set files [lsort [glob -nocomplain -directory [xchatdir] \"*.tcl\"]]\n" + "set files [lsort [glob -nocomplain -directory [xchatdir] \"/scripts/*.tcl\"]]\n" "set init [lsearch -glob $files \"*/init.tcl\"]\n" "if { $init > 0 } {\n" "set initfile [lindex $files $init]\n" @@ -2037,7 +2039,7 @@ static int Command_Source(char *word[], char *word_eol[], void *userdata) } else { if (!strchr(word_eol[2], '/')) { Tcl_DStringAppend(&ds, xchatdir, strlen(xchatdir)); - Tcl_DStringAppend(&ds, "/", 1); + Tcl_DStringAppend(&ds, "/scripts/", 9); Tcl_DStringAppend(&ds, word_eol[2], strlen(word_eol[2])); } } -- cgit 1.4.1