Only in surf-0.3~: b diff -up surf-0.3/config.def.h surf-0.3~/config.def.h --- surf-0.3/config.def.h 2009-10-30 12:41:02.000000000 +0000 +++ surf-0.3~/config.def.h 2010-02-23 14:09:08.000000000 +0000 @@ -33,6 +34,7 @@ static Key keys[] = { { MODKEY, GDK_slash, spawn, SETPROP("_SURF_FIND") }, { MODKEY, GDK_n, find, { .b = TRUE } }, { MODKEY|GDK_SHIFT_MASK,GDK_n, find, { .b = FALSE } }, + { 0, GDK_i, insert, { 0 } }, }; static Item items[] = { diff -up surf-0.3/surf.c surf-0.3~/surf.c --- surf-0.3/surf.c 2009-10-30 12:41:02.000000000 +0000 +++ surf-0.3~/surf.c 2010-02-23 14:04:52.000000000 +0000 @@ -65,7 +65,9 @@ static int ignorexprop = 0; static char winid[64]; static char *progname; static gboolean lockcookie = FALSE; +static gboolean insert_mode = FALSE; +static void insert(Client *c, const Arg *arg); static char *buildpath(const char *path); static void changecookie(SoupCookieJar *jar, SoupCookie *o, SoupCookie *n, gpointer p); static void cleanup(void); @@ -391,21 +393,59 @@ itemclick(GtkMenuItem *mi, Client *c) { items[i].func(c, &(items[i].arg)); } +void +insert(Client *c, const Arg *arg) { + insert_mode = TRUE; + update(clients); +} + gboolean keypress(GtkWidget* w, GdkEventKey *ev, Client *c) { guint i; gboolean processed = FALSE; updatewinid(c); + + if (ev->type != GDK_KEY_PRESS || + ev->keyval == GDK_Return || + ev->keyval == GDK_Page_Up || + ev->keyval == GDK_Page_Down || + ev->keyval == GDK_Up || + ev->keyval == GDK_Down || + ev->keyval == GDK_Left || + ev->keyval == GDK_Right || + ev->keyval == GDK_Shift_L || + ev->keyval == GDK_Shift_R) + return FALSE; + + /* turn off insert mode */ + if (insert_mode && (ev->keyval == GDK_Escape)) { + insert_mode = FALSE; + update(c); + return TRUE; + } + + if (insert_mode && ( ((ev->state & MODKEY) != MODKEY) || !MODKEY ) ) { + return FALSE; + } + + if (ev->keyval == GDK_Escape) { + webkit_web_view_set_highlight_text_matches(c->view, FALSE); + /* return TRUE; */ + } + + + for(i = 0; i < LENGTH(keys); i++) { - if(gdk_keyval_to_lower(ev->keyval) == keys[i].keyval - && CLEANMASK(ev->state) == keys[i].mod + if(ev->keyval == keys[i].keyval + /* && CLEANMASK(ev->state) == keys[i].mod */ && keys[i].func) { keys[i].func(c, &(keys[i].arg)); processed = TRUE; } } - return processed; + /* return processed; */ + return TRUE; } void