Introduction
Introduction Statistics Contact Development Disclaimer Help
surf-tip-navhist.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
surf-tip-navhist.diff (4318B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 5245129..604028f 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -45,6 +45,16 @@ static Bool allowgeolocation = TRUE;
6 } \
7 }
8
9 +#define SELNAV { \
10 + .v = (char *[]){ "/bin/sh", "-c", \
11 + "prop=\"`xprop -id $0 _SURF_HIST" \
12 + " | sed -e 's/^.[^\"]*\"//' -e 's/\"$//' -e 's/\\\\\\n/…
13 + " | dmenu -i -l 10`\"" \
14 + " && xprop -id $0 -f _SURF_NAV 8s -set _SURF_NAV \"$pro…
15 + winid, NULL \
16 + } \
17 +}
18 +
19 /* DOWNLOAD(URI, referer) */
20 #define DOWNLOAD(d, r) { \
21 .v = (char *[]){ "/bin/sh", "-c", \
22 @@ -99,6 +109,7 @@ static Key keys[] = {
23
24 { MODKEY, GDK_l, navigate, { .i = +1 } },
25 { MODKEY, GDK_h, navigate, { .i = -1 } },
26 + { MODKEY|GDK_SHIFT_MASK,GDK_h, selhist, SELNAV },
27
28 { MODKEY, GDK_j, scroll_v, { .i = +1 } },
29 { MODKEY, GDK_k, scroll_v, { .i = -1 } },
30 diff --git a/surf.c b/surf.c
31 index 0fae80b..1c09336 100644
32 --- a/surf.c
33 +++ b/surf.c
34 @@ -36,7 +36,7 @@ char *argv0;
35 #define COOKIEJAR_TYPE (cookiejar_get_type ())
36 #define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COO…
37
38 -enum { AtomFind, AtomGo, AtomUri, AtomLast };
39 +enum { AtomFind, AtomGo, AtomUri, AtomHist, AtomNav, AtomLast };
40 enum {
41 ClkDoc = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT,
42 ClkLink = WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK,
43 @@ -177,6 +177,8 @@ static void loadstatuschange(WebKitWebView *view, GP…
44 Client *c);
45 static void loaduri(Client *c, const Arg *arg);
46 static void navigate(Client *c, const Arg *arg);
47 +static void selhist(Client *c, const Arg *arg);
48 +static void navhist(Client *c, const Arg *arg);
49 static Client *newclient(void);
50 static void newwindow(Client *c, const Arg *arg, gboolean noembed);
51 static void pasteuri(GtkClipboard *clipboard, const char *text, gpointe…
52 @@ -813,6 +815,59 @@ navigate(Client *c, const Arg *arg) {
53 webkit_web_view_go_back_or_forward(c->view, steps);
54 }
55
56 +static void
57 +selhist(Client *c, const Arg *arg) {
58 + WebKitWebBackForwardList *lst;
59 + WebKitWebHistoryItem *cur;
60 + gint i;
61 + gchar *out;
62 + gchar *tmp;
63 + gchar *line;
64 +
65 + out = g_strdup("");
66 +
67 + if(!(lst = webkit_web_view_get_back_forward_list(c->view)))
68 + return;
69 +
70 + for(i = webkit_web_back_forward_list_get_back_length(lst); i > …
71 + if(!(cur = webkit_web_back_forward_list_get_nth_item(ls…
72 + break;
73 + line = g_strdup_printf("%d: %s\n", -i,
74 + webkit_web_history_item_get_orig…
75 + tmp = g_strconcat(out, line, NULL);
76 + g_free(out);
77 + out = tmp;
78 + }
79 +
80 + if((cur = webkit_web_back_forward_list_get_nth_item(lst, 0))) {
81 + line = g_strdup_printf("%d: %s", 0,
82 + webkit_web_history_item_get_orig…
83 + tmp = g_strconcat(out, line, NULL);
84 + g_free(out);
85 + out = tmp;
86 + }
87 +
88 + for(i = 1; i <= webkit_web_back_forward_list_get_forward_length…
89 + if(!(cur = webkit_web_back_forward_list_get_nth_item(ls…
90 + break;
91 + line = g_strdup_printf("\n%d: %s", i,
92 + webkit_web_history_item_get_orig…
93 + tmp = g_strconcat(out, line, NULL);
94 + g_free(out);
95 + out = tmp;
96 + }
97 +
98 + setatom(c, AtomHist, out);
99 + g_free(out);
100 + spawn(c, arg);
101 +}
102 +
103 +static void
104 +navhist(Client *c, const Arg *arg) {
105 + Arg a = { .i = atoi(arg->v) };
106 + navigate(c, &a);
107 +}
108 +
109 static Client *
110 newclient(void) {
111 Client *c;
112 @@ -1014,6 +1069,7 @@ newclient(void) {
113
114 setatom(c, AtomFind, "");
115 setatom(c, AtomUri, "about:blank");
116 + setatom(c, AtomHist, "");
117 if(hidebackground)
118 webkit_web_view_set_transparent(c->view, TRUE);
119
120 @@ -1153,6 +1209,9 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d…
121 loaduri(c, &arg);
122
123 return GDK_FILTER_REMOVE;
124 + } else if(ev->atom == atoms[AtomNav]) {
125 + arg.v = getatom(c, AtomNav);
126 + navhist(c, &arg);
127 }
128 }
129 }
130 @@ -1247,6 +1306,8 @@ setup(void) {
131 atoms[AtomFind] = XInternAtom(dpy, "_SURF_FIND", False);
132 atoms[AtomGo] = XInternAtom(dpy, "_SURF_GO", False);
133 atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False);
134 + atoms[AtomHist] = XInternAtom(dpy, "_SURF_HIST", False);
135 + atoms[AtomNav] = XInternAtom(dpy, "_SURF_NAV", False);
136
137 /* dirs and files */
138 cookiefile = buildfile(cookiefile);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.