summaryrefslogtreecommitdiffstats
path: root/users/miles2go/babblePaste.c
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2021-03-14 19:24:07 +0000
committerQMK Bot <hello@qmk.fm>2021-03-14 19:24:07 +0000
commitd036ebeaf6bebe2c1a226f0e3e5bda58abf6db7e (patch)
tree128651ab8da7a79aee966f064746c5d1d0618b2d /users/miles2go/babblePaste.c
parentf23639517683378bed12792903e0d9cc6a1a6794 (diff)
parent7b7689d30796c977b95197091c16e8bb97000101 (diff)
Merge remote-tracking branch 'origin/master' into develop
Diffstat (limited to 'users/miles2go/babblePaste.c')
-rw-r--r--users/miles2go/babblePaste.c130
1 files changed, 114 insertions, 16 deletions
diff --git a/users/miles2go/babblePaste.c b/users/miles2go/babblePaste.c
index 2a32024cd2..cd032882bf 100644
--- a/users/miles2go/babblePaste.c
+++ b/users/miles2go/babblePaste.c
@@ -12,13 +12,14 @@ and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jee
#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) {}
+// functions to tell the user that the mode has changed
+__attribute__((weak)) void babble_modeswitch_user(uint8_t mode) {}
+__attribute__((weak)) void babble_modeswitch_kb(uint8_t mode) { babble_modeswitch_user( mode); }
+
+
void set_babble_mode(uint8_t id) { babble_mode = id; }
@@ -27,6 +28,7 @@ void babble_mode_increment() {
if (babble_mode >= BABL_MODEMAX) {
babble_mode = 0;
}
+ babble_modeswitch_kb(babble_mode);
}
void babble_mode_decrement() {
@@ -35,21 +37,97 @@ void babble_mode_decrement() {
} else {
babble_mode = BABL_MODEMAX - 1;
}
+ babble_modeswitch_kb(babble_mode);
}
/* 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
+This could be made faster by splitting into functions sorted by keycode range
But that makes for a *lot* of ifdefs.
*/
-bool babblePaste(uint16_t keycode) {
- // handle the OS/mode switching first
+bool babblePaste(uint16_t keycode, bool is_pressed ) {
+ // handle keys that have up & down behavior first, then OS/mode switching, then macros
+
+// This is the key used for cut & paste (Propeller on Mac, Control elsewhere)
+# ifdef BABL_MODSWAP
+ // WARNING, this assumes you have BABL_MAC_MODE defined.
+ if (keycode == BABL_PRIMARY_OS_MOD ) {
+ if (babble_mode == BABL_MAC_MODE) {
+ if (is_pressed) {
+ register_code(KC_LGUI);
+ } else {
+ unregister_code(KC_LGUI);
+ }
+ } else { // everybody else
+
+ if (is_pressed) {
+ register_code(KC_LCTL);
+ } else {
+ unregister_code(KC_LCTL);
+ }
+ }
+ }
+
+// This is the os key not used in cut & paste. (CTRL on mac, GUI elsewhere)
+ if (keycode == BABL_SECONDARY_OS_MOD ) {
+ if (babble_mode == BABL_MAC_MODE) {
+ if (is_pressed) {
+ register_code(KC_LCTL);
+ } else {
+ unregister_code(KC_LCTL);
+ }
+
+ } else { // everybody else
+ if (is_pressed) {
+ register_code(KC_LGUI);
+ } else {
+ unregister_code(KC_LGUI);
+ }
+ }
+ }
+
+// This is the alt key in most OSes. Mostly useful if you want to do hyper on one OS, Meh on another.
+ if (keycode == BABL_TERTIARY_OS_MOD ) {
+ if (babble_mode == BABL_MAC_MODE) {
+ if (is_pressed) {
+ register_code(KC_LALT);
+ } else {
+ unregister_code(KC_LALT);
+ }
+ } else { // everybody else
+
+ if (is_pressed) {
+ register_code(KC_LALT);
+ } else {
+ unregister_code(KC_LALT);
+ }
+ }
+ }
+
+# endif
+
+// below here we are only running macros - don't serve any key up events.
+ if (is_pressed == 0 ) {
+ return true;
+ }
+
+// handle increment functions.
+
+if (keycode == BABL_MODE_INCREMENT) {
+ babble_mode_increment();
+ return true;
+}
+
+if (keycode == BABL_MODE_DECREMENT) {
+ babble_mode_decrement();
+ return true;
+}
# ifdef BABL_MAC
if (keycode == BABL_DO_MAC) {
set_babble_mode(BABL_MAC_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
@@ -61,7 +139,7 @@ bool babblePaste(uint16_t keycode) {
# ifdef BABL_VI
if (keycode == BABL_DO_VI) {
set_babble_mode(BABL_VI_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_VI_MODE) {
@@ -71,7 +149,7 @@ bool babblePaste(uint16_t keycode) {
# ifdef BABL_WINDOWS
if (keycode == BABL_DO_WINDOWS) {
set_babble_mode(BABL_WINDOWS_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_WINDOWS_MODE) {
@@ -81,7 +159,7 @@ bool babblePaste(uint16_t keycode) {
# ifdef BABL_LINUX
if (keycode == BABL_DO_LINUX) {
set_babble_mode(BABL_LINUX_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_LINUX_MODE) {
@@ -91,27 +169,47 @@ bool babblePaste(uint16_t keycode) {
# ifdef BABL_EMACS
if (keycode == BABL_DO_EMACS) {
set_babble_mode(BABL_EMACS_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_EMACS_MODE) {
babblePaste_emacs(keycode);
}
# endif
-# ifdef BABL_CHROME
+# ifdef BABL_NANO
+ if (keycode == BABL_DO_NANO) {
+ set_babble_mode(BABL_NANO_MODE);
+ babble_modeswitch_kb(babble_mode);
+ return true;
+ }
+ if (babble_mode == BABL_NANO_MODE) {
+ babblePaste_nano(keycode);
+ }
+# endif
+# ifdef BABL_KITTY
+ if (keycode == BABL_DO_KITTY) {
+ set_babble_mode(BABL_KITTY_MODE);
+ babble_modeswitch_kb(babble_mode);
+ return true;
+ }
+ if (babble_mode == BABL_KITTY_MODE) {
+ babblePaste_kitty(keycode);
+ }
+# endif
+# ifdef BABL_CHROMEOS
if (keycode == BABL_DO_CHROMEOS) {
set_babble_mode(BABL_CHROMEOS_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_CHROMEOS_MODE) {
- babblePaste_readmux(keycode);
+ babblePaste_chromeos(keycode);
}
# endif
# ifdef BABL_READMUX
if (keycode == BABL_DO_READMUX) {
set_babble_mode(BABL_READMUX_MODE);
- babble_led_user();
+ babble_modeswitch_kb(babble_mode);
return true;
}
if (babble_mode == BABL_READMUX_MODE) {