aboutsummaryrefslogtreecommitdiffhomepage
path: root/uzbl-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'uzbl-core.c')
-rw-r--r--uzbl-core.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/uzbl-core.c b/uzbl-core.c
index 5da987c..fd8ee41 100644
--- a/uzbl-core.c
+++ b/uzbl-core.c
@@ -54,7 +54,7 @@ GOptionEntry entries[] =
{ "connect-socket", 0, 0, G_OPTION_ARG_STRING_ARRAY, &uzbl.state.connect_socket_names,
"Connect to server socket", "CSOCKET" },
{ "geometry", 'g', 0, G_OPTION_ARG_STRING, &uzbl.gui.geometry,
- "Set window geometry (format: WIDTHxHEIGHT+-X+-Y)", "GEOMETRY" },
+ "Set window geometry (format: WIDTHxHEIGHT+-X+-Y or maximized)", "GEOMETRY" },
{ "version", 'V', 0, G_OPTION_ARG_NONE, &uzbl.behave.print_version,
"Print the version and exit", NULL },
{ NULL, 0, 0, 0, NULL, NULL, NULL }
@@ -267,15 +267,24 @@ expand(const char *s, guint recurse) {
else if(recurse != 1 &&
etype == EXP_EXPR) {
- mycmd = expand(ret, 1);
- gchar *quoted = g_shell_quote(mycmd);
- gchar *tmp = g_strdup_printf("%s %s",
- uzbl.behave.shell_cmd?uzbl.behave.shell_cmd:"/bin/sh -c",
- quoted);
- g_spawn_command_line_sync(tmp, &cmd_stdout, NULL, NULL, &err);
- g_free(mycmd);
- g_free(quoted);
- g_free(tmp);
+ /* execute program directly */
+ if(ret[0] == '+') {
+ mycmd = expand(ret+1, 1);
+ g_spawn_command_line_sync(mycmd, &cmd_stdout, NULL, NULL, &err);
+ g_free(mycmd);
+ }
+ /* execute program through shell, quote it first */
+ else {
+ mycmd = expand(ret, 1);
+ gchar *quoted = g_shell_quote(mycmd);
+ gchar *tmp = g_strdup_printf("%s %s",
+ uzbl.behave.shell_cmd?uzbl.behave.shell_cmd:"/bin/sh -c",
+ quoted);
+ g_spawn_command_line_sync(tmp, &cmd_stdout, NULL, NULL, &err);
+ g_free(mycmd);
+ g_free(quoted);
+ g_free(tmp);
+ }
if (err) {
g_printerr("error on running command: %s\n", err->message);