diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-14 06:49:19 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-14 06:49:19 +0100 |
commit | 6195aeba1899f50384b704b23ae2eea9c60c79a2 (patch) | |
tree | 593239a904d53d649a479b01ca06fd9cee765c77 /src | |
parent | f08c97b90ea34babb633fcd7f4dc22e22bc487a9 (diff) | |
download | sciteco-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.cpp | 23 |
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; |