about summary refs log tree commit diff stats
path: root/settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'settings.c')
-rw-r--r--settings.c623
1 files changed, 577 insertions, 46 deletions
diff --git a/settings.c b/settings.c
index eb81f77..30749e6 100644
--- a/settings.c
+++ b/settings.c
@@ -27,6 +27,7 @@ PangoFontDescription	*cmd_font;
 PangoFontDescription	*oops_font;
 PangoFontDescription	*statusbar_font;
 PangoFontDescription	*tabbar_font;
+extern regex_t		url_re;
 
 /* settings that require restart */
 int		tabless = 0;	/* allow only 1 tab */
@@ -124,24 +125,57 @@ int		add_kb(struct settings *, char *);
 int		add_ua(struct settings *, char *);
 
 int		set_append_next(char *);
+int		set_cmd_font(char *);
+int		set_color_visited_uris(char *);
+int		set_cookie_policy_rt(char *);
+int		set_cookies_enabled(char *);
+int		set_ctrl_click_focus(char *);
 int		set_home(char *);
 int		set_download_dir(struct settings *, char *);
 int		set_default_script(struct settings *, char *);
+int		set_default_script_rt(char *);
+int		set_default_zoom_level(char *);
+int		set_enable_cookie_whitelist(char *);
+int		set_enable_js_whitelist(char *);
+int		set_enable_localstorage(char *);
+int		set_enable_plugins(char *);
+int		set_enable_plugin_whitelist(char *);
+int		set_enable_scripts(char *);
+int		set_enable_spell_checking(char *);
+int		set_enable_strict_transport(char *);
+int		set_encoding_rt(char *);
 int		set_runtime_dir(struct settings *, char *);
+int		set_tabbar_font(char *value);
 int		set_tab_style(struct settings *, char *);
+int		set_tab_style_rt(char *);
 int		set_edit_mode(struct settings *, char *);
 int		set_work_dir(struct settings *, char *);
-int		set_auto_load_images(char *value);
-int		set_enable_autoscroll(char *value);
-int		set_enable_favicon_entry(char *value);
-int		set_enable_favicon_tabs(char *value);
+int		set_auto_load_images(char *);
+int		set_enable_autoscroll(char *);
+int		set_enable_favicon_entry(char *);
+int		set_enable_favicon_tabs(char *);
+int		set_guess_search(char *);
 int		set_download_mode(struct settings *, char *);
 int		set_download_mode_rt(char *);
+int		set_oops_font(char *);
+int		set_read_only_cookies(char *);
 int		set_referer(struct settings *, char *);
 int		set_referer_rt(char *);
+int		set_refresh_interval(char *);
+int		set_search_string(char *s);
+int		set_session_autosave(char *);
+int		set_session_timeout(char *);
+int		set_show_statusbar(char *);
 int		set_show_tabs(char *);
 int		set_show_url(char *);
+int		set_spell_check_languages(char *);
+int		set_ssl_ca_file_rt(char *);
+int		set_ssl_strict_certs(char *);
+int		set_statusbar_font(char *);
+int		set_url_regex(char *);
+int		set_userstyle_global(char *);
 int		set_external_editor(char *);
+int		set_xterm_workaround(char *);
 
 void		walk_mime_type(struct settings *, void (*)(struct settings *,
 		    char *, void *), void *);
@@ -295,71 +329,71 @@ struct special		s_referer = {
 
 struct settings		rs[] = {
 	{ "allow_volatile_cookies",	XT_S_INT, 0,		&allow_volatile_cookies, NULL, NULL, NULL, NULL},
-	{ "autofocus_onload",		XT_S_INT, 0,		&autofocus_onload, NULL, NULL, NULL, NULL},
+	{ "autofocus_onload",		XT_S_INT, 0,		&autofocus_onload, NULL, NULL, NULL, NULL },
 	{ "browser_mode",		XT_S_INT, 0, NULL, NULL,&s_browser_mode, NULL, NULL },
 	{ "gui_mode",			XT_S_INT, 0, NULL, NULL,&s_gui_mode, NULL, NULL },
-	{ "color_visited_uris",		XT_S_INT, 0,		&color_visited_uris , NULL, NULL, NULL, NULL },
-	{ "cookie_policy",		XT_S_INT, 0, NULL, NULL,&s_cookie },
-	{ "cookies_enabled",		XT_S_INT, 0,		&cookies_enabled, NULL, NULL },
-	{ "ctrl_click_focus",		XT_S_INT, 0,		&ctrl_click_focus, NULL, NULL, NULL, NULL },
-	{ "default_zoom_level",		XT_S_FLOAT, 0,		NULL, NULL, NULL, &default_zoom_level, NULL },
-	{ "default_script",		XT_S_STR, 0, NULL, NULL,&s_default_script, NULL, NULL },
+	{ "color_visited_uris",		XT_S_INT, 0,		&color_visited_uris , NULL, NULL, NULL, set_color_visited_uris },
+	{ "cookie_policy",		XT_S_INT, 0, NULL, NULL,&s_cookie, NULL, set_cookie_policy_rt },
+	{ "cookies_enabled",		XT_S_INT, 0,		&cookies_enabled, NULL, NULL, NULL, set_cookies_enabled },
+	{ "ctrl_click_focus",		XT_S_INT, 0,		&ctrl_click_focus, NULL, NULL, NULL, set_ctrl_click_focus },
+	{ "default_zoom_level",		XT_S_FLOAT, 0,		NULL, NULL, NULL, &default_zoom_level, set_default_zoom_level },
+	{ "default_script",		XT_S_STR, 0, NULL, NULL,&s_default_script, NULL, set_default_script_rt },
 	{ "download_dir",		XT_S_STR, 0, NULL, NULL,&s_download_dir, NULL, NULL },
 	{ "download_mode",		XT_S_STR, 0, NULL, NULL,&s_download_mode, NULL, set_download_mode_rt },
 	{ "edit_mode",			XT_S_STR, 0, NULL, NULL,&s_edit_mode, NULL, NULL},
-	{ "enable_cookie_whitelist",	XT_S_INT, 0,		&enable_cookie_whitelist, NULL, NULL, NULL, NULL },
-	{ "enable_js_whitelist",	XT_S_INT, 0,		&enable_js_whitelist, NULL, NULL, NULL, NULL },
-	{ "enable_plugin_whitelist",	XT_S_INT, 0,		&enable_plugin_whitelist, NULL, NULL, NULL, NULL },
-	{ "enable_localstorage",	XT_S_INT, 0,		&enable_localstorage, NULL, NULL, NULL, NULL},
-	{ "enable_plugins",		XT_S_INT, 0,		&enable_plugins, NULL, NULL, NULL, NULL },
-	{ "enable_scripts",		XT_S_INT, 0,		&enable_scripts, NULL, NULL, NULL, NULL },
+	{ "enable_cookie_whitelist",	XT_S_INT, 0,		&enable_cookie_whitelist, NULL, NULL, NULL, set_enable_cookie_whitelist },
+	{ "enable_js_whitelist",	XT_S_INT, 0,		&enable_js_whitelist, NULL, NULL, NULL, set_enable_js_whitelist },
+	{ "enable_plugin_whitelist",	XT_S_INT, 0,		&enable_plugin_whitelist, NULL, NULL, NULL, set_enable_plugin_whitelist },
+	{ "enable_localstorage",	XT_S_INT, 0,		&enable_localstorage, NULL, NULL, NULL, set_enable_localstorage },
+	{ "enable_plugins",		XT_S_INT, 0,		&enable_plugins, NULL, NULL, NULL, set_enable_plugins },
+	{ "enable_scripts",		XT_S_INT, 0,		&enable_scripts, NULL, NULL, NULL, set_enable_scripts },
 	{ "enable_socket",		XT_S_INT, XT_SF_RESTART,&enable_socket, NULL, NULL, NULL, NULL },
-	{ "enable_spell_checking",	XT_S_INT, 0,		&enable_spell_checking, NULL, NULL, NULL, NULL },
-	{ "encoding",			XT_S_STR, 0, NULL,	&encoding, NULL, NULL, NULL },
+	{ "enable_spell_checking",	XT_S_INT, 0,		&enable_spell_checking, NULL, NULL, NULL, set_enable_spell_checking },
+	{ "encoding",			XT_S_STR, 0, NULL,	&encoding, NULL, NULL, set_encoding_rt },
 	{ "external_editor",		XT_S_STR,0, NULL,	&external_editor, NULL, NULL, set_external_editor },
 	{ "fancy_bar",			XT_S_INT, XT_SF_RESTART,&fancy_bar, NULL, NULL, NULL, NULL },
-	{ "guess_search",		XT_S_INT, 0,		&guess_search, NULL, NULL, NULL, NULL },
+	{ "guess_search",		XT_S_INT, 0,		&guess_search, NULL, NULL, NULL, set_guess_search },
 	{ "history_autosave",		XT_S_INT, 0,		&history_autosave, NULL, NULL, NULL, NULL },
 	{ "http_proxy",			XT_S_STR, 0, NULL,	&http_proxy, NULL, NULL, set_http_proxy },
 	{ "icon_size",			XT_S_INT, 0,		&icon_size, NULL, NULL, NULL, NULL },
 	{ "js_autorun_enabled",		XT_S_INT, 0,		&js_autorun_enabled, NULL, NULL, NULL, NULL },
 	{ "max_connections",		XT_S_INT, XT_SF_RESTART,&max_connections, NULL, NULL, NULL, NULL },
 	{ "max_host_connections",	XT_S_INT, XT_SF_RESTART,&max_host_connections, NULL, NULL, NULL, NULL },
-	{ "read_only_cookies",		XT_S_INT, 0,		&read_only_cookies, NULL, NULL, NULL, NULL },
-	{ "refresh_interval",		XT_S_INT, 0,		&refresh_interval, NULL, NULL, NULL, NULL },
+	{ "read_only_cookies",		XT_S_INT, 0,		&read_only_cookies, NULL, NULL, NULL, set_read_only_cookies },
+	{ "refresh_interval",		XT_S_INT, 0,		&refresh_interval, NULL, NULL, NULL, set_refresh_interval },
 	{ "resource_dir",		XT_S_STR, 0, NULL,	&resource_dir, NULL, NULL, NULL },
-	{ "search_string",		XT_S_STR, 0, NULL,	&search_string, NULL, NULL, NULL },
+	{ "search_string",		XT_S_STR, 0, NULL,	&search_string, NULL, NULL, set_search_string },
 	{ "save_global_history",	XT_S_INT, XT_SF_RESTART,&save_global_history, NULL, NULL, NULL, NULL },
 	{ "save_rejected_cookies",	XT_S_INT, XT_SF_RESTART,&save_rejected_cookies, NULL, NULL, NULL, NULL },
-	{ "session_timeout",		XT_S_INT, 0,		&session_timeout, NULL, NULL, NULL, NULL },
-	{ "session_autosave",		XT_S_INT, 0,		&session_autosave, NULL, NULL, NULL, NULL },
+	{ "session_timeout",		XT_S_INT, 0,		&session_timeout, NULL, NULL, NULL, set_session_timeout },
+	{ "session_autosave",		XT_S_INT, 0,		&session_autosave, NULL, NULL, NULL, set_session_autosave },
 	{ "single_instance",		XT_S_INT, XT_SF_RESTART,&single_instance, NULL, NULL, NULL, NULL },
 	{ "show_tabs",			XT_S_INT, 0,		&show_tabs, NULL, NULL, NULL, set_show_tabs },
 	{ "show_url",			XT_S_INT, 0,		&show_url, NULL, NULL, NULL, set_show_url },
-	{ "show_statusbar",		XT_S_INT, 0,		&show_statusbar, NULL, NULL, NULL, NULL },
-	{ "spell_check_languages",	XT_S_STR, 0, NULL,	&spell_check_languages, NULL, NULL, NULL },
-	{ "ssl_ca_file",		XT_S_STR, 0, NULL,	&ssl_ca_file, NULL, NULL, NULL },
-	{ "ssl_strict_certs",		XT_S_INT, 0,		&ssl_strict_certs, NULL, NULL, NULL, NULL },
-	{ "enable_strict_transport",	XT_S_INT, 0,		&enable_strict_transport, NULL, NULL, NULL, NULL },
+	{ "show_statusbar",		XT_S_INT, 0,		&show_statusbar, NULL, NULL, NULL, set_show_statusbar },
+	{ "spell_check_languages",	XT_S_STR, 0, NULL,	&spell_check_languages, NULL, NULL, set_spell_check_languages },
+	{ "ssl_ca_file",		XT_S_STR, 0, NULL,	&ssl_ca_file, NULL, NULL, set_ssl_ca_file_rt },
+	{ "ssl_strict_certs",		XT_S_INT, 0,		&ssl_strict_certs, NULL, NULL, NULL, set_ssl_strict_certs },
+	{ "enable_strict_transport",	XT_S_INT, 0,		&enable_strict_transport, NULL, NULL, NULL, set_enable_strict_transport },
 	{ "statusbar_elems",		XT_S_STR, 0, NULL,	&statusbar_elems, NULL, NULL, NULL },
-	{ "tab_style",			XT_S_STR, 0, NULL, NULL,&s_tab_style, NULL, NULL },
-	{ "userstyle_global",		XT_S_INT, 0,		&userstyle_global, NULL, NULL, NULL, NULL },
-	{ "url_regex",			XT_S_STR, 0, NULL,	&url_regex, NULL, NULL, NULL },
+	{ "tab_style",			XT_S_STR, 0, NULL, NULL,&s_tab_style, NULL, set_tab_style_rt },
+	{ "userstyle_global",		XT_S_INT, 0,		&userstyle_global, NULL, NULL, NULL, set_userstyle_global },
+	{ "url_regex",			XT_S_STR, 0, NULL,	&url_regex, NULL, NULL, set_url_regex },
 	{ "window_height",		XT_S_INT, 0,		&window_height, NULL, NULL, NULL, NULL },
 	{ "window_width",		XT_S_INT, 0,		&window_width, NULL, NULL, NULL, NULL },
 	{ "window_maximize",		XT_S_INT, 0,		&window_maximize, NULL, NULL, NULL, NULL },
 	{ "work_dir",			XT_S_STR, 0, NULL, NULL,&s_work_dir, NULL, NULL },
-	{ "xterm_workaround",		XT_S_INT, 0,		&xterm_workaround, NULL, NULL, NULL, NULL },
+	{ "xterm_workaround",		XT_S_INT, 0,		&xterm_workaround, NULL, NULL, NULL, set_xterm_workaround },
 	{ "auto_load_images",		XT_S_INT, 0,		&auto_load_images, NULL, NULL, NULL, set_auto_load_images },
 	{ "enable_favicon_entry",	XT_S_INT, 0,		&enable_favicon_entry, NULL, NULL, NULL, set_enable_favicon_entry },
 	{ "enable_favicon_tabs",	XT_S_INT, 0,		&enable_favicon_tabs, NULL, NULL, NULL, set_enable_favicon_tabs },
 	{ "referer",			XT_S_STR, 0, NULL, NULL,&s_referer, NULL, set_referer_rt },
 
 	/* font settings */
-	{ "cmd_font",			XT_S_STR, 0, NULL, &cmd_font_name, NULL },
-	{ "oops_font",			XT_S_STR, 0, NULL, &oops_font_name, NULL },
-	{ "statusbar_font",		XT_S_STR, 0, NULL, &statusbar_font_name, NULL },
-	{ "tabbar_font",		XT_S_STR, 0, NULL, &tabbar_font_name, NULL },
+	{ "cmd_font",			XT_S_STR, 0, NULL, &cmd_font_name, NULL, NULL, set_cmd_font },
+	{ "oops_font",			XT_S_STR, 0, NULL, &oops_font_name, NULL, NULL, set_oops_font },
+	{ "statusbar_font",		XT_S_STR, 0, NULL, &statusbar_font_name, NULL, NULL, set_statusbar_font },
+	{ "tabbar_font",		XT_S_STR, 0, NULL, &tabbar_font_name, NULL, NULL, set_tabbar_font },
 
 	/* runtime settings */
 	{ "append_next",		XT_S_INT, 0,		&append_next, NULL, NULL, NULL, set_append_next },
@@ -377,6 +411,34 @@ struct settings		rs[] = {
 };
 
 int
+set_default_zoom_level(char *value)
+{
+	struct karg		args = {0};
+	struct tab		*t;
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	default_zoom_level = g_strtod(value, NULL);
+	args.i = 100;	/* adjust = 100 percent for no additional adjustment */
+	TAILQ_FOREACH(t, &tabs, entry)
+		resizetab(t, &args);
+	return (0);
+}
+
+int
+set_cookies_enabled(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	cookies_enabled = tmp;
+	return (0);
+}
+
+int
 set_append_next(char *value)
 {
 	int			tmp;
@@ -390,14 +452,121 @@ set_append_next(char *value)
 }
 
 int
+set_cmd_font(char *value)
+{
+	struct tab		*t;
+
+	if (value == NULL || strlen(value))
+		return (-1);
+	if (cmd_font_name)
+		g_free(cmd_font_name);
+	if (cmd_font)
+		pango_font_description_free(cmd_font);
+	cmd_font_name = g_strdup(value);
+	cmd_font = pango_font_description_from_string(cmd_font_name);
+	TAILQ_FOREACH(t, &tabs, entry)
+		gtk_widget_modify_font(GTK_WIDGET(t->cmd), cmd_font);
+	return (0);
+}
+
+int
+set_oops_font(char *value)
+{
+	struct tab		*t;
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (oops_font_name)
+		g_free(oops_font_name);
+	if (oops_font)
+		pango_font_description_free(oops_font);
+	oops_font_name = g_strdup(value);
+	oops_font = pango_font_description_from_string(oops_font_name);
+	TAILQ_FOREACH(t, &tabs, entry)
+		gtk_widget_modify_font(GTK_WIDGET(t->oops), oops_font);
+	return (0);
+}
+
+int
+set_statusbar_font(char *value)
+{
+	struct tab		*t;
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (statusbar_font_name)
+		g_free(statusbar_font_name);
+	if (statusbar_font)
+		pango_font_description_free(statusbar_font);
+	statusbar_font_name = g_strdup(value);
+	statusbar_font = pango_font_description_from_string(
+		statusbar_font_name);
+	TAILQ_FOREACH(t, &tabs, entry) {
+		gtk_widget_modify_font(GTK_WIDGET(t->sbe.statusbar),
+		    statusbar_font);
+		gtk_widget_modify_font(GTK_WIDGET(t->sbe.buffercmd),
+		    statusbar_font);
+		gtk_widget_modify_font(GTK_WIDGET(t->sbe.zoom),
+		    statusbar_font);
+		gtk_widget_modify_font(GTK_WIDGET(t->sbe.position),
+		    statusbar_font);
+	}
+	return (0);
+}
+
+int
+set_tabbar_font(char *value)
+{
+	struct tab		*t;
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (tabbar_font_name)
+		g_free(tabbar_font_name);
+	if (tabbar_font)
+		pango_font_description_free(tabbar_font);
+	tabbar_font_name = g_strdup(value);
+	tabbar_font = pango_font_description_from_string(tabbar_font_name);
+	TAILQ_FOREACH(t, &tabs, entry)
+		gtk_widget_modify_font(GTK_WIDGET(t->tab_elems.label),
+		    tabbar_font);
+	return (0);
+}
+
+int
+set_color_visited_uris(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	color_visited_uris = tmp;
+	return (0);
+}
+
+int
 set_home(char *value)
 {
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
 	if (home)
-		free(home);
-	home = strdup(value);
+		g_free(home);
+	home = g_strdup(value);
 	return (0);
 }
 
+int
+set_search_string(char *value)
+{
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (search_string)
+		g_free(search_string);
+	search_string = g_strdup(value);
+	return (0);
+}
 
 size_t
 get_settings_size(void)
@@ -579,6 +748,16 @@ set_cookie_policy(struct settings *s, char *val)
 	return (0);
 }
 
+int
+set_cookie_policy_rt(char *value)
+{
+	if (set_cookie_policy(NULL, value))
+		return (-1);
+	g_object_set(G_OBJECT(s_cookiejar), SOUP_COOKIE_JAR_ACCEPT_POLICY,
+	    cookie_policy, (void *)NULL);
+	return (0);
+}
+
 char *
 get_cookie_policy(struct settings *s)
 {
@@ -616,6 +795,14 @@ set_default_script(struct settings *s, char *val)
 	return (0);
 }
 
+int
+set_default_script_rt(char *value)
+{
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	return (set_default_script(NULL, value));
+}
+
 char *
 get_download_dir(struct settings *s)
 {
@@ -1084,9 +1271,8 @@ walk_ua(struct settings *s,
 		return;
 	}
 
-	TAILQ_FOREACH(ua, &ua_list, entry) {
+	TAILQ_FOREACH(ua, &ua_list, entry)
 		cb(s, ua->value, cb_args);
-	}
 }
 
 int
@@ -1109,6 +1295,19 @@ set_auto_load_images(char *value)
 }
 
 int
+set_ctrl_click_focus(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	ctrl_click_focus = tmp;
+	return (0);
+}
+
+int
 set_enable_autoscroll(char *value)
 {
 	int			tmp;
@@ -1122,6 +1321,32 @@ set_enable_autoscroll(char *value)
 }
 
 int
+set_enable_cookie_whitelist(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_cookie_whitelist = tmp;
+	return (0);
+}
+
+int
+set_enable_js_whitelist(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_js_whitelist = tmp;
+	return (0);
+}
+
+int
 set_enable_favicon_entry(char *value)
 {
 	int			tmp;
@@ -1147,6 +1372,146 @@ set_enable_favicon_tabs(char *value)
 	return (0);
 }
 
+int
+set_enable_localstorage(char *value)
+{
+	struct tab		*t;
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_localstorage = tmp;
+	TAILQ_FOREACH(t, &tabs, entry) {
+		g_object_set(G_OBJECT(t->settings),
+		    "enable-html5-local-storage", enable_localstorage,
+		    (char *)NULL);
+	}
+	return (0);
+}
+
+int
+set_enable_plugins(char *value)
+{
+	struct tab		*t;
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_plugins = tmp;
+	TAILQ_FOREACH(t, &tabs, entry)
+		g_object_set(G_OBJECT(t->settings), "enable-plugins",
+		    enable_plugins, (char *)NULL);
+	return (0);
+}
+
+int
+set_enable_plugin_whitelist(char *value)
+{
+	/* XXX: this needs testing */
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_plugin_whitelist = tmp;
+	return (0);
+}
+
+int
+set_enable_scripts(char *value)
+{
+	struct tab		*t;
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_scripts = tmp;
+	TAILQ_FOREACH(t, &tabs, entry)
+		g_object_set(G_OBJECT(t->settings), "enable-scripts",
+		    enable_scripts, (char *)NULL);
+	return (0);
+}
+
+int
+set_enable_spell_checking(char *value)
+{
+	struct tab		*t;
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_spell_checking = tmp;
+	TAILQ_FOREACH(t, &tabs, entry)
+		g_object_set(G_OBJECT(t->settings), "enable_spell_checking",
+		    enable_spell_checking, (char *)NULL);
+	return (0);
+}
+
+int
+set_enable_strict_transport(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	enable_strict_transport = tmp;
+	return (0);
+}
+
+int
+set_encoding_rt(char *value)
+{
+	struct karg		args = {0};
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (encoding)
+		g_free(encoding);
+	encoding = g_strdup(value);
+	args.s = encoding;
+	set_encoding(get_current_tab(), &args);
+	return (0);
+}
+
+int
+set_guess_search(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	guess_search = tmp;
+	return (0);
+}
+
+int
+set_read_only_cookies(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	read_only_cookies = tmp;
+	g_object_set(G_OBJECT(p_cookiejar), SOUP_COOKIE_JAR_READ_ONLY,
+	    read_only_cookies, (void *)NULL);
+	return (0);
+}
+
 char *
 get_referer(struct settings *s)
 {
@@ -1193,7 +1558,62 @@ set_referer(struct settings *s, char *value)
 int
 set_referer_rt(char *value)
 {
-	return set_referer(NULL, value);
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	return (set_referer(NULL, value));
+}
+
+int
+set_refresh_interval(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, INT_MAX, &errstr);
+	if (errstr)
+		return (-1);
+	refresh_interval = tmp;
+	return (0);
+}
+
+int
+set_session_autosave(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	session_autosave = tmp;
+	return (0);
+}
+
+int
+set_session_timeout(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, INT_MAX, &errstr);
+	if (errstr)
+		return (-1);
+	session_timeout = tmp;
+	return (0);
+}
+
+int
+set_show_statusbar(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	show_statusbar = tmp;
+	statusbar_set_visibility();
+	return (0);
 }
 
 int
@@ -1227,6 +1647,56 @@ set_show_url(char *value)
 }
 
 int
+set_spell_check_languages(char *value)
+{
+	struct tab		*t;
+
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (spell_check_languages)
+		g_free(spell_check_languages);
+	spell_check_languages = g_strdup(value);
+	TAILQ_FOREACH(t, &tabs, entry)
+		g_object_set(G_OBJECT(t->settings), "spell_checking_languages",
+		    spell_check_languages, (char *)NULL);
+	return (0);
+}
+
+int
+check_valid_file(char *name)
+{
+	struct stat		sb;
+
+	if (name == NULL || stat(name, &sb))
+		return (-1);
+	return (0);
+}
+
+int
+set_ssl_ca_file_rt(char *value)
+{
+	if (value == NULL || strlen(value) == 0)
+		return (-1);
+	if (set_ssl_ca_file(value))
+		return (-1);
+	return (0);
+}
+
+int
+set_ssl_strict_certs(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	ssl_strict_certs = tmp;
+	set_ssl_ca_file(ssl_ca_file);
+	return (0);
+}
+
+int
 set_external_editor(char *editor)
 {
 	if (external_editor)
@@ -1284,6 +1754,52 @@ set_tab_style(struct settings *s, char *val)
 	return (0);
 }
 
+int
+set_tab_style_rt(char *value)
+{
+	struct karg		args = {0};
+	int			old_tab_style;
+
+	old_tab_style = tab_style;
+	if (set_tab_style(NULL, value))
+		return (-1);
+	if (old_tab_style != tab_style) {
+		tab_style = old_tab_style;
+		args.i = XT_TAB_NEXTSTYLE;
+		tabaction(get_current_tab(), &args);
+	}
+	return (0);
+}
+
+int
+set_url_regex(char *value)
+{
+	if (regcomp(&url_re, value, REG_EXTENDED | REG_NOSUB))
+		return (-1);
+	if (url_regex)
+		g_free(url_regex);
+	url_regex = g_strdup(value);
+	return (0);
+}
+
+int
+set_userstyle_global(char *value)
+{
+	struct karg		args = {0};
+	int			tmp, old_style;
+	const char		*errstr;
+
+	old_style = userstyle_global;
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	if (tmp != old_style) {
+		args.i = XT_STYLE_GLOBAL;
+		userstyle(get_current_tab(), &args);
+	}
+	return (0);
+}
+
 char *
 get_edit_mode(struct settings *s)
 {
@@ -1341,7 +1857,9 @@ set_download_mode(struct settings *s, char *val)
 int
 set_download_mode_rt(char *val)
 {
-	return set_download_mode(NULL, val);
+	if (val == NULL || strlen(val) == 0)
+		return (-1);
+	return (set_download_mode(NULL, val));
 }
 
 char *
@@ -1364,6 +1882,19 @@ set_work_dir(struct settings *s, char *val)
 	return (0);
 }
 
+int
+set_xterm_workaround(char *value)
+{
+	int			tmp;
+	const char		*errstr;
+
+	tmp = strtonum(value, 0, 1, &errstr);
+	if (errstr)
+		return (-1);
+	xterm_workaround = tmp;
+	return (0);
+}
+
 void
 walk_cookie_wl(struct settings *s,
     void (*cb)(struct settings *, char *, void *), void *cb_args)
@@ -1619,10 +2150,10 @@ set(struct tab *t, struct karg *args)
 		return (set_show(t, args));
 
 	/* we got some sort of string */
-	val = g_strrstr(p, "=");
+	val = g_strstr_len(p, strlen(p), "=");
 	if (val) {
 		*val++ = '\0';
-		val = g_strchomp(val);
+		val = g_strstrip(val);
 		p = g_strchomp(p);
 
 		for (i = 0; i < get_settings_size(); i++) {