# HG changeset patch # User Myhailo Danylenko # Date 1260140665 -7200 # Node ID 2c5225ab6eb74912ccf7d70ef039b1b6ced1bd50 # Parent 490c62fe90ebdd40c55ebbdd6a35cc67e5a967f8 Changed command syntax to allow unsetting diff -r 490c62fe90eb -r 2c5225ab6eb7 env.c --- 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] diff -r 490c62fe90eb -r 2c5225ab6eb7 help/en/hlp_env.txt --- 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.