From 0853ea91c4383cbf8adbb990410e051b53343f90 Mon Sep 17 00:00:00 2001 From: Marco Peereboom Date: Wed, 16 Nov 2011 11:18:35 -0600 Subject: [PATCH] Add proxy command. We can now toggle a proxy with F2 and we also look at HTTP_PROXY environment variable. This is handy for toggling Tor on and off. --- settings.c | 1 + xxxterm.1 | 18 ++++++++++++++++++ xxxterm.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- xxxterm.h | 4 ++++ 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/settings.c b/settings.c index cb4d1eb..d1de255 100644 --- a/settings.c +++ b/settings.c @@ -661,6 +661,7 @@ struct key_binding keys[] = { { "toplevel toggle", 0, 1, GDK_F4 }, { "help", 0, 1, GDK_F1 }, { "run_script", MOD1, 1, GDK_r }, + { "proxy toggle", 0, 1, GDK_F2 }, /* search */ { "searchnext", 0, 0, GDK_n }, diff --git a/xxxterm.1 b/xxxterm.1 index 5c6711c..fdc0643 100644 --- a/xxxterm.1 +++ b/xxxterm.1 @@ -213,6 +213,8 @@ option is used. .Bl -tag -width Ds -offset indent -compact .It Cm F1 Alias for ":help" +.It Cm F2 +Alias for ":proxy toggle" .It Cm F4 Alias for ":toplevel toggle" .It Cm F9 @@ -532,6 +534,22 @@ Toggle plugin execution for the current FQDN. Toggle plugin execution for the current top level domain. .It Cm print Print page. +.It Cm proxy +The +.Cm proxy +command is used to manipulate the currently set proxy. +Used by itself it expands to +.Cm proxy show . +.It Cm proxy show +Displays the current +.Cm http_proxy +setting. +.It Cm proxy toggle +Enables or disables the proxy for +.Nm . +Note that +.Cm http_proxy +must be set before it can be toggled. .It Cm qa , qall , quitall Quit .Nm . diff --git a/xxxterm.c b/xxxterm.c index d904bbf..a26211c 100644 --- a/xxxterm.c +++ b/xxxterm.c @@ -2892,6 +2892,41 @@ restart(struct tab *t, struct karg *args) return (0); } +char *http_proxy_save; /* not a setting, used to toggle */ + +int +proxy_cmd(struct tab *t, struct karg *args) +{ + DNPRINTF(XT_D_CMD, "%s: tab %d\n", __func__, t->tab_id); + + if (t == NULL) + return (1); + + /* setup */ + if (http_proxy) { + if (http_proxy_save) + g_free(http_proxy_save); + http_proxy_save = g_strdup(http_proxy); + } + + if (args->i & XT_PRXY_SHOW) { + if (http_proxy) + show_oops(t, "http_proxy = %s", http_proxy); + else + show_oops(t, "proxy is currently disabled"); + } else if (args->i & XT_PRXY_TOGGLE) { + if (http_proxy_save == NULL && http_proxy == NULL) { + show_oops(t, "can't toggle proxy"); + goto done; + } + if (http_proxy) + setup_proxy(NULL); + else + setup_proxy(http_proxy_save); + } +done: + return (XT_CB_PASSTHROUGH); +} struct cmd { char *cmd; int level; @@ -3079,6 +3114,10 @@ struct cmd { { "inspector", 0, inspector_cmd, XT_INS_SHOW, 0 }, { "show", 1, inspector_cmd, XT_INS_SHOW, 0 }, { "hide", 1, inspector_cmd, XT_INS_HIDE, 0 }, + + /* proxy */ + { "proxy", 0, proxy_cmd, XT_PRXY_SHOW, 0 }, + { "toggle", 1, proxy_cmd, XT_PRXY_TOGGLE, 0 }, }; struct { @@ -7324,8 +7363,13 @@ main(int argc, char *argv[]) env_proxy = getenv("http_proxy"); if (env_proxy) setup_proxy(env_proxy); - else - setup_proxy(http_proxy); + else { + env_proxy = getenv("HTTP_PROXY"); + if (env_proxy) + setup_proxy(env_proxy); + else + setup_proxy(http_proxy); + } if (opte) { send_cmd_to_socket(argv[0]); diff --git a/xxxterm.h b/xxxterm.h index b23be70..49b281b 100644 --- a/xxxterm.h +++ b/xxxterm.h @@ -280,6 +280,10 @@ int remove_cookie(int); void print_cookie(char *msg, SoupCookie *); void setup_cookies(void); +/* proxy */ +#define XT_PRXY_SHOW (1<<0) +#define XT_PRXY_TOGGLE (1<<1) + /* inspector */ #define XT_INS_SHOW (1<<0) #define XT_INS_HIDE (1<<1) -- 2.11.4.GIT