diff options
Diffstat (limited to 'users/miles2go/babblePaste.c')
-rw-r--r-- | users/miles2go/babblePaste.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/users/miles2go/babblePaste.c b/users/miles2go/babblePaste.c new file mode 100644 index 0000000000..2a32024cd2 --- /dev/null +++ b/users/miles2go/babblePaste.c @@ -0,0 +1,125 @@ +/* A library to output the right key shortcut in any common app. +Given a global variable babble_mode to show the environment and a +key that calls the paste macro, do the right type of paste. +Setting the context is done by another macro, or TBD interaction with the host. + +Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts +and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c +*/ + +#include QMK_KEYBOARD_H + +#ifdef USE_BABBLEPASTE +# include "babblePaste.h" + +// small function that we might also want to call from a keymap. + +// GLOBAL variable to determine mode. Sets startup default if no eeppom +uint8_t babble_mode = 0; + +// function to tell the user that the mode has changed +__attribute__((weak)) void babble_led_user(void) {} + +void set_babble_mode(uint8_t id) { babble_mode = id; } + +void babble_mode_increment() { + babble_mode += 1; + if (babble_mode >= BABL_MODEMAX) { + babble_mode = 0; + } +} + +void babble_mode_decrement() { + if (babble_mode >= 1) { + babble_mode -= 1; + } else { + babble_mode = BABL_MODEMAX - 1; + } +} + +/* this function runs the appropriate babblepaste macro, given +the global babble_mode and a keycode defined in the babble_keycodes enum. + +This could be made faster by splitting into two functions sorted by keycode range +But that makes for a *lot* of ifdefs. +*/ +bool babblePaste(uint16_t keycode) { + // handle the OS/mode switching first + +# ifdef BABL_MAC + if (keycode == BABL_DO_MAC) { + set_babble_mode(BABL_MAC_MODE); + babble_led_user(); + return true; + } + + if (babble_mode == BABL_MAC_MODE) { + babblePaste_mac(keycode); + } +# endif + +# ifdef BABL_VI + if (keycode == BABL_DO_VI) { + set_babble_mode(BABL_VI_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_VI_MODE) { + babblePaste_vi(keycode); + } +# endif +# ifdef BABL_WINDOWS + if (keycode == BABL_DO_WINDOWS) { + set_babble_mode(BABL_WINDOWS_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_WINDOWS_MODE) { + babblePaste_win(keycode); + } +# endif +# ifdef BABL_LINUX + if (keycode == BABL_DO_LINUX) { + set_babble_mode(BABL_LINUX_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_LINUX_MODE) { + babblePaste_linux(keycode); + } +# endif +# ifdef BABL_EMACS + if (keycode == BABL_DO_EMACS) { + set_babble_mode(BABL_EMACS_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_EMACS_MODE) { + babblePaste_emacs(keycode); + } +# endif +# ifdef BABL_CHROME + if (keycode == BABL_DO_CHROMEOS) { + set_babble_mode(BABL_CHROMEOS_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_CHROMEOS_MODE) { + babblePaste_readmux(keycode); + } +# endif +# ifdef BABL_READMUX + if (keycode == BABL_DO_READMUX) { + set_babble_mode(BABL_READMUX_MODE); + babble_led_user(); + return true; + } + if (babble_mode == BABL_READMUX_MODE) { + babblePaste_readmux(keycode); + } +# endif + + return false; +} + +#endif // USE_BABBLEPASTE |