aboutsummaryrefslogtreecommitdiffstats
path: root/users/narze
diff options
context:
space:
mode:
Diffstat (limited to 'users/narze')
-rw-r--r--users/narze/narze.c1
-rw-r--r--users/narze/narze.h9
-rw-r--r--users/narze/readme.md18
-rw-r--r--users/narze/rules.mk5
-rw-r--r--users/narze/superduper.c66
-rw-r--r--users/narze/superduper.h7
6 files changed, 106 insertions, 0 deletions
diff --git a/users/narze/narze.c b/users/narze/narze.c
new file mode 100644
index 000000000..6ec303449
--- /dev/null
+++ b/users/narze/narze.c
@@ -0,0 +1 @@
+#include "narze.h"
diff --git a/users/narze/narze.h b/users/narze/narze.h
new file mode 100644
index 000000000..036539a9c
--- /dev/null
+++ b/users/narze/narze.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "quantum.h"
+#include "eeconfig.h"
+#include "keymap_colemak.h"
+
+#ifdef COMBO_ENABLE
+# include "superduper.h"
+#endif
diff --git a/users/narze/readme.md b/users/narze/readme.md
new file mode 100644
index 000000000..124b84e6b
--- /dev/null
+++ b/users/narze/readme.md
@@ -0,0 +1,18 @@
+# TODO
+- [ ] Make SuperDuper mode fully-compatible in Windows by swapping GUI with Ctrl
+
+# LICENSE
+Copyright 2019 Manassarn Manoonchai manassarn@gmail.com @narze
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/narze/rules.mk b/users/narze/rules.mk
new file mode 100644
index 000000000..565a4a7a6
--- /dev/null
+++ b/users/narze/rules.mk
@@ -0,0 +1,5 @@
+SRC += narze.c
+
+ifeq ($(strip $(COMBO_ENABLE)), yes)
+ SRC += superduper.c
+endif
diff --git a/users/narze/superduper.c b/users/narze/superduper.c
new file mode 100644
index 000000000..b497ce2e6
--- /dev/null
+++ b/users/narze/superduper.c
@@ -0,0 +1,66 @@
+#include "superduper.h"
+#include "eeconfig.h"
+#include "eeprom.h"
+#include "keymap_colemak.h"
+
+// SuperDuper
+
+#define SUPERDUPER_COMBO_COUNT 3
+#define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19
+
+enum process_combo_event {
+ CB_SUPERDUPER,
+};
+
+enum supported_layers {
+ _QWERTY,
+ _COLEMAK,
+ _QWOC
+};
+
+const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
+ [_QWERTY] = {KC_S, KC_D, COMBO_END},
+ [_COLEMAK] = {KC_R, KC_S, COMBO_END},
+ [_QWOC] = {CM_S, CM_D, COMBO_END},
+};
+
+combo_t key_combos[COMBO_COUNT] = {
+ [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
+};
+
+volatile bool superduper_enabled = true;
+
+const uint16_t PROGMEM empty_combo[] = {COMBO_END};
+
+bool toggle_superduper_mode(void) {
+ superduper_enabled = !superduper_enabled;
+
+ if (superduper_enabled) {
+ set_superduper_key_combos();
+ } else {
+ clear_superduper_key_combos();
+ }
+
+ return superduper_enabled;
+}
+
+void set_superduper_key_combo_layer(uint16_t layer) {
+ key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
+ eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer);
+}
+
+void set_superduper_key_combos(void) {
+ uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX);
+
+ switch (layer) {
+ case _QWERTY:
+ case _COLEMAK:
+ case _QWOC:
+ key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
+ break;
+ }
+}
+
+void clear_superduper_key_combos(void) {
+ key_combos[CB_SUPERDUPER].keys = empty_combo;
+}
diff --git a/users/narze/superduper.h b/users/narze/superduper.h
new file mode 100644
index 000000000..f8df2e1af
--- /dev/null
+++ b/users/narze/superduper.h
@@ -0,0 +1,7 @@
+#pragma once
+#include "narze.h"
+
+bool toggle_superduper_mode(void);
+void set_superduper_key_combo_layer(uint16_t layer);
+void set_superduper_key_combos(void);
+void clear_superduper_key_combos(void);