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.

150 lines
6.2 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. https://support.microsoft.com/en-gb/help/12445/windows-keyboard-shortcuts
  7. Remember to check https://github.com/qmk/qmk_firmware/blob/master/quantum/send_string_keycodes.h
  8. */
  9. #include QMK_KEYBOARD_H
  10. #ifdef USE_BABBLEPASTE
  11. # include "babblePaste.h"
  12. # ifdef BABL_WINDOWS
  13. bool babblePaste_win(uint16_t keycode) {
  14. # ifdef BABL_MOVE
  15. BABLM(BABL_GO_LEFT_1C, SS_TAP(X_LEFT));
  16. BABLM(BABL_GO_RIGHT_1C, SS_TAP(X_RIGHT));
  17. BABLM(BABL_GO_LEFT_WORD, IMCTL(X_LEFT));
  18. BABLM(BABL_GO_RIGHT_WORD, IMCTL(X_RIGHT));
  19. BABLM(BABL_GO_START_LINE, IMGUI(X_LEFT));
  20. BABLM(BABL_GO_END_LINE, IMGUI(X_RIGHT));
  21. BABLM(BABL_GO_START_DOC, OMGUI(IMCTL(X_LEFT)));
  22. BABLM(BABL_GO_END_DOC, OMGUI(IMCTL(X_RIGHT)));
  23. BABLM(BABL_GO_NEXT_LINE, SS_TAP(X_DOWN));
  24. BABLM(BABL_GO_PREV_LINE, SS_TAP(X_UP));
  25. BABLM(BABL_GO_PARA_START, IMCTL(X_UP));
  26. BABLM(BABL_GO_PARA_END, IMCTL(X_DOWN));
  27. BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
  28. BABLM(BABL_PGUP, SS_TAP(X_PGUP));
  29. BABLM(BABL_DEL_RIGHT_1C, SS_TAP(X_DELETE));
  30. BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPACE));
  31. BABLM(BABL_DEL_RIGHT_WORD, IMCTL(X_DELETE));
  32. BABLM(BABL_DEL_TO_LINE_END, IMSFT(X_HOME) SS_TAP(X_DELETE));
  33. BABLM(BABL_DEL_TO_LINE_START, IMSFT(X_END) SS_TAP(X_DELETE));
  34. BABLM(BABL_MODE, "Windows ");
  35. # endif
  36. # ifdef BABL_OSKEYS
  37. BABLM(BABL_UNDO, SS_LCTRL("z"));
  38. BABLM(BABL_REDO, SS_LCTRL("y"));
  39. BABLM(BABL_CUT, SS_LCTRL("x"));
  40. BABLM(BABL_COPY, SS_LCTRL("c"));
  41. BABLM(BABL_PASTE, SS_LCTRL("v"));
  42. BABLM(BABL_SELECT_ALL, SS_LCTRL("a"));
  43. BABLM(BABL_FIND, SS_LCTRL("f"));
  44. BABLM(BABL_FIND_NEXT, SS_TAP(X_F3));
  45. // BABLM( BABL_FIND_PREV, SS_TAP(X_F3) ); // doesn't have a standard one?
  46. BABLM(BABL_FIND_REPLACE, SS_LCTRL("h"));
  47. BABLM(BABL_RUNAPP, SS_LGUI("r"));
  48. BABLM(BABL_SWITCH_APP_NEXT, IMALT(X_TAB));
  49. BABLM(BABL_SWITCH_APP_LAST, OMSFT(IMALT(X_TAB)));
  50. BABLM(BABL_WINDOW_NEXT, IMCTL(X_TAB));
  51. BABLM(BABL_WINDOW_PREV, OMSFT(IMCTL(X_TAB)));
  52. BABLM(BABL_WINDOW_NEW, IMCTL(X_N));
  53. BABLM(BABL_CLOSE_APP, IMALT(X_F4));
  54. BABLM(BABL_HELP, SS_TAP(X_F1));
  55. BABLM(BABL_LOCK, SS_LGUI("l"));
  56. BABLM(BABL_SCREENCAPTURE, OMSFT(SS_LGUI("s")));
  57. BABLM(BABL_SWITCH_KEYBOARD_LAYOUT, IMGUI(X_SPACE));
  58. # endif
  59. # ifdef BABL_BROWSER
  60. BABLM(BABL_BROWSER_NEW_TAB, SS_LCTRL("t"));
  61. BABLM(BABL_BROWSER_CLOSE_TAB, SS_LCTRL("w"));
  62. BABLM(BABL_BROWSER_REOPEN_LAST_TAB, OMSFT(IMCTL(X_T)));
  63. BABLM(BABL_BROWSER_NEXT_TAB, IMCTL(X_TAB));
  64. BABLM(BABL_BROWSER_PREV_TAB, OMSFT(IMCTL(X_TAB)));
  65. BABLM(BABL_BROWSER_URL_BAR, SS_LCTRL("l"));
  66. BABLM(BABL_BROWSER_FORWARD, IMALT(X_RIGHT));
  67. BABLM(BABL_BROWSER_BACK, OMSFT(IMALT(X_LEFT)));
  68. ;
  69. BABLM(BABL_BROWSER_FIND, SS_LCTRL("f"));
  70. BABLM(BABL_BROWSER_BOOKMARK, SS_LCTRL("d"));
  71. # ifdef BABL_BROWSER_MS
  72. BABLM(BABL_BROWSER_DEV_TOOLS, IMCTL(X_F12)); // EDGE
  73. # else
  74. BABLM(BABL_BROWSER_DEV_TOOLS, SS_LCTRL("t")); // Chrome
  75. BABLM(BABL_BROWSER_VIEWSRC, SS_LCTRL("u")); // Chrome or firefox
  76. # endif
  77. // chrome
  78. BABLM(BABL_BROWSER_RELOAD, IMCTL(X_F5)); // hard reload w/o cache
  79. BABLM(BABL_BROWSER_FULLSCREEN, SS_TAP(X_F11)); // command shift F
  80. BABLM(BABL_BROWSER_ZOOM_IN, OMSFT(IMCTL(X_EQUAL))); // ctr+ +
  81. BABLM(BABL_BROWSER_ZOOM_OUT, IMCTL(X_MINUS));
  82. # endif
  83. # ifdef BABL_APP
  84. BABLM(BABL_APP_SAVE, SS_LCTL("s"));
  85. # ifdef BABL_APP_EDITOR
  86. # ifdef BABL_APP_SUBLIME
  87. // http://sweetme.at/2013/08/08/sublime-text-keyboard-shortcuts/
  88. BABLM(BABL_APP_MULTI_SELECT, IMALT(X_F3)); // add all occurences of current word to select.
  89. BABLM(BABL_APP_PASTE_VALUES, OMSFT(IMCTL(X_V))); // paste with proper indenting.
  90. # endif // sublime
  91. # endif // editor
  92. # ifdef BABL_APP_CELLS
  93. # ifdef BABL_APP_MSOFFICE
  94. # ifndef BABL_APP_SUBLIME
  95. BABLM(BABL_APP_PASTE_VALUES, OMCTL(IMALT(X_V)) "v");
  96. # endif
  97. BABLM(BABL_APP_CENTER_ALIGN, IMALT(X_H) "ac");
  98. // 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
  99. BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
  100. BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
  101. BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
  102. BABLM(BABL_INSERT_COL_LEFT, OMCTL(IMSFT(X_KP_PLUS)));
  103. BABLM(BABL_INSERT_ROW, OMCTL(IMSFT(X_KP_PLUS)));
  104. BABLM(BABL_DELETE_ROW, IMCTL(X_KP_MINUS));
  105. BABLM(BABL_SELECT_COL, IMCTL(X_SPACE));
  106. BABLM(BABL_SELECT_ROW, IMSFT(X_SPACE));
  107. # endif
  108. # ifdef BABL_APP_GOOGLE
  109. BABLM(BABL_APP_CENTER_ALIGN, OMSFT(IMCTL(X_E)));
  110. BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
  111. BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
  112. BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
  113. BABLM(BABL_APP_CLEAR_FORMATTING, IMCTL(X_BSLASH));
  114. BABLM(BABL_DELETE_ROW, IMALT(X_E) "d");
  115. BABLM(BABL_INSERT_COL_LEFT, OMALT(IMCTL(X_I)) "c"); // o for to the right.
  116. BABLM(BABL_INSERT_ROW, IMALT(IMCTL(X_I)) "w"); // r for above.
  117. BABLM(BABL_SELECT_COL, IMCTL(X_SPACE));
  118. BABLM(BABL_SELECT_ROW, IMSFT(X_SPACE));
  119. BABLM(BABL_DELETE_ROW, OMALT(IMCTL(X_KP_MINUS))); // once selected
  120. # endif
  121. # endif // BABL_APP_CELLS
  122. // BABLM( BABL_SPLIT_FRAME_VERT, () );// no windows way?
  123. // BABLM( BABL_UNSPLIT_FRAME_VERT, () );
  124. BABLM(BABL_SPLIT_FRAME_HORIZONTAL, OMALT(IMCTL(X_S))); // word only
  125. BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, OMSFT(IMALT(X_C))); // word
  126. // BABLM( BABL_NEXT_FRAME, () );//no windows way?
  127. // BABLM( BABL_PREV_FRAME, () );// no windows way?
  128. # endif
  129. // Todo, ring bell, flash light, show user this isn't supported
  130. return false;
  131. }
  132. # endif /* BABL_WINDOWS*/
  133. #endif /* babblepaste */