summaryrefslogtreecommitdiff
path: root/users/ericgebhart/extensions/oneshot.h
diff options
context:
space:
mode:
authorDrashna Jael're <drashna@live.com>2022-11-12 17:10:04 -0800
committerDrashna Jael're <drashna@live.com>2022-11-12 17:10:04 -0800
commit731633e133de428408cd313fbd65fb0a36145672 (patch)
treeb788a9fe150a353ce20d338848d3dab2bbc42879 /users/ericgebhart/extensions/oneshot.h
parent6cc9513ab0cd5e21354c51ab83a89af9f2eb517e (diff)
parent2e39647618295e4a2ba685cfb8e3ab36622e92ee (diff)
Merge remote-tracking branch 'origin/master' into develop
Diffstat (limited to 'users/ericgebhart/extensions/oneshot.h')
-rw-r--r--users/ericgebhart/extensions/oneshot.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/users/ericgebhart/extensions/oneshot.h b/users/ericgebhart/extensions/oneshot.h
new file mode 100644
index 0000000000..774dc4ab39
--- /dev/null
+++ b/users/ericgebhart/extensions/oneshot.h
@@ -0,0 +1,37 @@
+#define ENABLE_ONESHOT
+#ifdef ENABLE_ONESHOT
+#pragma once
+
+typedef enum {
+ ONESHOT_LCTL = 0,
+ ONESHOT_LSFT = 1,
+ ONESHOT_LALT = 2,
+ ONESHOT_LGUI = 3,
+ ONESHOT_RCTL = 4,
+ ONESHOT_RSFT = 5,
+ ONESHOT_RALT = 6,
+ ONESHOT_RGUI = 7,
+ ONESHOT_NONE = 8,
+ ONESHOT_MOD_COUNT = 8,
+} oneshot_mod;
+
+
+// This function should be called inside proces_record_user and does everything needed to get one shot modifiers working.
+// Returns true if the keycode needs further handling, false otherwise.
+int8_t update_oneshot_modifiers(uint16_t keycode, keyrecord_t *record, int8_t keycode_consumed);
+int8_t turnoff_oneshot_modifiers(void);
+
+// TO BE IMPLEMENTED BY THE USER
+// This function should return one of the oneshot_mod enumerations (see keymap.c implementation)
+oneshot_mod get_modifier_for_trigger_key(uint16_t keycode);
+
+// TO BE IMPLEMENTED BY THE USER
+// This function should return true for keycodes that must be ignored in the oneshot modifier behaviour.
+// You probably want to ignore layer keys. Trigger keys don't need to be specified here.
+bool is_oneshot_modifier_ignored_key(uint16_t keycode);
+
+// TO BE IMPLEMENTED BY THE USER
+// This function should return true for keycodes that should reset all oneshot modifiers.
+bool is_oneshot_modifier_cancel_key(uint16_t keycode);
+
+#endif