aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-14 06:49:19 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-02-14 06:49:19 +0100
commit6195aeba1899f50384b704b23ae2eea9c60c79a2 (patch)
tree593239a904d53d649a479b01ca06fd9cee765c77 /src
parentf08c97b90ea34babb633fcd7f4dc22e22bc487a9 (diff)
downloadsciteco-6195aeba1899f50384b704b23ae2eea9c60c79a2.tar.gz
initialize global Q-Registers (beginning with $) with environment variables
e.g. G{$HOME} will insert the HOME environment variable
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index b8e87a0..c1da584 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -165,6 +165,27 @@ process_options(int &argc, char **&argv)
/* remaining arguments, are arguments to the munged file */
}
+static inline void
+initialize_environment(void)
+{
+ gchar **environ = g_get_environ();
+
+ for (gchar **p = environ; *p; p++) {
+ gchar *value = strchr(*p, '=') + 1;
+ gchar name[value - *p + 1];
+ QRegister *reg;
+
+ name[0] = '$';
+ g_strlcpy(name + 1, *p, sizeof(name) - 1);
+
+ reg = new QRegister(name);
+ QRegisters::globals.insert(reg);
+ reg->set_string(value);
+ }
+
+ g_strfreev(environ);
+}
+
int
main(int argc, char **argv)
{
@@ -193,6 +214,8 @@ main(int argc, char **argv)
QRegisters::globals.initialize("-");
/* current buffer name and number ("*") */
QRegisters::globals.insert(new QRegisterBufferInfo());
+ /* environment registers */
+ initialize_environment();
QRegisters::locals = &local_qregs;