View difference between Paste ID: bjmp8T56 and Rqg40ueh
SHOW: | | - or go back to the newest paste.
1
diff -Nuar g15daemon-1.9.5.3.orig/g15daemon/utility_funcs.c g15daemon-1.9.5.3/g15daemon/utility_funcs.c
2
--- g15daemon-1.9.5.3.orig/g15daemon/utility_funcs.c	2008-01-26 07:02:07.000000000 +0200
3
+++ g15daemon-1.9.5.3/g15daemon/utility_funcs.c	2011-11-09 09:19:43.000000000 +0200
4
@@ -356,7 +356,7 @@
5
     config_items_t * item=NULL;
6
     char line[1024];
7
     
8
-    config_fd = open(filename,O_CREAT|O_RDWR|O_TRUNC);
9
+    config_fd = open(filename,O_CREAT|O_RDWR|O_TRUNC, 0644);
10
     if(config_fd){
11
     snprintf(line,1024,"# G15Daemon Configuration File\n# any items entered before a [section] header\n# will be in the Global config space\n# comments you wish to keep should start with a semicolon';'\n");
12
     write(config_fd,line,strlen(line));
13
14
--- g15daemon-1.9.5.3.orig/libg15daemon_client/g15daemon_net.c
15
+++ g15daemon-1.9.5.3/libg15daemon_client/g15daemon_net.c
16
@@ -217,7 +217,7 @@
17
     if(poll(pfd,1,100)>0){
18
        if(pfd[0].revents & POLLPRI && !(pfd[0].revents & POLLERR || pfd[0].revents & POLLHUP || pfd[0].revents & POLLNVAL)) { 
19
              memset(packet,0,sizeof(packet));
20
-             msgret = recv(sock, packet, 10 , MSG_OOB);
21
+             msgret = recv(sock, packet, sizeof(packet) , MSG_OOB);
22
              if (msgret < 1) {
23
                   return -1;
24
               }
25
--- a/plugins/g15_plugin_uinput.c   2008-01-24 12:51:07.000000000 +0000
26
+++ b/plugins/g15_plugin_uinput.c   2014-05-09 09:34:44.000000000 +0000
27
@@ -46,6 +46,12 @@
28
 static int uinp_fd = -1;
29
 static config_section_t *uinput_cfg=NULL;
30
 static int map_Lkeys = 0;
31
+static int vol_state = 0;
32
+static int mkey_state = 0;
33
+static int mr_state = 0;
34
+static unsigned int mled_state = G15_LED_M1;
35
+/*mkey state 0,1 and 2 = M1, M2 and M3*/
36
+
37
 
38
 #define GKEY_OFFSET 167
39
 #define MKEY_OFFSET 185
40
@@ -125,6 +129,16 @@
41
     event.value = G15KEY_DOWN;
42
     
43
     write (uinp_fd, &event, sizeof(event));
44
+
45
+    /* Need to write sync event */
46
+    memset(&event, 0, sizeof(event));
47
+
48
+    event.type = EV_SYN;
49
+    event.code = SYN_REPORT;
50
+    event.value = 0;
51
+
52
+    write(uinp_fd, &event, sizeof(event));
53
+
54
 }
55
 
56
 static void g15_uinput_keyup(unsigned char code)
57
@@ -137,8 +151,17 @@
58
     event.value = G15KEY_UP;
59
     
60
     write (uinp_fd, &event, sizeof(event));
61
-}
62
 
63
+    /* Need to write sync event */
64
+    memset(&event, 0, sizeof(event));
65
+
66
+    event.type = EV_SYN;
67
+    event.code = SYN_REPORT;
68
+    event.value = 0;
69
+
70
+    write(uinp_fd, &event, sizeof(event));
71
+
72
+}
73
     void (*keyup)(unsigned char code) = &g15_uinput_keyup;
74
     void (*keydown)(unsigned char code) = &g15_uinput_keydown;
75
 #else
76
@@ -147,151 +170,406 @@
77
 #endif
78
 #endif
79
     
80
+/*The layout of the 'G' keys is now hard-coded here below. See /usr/include/linux/input.h for details on the keys you can use*/
81
 static void g15_process_keys(g15daemon_t *masterlist, unsigned int currentkeys, unsigned int lastkeys)
82
 {
83
-    /* 'G' keys */
84
-    if((currentkeys & G15_KEY_G1) && !(lastkeys & G15_KEY_G1))
85
-        keydown(GKEY_OFFSET);
86
-    else if(!(currentkeys & G15_KEY_G1) && (lastkeys & G15_KEY_G1))
87
-        keyup(GKEY_OFFSET);
88
-
89
-    if((currentkeys & G15_KEY_G2) && !(lastkeys & G15_KEY_G2))
90
-        keydown(GKEY_OFFSET+1);
91
-    else if(!(currentkeys & G15_KEY_G2) && (lastkeys & G15_KEY_G2))
92
-        keyup(GKEY_OFFSET+1);
93
-
94
-    if((currentkeys & G15_KEY_G3) && !(lastkeys & G15_KEY_G3))
95
-        keydown(GKEY_OFFSET+2);
96
-    else if(!(currentkeys & G15_KEY_G3) && (lastkeys & G15_KEY_G3))
97
-        keyup(GKEY_OFFSET+2);
98
-
99
-    if((currentkeys & G15_KEY_G4) && !(lastkeys & G15_KEY_G4))
100
-        keydown(GKEY_OFFSET+3);
101
-    else if(!(currentkeys & G15_KEY_G4) && (lastkeys & G15_KEY_G4))
102
-        keyup(GKEY_OFFSET+3);
103
-
104
-    if((currentkeys & G15_KEY_G5) && !(lastkeys & G15_KEY_G5))
105
-        keydown(GKEY_OFFSET+4);
106
-    else if(!(currentkeys & G15_KEY_G5) && (lastkeys & G15_KEY_G5))
107
-        keyup(GKEY_OFFSET+4);
108
-
109
-    if((currentkeys & G15_KEY_G6) && !(lastkeys & G15_KEY_G6))
110
-        keydown(GKEY_OFFSET+5);
111
-    else if(!(currentkeys & G15_KEY_G6) && (lastkeys & G15_KEY_G6))
112
-        keyup(GKEY_OFFSET+5);
113
-
114
-    if((currentkeys & G15_KEY_G7) && !(lastkeys & G15_KEY_G7))
115
-        keydown(GKEY_OFFSET+6);
116
-    else if(!(currentkeys & G15_KEY_G7) && (lastkeys & G15_KEY_G7))
117
-        keyup(GKEY_OFFSET+6);
118
-
119
-    if((currentkeys & G15_KEY_G8) && !(lastkeys & G15_KEY_G8))
120
-        keydown(GKEY_OFFSET+7);
121
-    else if(!(currentkeys & G15_KEY_G8) && (lastkeys & G15_KEY_G8))
122
-        keyup(GKEY_OFFSET+7);
123
-
124
-    if((currentkeys & G15_KEY_G9) && !(lastkeys & G15_KEY_G9))
125
-        keydown(GKEY_OFFSET+8);
126
-    else if(!(currentkeys & G15_KEY_G9) && (lastkeys & G15_KEY_G9))
127
-        keyup(GKEY_OFFSET+8);
128
-
129
-    if((currentkeys & G15_KEY_G10) && !(lastkeys & G15_KEY_G10))
130
-        keydown(GKEY_OFFSET+9);
131
-    else if(!(currentkeys & G15_KEY_G10) && (lastkeys & G15_KEY_G10))
132
-        keyup(GKEY_OFFSET+9);
133
-
134
-    if((currentkeys & G15_KEY_G11) && !(lastkeys & G15_KEY_G11))
135
-        keydown(GKEY_OFFSET+10);
136
-    else if(!(currentkeys & G15_KEY_G11) && (lastkeys & G15_KEY_G11))
137
-        keyup(GKEY_OFFSET+10);
138
-
139
-    if((currentkeys & G15_KEY_G12) && !(lastkeys & G15_KEY_G12))
140
-        keydown(GKEY_OFFSET+11);
141
-    else if(!(currentkeys & G15_KEY_G12) && (lastkeys & G15_KEY_G12))
142
-        keyup(GKEY_OFFSET+11);
143
-
144
-    if((currentkeys & G15_KEY_G13) && !(lastkeys & G15_KEY_G13))
145
-        keydown(GKEY_OFFSET+12);
146
-    else if(!(currentkeys & G15_KEY_G13) && (lastkeys & G15_KEY_G13))
147
-        keyup(GKEY_OFFSET+12);
148
-
149
-    if((currentkeys & G15_KEY_G14) && !(lastkeys & G15_KEY_G14))
150
-        keydown(GKEY_OFFSET+13);
151
-    else if(!(currentkeys & G15_KEY_G14) && (lastkeys & G15_KEY_G14))
152
-        keyup(GKEY_OFFSET+13);
153
-
154
-    if((currentkeys & G15_KEY_G15) && !(lastkeys & G15_KEY_G15))
155
-        keydown(GKEY_OFFSET+14);
156
-    else if(!(currentkeys & G15_KEY_G15) && (lastkeys & G15_KEY_G15))
157
-        keyup(GKEY_OFFSET+14);
158
-
159
-    if((currentkeys & G15_KEY_G16) && !(lastkeys & G15_KEY_G16))
160
-        keydown(GKEY_OFFSET+15);
161
-    else if(!(currentkeys & G15_KEY_G16) && (lastkeys & G15_KEY_G16))
162
-        keyup(GKEY_OFFSET+15);
163
-
164
-    if((currentkeys & G15_KEY_G17) && !(lastkeys & G15_KEY_G17))
165
-        keydown(GKEY_OFFSET+16);
166
-    else if(!(currentkeys & G15_KEY_G17) && (lastkeys & G15_KEY_G17))
167
-        keyup(GKEY_OFFSET+16);
168
-
169
-    if((currentkeys & G15_KEY_G18) && !(lastkeys & G15_KEY_G18))
170
-        keydown(GKEY_OFFSET+17);
171
-    else if(!(currentkeys & G15_KEY_G18) && (lastkeys & G15_KEY_G18))
172
-        keyup(GKEY_OFFSET+17);
173
-
174
-    /* 'M' keys */
175
-
176
-    if((currentkeys & G15_KEY_M1) && !(lastkeys & G15_KEY_M1))
177
-        keydown(MKEY_OFFSET);
178
-    else if(!(currentkeys & G15_KEY_M1) && (lastkeys & G15_KEY_M1))
179
-        keyup(MKEY_OFFSET);
180
-
181
-    if((currentkeys & G15_KEY_M2) && !(lastkeys & G15_KEY_M2))
182
-        keydown(MKEY_OFFSET+1);
183
-    else if(!(currentkeys & G15_KEY_M2) && (lastkeys & G15_KEY_M2))
184
-        keyup(MKEY_OFFSET+1);
185
-
186
-    if((currentkeys & G15_KEY_M3) && !(lastkeys & G15_KEY_M3))
187
-        keydown(MKEY_OFFSET+2);
188
-    else if(!(currentkeys & G15_KEY_M3) && (lastkeys & G15_KEY_M3))
189
-        keyup(MKEY_OFFSET+2);
190
-
191
-    if((currentkeys & G15_KEY_MR) && !(lastkeys & G15_KEY_MR))
192
-        keydown(MKEY_OFFSET+3);
193
-    else if(!(currentkeys & G15_KEY_MR) && (lastkeys & G15_KEY_MR))
194
-        keyup(MKEY_OFFSET+3);
195
-    
196
-    if(map_Lkeys){
197
-        /* 'L' keys...  */
198
-        if((currentkeys & G15_KEY_L1) && !(lastkeys & G15_KEY_L1))
199
-            keydown(LKEY_OFFSET);
200
-        else if(!(currentkeys & G15_KEY_L1) && (lastkeys & G15_KEY_L1))
201
-            keyup(LKEY_OFFSET);
202
-
203
-        if((currentkeys & G15_KEY_L2) && !(lastkeys & G15_KEY_L2))
204
-            keydown(LKEY_OFFSET+1);
205
-        else if(!(currentkeys & G15_KEY_L2) && (lastkeys & G15_KEY_L2))
206
-            keyup(LKEY_OFFSET+1);
207
-
208
-        if((currentkeys & G15_KEY_L3) && !(lastkeys & G15_KEY_L3))
209
-            keydown(LKEY_OFFSET+2);
210
-        else if(!(currentkeys & G15_KEY_L3) && (lastkeys & G15_KEY_L3))
211
-            keyup(LKEY_OFFSET+2);
212
-
213
-        if((currentkeys & G15_KEY_L4) && !(lastkeys & G15_KEY_L4))
214
-            keydown(LKEY_OFFSET+3);
215
-        else if(!(currentkeys & G15_KEY_L4) && (lastkeys & G15_KEY_L4))
216
-            keyup(LKEY_OFFSET+3);
217
-
218
-        if((currentkeys & G15_KEY_L5) && !(lastkeys & G15_KEY_L5))
219
-            keydown(LKEY_OFFSET+4);
220
-        else if(!(currentkeys & G15_KEY_L5) && (lastkeys & G15_KEY_L5))
221
-            keyup(LKEY_OFFSET+4);
222
+    if(!(currentkeys & G15_KEY_LIGHT))
223
+    {
224
+    /*Note: ALL system(""); commands will be run as root as g15daemon needs to be activated by root. Use "su USERNAME -c command" to avoid it.
225
+    also if a command is run from terminal that would post output into the terminal the ability to run commands will hang. to avoid that add "& disown" to command*/
226
+    /*Note2: There's a bug with detecting key release; this means that sometimes if you use key-release function to release the keys, the key will be "stuck" down until you press it again
227
+    that's why I only use the key-release functionality for macros where I need to be able to hold down the button (like tab-switching)*/
228
+    switch(mkey_state)
229
+    {
230
+        //M1 and the default layout (This one i use for commands while in X.
231
+        case 0:
232
+        {
233
+/*M1*/      /*G Keys 1-6 open folders i use all the time.*/
234
+/*M1*/      if((currentkeys & G15_KEY_G1) && !(lastkeys & G15_KEY_G1))
235
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Anime & disown");
236
+/*M1*/
237
+/*M1*/      if((currentkeys & G15_KEY_G2) && !(lastkeys & G15_KEY_G2))
238
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Biomyndir & disown");
239
+/*M1*/
240
+/*M1*/      if((currentkeys & G15_KEY_G3) && !(lastkeys & G15_KEY_G3))
241
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Music & disown");
242
+/*M1*/
243
+/*M1*/      if((currentkeys & G15_KEY_G4) && !(lastkeys & G15_KEY_G4))
244
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Downloads & disown");
245
+/*M1*/
246
+/*M1*/      if((currentkeys & G15_KEY_G5) && !(lastkeys & G15_KEY_G5))
247
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Art & disown");
248
+/*M1*/
249
+/*M1*/      if((currentkeys & G15_KEY_G6) && !(lastkeys & G15_KEY_G6))
250-
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar /mnt/Storage/Hentai & disown");
250+
+/*M1*/          system("sudo -H -u '#1000' dbus-launch thunar $HOME/ & disown");
251
+/*M1*/
252
+/*M1*/
253
+/*M1*/          /*G Keys 7-12* Switch workspaces 1-6 with Win(META)+F1-F6 keys.*/
254
+/*M1*/      if((currentkeys & G15_KEY_G7) && !(lastkeys & G15_KEY_G7))
255
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F1);keyup(KEY_F1);keyup(KEY_LEFTMETA);}
256
+/*M1*/      
257
+/*M1*/      if((currentkeys & G15_KEY_G8) && !(lastkeys & G15_KEY_G8))
258
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F2);keyup(KEY_F2);keyup(KEY_LEFTMETA);}
259
+/*M1*/
260
+/*M1*/      if((currentkeys & G15_KEY_G9) && !(lastkeys & G15_KEY_G9))
261
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F3);keyup(KEY_F3);keyup(KEY_LEFTMETA);}
262
+/*M1*/
263
+/*M1*/      if((currentkeys & G15_KEY_G10) && !(lastkeys & G15_KEY_G10))
264
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F4);keyup(KEY_F4);keyup(KEY_LEFTMETA);}
265
+/*M1*/
266
+/*M1*/      if((currentkeys & G15_KEY_G11) && !(lastkeys & G15_KEY_G11))
267
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F5);keyup(KEY_F5);keyup(KEY_LEFTMETA);}
268
+/*M1*/
269
+/*M1*/      if((currentkeys & G15_KEY_G12) && !(lastkeys & G15_KEY_G12))
270
+/*M1*/          {keydown(KEY_LEFTMETA);keydown(KEY_F6);keyup(KEY_F6);keyup(KEY_LEFTMETA);}
271
+/*M1*/
272
+/*M1*/
273
+/*M1*/      /*G Keys 13-18 13(Close Tab) 16(Mouseclick(via terminal)) 14(Alt+F4) 17(Open Terminal) 15 and 18 (Next/Prev tab, Ctrl+PgUp/PgDn)*/
274
+/*M1*/      if((currentkeys & G15_KEY_G13) && !(lastkeys & G15_KEY_G13))
275
+/*M1*/          {keydown(KEY_LEFTCTRL);keydown(KEY_W);keyup(KEY_W);keyup(KEY_LEFTCTRL);}
276
+/*M1*/      
277
+/*M1*/      if((currentkeys & G15_KEY_G14) && !(lastkeys & G15_KEY_G14))
278
+/*M1*/          {keydown(KEY_LEFTALT);keydown(KEY_F4);keyup(KEY_F4);keyup(KEY_LEFTALT);}
279
+/*M1*/
280
+/*M1*/      if((currentkeys & G15_KEY_G15) && !(lastkeys & G15_KEY_G15))
281
+/*M1*/          {keydown(KEY_LEFTCTRL);keydown(KEY_PAGEUP);}
282
+/*M1*/      else if(!(currentkeys & G15_KEY_G15) && (lastkeys & G15_KEY_G15))
283
+/*M1*/          {keyup(KEY_PAGEUP);keyup(KEY_LEFTCTRL);}
284
+/*M1*/
285
+/*M1*/          /*Mouse Click Emulation requires xdotool installed*/
286-
+/*M1*/      if(currentkeys & G15_KEY_G16) && !(lastkeys & G15_KEY_G16))
286+
+/*M1*/      if((currentkeys & G15_KEY_G16) && !(lastkeys & G15_KEY_G16))
287
+/*M1*/          system("sudo -H -u '#1000' xdotool mousedown 1");
288
+/*M1*/      else if(!(currentkeys & G15_KEY_G16) && (lastkeys & G15_KEY_G16))
289
+/*M1*/          system("sudo -H -u '#1000' xdotool mouseup 1");
290
+/*M1*/
291
+/*M1*/      if((currentkeys & G15_KEY_G17) && !(lastkeys & G15_KEY_G17))
292-
+/*M1*/          system("sudo -H -u '#1000' terminator --working-directory=$HOME & disown");
292+
+/*M1*/          system("sudo -H -u '#1000' terminator --working-directory=~$HOME & disown");
293
+/*M1*/      
294
+/*M1*/      if((currentkeys & G15_KEY_G18) && !(lastkeys & G15_KEY_G18))
295
+/*M1*/          {keydown(KEY_LEFTCTRL);keydown(KEY_PAGEDOWN);}
296
+/*M1*/      else if(!(currentkeys & G15_KEY_G18) && (lastkeys & G15_KEY_G18))
297
+/*M1*/          {keyup(KEY_PAGEDOWN);keyup(KEY_LEFTCTRL);}
298
+        /*M1 END*/
299
+        
300
+        break;
301
+        }
302
+
303
+        //M2 layout, This one i use for terminal shortcuts
304
+        case 1:
305
+        {
306
+        /*G Keys 1-6 
307
+        G1((?)) G2(Levels(CTRL+L)) G3(Color Selector(Shift+I)) 
308
+        G4(?) G5(HSL/HSV(CTRL+U)) G6(Shade Selector (Shift+M))
309
+        */
310
+/*M2*/      if((currentkeys & G15_KEY_G1) && !(lastkeys & G15_KEY_G1))
311
+/*M2*/          {keydown(KEY_LEFTCTRL); keydown(KEY_LEFTSHIFT); keydown(KEY_F);keyup(KEY_LEFTCTRL); keyup(KEY_LEFTSHIFT); keyup(KEY_F);}
312
+/*M2*/      
313
+/*M2*/      if((currentkeys & G15_KEY_G2) && !(lastkeys & G15_KEY_G2))
314
+/*M2*/          {keydown(KEY_LEFTCTRL); keydown(KEY_L); keyup(KEY_LEFTCTRL); keyup(KEY_L);}
315
+/*M2*/      
316
+/*M2*/      if((currentkeys & G15_KEY_G3) && !(lastkeys & G15_KEY_G3))
317
+/*M2*/          {keydown(KEY_LEFTSHIFT); keydown(KEY_I); keyup(KEY_LEFTSHIFT); keyup(KEY_I);}
318
+/*M2*/      
319
+/*M2*/      if((currentkeys & G15_KEY_G4) && !(lastkeys & G15_KEY_G4))
320
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_K);}
321
+/*M2*/      else if(!(currentkeys & G15_KEY_G4) && (lastkeys & G15_KEY_G4))
322
+/*M2*/          {keyup(KEY_K);keyup(KEY_LEFTCTRL);}
323
+/*M2*/      
324
+/*M2*/      if((currentkeys & G15_KEY_G5) && !(lastkeys & G15_KEY_G5))
325
+/*M2*/          {keydown(KEY_LEFTCTRL); keydown(KEY_U); keyup(KEY_LEFTCTRL); keyup(KEY_U);}
326
+/*M2*/      
327
+/*M2*/      if((currentkeys & G15_KEY_G6) && !(lastkeys & G15_KEY_G6))
328
+/*M2*/          {keydown(KEY_LEFTSHIFT);keydown(KEY_M);keyup(KEY_M);keyup(KEY_LEFTSHIFT);}
329
+/*M2*/
330
+/*M2*/
331
+/*M2*/          /*G Keys 7-12, 
332
+        G7 (Reset Rotation/Canvas View(CTRL+')) G8 (Flip Canvas Vert(Ctrl+M)) G9(Move Layer(T)) 
333
+        G10 (Merge Down (Ctrl+E)) G11 (Flip Canvas Horizontally(M)) G12 (Transform Layer (CTRL+T))
334
+        */
335
+/*M2*/      if((currentkeys & G15_KEY_G7) && !(lastkeys & G15_KEY_G7))
336
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_APOSTROPHE);keyup(KEY_LEFTCTRL);keyup(KEY_APOSTROPHE);}
337
+/*M2*/      
338
+/*M2*/      if((currentkeys & G15_KEY_G8) && !(lastkeys & G15_KEY_G8))
339
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_M);keyup(KEY_M);keyup(KEY_LEFTCTRL);}
340
+/*M2*/
341
+/*M2*/      if((currentkeys & G15_KEY_G9) && !(lastkeys & G15_KEY_G9))
342
+/*M2*/          {keydown(KEY_T);keyup(KEY_T);}
343
+/*M2*/
344
+/*M2*/      if((currentkeys & G15_KEY_G10) && !(lastkeys & G15_KEY_G10))
345
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_E);keyup(KEY_E);keyup(KEY_LEFTCTRL);}
346
+/*M2*/
347
+/*M2*/      if((currentkeys & G15_KEY_G11) && !(lastkeys & G15_KEY_G11))
348
+/*M2*/          {keydown(KEY_M);keyup(KEY_M);}
349
+/*M2*/
350
+/*M2*/      if((currentkeys & G15_KEY_G12) && !(lastkeys & G15_KEY_G12))
351
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_T);keyup(KEY_T);keyup(KEY_LEFTCTRL);}
352
+/*M2*/
353
+/*M2*/
354
+/*M2*/      /*G Keys 13-18, 
355
+        G13(Freehand Select (?)) G14(Increase Opacity of Brush(I)) G15(Darker Color(K))
356
+        G16(Deselect (CTRL+D) G17(Decrease Opacity of Brush(O)) G18(Lighter color (L))
357
+        */
358
+/*M2*/      if((currentkeys & G15_KEY_G13) && !(lastkeys & G15_KEY_G13))
359
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTSHIFT);keydown(KEY_F);keyup(KEY_F);keyup(KEY_LEFTSHIFT);keyup(KEY_LEFTCTRL);}
360
+/*M2*/      
361
+/*M2*/      if((currentkeys & G15_KEY_G14) && !(lastkeys & G15_KEY_G14))
362
+/*M2*/          {keydown(KEY_I);}
363
+/*M2*/      else if(!(currentkeys & G15_KEY_G14) && (lastkeys & G15_KEY_G14))
364
+/*M2*/          {keyup(KEY_I);}
365
+/*M2*/
366
+/*M2*/      if((currentkeys & G15_KEY_G15) && !(lastkeys & G15_KEY_G15))
367
+/*M2*/          {keydown(KEY_K);}
368
+/*M2*/      else if(!(currentkeys & G15_KEY_G15) && (lastkeys & G15_KEY_G15))
369
+/*M2*/          {keyup(KEY_K);}
370
+/*M2*/      
371
+/*M2*/      if((currentkeys & G15_KEY_G16) && !(lastkeys & G15_KEY_G16))
372
+/*M2*/          {keydown(KEY_LEFTCTRL);keydown(KEY_D); keyup(KEY_LEFTCTRL); keyup(KEY_D);}
373
+/*M2*/      
374
+/*M2*/      if((currentkeys & G15_KEY_G17) && !(lastkeys & G15_KEY_G17))
375
+/*M2*/          {keydown(KEY_O);}
376
+/*M2*/      else if(!(currentkeys & G15_KEY_G17) && (lastkeys & G15_KEY_G17))
377
+/*M2*/          {keyup(KEY_O);}
378
+/*M2*/      
379
+/*M2*/      if((currentkeys & G15_KEY_G18) && !(lastkeys & G15_KEY_G18))
380
+/*M2*/          {keydown(KEY_L);}
381
+/*M2*/      else if(!(currentkeys & G15_KEY_G18) && (lastkeys & G15_KEY_G18))
382
+/*M2*/          {keyup(KEY_L);}
383
+        /*M2 END*/
384
+        break;
385
+        }
386
+        //M3 layout for terminal commands (Placeholder)
387
+        case 2:
388
+        {
389
+        /*G Keys 1-6*/
390
+        /*G keys 1-6 G1(EraseLineLeft) G2(EraseWordLeft) G3(WordLeft) G4(EraseLineRight) G5(EraseWordRight) G6(WordRight)*/
391
+/*M3*/      if((currentkeys & G15_KEY_G1) && !(lastkeys & G15_KEY_G1))
392
+/*M3*/          {keydown(KEY_LEFTCTRL); keydown(KEY_U);}
393
+/*M3*/      else if(!(currentkeys & G15_KEY_G1) && (lastkeys & G15_KEY_G1))
394
+/*M3*/          {keyup(KEY_U);keyup(KEY_LEFTCTRL);}
395
+/*M3*/      
396
+/*M3*/      if((currentkeys & G15_KEY_G2) && !(lastkeys & G15_KEY_G2))
397
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_W);}
398
+/*M3*/      else if(!(currentkeys & G15_KEY_G2) && (lastkeys & G15_KEY_G2))
399
+/*M3*/          {keyup(KEY_W);keyup(KEY_LEFTCTRL);}
400
+/*M3*/      
401
+/*M3*/      if((currentkeys & G15_KEY_G3) && !(lastkeys & G15_KEY_G3))
402
+/*M3*/          {keydown(KEY_LEFTALT);keydown(KEY_B);}
403
+/*M3*/      else if(!(currentkeys & G15_KEY_G3) && (lastkeys & G15_KEY_G3))
404
+/*M3*/          {keyup(KEY_B);keyup(KEY_LEFTALT);}
405
+/*M3*/      
406
+/*M3*/      if((currentkeys & G15_KEY_G4) && !(lastkeys & G15_KEY_G4))
407
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_K);}
408
+/*M3*/      else if(!(currentkeys & G15_KEY_G4) && (lastkeys & G15_KEY_G4))
409
+/*M3*/          {keyup(KEY_K);keyup(KEY_LEFTCTRL);}
410
+/*M3*/      
411
+/*M3*/      if((currentkeys & G15_KEY_G5) && !(lastkeys & G15_KEY_G5))
412
+/*M3*/          {keydown(KEY_LEFTALT);keydown(KEY_D);}
413
+/*M3*/      else if(!(currentkeys & G15_KEY_G5) && (lastkeys & G15_KEY_G5))
414
+/*M3*/          {keyup(KEY_D);keyup(KEY_LEFTALT);}
415
+/*M3*/      
416
+/*M3*/      if((currentkeys & G15_KEY_G6) && !(lastkeys & G15_KEY_G6))
417
+/*M3*/          {keydown(KEY_LEFTALT);keydown(KEY_F);}
418
+/*M3*/      else if(!(currentkeys & G15_KEY_G6) && (lastkeys & G15_KEY_G6))
419
+/*M3*/          {keyup(KEY_F);keyup(KEY_LEFTALT);}
420
+/*M3*/
421
+/*M3*/
422
+/*M3*/          /*G Keys 7-12, Switch between terms 1-6 with Ctrl+Alt+F1-F6*/
423
+/*M3*/      if((currentkeys & G15_KEY_G7) && !(lastkeys & G15_KEY_G7))
424
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F1);}
425
+/*M3*/      else if(!(currentkeys & G15_KEY_G7) && (lastkeys & G15_KEY_G7))
426
+/*M3*/          {keyup(KEY_F1);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
427
+/*M3*/      
428
+/*M3*/      if((currentkeys & G15_KEY_G8) && !(lastkeys & G15_KEY_G8))
429
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F2);}
430
+/*M3*/      else if(!(currentkeys & G15_KEY_G8) && (lastkeys & G15_KEY_G8))
431
+/*M3*/          {keyup(KEY_F2);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
432
+/*M3*/
433
+/*M3*/      if((currentkeys & G15_KEY_G9) && !(lastkeys & G15_KEY_G9))
434
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F3);}
435
+/*M3*/      else if(!(currentkeys & G15_KEY_G9) && (lastkeys & G15_KEY_G9))
436
+/*M3*/          {keyup(KEY_F3);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
437
+/*M3*/
438
+/*M3*/      if((currentkeys & G15_KEY_G10) && !(lastkeys & G15_KEY_G10))
439
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F4);}
440
+/*M3*/      else if(!(currentkeys & G15_KEY_G10) && (lastkeys & G15_KEY_G10))
441
+/*M3*/          {keyup(KEY_F4);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
442
+/*M3*/
443
+/*M3*/      if((currentkeys & G15_KEY_G11) && !(lastkeys & G15_KEY_G11))
444
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F5);}
445
+/*M3*/      else if(!(currentkeys & G15_KEY_G11) && (lastkeys & G15_KEY_G11))
446
+/*M3*/          {keyup(KEY_F5);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
447
+/*M3*/
448
+/*M3*/      if((currentkeys & G15_KEY_G12) && !(lastkeys & G15_KEY_G12))
449
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F6);}
450
+/*M3*/      else if(!(currentkeys & G15_KEY_G12) && (lastkeys & G15_KEY_G12))
451
+/*M3*/          {keyup(KEY_F6);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
452
+/*M3*/
453
+/*M3*/
454
+/*M3*/      /*G Keys 13-18 13(Switch to GUI) 16(Kill X11) 14(Ctrl+C) 17(Q+Enter) 15/18(Shift+PgUp/PgDn for Scroll Up/Dn)*/
455
+/*M3*/      if((currentkeys & G15_KEY_G13) && !(lastkeys & G15_KEY_G13))
456
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_F7);}
457
+/*M3*/      else if(!(currentkeys & G15_KEY_G13) && (lastkeys & G15_KEY_G13))
458
+/*M3*/          {keyup(KEY_F7);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
459
+/*M3*/      
460
+/*M3*/      if((currentkeys & G15_KEY_G14) && !(lastkeys & G15_KEY_G14))
461
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_C);}
462
+/*M3*/      else if(!(currentkeys & G15_KEY_G14) && (lastkeys & G15_KEY_G14))
463
+/*M3*/          {keyup(KEY_C);keyup(KEY_LEFTCTRL);}
464
+/*M3*/
465
+/*M3*/      if((currentkeys & G15_KEY_G15) && !(lastkeys & G15_KEY_G15))
466
+/*M3*/          {keydown(KEY_LEFTSHIFT);keydown(KEY_PAGEUP);}
467
+/*M3*/      else if(!(currentkeys & G15_KEY_G15) && (lastkeys & G15_KEY_G15))
468
+/*M3*/          {keyup(KEY_PAGEUP);keyup(KEY_LEFTSHIFT);}
469
+/*M3*/      
470
+/*M3*/      if((currentkeys & G15_KEY_G16) && !(lastkeys & G15_KEY_G16))
471
+/*M3*/          {keydown(KEY_LEFTCTRL);keydown(KEY_LEFTALT);keydown(KEY_BACKSPACE);}
472
+/*M3*/      else if(!(currentkeys & G15_KEY_G16) && (lastkeys & G15_KEY_G16))
473
+/*M3*/          {keyup(KEY_BACKSPACE);keyup(KEY_LEFTALT);keyup(KEY_LEFTCTRL);}
474
+/*M3*/      
475
+/*M3*/      if((currentkeys & G15_KEY_G17) && !(lastkeys & G15_KEY_G17))
476
+/*M3*/          {keydown(KEY_Q);}
477
+/*M3*/      else if(!(currentkeys & G15_KEY_G17) && (lastkeys & G15_KEY_G17))
478
+/*M3*/          {keyup(KEY_Q);keydown(KEY_ENTER);keyup(KEY_ENTER);}
479
+/*M3*/      
480
+/*M3*/      if((currentkeys & G15_KEY_G18) && !(lastkeys & G15_KEY_G18))
481
+/*M3*/          {keydown(KEY_LEFTSHIFT);keydown(KEY_PAGEDOWN);}
482
+/*M3*/      else if(!(currentkeys & G15_KEY_G18) && (lastkeys & G15_KEY_G18))
483
+/*M3*/          {keyup(KEY_PAGEDOWN);keyup(KEY_LEFTSHIFT);}
484
+        /*M3 END*/
485
+        break;
486
+        } 
487
     }
488
+    
489
+        /* 'M' keys... */
490
+    
491
+        if((currentkeys & G15_KEY_M1) && !(lastkeys & G15_KEY_M1))
492
+            //keydown(MKEY_OFFSET);
493
+        mkey_state = 0;
494
+        /*else if(!(currentkeys & G15_KEY_M1) && (lastkeys & G15_KEY_M1))
495
+            keyup(MKEY_OFFSET);*/
496
+    
497
+        if((currentkeys & G15_KEY_M2) && !(lastkeys & G15_KEY_M2))
498
+            //keydown(MKEY_OFFSET+1);
499
+        mkey_state = 1;
500
+        /*else if(!(currentkeys & G15_KEY_M2) && (lastkeys & G15_KEY_M2))
501
+            keyup(MKEY_OFFSET+1);*/
502
+    
503
+        if((currentkeys & G15_KEY_M3) && !(lastkeys & G15_KEY_M3))
504
+            //keydown(MKEY_OFFSET+2);
505
+        mkey_state = 2;
506
+        /*else if(!(currentkeys & G15_KEY_M3) && (lastkeys & G15_KEY_M3))
507
+            keyup(MKEY_OFFSET+2);*/
508
+    
509
+    if((currentkeys & G15_KEY_MR) && !(lastkeys & G15_KEY_MR) && mr_state == 0){
510
+        mr_state = 1;
511
+    }
512
+    else if(!(currentkeys & G15_KEY_MR) && (lastkeys & G15_KEY_MR) && mr_state == 1){
513
+    /*Toggle function on first key release*/
514
+    }
515
+    else if((currentkeys & G15_KEY_MR) && !(lastkeys & G15_KEY_MR) && mr_state == 1){
516
+        mr_state = 0;
517
+    }
518
+    else if(!(currentkeys & G15_KEY_MR) && (lastkeys & G15_KEY_MR) && mr_state == 0){
519
+    /*Úntoggle function on second key release*/
520
+    }
521
+        
522
+        if(map_Lkeys){
523
+            /* 'L' keys...  */
524
+            if((currentkeys & G15_KEY_L1) && !(lastkeys & G15_KEY_L1))
525
+                keydown(LKEY_OFFSET);
526
+            else if(!(currentkeys & G15_KEY_L1) && (lastkeys & G15_KEY_L1))
527
+                keyup(LKEY_OFFSET);
528
+    
529
+            if((currentkeys & G15_KEY_L2) && !(lastkeys & G15_KEY_L2))
530
+                keydown(LKEY_OFFSET+1);
531
+            else if(!(currentkeys & G15_KEY_L2) && (lastkeys & G15_KEY_L2))
532
+                keyup(LKEY_OFFSET+1);
533
+    
534
+            if((currentkeys & G15_KEY_L3) && !(lastkeys & G15_KEY_L3))
535
+                keydown(LKEY_OFFSET+2);
536
+            else if(!(currentkeys & G15_KEY_L3) && (lastkeys & G15_KEY_L3))
537
+                keyup(LKEY_OFFSET+2);
538
+    
539
+            if((currentkeys & G15_KEY_L4) && !(lastkeys & G15_KEY_L4))
540
+                keydown(LKEY_OFFSET+3);
541
+            else if(!(currentkeys & G15_KEY_L4) && (lastkeys & G15_KEY_L4))
542
+                keyup(LKEY_OFFSET+3);
543
+    
544
+            if((currentkeys & G15_KEY_L5) && !(lastkeys & G15_KEY_L5))
545
+                keydown(LKEY_OFFSET+4);
546
+            else if(!(currentkeys & G15_KEY_L5) && (lastkeys & G15_KEY_L5))
547
+                keyup(LKEY_OFFSET+4);
548
+        }
549
+
550
+    }
551
+
552
+
553
+     else
554
+     {
555
+        // G15_KEY_LIGHT - Key modifier for Logitech G510 Media Keys implementation
556
+
557
+        // XF86AudioPlay
558
+        if((currentkeys & G15_KEY_G1) && !(lastkeys & G15_KEY_G1))
559
+            keydown(KEY_PLAYPAUSE);
560
+        else if(!(currentkeys & G15_KEY_G1) && (lastkeys & G15_KEY_G1))
561
+            keyup(KEY_PLAYPAUSE);
562
+
563
+        // XF86AudioStop
564
+        if((currentkeys & G15_KEY_G2) && !(lastkeys & G15_KEY_G2))
565
+            keydown(KEY_STOPCD);
566
+        else if(!(currentkeys & G15_KEY_G2) && (lastkeys & G15_KEY_G2))
567
+            keyup(KEY_STOPCD);
568
+
569
+        // XF86AudioPrev
570
+        if((currentkeys & G15_KEY_G3) && !(lastkeys & G15_KEY_G3))
571
+            keydown(KEY_PREVIOUSSONG);
572
+        else if(!(currentkeys & G15_KEY_G3) && (lastkeys & G15_KEY_G3))
573
+            keyup(KEY_PREVIOUSSONG);
574
+
575
+        // XF86AudioNext
576
+        if((currentkeys & G15_KEY_G4) && !(lastkeys & G15_KEY_G4))
577
+            keydown(KEY_NEXTSONG);
578
+        else if(!(currentkeys & G15_KEY_G4) && (lastkeys & G15_KEY_G4))
579
+            keyup(KEY_NEXTSONG);
580
+
581
+        // XF86AudioMute
582
+        if((currentkeys & G15_KEY_G5) && !(lastkeys & G15_KEY_G5))
583
+            keydown(KEY_MUTE);
584
+        else if(!(currentkeys & G15_KEY_G5) && (lastkeys & G15_KEY_G5))
585
+            keyup(KEY_MUTE);
586
+
587
+        // XF86AudioRaise/LowerVolume (this was a pain to figure out, i dropped it at one point while it was semi-functioning and fixed it later)
588
+        if(((currentkeys & G15_KEY_G6) && !(lastkeys & G15_KEY_G6)) && (vol_state == 0 || vol_state == 1)){
589
+        keydown(KEY_VOLUMEUP);
590
+        vol_state = 1;
591
+    }
592
+        else if(((currentkeys & G15_KEY_G7) && !(lastkeys & G15_KEY_G7)) && (vol_state == 0 || vol_state == 2)){
593
+        keydown(KEY_VOLUMEDOWN);
594
+        vol_state = 2;
595
+    }
596
+    else if((!(currentkeys & G15_KEY_G6) || !(currentkeys & G15_KEY_G7)) && ((lastkeys & G15_KEY_G7) || (lastkeys & G15_KEY_G6))){ 
597
+        keyup(KEY_VOLUMEUP);
598
+            keyup(KEY_VOLUMEDOWN);
599
+        vol_state = 0;  
600
+        }
601
+    }
602
+/*Set led states per M key (Doing this in the switch was slow and didn't activate till after button release)*/
603
+    if(mkey_state == 0)
604
+    mled_state = G15_LED_M1;
605
+    else if(mkey_state == 1)
606
+    mled_state = G15_LED_M2;
607
+    else if(mkey_state == 2)
608
+    mled_state = G15_LED_M3;
609
+
610
+/*Set leds and toggle MR led depending on mr_state*/
611
+    if(mr_state == 0)
612
+    setLEDs(mled_state -0x20);
613
+    else if(mr_state == 1)
614
+    setLEDs(mled_state -0x20 | G15_LED_MR -0x20);
615
+
616
 }
617
 
618
 
619
 static int keyevents(plugin_event_t *myevent) {
620
     lcd_t *lcd = (lcd_t*) myevent->lcd;
621
     static int lastkeys;
622
623
--- a/contrib/xmodmaprc 2008-01-24 12:51:08.000000000 +0000
624
+++ b/contrib/xmodmaprc 2013-04-11 15:25:26.000000000 +0000
625
@@ -3,7 +3,7 @@
626
 keycode 130 = XF86Launch9
627
 keycode 131 = XF86Launch2
628
 keycode 132 = XF86Phone
629
-keycode 133 = XF86Messenger
630
+keycode 133 = Super_L
631
 keycode 136 = XF86LaunchD
632
 keycode 137 = XF86Support
633
 keycode 138 = XF86Word