[Keymap] Update to userspace kuchosauroand0 (#6596)
* added combos
* minor adjustments, added combos
* Add second encoder, add modifiers to encoders
Added a skeleton for the possibily having a second encoder.
Added 9 modifiers for the first rotary encoder:
- None
General navigation. Page up/down
- SHIFT
Fast navigation. Home/end
- CTRL
Vertical navigation. Up/down
- CTRL+SHIFT
Horizontal navigation. Left/right
- ALT
Audio volume control.
- GUI
Browser navigation(windows). Forward/backward
- ALT+SHIFT
Form navigation. Tab up/down
- ALT+CTRL
Media control. (Play|pause)/mute
- HYPER
Media navigation. Next/prev track
Key codes are stored in `uint16_t encoder_actions[2][9]`
* Add second encoder, add modifiers to encoders
Added a skeleton for the possibily having a second encoder.
Added 9 modifiers for the first rotary encoder:
- None
General navigation. Page up/down
- SHIFT
Fast navigation. Home/end
- CTRL
Vertical navigation. Up/down
- CTRL+SHIFT
Horizontal navigation. Left/right
- ALT
Audio volume control.
- GUI
Browser navigation(windows). Forward/backward
- ALT+SHIFT
Form navigation. Tab up/down
- ALT+CTRL
Media control. (Play|pause)/mute
- HYPER
Media navigation. Next/prev track
Key codes are stored in `uint16_t encoder_actions[2][9]`
* Clean up; added combos
Combos:
- CV: Copy
- XC: Cut
- ZV: Paste
- QP: KC_SLEEP
* Fix LEADER_DICTIONARY to be more useful
* Add documentation
* Minor fixes
* Raise TAPPING_TERM
* testing
* Rearrange modifiers
* Fix kc being stored in uint8 instead of uint16
* Update documentation
* Clean up
* Remove excess comments
* Put encoder_actions in progmem
Thanks to drashna and everyone else in the qmk_firmware/users/ directory :)
# Overview
## Keyboard Layout Templates
This borrows from @jola5's "Not quite neo" code. This allows me to maintain blocks of keymaps in the userspace, so that I can modify the userspace, and this is reflected in all of the keyboards that use it, at once.
This borrows from [jola5](https://github.com/jola5)'s "Not quite neo" code. The code of the userspace is shared between all keyboards, so that one can maintain functionality of all keyboards at once by modifying a few files in a central location.
This makes adding tap/hold mods, or other special keycodes or functions to all keyboards super easy, as it's done to all of them at once.
@ -14,45 +23,107 @@ The caveat here is that the keymap needs a processor/wrapper, as it doesn't like
Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine.
Credit goes to @jola5 for first implementing this awesome idea.
Credit goes to [jola5](https://github.com/jola5) for first implementing this awesome idea.
## Custom Keycodes
## [Custom Keycodes](#custom-keycodes)
Declared in `process_records.h` and `template.h` and defined in `process_record_user` in template.c
## Tap Dances
Set `TAP_DANCE_ENABLE = yes` in rules.mk. See file tap_dances.{c,h}
## [Tap Dances](#tap-dances)
To enable set `TAP_DANCE_ENABLE = yes` in *rules.mk*. See file *tap_dances.{c,h}*
TODO: Command-line movement stuff is a pain when typing normally
TODO: Make use of `TD_SPC` and `TD_QT{1..3}`
## [Leader Key](#leader-key)
To enable set `LEADER_ENABLE = yes` in file *rules.mk*
|LEADER_DICTIONARY()|program| description |
|---|---|---|
| W |vim/tmux| save file, switch pane and repeat last command |
| T |tmux| send default prefix |
| A |tmux| switch pane|
|T + T|tmux| send default prefix to a nested session |
|T + R|tmux| switch pane and repeat last command |
|V + Z|vim | zoom current split|
|V + R|vim | search and replace|
|V + T|vim | move current split to its own tab|
|3x Backspace|keyboard| Reset Keyboard |
`LEADER_DICTIONARY()` is defined in *leader.c*
## [Combo Keys](#combo-keys)
To enable set `COMBO_ENABLE = yes` in file *rules.mk*.
Number of combos and timeout are defined in *config.h*
Press key chord to use.
|Combo|description |
|---|---|
| CV | Paste |
| XC | Cut |
| ZV | Copy |
| QP | KC_SLEEP |
## Leader Key
Set `LEADER_ENABLE = yes` in rules.mk.
TODO: document tmux / vim / os
Combos are defined in *combo.h* and *combo.c*
## [Unicode](#unicode)
To enable set `UNICODE_ENABLE = yes` or `UNICODEMAP_ENABLE = yes` in file *rules.mk*
## [Encoders](#encoders)
To enable set `ENCODER_ENABLE = yes` in *rules.mk*.
In the keyboard's *config.h* adjust according to your keyboard:
```c
// Example ProMicro
#define ENCODERS_PAD_A { F4 } //PIN A3
#define ENCODERS_PAD_B { F5 } //PIN A2
```
Check the [documentation](https://docs.qmk.fm/#/feature_encoders) for more information
Key codes are stored as `uint16_t encoder_actions[2][9]` in *encoder.c*
## Unicode
TODO: Set `idk` in `idc`
## Diablo Layer
Currently not in use.
[Back to Top](#table-of-contents)
# Secret Macros
Set `NO_SECRETS = yes` in rules.mk.
# [Secret Macros](#secret-macros)
To enable set `NO_SECRETS = yes` in *rules.mk*.
With help from gitter and Colinta, this adds the ability to add hidden macros from other users.
First, I have several files that are hidden/excluded from Git/GitHub. These contain everything needed for the macros. To hide these files, open `.git/info/exclude` and add `secrets.c` and `secrets.h` to that file, below the comments.
First, I have several files that are hidden/excluded from Git/GitHub. These contain everything needed for the macros. To hide these files, open *.git/info/exclude* and add `secrets.c` and `secrets.h` to that file, below the comments.
And this requires `KC_SECRET_1` through `KC_SECRET_5` to be defined in your `<name>.h` file to define the keycodes for the new macros.
And this requires `KC_SECRET_1` through `KC_SECRET_5` to be defined in your *<name>.h* file to define the keycodes for the new macros.
@ -106,7 +177,7 @@ Replacing the strings with the codes that you need.
### name.c
In the `<name>.c` file, you will want to add this to the top:
In the *<name>.c* file, you will want to add this to the top:
```c
__attribute__ ((weak))
@ -126,7 +197,7 @@ And then, in the `process_record_user` function, assuming you have `return proce
### rules.mk
Here, you want your `/users/<name>/rules.mk` file to "detect" the existence of the `secrets.c` file, and only add it if the file exists. To do so, add this block:
Here, you want your */users/<name>/rules.mk* file to "detect" the existence of the *secrets.c* file, and only add it if the file exists. To do so, add this block:
Additionally, if you want to make sure that you can disable the function without messing with the file, you need to add this to your `/users/<name>/rules.mk`, so that it catches the flag:
Additionally, if you want to make sure that you can disable the function without messing with the file, you need to add this to your */users/<name>/rules.mk*, so that it catches the flag: