summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBerke Viktor <bviktor@hexchat.org>2012-07-21 19:16:31 +0200
committerBerke Viktor <bviktor@hexchat.org>2012-07-21 19:16:31 +0200
commit2b3e1f46e36ee0726dcf9d55593cadab9d42fcb1 (patch)
tree64549cbaf816a1d17e303b284ab8ead97290d2c1
parent9ea3ac9ddd66e7c85c9a066770da5e7a0ed9c598 (diff)
Use <configdir>/scripts to (auto)load Lua/Perl/Python/Tcl scripts
-rw-r--r--README8
-rw-r--r--plugins/lua/lua.c30
-rw-r--r--plugins/perl/perl.c8
-rw-r--r--plugins/python/python.c17
-rw-r--r--plugins/tcl/tclplugin.c6
5 files changed, 44 insertions, 25 deletions
diff --git a/README b/README
index 704347ae..3dc71e9f 100644
--- a/README
+++ b/README
@@ -84,10 +84,10 @@ Perl Scripts:
 Autoloading Perl Scripts and Plugins
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * HexChat automatically loads, at startup:
-	~/.config/hexchat/*.pl Perl scripts
-	~/.config/hexchat/plugins/*.pl Perl scripts
-	~/.config/hexchat/*.py Python scripts
-	~/.config/hexchat/plugins/*.py Python scripts
+	~/.config/hexchat/scripts/*.lua Lua scripts
+	~/.config/hexchat/scripts/*.pl Perl scripts
+	~/.config/hexchat/scripts/*.py Python scripts
+	~/.config/hexchat/scripts/*.tcl Tcl scripts
 	~/.config/hexchat/*.so Plugins
 	$(libdir)/hexchat/plugins/*.so plugins
 	(this usually translates to /usr/lib/hexchat/plugins/*.so)
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 <code>, executes <code> 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);
@@ -165,6 +170,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/<filename> exists. */
+	/* Check if ~/.config/hexchat/scripts/<filename> 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]));
             }
         }