surf-modal-20190209-d068a38.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
surf-modal-20190209-d068a38.diff (6157B)
---
1 From 74a98d9600c50d50b9323cf8e459c88eb15da557 Mon Sep 17 00:00:00 2001
2 From: efe <efe@efe.kim>
3 Date: Sat, 9 Feb 2019 13:16:51 -0500
4 Subject: [PATCH] Modal behaviour, 'i' to insert 'Esc' to get to the normal
5 mode
6
7 ---
8 config.def.h | 53 +++++++++++++++++++++++++++-------------------------
9 surf.c | 14 +++++++++++++-
10 2 files changed, 41 insertions(+), 26 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 34265f6..8b7d5a2 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -130,41 +130,44 @@ static SiteSpecific certs[] = {
17 */
18 static Key keys[] = {
19 /* modifier keyval function arg */
20 - { MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
21 - { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
22 - { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
23 + { 0, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
24 + { 0, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
25 + { 0, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
26
27 - { 0, GDK_KEY_Escape, stop, { 0 } },
28 - { MODKEY, GDK_KEY_c, stop, { 0 } },
29 + { 0, GDK_KEY_i, insert, { .i = 1 } },
30 + { 0, GDK_KEY_Escape, insert, { .i = 0 } },
31
32 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .i = 1 } },
33 - { MODKEY, GDK_KEY_r, reload, { .i = 0 } },
34 + { 0, GDK_KEY_c, stop, { 0 } },
35
36 - { MODKEY, GDK_KEY_l, navigate, { .i = +1 } },
37 - { MODKEY, GDK_KEY_h, navigate, { .i = -1 } },
38 + { MODKEY, GDK_KEY_r, reload, { .i = 1 } },
39 + { 0, GDK_KEY_r, reload, { .i = 0 } },
40 +
41 + { 0, GDK_KEY_l, navigate, { .i = +1 } },
42 + { 0, GDK_KEY_h, navigate, { .i = -1 } },
43
44 /* vertical and horizontal scrolling, in viewport percentage */
45 - { MODKEY, GDK_KEY_j, scrollv, { .i = +10 } },
46 - { MODKEY, GDK_KEY_k, scrollv, { .i = -10 } },
47 - { MODKEY, GDK_KEY_space, scrollv, { .i = +50 } },
48 - { MODKEY, GDK_KEY_b, scrollv, { .i = -50 } },
49 - { MODKEY, GDK_KEY_i, scrollh, { .i = +10 } },
50 - { MODKEY, GDK_KEY_u, scrollh, { .i = -10 } },
51 + { 0, GDK_KEY_j, scrollv, { .i = +10 } },
52 + { 0, GDK_KEY_k, scrollv, { .i = -10 } },
53 + { 0, GDK_KEY_space, scrollv, { .i = +50 } },
54 + { 0, GDK_KEY_b, scrollv, { .i = -50 } },
55 + { 0, GDK_KEY_i, scrollh, { .i = +10 } },
56 + { 0, GDK_KEY_u, scrollh, { .i = -10 } },
57
58
59 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } },
60 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_k, zoom, { .i = +1 } },
61 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_q, zoom, { .i = 0 } },
62 - { MODKEY, GDK_KEY_minus, zoom, { .i = -1 } },
63 - { MODKEY, GDK_KEY_plus, zoom, { .i = +1 } },
64 + { 0|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } },
65 + { 0|GDK_SHIFT_MASK, GDK_KEY_k, zoom, { .i = +1 } },
66 + { 0|GDK_SHIFT_MASK, GDK_KEY_q, zoom, { .i = 0 } },
67 + { 0, GDK_KEY_minus, zoom, { .i = -1 } },
68 + { 0|GDK_SHIFT_MASK, GDK_KEY_plus, zoom, { .i = +1 } },
69 + { 0, GDK_KEY_equal, zoom, { .i = 0 } },
70
71 - { MODKEY, GDK_KEY_p, clipboard, { .i = 1 } },
72 - { MODKEY, GDK_KEY_y, clipboard, { .i = 0 } },
73 + { 0, GDK_KEY_p, clipboard, { .i = 1 } },
74 + { 0, GDK_KEY_y, clipboard, { .i = 0 } },
75
76 - { MODKEY, GDK_KEY_n, find, { .i = +1 } },
77 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } },
78 + { 0, GDK_KEY_n, find, { .i = +1 } },
79 + { 0|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } },
80
81 - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, print, { 0 } },
82 + { MODKEY, GDK_KEY_p, print, { 0 } },
83 { MODKEY, GDK_KEY_t, showcert, { 0 } },
84
85 { MODKEY|GDK_SHIFT_MASK, GDK_KEY_a, togglecookiepolicy, { 0 } },
86 diff --git a/surf.c b/surf.c
87 index 2b54e3c..f4cbe68 100644
88 --- a/surf.c
89 +++ b/surf.c
90 @@ -175,6 +175,7 @@ static void spawn(Client *c, const Arg *a);
91 static void msgext(Client *c, char type, const Arg *a);
92 static void destroyclient(Client *c);
93 static void cleanup(void);
94 +static int insertmode = 0;
95
96 /* GTK/WebKit */
97 static WebKitWebView *newview(Client *c, WebKitWebView *rv);
98 @@ -231,6 +232,7 @@ static void togglefullscreen(Client *c, const Arg *a);
99 static void togglecookiepolicy(Client *c, const Arg *a);
100 static void toggleinspector(Client *c, const Arg *a);
101 static void find(Client *c, const Arg *a);
102 +static void insert(Client *c, const Arg *a);
103
104 /* Buttons */
105 static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h);
106 @@ -1333,7 +1335,11 @@ winevent(GtkWidget *w, GdkEvent *e, Client *c)
107 updatetitle(c);
108 break;
109 case GDK_KEY_PRESS:
110 - if (!curconfig[KioskMode].val.i) {
111 + if (!curconfig[KioskMode].val.i &&
112 + !insertmode ||
113 + CLEANMASK(e->key.state) == (MODKEY|GDK_SHIFT_MASK) ||
114 + CLEANMASK(e->key.state) == (MODKEY) ||
115 + gdk_keyval_to_lower(e->key.keyval) == (GDK_KEY_Escape)) {
116 for (i = 0; i < LENGTH(keys); ++i) {
117 if (gdk_keyval_to_lower(e->key.keyval) ==
118 keys[i].keyval &&
119 @@ -1947,6 +1953,12 @@ find(Client *c, const Arg *a)
120 }
121 }
122
123 +void
124 +insert(Client *c, const Arg *a)
125 +{
126 + insertmode = (a->i);
127 +}
128 +
129 void
130 clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h)
131 {
132 --
133 2.20.1
134