babblePaste.c 21 KB

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