tImprove non-ASCII character search handling - surf - [fork] customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 11dca18a2d148e5a6463aba783567a3815424963
 (DIR) parent 238d2273b50c33a1e98ad55750126f05201f911d
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Mon, 19 Jul 2021 21:23:32 +0200
       
       Improve non-ASCII character search handling
       
       Before, the XA_STRING would only let use ASCII characters properly.
       Now UTF-8 characters should be handled correctly.
       
       Diffstat:
         M config.def.h                        |       4 ++--
         M surf.c                              |       8 +++++---
       
       2 files changed, 7 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       t@@ -68,10 +68,10 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
        #define SETPROP(r, s, p) { \
                .v = (const char *[]){ "/bin/sh", "-c", \
                     "prop=\"$(printf '%b' \"$(xprop -id $1 "r" " \
       -             "| sed -e 's/^"r"(STRING) = \"\\(.*\\)\"/\\1/' " \
       +             "| sed -e 's/^"r"(UTF8_STRING) = \"\\(.*\\)\"/\\1/' " \
                     "      -e 's/\\\\\\(.\\)/\\1/g')\" " \
                     "| dmenu -p '"p"' -w $1)\" " \
       -             "&& xprop -id $1 -f "s" 8s -set "s" \"$prop\"", \
       +             "&& xprop -id $1 -f "s" 8u -set "s" \"$prop\"", \
                     "surf-setprop", winid, NULL \
                } \
        }
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -37,7 +37,7 @@
        #define LENGTH(x)               (sizeof(x) / sizeof(x[0]))
        #define CLEANMASK(mask)         (mask & (MODKEY|GDK_SHIFT_MASK))
        
       -enum { AtomFind, AtomGo, AtomUri, AtomLast };
       +enum { AtomFind, AtomGo, AtomUri, AtomUTF8, AtomLast };
        
        enum {
                OnDoc   = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT,
       t@@ -339,6 +339,7 @@ setup(void)
                atoms[AtomFind] = XInternAtom(dpy, "_SURF_FIND", False);
                atoms[AtomGo] = XInternAtom(dpy, "_SURF_GO", False);
                atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False);
       +        atoms[AtomUTF8] = XInternAtom(dpy, "UTF8_STRING", False);
        
                gtk_init(NULL, NULL);
        
       t@@ -608,7 +609,7 @@ void
        setatom(Client *c, int a, const char *v)
        {
                XChangeProperty(dpy, c->xid,
       -                        atoms[a], XA_STRING, 8, PropModeReplace,
       +                        atoms[a], atoms[AtomUTF8], 8, PropModeReplace,
                                (unsigned char *)v, strlen(v) + 1);
                XSync(dpy, False);
        }
       t@@ -623,7 +624,8 @@ getatom(Client *c, int a)
                unsigned char *p = NULL;
        
                XSync(dpy, False);
       -        XGetWindowProperty(dpy, c->xid, atoms[a], 0L, BUFSIZ, False, XA_STRING,
       +        XGetWindowProperty(dpy, c->xid,
       +                           atoms[a], 0L, BUFSIZ, False, atoms[AtomUTF8],
                                   &adummy, &idummy, &ldummy, &ldummy, &p);
                if (p)
                        strncpy(buf, (char *)p, LENGTH(buf) - 1);