--- a/env.c Fri Nov 13 17:48:13 2009 +0200
+++ b/env.c Mon Dec 07 01:04:25 2009 +0200
@@ -32,17 +32,10 @@
extern char **environ;
-// /env [option] [value]
+// /env [option [= [value]]]
static void do_env (char *arg)
{
- char **args = split_arg (arg, 2, 1);
- char *var = args[0];
- char *val;
-
- if (var)
- val = args[1];
-
- if (!var) {
+ if (!*arg) {
// print full variables list
GSList *vars = NULL;
int max = 0;
@@ -66,7 +59,7 @@
}
if (max) {
- gchar *format = g_strdup_printf ("%%-%ds = %%s", max);
+ gchar *format = g_strdup_printf ("Env %%-%ds = %%s", max);
GSList *eel;
vars = g_slist_sort (vars, (GCompareFunc) strcmp);
@@ -85,17 +78,43 @@
g_slist_free (vars);
- } else if (!val) {
- // print variable alone
- char *value = getenv (var);
+ } else {
+
+ char *varend = strchr (arg, '=');
+
+ if (!varend) {
+ // print variable alone
+ char *value = getenv (arg);
+
+ if (value)
+ scr_LogPrint (LPRINT_NORMAL, "Env %s = %s", arg, value);
+
+ } else if (varend == arg)
+
+ scr_LogPrint (LPRINT_NORMAL, "You must specify variable name.");
+
+ else {
- if (value)
- scr_LogPrint (LPRINT_NORMAL, "%s = %s", var, value);
- } else
- // set variable
- setenv (var, val, 1);
+ char *argstart = varend + 1;
+ char *var;
+
+ for (varend--; varend > arg && *varend == ' '; --varend);
+
+ var = g_strndup (arg, varend - arg + 1);
+
+ while (!*argstart && *argstart == ' ')
+ ++argstart;
- free_arg_lst (args);
+ if (*argstart)
+ // set variable
+ setenv (var, argstart, 1);
+ else
+ // unset variable
+ unsetenv (var);
+
+ g_free (var);
+ }
+ }
}
// /cd [path]
--- a/help/en/hlp_env.txt Fri Nov 13 17:48:13 2009 +0200
+++ b/help/en/hlp_env.txt Mon Dec 07 01:04:25 2009 +0200
@@ -1,4 +1,12 @@
- /ENV [variable [value]]
+ /ENV [variable [= [value]]
Tampers with mcabber environment. Without arguments prints entire list of variables, with variable name - only this variable, with value - sets specified variable's value.
+/env
+ Prints list of all environment variables.
+/env variable
+ Prints value of this variable.
+/env variable =
+ Unsets variable.
+/env variable = value
+ Sets variable.