[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.
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.
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
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
## Diablo Layer
Currently not in use.
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.
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
### 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
```c
__attribute__ ((weak))
__attribute__ ((weak))
@ -126,7 +197,7 @@ And then, in the `process_record_user` function, assuming you have `return proce
### rules.mk
### 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: