env.c
changeset 3 490c62fe90eb
parent 0 53ef7728edcf
child 4 2c5225ab6eb7
--- a/env.c	Wed Nov 11 15:25:41 2009 +0200
+++ b/env.c	Fri Nov 13 17:48:13 2009 +0200
@@ -23,6 +23,8 @@
 #include <gmodule.h>
 #include <string.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
 
 #include "utils.h"
 #include "compl.h"
@@ -96,10 +98,24 @@
 	free_arg_lst (args);
 }
 
+// /cd [path]
+static void do_cd (char *arg)
+{
+	if (!*arg) { // get
+		char cwd[256];
+		if (getcwd (cwd, 256) == NULL)
+			scr_LogPrint (LPRINT_NORMAL, "Cannot obtain current working directory: %s.", strerror (errno));
+		else
+			scr_LogPrint (LPRINT_NORMAL, "%s", cwd);
+	} else if (chdir (arg) == -1) // set
+		scr_LogPrint (LPRINT_NORMAL, "Cannot change current working directory: %s.", strerror (errno));
+}
+
 const gchar *g_module_check_init(GModule *module)
 {
 	// command
 	cmd_add ("env", "", 0, 0, do_env, NULL);
+	cmd_add ("cd", "", COMPL_FILENAME, 0, do_cd, NULL);
 
 	return NULL;
 }
@@ -107,7 +123,8 @@
 void g_module_unload(GModule *module)
 {
 	// command
+	cmd_del ("cd");
 	cmd_del ("env");
 }
 
-/* vim: se ts=4: */
+/* vim: se ts=4 sw=4: */