diff options
author | mutantturkey <crazycal00@gmail.com> | 2010-06-09 21:37:25 -0400 |
---|---|---|
committer | mutantturkey <crazycal00@gmail.com> | 2010-06-09 21:37:25 -0400 |
commit | e0b568e6494cea946ec842ded9f45f42a5652bb0 (patch) | |
tree | 6848ab7d0f834afdc492823aca4f8bb245ab9919 | |
parent | 18949f0d37666af9191de896352c75630a7bb062 (diff) |
I added CTRL+G to "tab & go" it spawns the history command and opens the returned URL in a new tab
-rw-r--r-- | sb.c | 41 |
1 files changed, 31 insertions, 10 deletions
@@ -13,15 +13,21 @@ #include <webkit/webkit.h> #include <glib/gstdio.h> -typedef struct tab { GtkWidget *scroll; GtkWidget *label; gchar *main_title; gint load_progress; guint status_context_id; WebKitWebView *view; WebKitWebSettings *settings; } tab; +typedef struct tab { GtkWidget *scroll; GtkWidget *label; gchar *main_title; gint load_progress; guint status_context_id; WebKitWebView *view; } tab; static struct { WebKitWebSettings *webkitsettings; GtkWidget *win; GtkWidget *bar; GtkWidget *search; GtkWidget *vbox; GtkWidget *notebook; GtkWidget *status; } w; #define get_tab(x, page_idx ) (struct tab*)g_object_get_qdata(G_OBJECT( gtk_notebook_get_nth_page( (GtkNotebook*)w.notebook, page_idx ) ), term_data_id); +static struct { + char *defaultdownload; + char *defaultsearchengine; + char *defaultfont; + int tab_length; +} settings; + + + static GQuark term_data_id = 0; -static char *defaultdownload = "xterm -bg black -fg white -e wget -P "; -static char *defaultsearchengine = "http://www.google.com/search?q="; -static char *defaultfont = "san-serif"; -int tab_length = 25; + static void activate_uri_entry_cb(GtkWidget* entry, gpointer data); static void link_hover(WebKitWebView* page, const gchar* title, const gchar* link, gpointer data); static void title_change_cb(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t); @@ -31,6 +37,7 @@ static void go_cb(gboolean b); static void tab_new(); static void tab_zoom(gboolean b); static void tab_close(); +static void tab_and_go(); static void tab_focus(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); static void download(WebKitWebView *web_view, GObject *download, gpointer user_data); static void config(); @@ -76,7 +83,7 @@ if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 0) { gtk_main_quit(); } static void download(WebKitWebView *web_view, GObject *d, gpointer user_data) { const gchar *c = webkit_download_get_uri(WEBKIT_DOWNLOAD(d)); -gchar *command = g_strconcat(defaultdownload, g_get_home_dir(), "/ ", g_strdup(c), NULL); +gchar *command = g_strconcat(settings.defaultdownload, g_get_home_dir(), "/ ", g_strdup(c), NULL); puts(command); g_spawn_command_line_async(command, NULL); g_free(command); @@ -89,14 +96,13 @@ else { gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, ""); } static void title_change_cb(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t) { gchar *tabtitle; -if(strlen(title) < tab_length) { tabtitle = g_strdup(title); } +if(strlen(title) < settings.tab_length) { tabtitle = g_strdup(title); } else { - tabtitle = g_strndup(title, tab_length); + tabtitle = g_strndup(title, settings.tab_length); strcat(tabtitle, "..."); } - gtk_window_set_title(GTK_WINDOW(w.win), title); gtk_label_set_label(GTK_LABEL(t->label), tabtitle); } @@ -111,6 +117,15 @@ fprintf(history, "%s \n", uri); fclose(history); } +static void tab_and_go() { + +gchar *returned; +g_spawn_command_line_sync("sh -c 'sort ~/.history | dmenu -l 15 -xs -c'", &returned, NULL, NULL, NULL); +if(strcmp(returned, "") == 0) { focus_view(); } else { tab_new(); load_uri(returned); } + +g_free(returned); + +} static void load_uri(gchar *uri) { gchar *u; //Barrowed from surf, no point creating another method, this seems to work well @@ -285,6 +300,11 @@ if(atoi(setting) == 0) else { g_object_set(G_OBJECT(w.webkitsettings), property, atoi(setting), NULL); break; } } + settings.defaultdownload = "xterm -bg black -fg white -e wget -P "; + settings.defaultsearchengine = "http://www.google.com/search?q="; + settings.defaultfont = "san-serif"; + settings.tab_length = 25; + tab_new(); @@ -308,6 +328,7 @@ if ( (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK ) { switch(g) { case GDK_l: gtk_widget_grab_focus(GTK_WIDGET(w.bar)); return TRUE; break; case GDK_f: show_search(TRUE); return TRUE; break; + case GDK_g: tab_and_go(); return TRUE; break; case GDK_j: go_cb(FALSE); return TRUE; break; case GDK_k: go_cb(TRUE); return TRUE; break; case GDK_o: history_command(); return TRUE; break; @@ -320,7 +341,7 @@ switch(g) { case GDK_bracketleft: tab_zoom(FALSE); return TRUE; break; case GDK_r: reload(); return TRUE; break; case GDK_s: tab_view_source(); return TRUE; break; - case GDK_Return: load_uri(g_strconcat(defaultsearchengine, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break; + case GDK_Return: load_uri(g_strconcat(settings.defaultsearchengine, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break; default: return FALSE; break; } } |