]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/handwired/MS-sculpt-mobile/babblePaste.c
Merge branch 'master' into sculpt2
[qmk_firmware.git] / keyboards / handwired / MS-sculpt-mobile / babblePaste.c
1 /*  A library to output the right key shortcut in any common app. 
2 Given a global variable babble_mode to show the environment and a 
3 key that calls the paste macro, do the right type of paste. 
4 Setting the context is done by another macro, or TBD interaction with the host. 
5
6 Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
7 and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c 
8 */
9
10 #include "babblePaste.h"
11 #include "action_macro.h"
12
13 #ifdef USE_BABLPASTE
14
15 // GLOBAL variable to determine mode.  Sets startup default if no eeppom
16 uint8_t babble_mode =0 ;
17
18 // small function that we might also want to call from a keymap. 
19
20 macro_t* switch_babble_mode( uint8_t id) {
21  babble_mode= id;
22  return MACRO_NONE; //less typing where called
23 }
24
25                 
26 // Today I learned that the preprocessor can not create a switch statement label from an argument
27 // And else statements have problems, see https://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_3.html#SEC15
28 #define BABLM(ent, macro...) \
29         if ( ent == shortcut ) \
30                  {  action_macro_play( MACRO(macro)); return MACRO_NONE; }   
31
32
33 /* this function runs the appropriate babblepaste macro, given
34 the global babble_mode, and a shortcut from the ENUM in babblePaste.h 
35 TODO, the pointers in this function should be stored in a PROGMEM array, not ram. 
36 But that requires even more clever preprocessor foo.
37 */
38 const  macro_t *babblePaste (keyrecord_t *record,  uint8_t shortcut) {
39 /*
40          if ( shortcut < BABL_START_NUM || \
41                          shortcut >= (BABL_START_NUM + BABL_NUM_MACROS ) ) {
42                         return MACRO_NONE;
43                 }
44 */
45  
46
47 #ifdef MS_MODE
48         if ( BABL_WINDOWS  == shortcut ) { return switch_babble_mode(MS_MODE);  } 
49 #endif    
50 #ifdef MAC_MODE
51         if ( BABL_MAC == shortcut) { return switch_babble_mode(MAC_MODE);  } 
52 #endif
53 #ifdef LINUX_MODE
54         if ( BABL_LINUX == shortcut ) { return switch_babble_mode(LINUX_MODE);  }
55 #endif      
56  #ifdef READMUX_MODE
57         if ( BABL_READLINE == shortcut  ) { switch_babble_mode(READMUX_MODE); return MACRO_NONE; }
58 #endif   
59 #ifdef VI_MODE
60         if ( BABL_VI == shortcut  ) { return switch_babble_mode(VI_MODE);   }
61 #endif
62 #ifdef EMACS_MODE
63         if ( BABL_EMACS == shortcut  ) { return switch_babble_mode(EMACS_MODE);   }
64 #endif
65
66
67
68     switch(babble_mode) {  
69
70 #ifdef MS_MODE
71                 
72          case MS_MODE:  
73                 BABLM( BABL_GO_LEFT_1C, T(LEFT), END );
74                 BABLM( BABL_GO_RIGHT_1C ,       T(RIGHT), END );
75                 BABLM( BABL_GO_LEFT_WORD,       D(LCTL), T(LEFT), U(LCTL), END );
76                 BABLM( BABL_GO_RIGHT_WORD, D(LCTL), T(RIGHT), U(LCTL), END );
77                 BABLM( BABL_GO_START_LINE,      T(HOME), END );
78                 BABLM( BABL_GO_END_LINE,        T(END), END );
79                 BABLM( BABL_GO_START_DOC,       D(LCTL),T(HOME),  U(LCTL),END );
80                 BABLM( BABL_GO_END_DOC, D(LCTL),T(END),  U(LCTL),END );
81                 BABLM( BABL_GO_NEXT_LINE,       T(DOWN), END );
82                 BABLM( BABL_GO_PREV_LINE,       T(UP), END );
83                 BABLM( BABL_PGDN,                       T(PGDN), END );
84                 BABLM( BABL_PGUP,                       T(PGUP), END );
85                 BABLM( BABL_DEL_RIGHT_1C,       T(DEL), END );
86                 BABLM( BABL_DEL_LEFT_WORD,      D(LCTL), T(BSPACE), U(LCTL), END );
87                 BABLM( BABL_DEL_RIGHT_WORD,             D(LCTL), T(DEL), U(LCTL), END );
88                 BABLM( BABL_DEL_TO_LINE_END,    D(RSFT), T(HOME), U(RSFT), T(DEL),  END);
89                 BABLM( BABL_DEL_TO_LINE_START,  D(RSFT), T(END), U(RSFT), T(DEL),  END );
90 #ifndef BABL_MOVEMENTONLY
91                 BABLM( BABL_UNDO,               D(LCTL), T(Z), U(LCTL), END );
92                 BABLM( BABL_REDO,               D(LCTL), T(Y), U(LCTL), END );
93                 BABLM( BABL_CUT,                D(LCTL), T(X), U(LCTL), END );
94                 BABLM( BABL_COPY,               D(LCTL), T(C), U(LCTL), END );
95                 BABLM( BABL_PASTE,              D(LCTL), T(V), U(LCTL), END );          
96                 BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
97                 BABLM( BABL_FIND,               D(LCTL),T(F),  U(LCTL),END );
98                 BABLM( BABL_FIND_NEXT,                  T(F3),END );
99                 BABLM( BABL_FIND_REPLACE,               D(LCTL),T(H),  U(LCTL),END );
100                 BABLM( BABL_RUNAPP,     D(LGUI),T(R),  U(LGUI),END );
101                 BABLM( BABL_SWITCH_APP_NEXT, D(LALT),T(TAB), U(LALT),END );
102                 BABLM( BABL_SWITCH_APP_LAST, D(LSFT),D(LALT),T(TAB), U(LALT), U(LSFT),END );
103                 BABLM( BABL_CLOSE_APP,  D(LALT),T(F4), U(LALT),END );
104                 BABLM( BABL_HELP,               T(F1),END );
105 #ifndef BABL_NOBROWSER
106                 BABLM( BABL_BROWSER_NEW_TAB,            D(LCTL), T(T), U(LCTL),END );
107                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LCTL), T(W), U(LCTL),END );
108                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
109                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LCTL), T(TAB), U(LCTL),END );
110                 BABLM( BABL_BROWSER_PREV_TAB,           D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
111                 BABLM( BABL_BROWSER_URL_BAR,            D(LCTL), T(L), U(LCTL),END );
112                 BABLM( BABL_BROWSER_FORWARD,            D(LALT), T(RIGHT), U(LALT),END );
113                 BABLM( BABL_BROWSER_BACK,                       D(LALT), T(LEFT), U(LALT),END );
114                 BABLM( BABL_BROWSER_FIND,                       D(LCTL), T(F), U(LCTL),END );
115                 BABLM( BABL_BROWSER_BOOKMARK,           D(LCTL), T(D), U(LCTL),END );
116                 //BABLM( BABL_BROWSER_DEV_TOOLS,        T(F12), U(LCTL),END  ); // EDGE 
117                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LCTL), T(T), U(LCTL),END  ); // Chrome
118                 // Chrome
119                 BABLM( BABL_BROWSER_RELOAD,                     D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
120                 BABLM( BABL_BROWSER_FULLSCREEN,         T(F11),END ); //command shift F
121                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LCTL), D(RSFT), T(EQL), U(RSFT), U(LCTL),END ); // ctr+ +
122                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LCTL), T(MINS), U(LCTL),END );
123 #endif
124 #endif
125
126                 // Todo, ring bell, flash light, show user this isn't supported
127                 return MACRO_NONE;
128                 
129                 
130 #endif /* MS_MODE*/
131
132
133 #ifdef LINUX_MODE
134
135          case LINUX_MODE:
136                 BABLM( BABL_GO_LEFT_1C  ,       T(LEFT), END );
137                 BABLM( BABL_GO_RIGHT_1C  ,      T(RIGHT), END );
138                 BABLM( BABL_GO_LEFT_WORD  ,     D(LCTL), T(LEFT), U(LCTL), END );
139                 BABLM( BABL_GO_RIGHT_WORD  , D(LCTL), T(RIGHT), U(LCTL), END );
140                 BABLM( BABL_GO_START_LINE ,     T(HOME), END );
141                 BABLM( BABL_GO_END_LINE  ,      T(END), END );
142                 BABLM( BABL_GO_START_DOC  ,     D(LCTL),T(HOME),  U(LCTL),END );
143                 BABLM( BABL_GO_END_DOC  ,       D(LCTL),T(END),  U(LCTL),END );
144                 BABLM( BABL_GO_NEXT_LINE  ,     T(DOWN), END );
145                 BABLM( BABL_GO_PREV_LINE  ,     T(UP), END );
146                 BABLM( BABL_PGDN  ,                     T(PGDN), END );
147                 BABLM( BABL_PGUP  ,                     T(PGUP), END );
148                 BABLM( BABL_DEL_RIGHT_1C  ,     D(DEL), END );   
149                 BABLM( BABL_DEL_LEFT_WORD  ,    D(LCTL), T(BSPACE), U(LCTL), END );
150                 BABLM( BABL_DEL_RIGHT_WORD  , D(LCTL), T(DEL), U(LCTL), END );
151                 BABLM( BABL_DEL_TO_LINE_END,    D(RSFT), T(HOME), U(RSFT), T(DEL),  END);
152                 BABLM( BABL_DEL_TO_LINE_START,  D(RSFT), T(END), U(RSFT), T(DEL),  END );
153 #ifndef BABL_MOVEMENTONLY
154                 BABLM( BABL_UNDO  ,     D(LCTL), T(Z), U(LCTL), END );
155                 BABLM( BABL_REDO  ,     D(LCTL), T(Y), U(LCTL), END );
156                 BABLM( BABL_CUT  ,      D(LCTL), T(X), U(LCTL), END );
157                 BABLM( BABL_COPY  ,     D(LCTL), T(C), U(LCTL), END );
158                 BABLM( BABL_PASTE  ,    D(LCTL), T(V), U(LCTL), END );                  
159                 BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );  
160                 BABLM( BABL_FIND,       D(LCTL),T(F),  U(LCTL),END );
161                 /* BABLM(BABL_FIND_NEXT  , T(F3),END ); KDE */
162                 BABLM( BABL_FIND_NEXT,  D(LCTL),T(G),  U(LCTL),END ); // Gnome*/
163                 /* BABLM(  , D(LCTL),T(R),  U(LCTL),END ); KDE */
164                 BABLM( BABL_FIND_REPLACE,       D(LCTL),T(H),  U(LCTL),END ); // Gnome*/
165                 BABLM( BABL_RUNAPP,                     D(LALT),T(F2),  U(LALT),END );
166                 BABLM( BABL_SWITCH_APP_NEXT,    D(LCTL),T(TAB), U(LCTL),END );
167                 BABLM( BABL_SWITCH_APP_LAST,    D(LSFT),D(LCTL),T(TAB), U(LCTL), U(LSFT),END );
168                 BABLM( BABL_CLOSE_APP,  D(LALT),T(F4), U(LALT),END );
169                 //BABLM( BABL_HELP,             END ); 
170
171 #ifndef BABL_NOBROWSER
172                 BABLM( BABL_BROWSER_NEW_TAB,            D(LCTL), T(T), U(LCTL),END );
173                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LCTL), T(W), U(LCTL),END );
174                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
175                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LCTL), T(TAB), U(LCTL),END );
176                 BABLM( BABL_BROWSER_PREV_TAB,           D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
177                 BABLM( BABL_BROWSER_URL_BAR,            D(LCTL), T(L), U(LCTL),END );
178                 BABLM( BABL_BROWSER_FORWARD,            D(LALT), T(RIGHT), U(LALT),END );
179                 BABLM( BABL_BROWSER_BACK,                       D(LALT), T(LEFT), U(LALT),END );
180                 BABLM( BABL_BROWSER_FIND,                       D(LCTL), T(F), U(LCTL),END );
181                 BABLM( BABL_BROWSER_BOOKMARK,           D(LCTL), T(D), U(LCTL),END );
182                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LCTL), T(T), U(LCTL),END  ); // Chrome
183                 BABLM( BABL_BROWSER_RELOAD,                     D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
184                 BABLM( BABL_BROWSER_FULLSCREEN,         T(F11),END ); //command shift F
185                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LCTL), T(PLUS), U(LCTL),END );
186                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LCTL), T(MINS), U(LCTL),END );
187 #endif
188 #endif
189          return MACRO_NONE;
190         
191 #endif 
192           
193 #ifdef MAC_MODE
194
195          case MAC_MODE:
196                 BABLM( BABL_GO_LEFT_1C ,        T(LEFT), END );
197                 BABLM( BABL_GO_RIGHT_1C,        T(RIGHT), END );
198                 BABLM( BABL_GO_LEFT_WORD ,      D(LALT), T(LEFT), U(LALT), END );
199                 BABLM( BABL_GO_RIGHT_WORD ,     D(LALT), T(RIGHT), U(LALT), END );
200                 BABLM( BABL_GO_START_LINE ,     D(LGUI), T(LEFT), U(LGUI),  END );
201                 BABLM( BABL_GO_END_LINE ,       D(LGUI), T(RIGHT), U(LGUI), END );
202                 BABLM( BABL_GO_START_DOC ,      D(LGUI),T(UP),  U(LGUI),END );
203                 BABLM( BABL_GO_END_DOC ,        D(LGUI),T(DOWN),  U(LGUI),END );
204                 BABLM( BABL_GO_NEXT_LINE ,      T(DOWN), END );
205                 BABLM( BABL_GO_PREV_LINE ,      T(UP), END );
206                 BABLM( BABL_PGDN ,              D(LALT),T(DOWN), U(LALT), END );
207                 BABLM( BABL_PGUP ,      D(LALT),T(UP), U(LALT), END );
208                 BABLM( BABL_DEL_RIGHT_1C ,      D(DEL), END );   
209                 BABLM( BABL_DEL_LEFT_WORD ,     D(LALT), T(BSPACE), U(LALT), END );
210                 BABLM( BABL_DEL_RIGHT_WORD,     D(LALT), T(DEL), U(LALT), END );
211                 BABLM( BABL_DEL_TO_LINE_END,    D(LCTL), T(K), U(LCTL), END );// there must be another way
212                 BABLM( BABL_DEL_TO_LINE_START,  D(LGUI), T(BSPACE), U(LGUI),   END );
213 #ifndef BABL_MOVEMENTONLY
214                 BABLM( BABL_UNDO ,              D(1), D(LGUI), T(Z), U(LGUI), END );
215                 BABLM( BABL_REDO ,              D(LSFT),D(LGUI), T(Z), U(LSFT),U(LGUI), END );
216                 BABLM( BABL_CUT ,               D(LGUI), T(X), U(LGUI), END );
217                 BABLM( BABL_COPY ,              D(LGUI), T(C), U(LGUI), END );
218                 BABLM( BABL_PASTE ,             D(LGUI), T(V), U(LGUI), END );                  
219                 BABLM( BABL_SELECT_ALL ,        D(LGUI), T(A), U(LGUI), END );
220                 BABLM( BABL_FIND ,                      D(LGUI),T(F),  U(LGUI),END );
221                 BABLM( BABL_FIND_NEXT,          D(LGUI),T(G),  U(LGUI),END );
222                 BABLM( BABL_FIND_REPLACE,       D(LGUI),T(F),  U(LGUI),END );
223                 BABLM( BABL_RUNAPP ,            D(LGUI),T(R), U(LGUI),END );
224                 BABLM( BABL_SWITCH_APP_NEXT ,   D(LGUI),T(TAB), U(LGUI),END );
225                 BABLM( BABL_SWITCH_APP_LAST ,   D(LSFT),D(LGUI),T(TAB), U(LGUI), U(LSFT),END );
226                 BABLM( BABL_CLOSE_APP ,                 D(LGUI),T(Q),  U(LGUI),END );
227                 BABLM( BABL_HELP ,                              D(LSFT),D(LGUI),T(SLASH), U(LGUI), U(LSFT),END );
228
229 #ifndef BABL_NOBROWSER
230                 BABLM( BABL_BROWSER_NEW_TAB,            D(LGUI), T(T), U(LGUI),END );
231                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LGUI), T(W), U(LGUI),END );
232                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
233                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
234                 BABLM( BABL_BROWSER_PREV_TAB,           D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
235                 BABLM( BABL_BROWSER_URL_BAR,            D(LGUI), T(L), U(LGUI),END );
236                 BABLM( BABL_BROWSER_FORWARD,            D(LGUI), T(RIGHT), U(LGUI),END );
237                 BABLM( BABL_BROWSER_BACK,                       D(LGUI), T(LEFT), U(LGUI),END );
238                 BABLM( BABL_BROWSER_FIND,                       D(LGUI), T(F), U(LGUI),END );
239                 BABLM( BABL_BROWSER_BOOKMARK,           D(LGUI), T(D), U(LGUI),END );
240                 //BABLM( BABL_BROWSER_DEV_TOOLS,        T(F12), U(LGUI),END  ); // EDGE 
241                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
242                 // Chrome
243                 BABLM( BABL_BROWSER_RELOAD,                     D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
244                 BABLM( BABL_BROWSER_FULLSCREEN,         D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
245                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
246                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LGUI), T(MINS), U(LGUI),END );
247 #endif
248 #endif
249                         
250          return MACRO_NONE;
251 #endif  
252         
253 #ifdef EMACS_MODE
254
255          case EMACS_MODE:
256                 switch(shortcut) {
257 //probably should allow meta to not be ALT
258
259                 BABLM( BABL_GO_LEFT_1C,                 T(LEFT), END );
260                 BABLM( BABL_GO_RIGHT_1C,                T(RIGHT), END );
261                 BABLM( BABL_GO_LEFT_WORD,               D(LALT), T(B), U(LALT), END );
262                 BABLM( BABL_GO_RIGHT_WORD ,             D(LALT), T(F), U(LALT), END );
263                 BABLM( BABL_GO_START_LINE ,     D(LCTL), T(A), U(LCTL),  END );
264                 BABLM( BABL_GO_END_LINE ,               D(LCTL), T(E), U(LCTL), END );
265                 BABLM( BABL_GO_START_DOC ,              D(LALT), D(LSFT), T(COMM),U(LSFT), U(LALT) ,END );
266                 BABLM( BABL_GO_END_DOC ,                D(LALT), D(LSFT), T(DOT), U(LSFT), U(LALT) ,END );
267                 BABLM( BABL_GO_NEXT_LINE ,              D(LCTL), T(N), U(LCTL), END );
268                 BABLM( BABL_GO_PREV_LINE ,      D(LCTL), T(P), U(LCTL), END );
269                 BABLM( BABL_PGDN ,                              D(LCTL), T(V), U(LCTL), END );
270                 BABLM( BABL_PGUP ,                      D(LALT), T(V), U(LALT), END );
271                 BABLM( BABL_DEL_RIGHT_1C,               D(LCTL), T(D), U(LCTL),END );    
272                 BABLM( BABL_DEL_LEFT_WORD ,     D(LCTL), T(BSPACE), U(LCTL), END );
273                 BABLM( BABL_DEL_RIGHT_WORD ,    D(LALT), T(D), U(LALT), END );
274                 BABLM( BABL_DEL_TO_LINE_END,    D(LCTL), T(K), U(LCTL), END ); 
275                 BABLM( BABL_DEL_TO_LINE_START,  T(ESC),  T(0), D(LCTL), T(K), U(LCTL),  END );
276 #ifndef BABL_MOVEMENTONLY
277                 BABLM( BABL_UNDO ,              D(LCTL), T(X), U(LCTL),T(C), END );
278                 BABLM( BABL_REDO ,              D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
279                 BABLM( BABL_CUT ,               D(LCTL), T(W), U(LCTL), END );
280                 BABLM( BABL_COPY ,              D(LALT), T(W), U(LALT), END ); //really?
281                 BABLM( BABL_PASTE ,     D(LCTL), T(Y), U(LCTL), END );                  
282                 BABLM( BABL_SELECT_ALL ,D(LCTL), T(X), U(LCTL),T(H), END );      
283                 BABLM( BABL_FIND ,              D(LCTL), T(S), U(LCTL),END );
284                 BABLM( BABL_FIND_NEXT , D(LCTL), T(S), U(LCTL),END );
285                 BABLM( BABL_FIND_REPLACE ,              D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
286                 BABLM( BABL_RUNAPP ,                    D(LALT), T(X), U(LALT),T(S),T(H),T(E),T(L),T(L),END );// arguably
287                 BABLM( BABL_SWITCH_APP_NEXT ,   D(LCTL), T(X), U(LCTL),T(RIGHT), END ); // arguably
288                 BABLM( BABL_SWITCH_APP_LAST ,   D(LCTL), T(X), U(LCTL),T(LEFT), END ); // arguably
289                 BABLM( BABL_CLOSE_APP ,                 D(LCTL), T(X), U(LCTL),T(C),END );
290                 BABLM( BABL_HELP ,                              D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
291 #ifndef BABL_NOBROWSER
292 /* you get to figure w3 out 
293                 BABLM( BABL_BROWSER_NEW_TAB,            D(LGUI), T(T), U(LGUI),END );
294                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LGUI), T(W), U(LGUI),END );
295                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
296                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
297                 BABLM( BABL_BROWSER_PREV_TAB,           D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
298                 BABLM( BABL_BROWSER_URL_BAR,            D(LGUI), T(L), U(LGUI),END );
299                 BABLM( BABL_BROWSER_FORWARD,            D(LGUI), T(RIGHT), U(LGUI),END );
300                 BABLM( BABL_BROWSER_BACK,                       D(LGUI), T(LEFT), U(LGUI),END );
301                 BABLM( BABL_BROWSER_FIND,                       D(LGUI), T(F), U(LGUI),END );
302                 BABLM( BABL_BROWSER_BOOKMARK,           D(LGUI), T(D), U(LGUI),END );
303                 //BABLM( BABL_BROWSER_DEV_TOOLS,        T(F12), U(LGUI),END  ); // EDGE 
304                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
305                 // Chrome
306                 BABLM( BABL_BROWSER_RELOAD,                     D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
307                 BABLM( BABL_BROWSER_FULLSCREEN,         D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
308                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
309                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LGUI), T(MINS), U(LGUI),END );
310 */
311 #endif
312 #endif
313                                 break;
314          
315          return MACRO_NONE;
316         }
317         
318 #endif  
319
320
321 #ifdef VI_MODE
322          case VI_MODE:
323 // you have to track the modes yourself. Otherwise motion is awful (bell, bell, bell)
324                         
325                         
326                         BABLM( BABL_GO_LEFT_1C , T(H), END );
327                         BABLM( BABL_GO_RIGHT_1C , T(L), END );
328                         BABLM( BABL_GO_LEFT_WORD , T(B),END );
329                         BABLM( BABL_GO_RIGHT_WORD , T(W), END );
330                         BABLM( BABL_GO_START_LINE , D(LSFT), T(6),U(LSFT), END ); //^
331                         BABLM( BABL_GO_END_LINE ,   D(LSFT), T(4),U(LSFT) , END ); //$
332                         BABLM( BABL_GO_START_DOC , T(G),T(G) ,END );
333                         BABLM( BABL_GO_END_DOC , D(LSFT), T(G),U(LSFT),END );
334                         BABLM( BABL_GO_NEXT_LINE ,  T(J), END );
335                         BABLM( BABL_GO_PREV_LINE,  T(K), END );
336                         BABLM( BABL_PGDN ,D(LCTL), T(F), U(LCTL), END );
337                         BABLM( BABL_PGUP , D(LCTL), T(B), U(LCTL), END );
338                         BABLM( BABL_DEL_RIGHT_1C ,  T(X),END );  
339                         BABLM( BABL_DEL_LEFT_WORD ,  T(D),T(G),T(E),END );
340                         BABLM( BABL_DEL_RIGHT_WORD ,  T(D),T(W),END );
341                         BABLM( BABL_DEL_TO_LINE_END,    T(D),D(LSFT), T(4),U(LSFT) ,END ); // d$
342                         BABLM( BABL_DEL_TO_LINE_START,  T(D),D(LSFT), T(6),U(LSFT) ,END ); 
343 #ifndef BABL_MOVEMENTONLY
344                         BABLM( BABL_UNDO , T(U), END );
345                         BABLM( BABL_REDO ,  D(LCTL), T(R), U(LCTL), END );  
346                         BABLM( BABL_CUT ,  T(X), END );
347                         BABLM( BABL_COPY , T(Y),END );
348                         BABLM( BABL_PASTE ,  T(P), END );                       
349                         BABLM( BABL_SELECT_ALL , D(LSFT), T(SCLN),U(LSFT),D(LSFT), T(5),U(LSFT),T(Y), END ); // wrong but helpful? 
350                         BABLM( BABL_FIND ,   T(SLASH),END );
351                         BABLM( BABL_FIND_NEXT , T(N),END );
352                         BABLM( BABL_FIND_REPLACE ,  D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
353                         BABLM( BABL_RUNAPP,END );
354                         BABLM( BABL_SWITCH_APP_NEXT             ,END );
355                         BABLM( BABL_SWITCH_APP_LAST             ,END );
356                         BABLM(BABL_CLOSE_APP,   D(LSFT), T(SCLN),U(LSFT), T(Q), D(RSFT), T(1),U(RSFT), END );
357                         BABLM(BABL_HELP,         D(LSFT), T(SCLN),U(LSFT),T(H),END); // start search in help
358 #ifndef BABL_NOBROWSER
359 /* you get to figure this out 
360                 BABLM( BABL_BROWSER_NEW_TAB,            D(LGUI), T(T), U(LGUI),END );
361                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LGUI), T(W), U(LGUI),END );
362                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
363                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
364                 BABLM( BABL_BROWSER_PREV_TAB,           D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
365                 BABLM( BABL_BROWSER_URL_BAR,            D(LGUI), T(L), U(LGUI),END );
366                 BABLM( BABL_BROWSER_FORWARD,            D(LGUI), T(RIGHT), U(LGUI),END );
367                 BABLM( BABL_BROWSER_BACK,                       D(LGUI), T(LEFT), U(LGUI),END );
368                 BABLM( BABL_BROWSER_FIND,                       D(LGUI), T(F), U(LGUI),END );
369                 BABLM( BABL_BROWSER_BOOKMARK,           D(LGUI), T(D), U(LGUI),END );
370                 //BABLM( BABL_BROWSER_DEV_TOOLS,        T(F12), U(LGUI),END  ); // EDGE 
371                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
372                 // Chrome
373                 BABLM( BABL_BROWSER_RELOAD,                     D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
374                 BABLM( BABL_BROWSER_FULLSCREEN,         D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
375                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LGUI), T(PLUS), U(LGUI),END );
376                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LGUI), T(MINS), U(LGUI),END );
377 */
378 #endif
379 #endif   
380                  return MACRO_NONE;     
381 #endif
382
383
384
385
386 #ifdef READMUX_MODE
387 // Readline command line editing + tmux windowing
388 // I havent decided how much to do readline and how much tmux
389         
390         
391         case READMUX_MODE:              
392                 
393                 BABLM( BABL_GO_LEFT_1C ,                T(LEFT), END );
394                 BABLM( BABL_GO_RIGHT_1C ,               T(RIGHT), END );
395                 BABLM( BABL_GO_LEFT_WORD ,              D(LALT), T(B), U(LALT), END );
396                 BABLM( BABL_GO_RIGHT_WORD ,     D(LALT), T(F), U(LALT), END );
397                 BABLM( BABL_GO_START_LINE ,     D(LCTL), T(A), U(LCTL),  END );
398                 BABLM( BABL_GO_END_LINE ,               D(LCTL), T(E), U(LCTL), END );
399                 //BABLM( BABL_GO_START_DOC              ,END );// tmux?
400                 //BABLM( BABL_GO_END_DOC                ,END );  // tmux?
401                 BABLM( BABL_GO_NEXT_LINE ,      D(LCTL), T(N), U(LCTL), END );
402                 BABLM( BABL_GO_PREV_LINE ,      D(LCTL), T(P), U(LCTL), END );
403                 BABLM( BABL_PGDN ,                      T(PGDN), END );
404                 BABLM( BABL_PGUP ,                      T(PGUP), END );
405                 BABLM( BABL_DEL_RIGHT_1C ,      D(LCTL), T(D), U(LCTL),END );    
406                 BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(W), U(LCTL), END );
407                 BABLM( BABL_DEL_RIGHT_WORD ,    D(LALT), T(D), U(LALT), END );
408                 BABLM( BABL_DEL_TO_LINE_END,    D(LCTL), T(K), U(LCTL), END ); 
409                 BABLM( BABL_DEL_TO_LINE_START,  D(LCTL), T(U), U(LCTL),  END );
410 #ifndef BABL_MOVEMENTONLY
411                 BABLM( BABL_UNDO ,                      D(LALT), T(R), U(LALT) , END );
412                 BABLM( BABL_REDO ,                      D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
413                 BABLM( BABL_CUT ,                       D(LCTL), T(K), U(LCTL), END ); // wrong half the time
414                 //BABLM( BABL_COPY              ,END ); 
415                 BABLM( BABL_PASTE ,             D(LCTL), T(Y), U(LCTL), END );                  
416                 BABLM( BABL_SELECT_ALL ,        D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );      
417                 BABLM( BABL_FIND ,              D(LCTL), T(R), U(LCTL), END ); // search history
418                 BABLM(BABL_FIND_NEXT,           D(LCTL), T(S), U(LCTL), END );
419                 //BABLM( BABL_FIND_REPLACE              ,END ); 
420                 BABLM( BABL_RUNAPP ,            D(LCTL), T(B), U(LCTL),  T(C),END );  //tmux
421                 BABLM( BABL_SWITCH_APP_NEXT ,  D(LCTL), T(B), U(LCTL),  T(N),END );  //tmux
422                 BABLM( BABL_SWITCH_APP_LAST ,  D(LCTL), T(B), U(LCTL),  T(P),END );  //tmux
423                 BABLM( BABL_CLOSE_APP ,                 D(LCTL), T(B), U(LCTL),  T(D),END); // usually what I want
424                 // BABLM( BABL_HELP             ,END ); 
425 #ifndef BABL_NOBROWSER
426 /* Add lynx shortcuts? 
427                 BABLM( BABL_BROWSER_NEW_TAB,            D(LGUI), T(T), U(LGUI),END );
428                 BABLM( BABL_BROWSER_CLOSE_TAB,          D(LGUI), T(W), U(LGUI),END );
429                 BABLM( BABL_BROWSER_REOPEN_LAST_TAB,            D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
430                 BABLM( BABL_BROWSER_NEXT_TAB,           D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
431                 BABLM( BABL_BROWSER_PREV_TAB,           D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
432                 BABLM( BABL_BROWSER_URL_BAR,            D(LGUI), T(L), U(LGUI),END );
433                 BABLM( BABL_BROWSER_FORWARD,            D(LGUI), T(RIGHT), U(LGUI),END );
434                 BABLM( BABL_BROWSER_BACK,                       D(LGUI), T(LEFT), U(LGUI),END );
435                 BABLM( BABL_BROWSER_FIND,                       D(LGUI), T(F), U(LGUI),END );
436                 BABLM( BABL_BROWSER_BOOKMARK,           D(LGUI), T(D), U(LGUI),END );
437                 //BABLM( BABL_BROWSER_DEV_TOOLS,        T(F12), U(LGUI),END  ); // EDGE 
438                 BABLM( BABL_BROWSER_DEV_TOOLS,          D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
439                 // Chrome
440                 BABLM( BABL_BROWSER_RELOAD,                     D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
441                 BABLM( BABL_BROWSER_FULLSCREEN,         D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
442                 BABLM( BABL_BROWSER_ZOOM_IN,            D(LGUI), T(PLUS), U(LGUI),END );
443                 BABLM( BABL_BROWSER_ZOOM_OUT,           D(LGUI), T(MINS), U(LGUI),END );
444 */
445 #endif
446 #endif
447                 
448         return MACRO_NONE;
449         
450 #endif                  
451
452         default:        
453         return MACRO_NONE;
454     }
455
456 }
457
458
459 #endif