diff options
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | events.c | 27 | ||||
-rw-r--r-- | uzbl-core.c | 14 | ||||
-rw-r--r-- | uzbl-core.h | 3 |
4 files changed, 34 insertions, 12 deletions
@@ -144,6 +144,8 @@ The following commands are recognized: * `search <string>` * `search_reverse <string>` - search with no string will search for the next/previous occurrence of the string previously searched for +* `search_clear` + - unmark and clear the search string * `toggle_insert_mode <optional state>` TODO new plugin based syntax - if the optional state is 0, disable insert mode. If 1, enable insert mode. * `dump_config` @@ -180,23 +180,26 @@ send_event(int type, const gchar *details, const gchar *custom_event) { /* Transform gdk key events to our own events */ void key_to_event(guint keyval, gint mode) { - char byte[2] = {0, 0}; - gchar *utf_conv = NULL; + gchar ucs[7]; + gint ulen; + guint32 ukval = gdk_keyval_to_unicode(keyval); - /* check for Latin-1 characters (1:1 mapping) */ - if ((keyval > 0x0020 && keyval <= 0x007e) || - (keyval >= 0x0080 && keyval <= 0x00ff)) { - byte[0] = (char) keyval; - - /* convert to utf-8 */ - utf_conv = g_convert(byte, -1, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); + /* check for printable unicode char */ + /* TODO: Pass the keyvals through a GtkIMContext so that + * we also get combining chars right + */ + if(g_unichar_isgraph(ukval)) { + ulen = g_unichar_to_utf8(ukval, ucs); + ucs[ulen] = 0; - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, utf_conv ? utf_conv : byte, NULL); - g_free(utf_conv); + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, + ucs, NULL); } - else + /* send keysym for non-printable chars */ + else { send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, gdk_keyval_name(keyval), NULL); + } } diff --git a/uzbl-core.c b/uzbl-core.c index be2ce75..2f808b5 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -630,6 +630,7 @@ struct {const char *key; CommandInfo value;} cmdlist[] = { "exit", {close_uzbl, 0} }, { "search", {search_forward_text, TRUE} }, { "search_reverse", {search_reverse_text, TRUE} }, + { "search_clear", {search_clear, TRUE} }, { "dehilight", {dehilight, 0} }, { "set", {set_var, TRUE} }, { "dump_config", {act_dump_config, 0} }, @@ -1094,6 +1095,7 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } } + if (uzbl.state.searchtx) { if (uzbl.state.verbose) printf ("Searching: %s\n", uzbl.state.searchtx); @@ -1103,6 +1105,18 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } void +search_clear(WebKitWebView *page, GArray *argv, GString *result) { + (void) argv; + (void) result; + + webkit_web_view_unmark_text_matches (page); + if(uzbl.state.searchtx) { + g_free(uzbl.state.searchtx); + uzbl.state.searchtx = NULL; + } +} + +void search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { (void) result; search_text(page, argv, TRUE); diff --git a/uzbl-core.h b/uzbl-core.h index 5c291e5..82137e3 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -374,6 +374,9 @@ void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result); void +search_clear(WebKitWebView *page, GArray *argv, GString *result); + +void dehilight (WebKitWebView *page, GArray *argv, GString *result); void |