about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--settings.c2
-rw-r--r--xxxterm.18
-rw-r--r--xxxterm.c30
-rw-r--r--xxxterm.conf1
-rw-r--r--xxxterm.h1
5 files changed, 33 insertions, 9 deletions
diff --git a/settings.c b/settings.c
index 6cd208e..9ff0137 100644
--- a/settings.c
+++ b/settings.c
@@ -51,6 +51,7 @@ gfloat		default_zoom_level = 1.0;
 char		default_script[PATH_MAX];
 int		window_height = 768;
 int		window_width = 1024;
+int		window_maximize = 0;
 int		icon_size = 2; /* 1 = smallest, 2+ = bigger */
 int		refresh_interval = 10; /* download refresh interval */
 int		enable_plugin_whitelist = 0;
@@ -302,6 +303,7 @@ struct settings		rs[] = {
 	{ "url_regex",			XT_S_STR, 0, NULL,	&url_regex, NULL },
 	{ "window_height",		XT_S_INT, 0,		&window_height, NULL, NULL },
 	{ "window_width",		XT_S_INT, 0,		&window_width, NULL, NULL },
+	{ "window_maximize",		XT_S_INT, 0,		&window_maximize, NULL, NULL },
 	{ "work_dir",			XT_S_STR, 0, NULL, NULL,&s_work_dir },
 	{ "xterm_workaround",		XT_S_INT, 0,		&xterm_workaround, NULL, NULL },
 	{ "user_agent_roundrobin",	XT_S_INT, 0,	&user_agent_roundrobin, NULL, NULL, NULL, set_ua_roundrobin },
diff --git a/xxxterm.1 b/xxxterm.1
index 04d3ea2..9133be0 100644
--- a/xxxterm.1
+++ b/xxxterm.1
@@ -674,14 +674,16 @@ go to the
 percent of the page
 .It Cm zz
 go to 50% of the page
-.It Cm [0-9]*gU
+.It Cm [0-9]*gu
 go
 .Cm arg
 levels up. If
 .Cm arg
 is missing, 1 is assumed. Going a
-level up means going to a uri obtained from the current one by removing
+level up means going to a URI obtained from the current one by removing
 the last slash ('/') character and everything that follows it
+.It Cm gU
+go to the root level, i.e. going up as many levels as possible.
 .It Cm gh
 open the home page in the current tab
 .It Cm m[a-zA-Z0-9]
@@ -1220,6 +1222,8 @@ If enabled, switches between specified user-agents for each new request.
 Set the default height of the browser window.
 .It Cm window_width
 Set the default width of the browser window.
+.It Cm window_maximize
+Maximize the browser window at startup.
 .It Cm work_dir
 Set the work directory where all
 .Nm
diff --git a/xxxterm.c b/xxxterm.c
index 61254e8..2efff3d 100644
--- a/xxxterm.c
+++ b/xxxterm.c
@@ -148,6 +148,8 @@ TAILQ_HEAD(command_list, command_entry);
 #define XT_MARK_SET		(0)
 #define XT_MARK_GOTO		(1)
 
+#define XT_GO_UP_ROOT		(999)
+
 #define XT_TAB_LAST		(-4)
 #define XT_TAB_FIRST		(-3)
 #define XT_TAB_PREV		(-2)
@@ -588,6 +590,9 @@ buffers_make_list(void)
 void
 show_buffers(struct tab *t)
 {
+	if (gtk_widget_get_visible(GTK_WIDGET(t->buffers)))
+		return;
+
 	buffers_make_list();
 	gtk_widget_show(t->buffers);
 	gtk_widget_grab_focus(GTK_WIDGET(t->buffers));
@@ -4763,17 +4768,21 @@ qmark(struct tab *t, struct karg *arg)
 int
 go_up(struct tab *t, struct karg *args)
 {
-	int		 levels;
+	int		levels;
 	char		*uri;
 	char		*tmp;
+	char		*p;
 
-	levels = atoi(args->s);
-	if (levels == 0)
+	if (args->i == XT_GO_UP_ROOT)
+		levels = XT_GO_UP_ROOT;
+	else if ((levels = atoi(args->s)) == 0)
 		levels = 1;
 
-	uri = g_strdup(webkit_web_view_get_uri(t->wv));
+	uri = g_strdup(get_uri(t));
+
 	if ((tmp = strstr(uri, XT_PROTO_DELIM)) == NULL)
 		return (1);
+
 	tmp += strlen(XT_PROTO_DELIM);
 
 	/* if an uri starts with a slash, leave it alone (for file:///) */
@@ -4781,8 +4790,6 @@ go_up(struct tab *t, struct karg *args)
 		tmp++;
 
 	while (levels--) {
-		char	*p;
-
 		p = strrchr(tmp, '/');
 		if (p != NULL)
 			*p = '\0';
@@ -4858,6 +4865,7 @@ struct buffercmd {
 	regex_t		cregex;
 } buffercmds[] = {
 	{ "^[0-9]*gu$",		XT_PRE_MAYBE,	"gu",	go_up,		0 },
+	{ "^gU$",		XT_PRE_NO,	"gU",	go_up,		XT_GO_UP_ROOT },
 	{ "^gg$",		XT_PRE_NO,	"gg",	move,		XT_MOVE_TOP },
 	{ "^gG$",		XT_PRE_NO,	"gG",	move,		XT_MOVE_BOTTOM },
 	{ "^[0-9]+%$",		XT_PRE_YES,	"%",	move,		XT_MOVE_PERCENT },
@@ -4927,6 +4935,11 @@ buffercmd_addkey(struct tab *t, guint keyval)
 	int			i, c, match ;
 	char			s[XT_BUFCMD_SZ];
 
+	if (gtk_widget_get_visible(GTK_WIDGET(t->buffers))) {
+		buffercmd_abort(t);
+		return (XT_CB_PASSTHROUGH);
+	}
+
 	if (keyval == GDK_Escape) {
 		buffercmd_abort(t);
 		return (XT_CB_HANDLED);
@@ -5924,7 +5937,10 @@ create_window(const gchar *name)
 	GtkWidget		*w;
 
 	w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_default_size(GTK_WINDOW(w), window_width, window_height);
+	if (window_maximize)
+		gtk_window_maximize(GTK_WINDOW(w));
+	else
+		gtk_window_set_default_size(GTK_WINDOW(w), window_width, window_height);
 	gtk_widget_set_name(w, name);
 	gtk_window_set_wmclass(GTK_WINDOW(w), name, "XXXTerm");
 
diff --git a/xxxterm.conf b/xxxterm.conf
index 635a885..ee90756 100644
--- a/xxxterm.conf
+++ b/xxxterm.conf
@@ -58,6 +58,7 @@
 # icon_size		= 2
 # window_width		= 1024
 # window_height		= 768
+# window_maximize	= 0
 
 #
 # user_agent can bet set to just about anything
diff --git a/xxxterm.h b/xxxterm.h
index 5e9f0ec..ae03f5e 100644
--- a/xxxterm.h
+++ b/xxxterm.h
@@ -503,6 +503,7 @@ extern gfloat	default_zoom_level;
 extern char	default_script[PATH_MAX];
 extern int	window_height;
 extern int	window_width;
+extern int	window_maximize;
 extern int	icon_size;
 extern int	refresh_interval;
 extern int	enable_plugin_whitelist;