equal
deleted
inserted
replaced
30 #include "compl.h" |
30 #include "compl.h" |
31 #include "logprint.h" |
31 #include "logprint.h" |
32 |
32 |
33 extern char **environ; |
33 extern char **environ; |
34 |
34 |
35 // /env [option] [value] |
35 // /env [option [= [value]]] |
36 static void do_env (char *arg) |
36 static void do_env (char *arg) |
37 { |
37 { |
38 char **args = split_arg (arg, 2, 1); |
38 if (!*arg) { |
39 char *var = args[0]; |
|
40 char *val; |
|
41 |
|
42 if (var) |
|
43 val = args[1]; |
|
44 |
|
45 if (!var) { |
|
46 // print full variables list |
39 // print full variables list |
47 GSList *vars = NULL; |
40 GSList *vars = NULL; |
48 int max = 0; |
41 int max = 0; |
49 |
42 |
50 { |
43 { |
64 } |
57 } |
65 } |
58 } |
66 } |
59 } |
67 |
60 |
68 if (max) { |
61 if (max) { |
69 gchar *format = g_strdup_printf ("%%-%ds = %%s", max); |
62 gchar *format = g_strdup_printf ("Env %%-%ds = %%s", max); |
70 GSList *eel; |
63 GSList *eel; |
71 |
64 |
72 vars = g_slist_sort (vars, (GCompareFunc) strcmp); |
65 vars = g_slist_sort (vars, (GCompareFunc) strcmp); |
73 |
66 |
74 for (eel = vars; eel; eel = eel->next) { |
67 for (eel = vars; eel; eel = eel->next) { |
83 g_free (format); |
76 g_free (format); |
84 } |
77 } |
85 |
78 |
86 g_slist_free (vars); |
79 g_slist_free (vars); |
87 |
80 |
88 } else if (!val) { |
81 } else { |
89 // print variable alone |
|
90 char *value = getenv (var); |
|
91 |
82 |
92 if (value) |
83 char *varend = strchr (arg, '='); |
93 scr_LogPrint (LPRINT_NORMAL, "%s = %s", var, value); |
|
94 } else |
|
95 // set variable |
|
96 setenv (var, val, 1); |
|
97 |
84 |
98 free_arg_lst (args); |
85 if (!varend) { |
|
86 // print variable alone |
|
87 char *value = getenv (arg); |
|
88 |
|
89 if (value) |
|
90 scr_LogPrint (LPRINT_NORMAL, "Env %s = %s", arg, value); |
|
91 |
|
92 } else if (varend == arg) |
|
93 |
|
94 scr_LogPrint (LPRINT_NORMAL, "You must specify variable name."); |
|
95 |
|
96 else { |
|
97 |
|
98 char *argstart = varend + 1; |
|
99 char *var; |
|
100 |
|
101 for (varend--; varend > arg && *varend == ' '; --varend); |
|
102 |
|
103 var = g_strndup (arg, varend - arg + 1); |
|
104 |
|
105 while (!*argstart && *argstart == ' ') |
|
106 ++argstart; |
|
107 |
|
108 if (*argstart) |
|
109 // set variable |
|
110 setenv (var, argstart, 1); |
|
111 else |
|
112 // unset variable |
|
113 unsetenv (var); |
|
114 |
|
115 g_free (var); |
|
116 } |
|
117 } |
99 } |
118 } |
100 |
119 |
101 // /cd [path] |
120 // /cd [path] |
102 static void do_cd (char *arg) |
121 static void do_cd (char *arg) |
103 { |
122 { |