You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
6.6 KiB

  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 QMK_KEYBOARD_H
  9. #ifdef USE_BABBLEPASTE
  10. # include "babblePaste.h"
  11. # ifdef BABL_MAC
  12. bool babblePaste_mac(uint16_t keycode) {
  13. # ifdef BABL_MOVE
  14. BABLM(BABL_GO_LEFT_1C, SS_TAP(X_LEFT));
  15. BABLM(BABL_GO_RIGHT_1C, SS_TAP(X_RIGHT));
  16. BABLM(BABL_GO_LEFT_WORD, IMALT(X_LEFT));
  17. BABLM(BABL_GO_RIGHT_WORD, IMALT(X_RIGHT));
  18. BABLM(BABL_GO_START_LINE, IMGUI(X_LEFT));
  19. BABLM(BABL_GO_END_LINE, IMGUI(X_RIGHT));
  20. BABLM(BABL_GO_START_DOC, IMGUI(X_UP));
  21. BABLM(BABL_GO_END_DOC, IMGUI(X_DOWN));
  22. BABLM(BABL_GO_NEXT_LINE, SS_TAP(X_DOWN));
  23. BABLM(BABL_GO_PREV_LINE, SS_TAP(X_UP));
  24. BABLM(BABL_GO_PARA_START, IMALT(X_UP));
  25. BABLM(BABL_DEL_RIGHT_1C, SS_TAP(X_DELETE));
  26. BABLM(BABL_GO_PARA_END, IMALT(X_DOWN));
  27. BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
  28. BABLM(BABL_PGUP, SS_TAP(X_PGUP));
  29. BABLM(BABL_DEL_LEFT_WORD, IMALT(X_BSPACE));
  30. BABLM(BABL_DEL_RIGHT_WORD, IMALT(X_DELETE));
  31. BABLM(BABL_DEL_TO_LINE_END, OMSFT(IMGUI(X_RIGHT)) SS_TAP(X_BSPACE)); // this is more app agnostic than ctrl-k
  32. BABLM(BABL_DEL_TO_LINE_START, OMSFT(IMGUI(X_LEFT)) SS_TAP(X_BSPACE));
  33. BABLM(BABL_MODE, "Mac ");
  34. # endif
  35. # ifdef BABL_OSKEYS
  36. BABLM(BABL_UNDO, SS_LGUI("z"));
  37. BABLM(BABL_REDO, SS_LGUI("y"));
  38. BABLM(BABL_CUT, SS_LGUI("x"));
  39. BABLM(BABL_COPY, SS_LGUI("c"));
  40. BABLM(BABL_PASTE, SS_LGUI("v"));
  41. BABLM(BABL_SELECT_ALL, SS_LGUI("a"));
  42. BABLM(BABL_FIND, SS_LGUI("f"));
  43. BABLM(BABL_FIND_NEXT, SS_LGUI("g"));
  44. // BABLM( BABL_FIND_NEXT, OMSFT(X_F4)) ); // Mac office
  45. BABLM(BABL_FIND_PREV, OMSFT(IMGUI(X_G))); // Sublime, browser
  46. BABLM(BABL_FIND_PREV, SS_LGUI("g"));
  47. BABLM(BABL_FIND_REPLACE, SS_LGUI("f"));
  48. BABLM(BABL_RUNAPP, SS_LGUI(" "));
  49. BABLM(BABL_SWITCH_APP_NEXT, IMGUI(X_TAB));
  50. BABLM(BABL_SWITCH_APP_LAST, OMSFT(IMGUI(X_TAB)));
  51. // Apps vary, but this is usually tab movement, same as B_NXTB
  52. /*
  53. BABLM( BABL_WINDOW_NEXT, OMSFT(IMGUI(X_RBRACKET)) ); // GUI Grav isn't everywhere
  54. BABLM( BABL_WINDOW_PREV, OMSFT(IMGUI(X_LBRACKET)) );
  55. */
  56. BABLM(BABL_WINDOW_NEXT, IMGUI(X_GRAVE));
  57. BABLM(BABL_WINDOW_PREV, OMSFT(IMGUI(X_GRAVE)));
  58. BABLM(BABL_WINDOW_NEW, IMGUI(X_N));
  59. BABLM(BABL_CLOSE_APP, SS_LGUI("q"));
  60. BABLM(BABL_HELP, OMSFT(IMGUI(X_SLASH)));
  61. // Locking screen from external keyboard requires automator https://apple.stackexchange.com/questions/73995
  62. BABLM(BABL_LOCK, OMCTL(IMALT(X_L)));
  63. BABLM(BABL_SCREENCAPTURE, OMSFT(OMGUI(IMALT(X_4))) IMGUI(X_SPACE) "preview" SS_LGUI("d"));
  64. BABLM(BABL_SWITCH_KEYBOARD_LAYOUT, IMCTL(X_SPACE));
  65. # endif
  66. # ifdef BABL_BROWSER
  67. BABLM(BABL_BROWSER_NEW_TAB, IMGUI(X_T));
  68. BABLM(BABL_BROWSER_CLOSE_TAB, SS_LGUI("w"));
  69. BABLM(BABL_BROWSER_REOPEN_LAST_TAB, OMSFT(SS_LGUI("t")));
  70. BABLM(BABL_BROWSER_NEXT_TAB, OMGUI(IMALT(X_RIGHT)));
  71. BABLM(BABL_BROWSER_PREV_TAB, OMGUI(IMALT(X_LEFT)));
  72. BABLM(BABL_BROWSER_URL_BAR, SS_LGUI("l"));
  73. BABLM(BABL_BROWSER_FORWARD, IMGUI(X_RIGHT));
  74. BABLM(BABL_BROWSER_BACK, IMGUI(X_LEFT));
  75. BABLM(BABL_BROWSER_FIND, SS_LGUI("f"));
  76. BABLM(BABL_BROWSER_BOOKMARK, SS_LGUI("d"));
  77. BABLM(BABL_BROWSER_RELOAD, OMGUI(SS_LSFT("r"))); // hard reload w/o cache
  78. BABLM(BABL_BROWSER_FULLSCREEN, OMGUI(SS_LCTRL("p")));
  79. BABLM(BABL_BROWSER_ZOOM_IN, IMGUI(X_KP_PLUS)); // ctr+ +
  80. BABLM(BABL_BROWSER_ZOOM_OUT, IMGUI(X_KP_MINUS));
  81. # ifdef BABL_BROWSER_CHROME
  82. BABLM(BABL_BROWSER_VIEWSRC, SS_LGUI("u")); // Chrome or firefox
  83. BABLM(BABL_BROWSER_DEV_TOOLS, OMGUI(SS_LALT("i"))); // Chrome or Firefox
  84. # endif
  85. # ifdef BABL_BROWSER_SAFARI
  86. BABLM(BABL_BROWSER_VIEWSRC, OMGUI(IMALT(X_U))); // Safari
  87. // BABLM( BABL_BROWSER_DEV_TOOLS, // No real equivalent for Safari
  88. # endif
  89. # endif // BABL_BROWSER
  90. # ifdef BABL_APP
  91. BABLM(BABL_APP_SAVE, SS_LGUI("s"));
  92. # ifdef BABL_APP_EDITOR
  93. # ifdef BABL_APP_SUBLIME
  94. BABLM(BABL_APP_MULTI_SELECT, OMCTL(IMGUI(X_G))); // add all occurences of current word to select.
  95. BABLM(BABL_APP_PASTE_VALUES, OMSFT(IMGUI(X_V))); // paste with proper indenting.
  96. # endif // sublime
  97. # endif // editor
  98. # ifdef BABL_APP_CELLS
  99. # ifdef BABL_APP_MSOFFICE
  100. BABLM(BABL_APP_CENTER_ALIGN, IMGUI(X_E));
  101. // BABLM( BABL_APP_CLEAR_FORMATTING, OMCTL(IMGUI(X_G)) ); // this isn't native. https://support.office.com/en-us/article/Clear-all-text-formatting-C094C4DA-7F09-4CEA-9A8D-C166949C9C80#OfficeVersion=macOS
  102. BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
  103. BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
  104. BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
  105. BABLM(BABL_INSERT_COL_LEFT, IMCTL(X_I));
  106. BABLM(BABL_INSERT_ROW, OMCTL(IMSFT(X_KP_PLUS)));
  107. BABLM(BABL_DELETE_ROW, IMCTL(X_KP_MINUS));
  108. BABLM(BABL_SELECT_COL, IMCTL(X_SPACE));
  109. BABLM(BABL_SELECT_ROW, IMSFT(X_SPACE));
  110. # endif // BABL_APP_MSOFFICE
  111. # ifdef BABL_APP_GOOGLE
  112. BABLM(BABL_APP_CENTER_ALIGN, OMSFT(IMGUI(X_E)));
  113. BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
  114. BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
  115. BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
  116. BABLM(BABL_APP_CLEAR_FORMATTING, IMGUI(X_BSLASH));
  117. BABLM(BABL_DELETE_ROW, OMCTL(IMGUI(X_G)));
  118. BABLM(BABL_INSERT_COL_LEFT, OMALT(IMCTL(X_I)) "c"); // o for to the right.
  119. BABLM(BABL_INSERT_ROW, OMALT(IMCTL(X_I)) "b"); // r for above.
  120. BABLM(BABL_SELECT_COL, IMCTL(X_SPACE));
  121. BABLM(BABL_SELECT_ROW, IMSFT(X_SPACE));
  122. BABLM(BABL_DELETE_ROW, OMALT(IMCTL(X_KP_MINUS))); // once selected
  123. # endif // BABL_APP_GOOGLE
  124. /*
  125. #ifdef BABL_APP_APPLE
  126. // you're on your own.
  127. #endif
  128. */
  129. # endif // BABL_APP_CELLS
  130. # ifdef BABL_APP_WINDOWSPLITTING
  131. // These are for os X terminal, and are pretty useless.
  132. BABLM(BABL_SPLIT_FRAME_HORIZONTAL, SS_LGUI("d"));
  133. BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, OMSFT(IMGUI(X_D)));
  134. # endif // BABL_APP_WINDOWSPLITTING
  135. # endif // BABL_APP
  136. // Todo, ring bell, flash light, show user this isn't supported
  137. return false;
  138. }
  139. # endif /* mac mode*/
  140. #endif // Babblepaste