Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
652f4492d3 | ||
|
|
910c466cfe | ||
|
|
19dbcf3814 |
No files matched your search
@@ -57,6 +57,12 @@ Must be in keyboard directory with a default keymap, or in keymap directory for
|
|||||||
qmk compile
|
qmk compile
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Usage for building all keyboards that support a specific keymap**:
|
||||||
|
|
||||||
|
```
|
||||||
|
qmk compile -kb all -km <keymap_name>
|
||||||
|
```
|
||||||
|
|
||||||
**Example**:
|
**Example**:
|
||||||
```
|
```
|
||||||
$ qmk config compile.keymap=default
|
$ qmk config compile.keymap=default
|
||||||
|
|||||||
@@ -97,13 +97,25 @@ You'd want to replace the year, name, email and github username with your info.
|
|||||||
|
|
||||||
Additionally, this is a good place to document your code, if you wish to share it with others.
|
Additionally, this is a good place to document your code, if you wish to share it with others.
|
||||||
|
|
||||||
# Examples
|
## Build All Keyboards That Support a Specific Keymap
|
||||||
|
|
||||||
|
Want to check all your keymaps build in a single command? You can run:
|
||||||
|
|
||||||
|
make all:<name>
|
||||||
|
|
||||||
|
For example,
|
||||||
|
|
||||||
|
make all:jack
|
||||||
|
|
||||||
|
This is ideal for when you want ensure everything compiles successfully when preparing a [_Pull request_](https://github.com/qmk/qmk_firmware/pulls).
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
||||||
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace.
|
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace.
|
||||||
|
|
||||||
|
|
||||||
## Customized Functions
|
### Customized Functions
|
||||||
|
|
||||||
QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum`, `_kb`, and `_user` versions](custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap) that you can use. You will pretty much always want to use the user version of these functions. But the problem is that if you use them in your userspace, then you don't have a version that you can use in your keymap.
|
QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum`, `_kb`, and `_user` versions](custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap) that you can use. You will pretty much always want to use the user version of these functions. But the problem is that if you use them in your userspace, then you don't have a version that you can use in your keymap.
|
||||||
|
|
||||||
@@ -130,7 +142,7 @@ The `_keymap` part here doesn't matter, it just needs to be something other than
|
|||||||
|
|
||||||
You can see a list of this and other common functions in [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in [`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
You can see a list of this and other common functions in [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in [`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
||||||
|
|
||||||
## Custom Features
|
### Custom Features
|
||||||
|
|
||||||
Since the Userspace feature can support a staggering number of boards, you may have boards that you want to enable certain functionality for, but not for others. And you can actually create "features" that you can enable or disable in your own userspace.
|
Since the Userspace feature can support a staggering number of boards, you may have boards that you want to enable certain functionality for, but not for others. And you can actually create "features" that you can enable or disable in your own userspace.
|
||||||
|
|
||||||
@@ -166,7 +178,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Consolidated Macros
|
### Consolidated Macros
|
||||||
|
|
||||||
If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. This builds upon the [Customized Functions](#customized-functions) example above. This lets you maintain a bunch of macros that are shared between the different keyboards, and allow for keyboard specific macros, too.
|
If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. This builds upon the [Customized Functions](#customized-functions) example above. This lets you maintain a bunch of macros that are shared between the different keyboards, and allow for keyboard specific macros, too.
|
||||||
|
|
||||||
|
|||||||
@@ -14,61 +14,167 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef KEYMAP_BR_ABNT2_H
|
#pragma once
|
||||||
#define KEYMAP_BR_ABNT2_H
|
|
||||||
|
|
||||||
#include "keymap.h"
|
#include "keymap.h"
|
||||||
|
|
||||||
/* Scan codes for the Brazilian ABNT2 keyboard layout */
|
// clang-format off
|
||||||
|
|
||||||
#define BR_CCDL KC_SCLN // Ç same scancode as ;: on US layout
|
/*
|
||||||
#define BR_SCLN KC_SLSH // ;: same scancode as /? on US layout
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define BR_QUOT KC_GRV // '" same scancode as `~ on US layout
|
* │ ' │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
|
||||||
#define BR_TILD KC_QUOT // ~^ dead keys, same scancode as '" on US layout
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
#define BR_ACUT KC_LBRC // ´` dead keys, same scancode as [{ on US layout
|
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ´ │ [ │ │
|
||||||
#define BR_LBRC KC_RBRC // [{ same scancode as ]} on US layout
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
#define BR_RBRC KC_BSLS // ]} same scancode as \| on US layout
|
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ ~ │ ] │ │
|
||||||
#define BR_BSLS KC_NUBS // \| uses the non-US hash scancode (#~, sometimes §±)
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||||
#define BR_SLSH KC_INT1 // /? uses the INTL1 scancode
|
* │ │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define BR_QUOT KC_GRV // '
|
||||||
|
#define BR_1 KC_1 // 1
|
||||||
|
#define BR_2 KC_2 // 2
|
||||||
|
#define BR_3 KC_3 // 3
|
||||||
|
#define BR_4 KC_4 // 4
|
||||||
|
#define BR_5 KC_5 // 5
|
||||||
|
#define BR_6 KC_6 // 6
|
||||||
|
#define BR_7 KC_7 // 7
|
||||||
|
#define BR_8 KC_8 // 8
|
||||||
|
#define BR_9 KC_9 // 9
|
||||||
|
#define BR_0 KC_0 // 0
|
||||||
|
#define BR_MINS KC_MINS // -
|
||||||
|
#define BR_EQL KC_EQL // =
|
||||||
|
// Row 2
|
||||||
|
#define BR_Q KC_Q // Q
|
||||||
|
#define BR_W KC_W // W
|
||||||
|
#define BR_E KC_E // E
|
||||||
|
#define BR_R KC_R // R
|
||||||
|
#define BR_T KC_T // T
|
||||||
|
#define BR_Y KC_Y // Y
|
||||||
|
#define BR_U KC_U // U
|
||||||
|
#define BR_I KC_I // I
|
||||||
|
#define BR_O KC_O // O
|
||||||
|
#define BR_P KC_P // P
|
||||||
|
#define BR_ACUT KC_LBRC // ´ (dead)
|
||||||
|
#define BR_LBRC KC_RBRC // [
|
||||||
|
// Row 3
|
||||||
|
#define BR_A KC_A // A
|
||||||
|
#define BR_S KC_S // S
|
||||||
|
#define BR_D KC_D // D
|
||||||
|
#define BR_F KC_F // F
|
||||||
|
#define BR_G KC_G // G
|
||||||
|
#define BR_H KC_H // H
|
||||||
|
#define BR_J KC_J // J
|
||||||
|
#define BR_K KC_K // K
|
||||||
|
#define BR_L KC_L // L
|
||||||
|
#define BR_CCED KC_SCLN // Ç
|
||||||
|
#define BR_TILD KC_QUOT // ~ (dead)
|
||||||
|
#define BR_RBRC KC_BSLS // ]
|
||||||
|
// Row 4
|
||||||
|
#define BR_BSLS KC_NUBS // (backslash)
|
||||||
|
#define BR_Z KC_Z // Z
|
||||||
|
#define BR_X KC_X // X
|
||||||
|
#define BR_C KC_C // C
|
||||||
|
#define BR_V KC_V // V
|
||||||
|
#define BR_B KC_B // B
|
||||||
|
#define BR_N KC_N // N
|
||||||
|
#define BR_M KC_M // M
|
||||||
|
#define BR_COMM KC_COMM // ,
|
||||||
|
#define BR_DOT KC_DOT // .
|
||||||
|
#define BR_SCLN KC_SLSH // ;
|
||||||
|
#define BR_SLSH KC_INT1 // /
|
||||||
|
// Numpad
|
||||||
|
#define BR_PDOT KC_PCMM // .
|
||||||
|
#define BR_PCMM KC_PDOT // ,
|
||||||
|
|
||||||
#define BR_COLN LSFT(BR_SCLN) // shifted :
|
/* Shifted symbols
|
||||||
#define BR_DQT LSFT(BR_QUOT) // shifted "
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define BR_CIRC LSFT(BR_TILD) // shifted ^ (dead key)
|
* │ " │ ! │ @ │ # │ $ │ % │ ¨ │ & │ * │ ( │ ) │ _ │ + │ │
|
||||||
#define BR_GRAV LSFT(BR_ACUT) // shifted ` (dead key)
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
#define BR_LCBR LSFT(BR_LBRC) // shifted {
|
* │ │ │ │ │ │ │ │ │ │ │ │ ` │ { │ │
|
||||||
#define BR_RCBR LSFT(BR_RBRC) // shifted }
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
#define BR_PIPE LSFT(BR_BSLS) // shifted |
|
* │ │ │ │ │ │ │ │ │ │ │ │ ^ │ } │ │
|
||||||
#define BR_QUES LSFT(BR_SLSH) // shifted ?
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||||
#define BR_TRMA LSFT(KC_6) // shifted ¨ (dead key - trema accent)
|
* │ │ | │ │ │ │ │ │ │ │ < │ > │ : │ ? │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define BR_DQUO S(BR_QUOT) // "
|
||||||
|
#define BR_EXLM S(BR_1) // !
|
||||||
|
#define BR_AT S(BR_2) // @
|
||||||
|
#define BR_HASH S(BR_3) // #
|
||||||
|
#define BR_DLR S(BR_4) // $
|
||||||
|
#define BR_PERC S(BR_5) // %
|
||||||
|
#define BR_DIAE S(BR_6) // ¨ (dead)
|
||||||
|
#define BR_AMPR S(BR_7) // &
|
||||||
|
#define BR_ASTR S(BR_8) // *
|
||||||
|
#define BR_LPRN S(BR_9) // (
|
||||||
|
#define BR_RPRN S(BR_0) // )
|
||||||
|
#define BR_UNDS S(BR_MINS) // _
|
||||||
|
#define BR_PLUS S(BR_EQL) // +
|
||||||
|
// Row 2
|
||||||
|
#define BR_GRV S(BR_ACUT) // ` (dead)
|
||||||
|
#define BR_LCBR S(BR_LBRC) // {
|
||||||
|
// Row 3
|
||||||
|
#define BR_CIRC S(BR_TILD) // ^ (dead)
|
||||||
|
#define BR_RCBR S(BR_RBRC) // }
|
||||||
|
// Row 4
|
||||||
|
#define BR_PIPE S(BR_BSLS) // |
|
||||||
|
#define BR_LABK S(BR_COMM) // <
|
||||||
|
#define BR_RABK S(BR_DOT) // >
|
||||||
|
#define BR_COLN S(BR_SCLN) // :
|
||||||
|
#define BR_QUES S(BR_SLSH) // ?
|
||||||
|
|
||||||
// On the ABNT2 the keypad comma and the keypad dot scancodes are switched
|
/* AltGr symbols
|
||||||
// (presumably because in Brazil comma is used as the decimal separator)
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define BR_KPDT KC_KP_COMMA // keypad .
|
* │ │ ¹ │ ² │ ³ │ £ │ ¢ │ ¬ │ │ │ │ │ │ § │ │
|
||||||
#define BR_KPCM KC_KP_DOT // keypad ,
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ │ │ ° │ │ │ │ │ │ │ │ │ ª │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ º │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||||
|
* │ │ │ │ │ ₢ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define BR_SUP1 ALGR(BR_1) // ¹
|
||||||
|
#define BR_SUP2 ALGR(BR_2) // ²
|
||||||
|
#define BR_SUP3 ALGR(BR_3) // ³
|
||||||
|
#define BR_PND ALGR(BR_4) // £
|
||||||
|
#define BR_CENT ALGR(BR_5) // ¢
|
||||||
|
#define BR_NOT ALGR(BR_6) // ¬
|
||||||
|
#define BR_SECT ALGR(BR_EQL) // §
|
||||||
|
// Row 2
|
||||||
|
#define BR_DEG ALGR(BR_E) // °
|
||||||
|
#define BR_FORD ALGR(BR_LBRC) // ª
|
||||||
|
// Row 3
|
||||||
|
#define BR_MORD ALGR(BR_RBRC) // º
|
||||||
|
// Row 4
|
||||||
|
#define BR_CRUZ ALGR(BR_C) // ₢
|
||||||
|
|
||||||
#define BR_1UP LALT(KC_1) // 1 superscript ¹ alt+1
|
// DEPRECATED
|
||||||
#define BR_2UP LALT(KC_2) // 2 superscript ² alt+2
|
#define BR_CCDL BR_CCED
|
||||||
#define BR_3UP LALT(KC_3) // 3 superscript ³ alt+3
|
#define BR_DQT BR_DQUO
|
||||||
#define BR_PND LALT(KC_4) // Pound sign £ alt+4
|
#define BR_TRMA BR_DIAE
|
||||||
#define BR_CENT LALT(KC_5) // Cent sign ¢ alt+5
|
#define BR_GRAV BR_GRV
|
||||||
#define BR_NOT LALT(KC_6) // Not sign ¬ alt+6
|
#define BR_KPDT BR_PDOT
|
||||||
#define BR_SECT LALT(KC_EQL) // Section sign § alt+=
|
#define BR_KPCM BR_PCMM
|
||||||
#define BR_FORD LALT(BR_LBRC) // Feminine Ordinal Sign ª alt+[
|
#define BR_1UP BR_SUP1
|
||||||
#define BR_MORD LALT(BR_RBRC) // Masculine Ordinal Sign º alt+]
|
#define BR_2UP BR_SUP2
|
||||||
#define BR_DGRE LALT(BR_SLSH) // Degree sign ° alt+/
|
#define BR_3UP BR_SUP3
|
||||||
|
#define BR_ASLS BR_SLSH
|
||||||
|
#define BR_AQST BR_QUES
|
||||||
|
|
||||||
#define BR_EURO LALT(KC_E) // Euro sign € alt+e
|
// Not present on Windows 10?
|
||||||
#define BR_NDTD LALT(BR_TILD) // Non-dead key tilde ~ alt+~
|
#define BR_NDTD ALGR(BR_TILD) // ~
|
||||||
#define BR_NDAC LALT(BR_ACUT) // Non-dead key acute accent ´ alt+´
|
#define BR_NDAC ALGR(BR_ACUT) // ´
|
||||||
#define BR_NDGV LALT(BR_QUOT) // Non-dead key grave accent ` alt+'
|
#define BR_NDGV ALGR(BR_QUOT) // `
|
||||||
#define BR_NDCR LALT(BR_CIRC) // Non-dead key circumflex accent ^ alt+^ (alt+shift+~)
|
#define BR_NDCR ALGR(BR_CIRC) // ^
|
||||||
#define BR_NDTR LALT(BR_TRMA) // Non-dead key trema accent ¨ alt+¨ (alt+shift+6)
|
#define BR_NDTR ALGR(BR_DIAE) // ¨
|
||||||
|
|
||||||
// For 101-key keyboard layouts, the ABNT2 layout allows
|
|
||||||
// the slash and question mark to be typed using alt+q and alt+w.
|
|
||||||
// The shortcuts are provided here for completeness' sake,
|
|
||||||
// but it's recommended to use BR_SLSH and BR_QUES instead
|
|
||||||
#define BR_ASLS LALT(KC_Q)
|
|
||||||
#define BR_AQST LALT(KC_W)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -13,82 +13,153 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#ifndef KEYMAP_FRENCH_H
|
|
||||||
#define KEYMAP_FRENCH_H
|
#pragma once
|
||||||
|
|
||||||
#include "keymap.h"
|
#include "keymap.h"
|
||||||
|
|
||||||
// Normal characters
|
// clang-format off
|
||||||
#define FR_SUP2 KC_GRV
|
|
||||||
#define FR_AMP KC_1
|
|
||||||
#define FR_EACU KC_2
|
|
||||||
#define FR_QUOT KC_3
|
|
||||||
#define FR_APOS KC_4
|
|
||||||
#define FR_LPRN KC_5
|
|
||||||
#define FR_MINS KC_6
|
|
||||||
#define FR_EGRV KC_7
|
|
||||||
#define FR_UNDS KC_8
|
|
||||||
#define FR_CCED KC_9
|
|
||||||
#define FR_AGRV KC_0
|
|
||||||
#define FR_RPRN KC_MINS
|
|
||||||
#define FR_EQL KC_EQL
|
|
||||||
|
|
||||||
#define FR_A KC_Q
|
/*
|
||||||
#define FR_Z KC_W
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define FR_CIRC KC_LBRC
|
* │ ² │ & │ é │ " │ ' │ ( │ - │ è │ _ │ ç │ à │ ) │ = │ │
|
||||||
#define FR_DLR KC_RBRC
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ * │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ ! │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define FR_SUP2 KC_GRV // ²
|
||||||
|
#define FR_AMPR KC_1 // &
|
||||||
|
#define FR_EACU KC_2 // é
|
||||||
|
#define FR_DQUO KC_3 // "
|
||||||
|
#define FR_QUOT KC_4 // '
|
||||||
|
#define FR_LPRN KC_5 // (
|
||||||
|
#define FR_MINS KC_6 // -
|
||||||
|
#define FR_EGRV KC_7 // è
|
||||||
|
#define FR_UNDS KC_8 // _
|
||||||
|
#define FR_CCED KC_9 // ç
|
||||||
|
#define FR_AGRV KC_0 // à
|
||||||
|
#define FR_RPRN KC_MINS // )
|
||||||
|
#define FR_EQL KC_EQL // =
|
||||||
|
// Row 2
|
||||||
|
#define FR_A KC_Q // A
|
||||||
|
#define FR_Z KC_W // Z
|
||||||
|
#define FR_E KC_E // E
|
||||||
|
#define FR_R KC_R // R
|
||||||
|
#define FR_T KC_T // T
|
||||||
|
#define FR_Y KC_Y // Y
|
||||||
|
#define FR_U KC_U // U
|
||||||
|
#define FR_I KC_I // I
|
||||||
|
#define FR_O KC_O // O
|
||||||
|
#define FR_P KC_P // P
|
||||||
|
#define FR_CIRC KC_LBRC // ^ (dead)
|
||||||
|
#define FR_DLR KC_RBRC // $
|
||||||
|
// Row 3
|
||||||
|
#define FR_Q KC_A // Q
|
||||||
|
#define FR_S KC_S // S
|
||||||
|
#define FR_D KC_D // D
|
||||||
|
#define FR_F KC_F // F
|
||||||
|
#define FR_G KC_G // G
|
||||||
|
#define FR_H KC_H // H
|
||||||
|
#define FR_J KC_J // J
|
||||||
|
#define FR_K KC_K // K
|
||||||
|
#define FR_L KC_L // L
|
||||||
|
#define FR_M KC_SCLN // M
|
||||||
|
#define FR_UGRV KC_QUOT // ù
|
||||||
|
#define FR_ASTR KC_NUHS // *
|
||||||
|
// Row 4
|
||||||
|
#define FR_LABK KC_NUBS // <
|
||||||
|
#define FR_W KC_Z // W
|
||||||
|
#define FR_X KC_X // X
|
||||||
|
#define FR_C KC_C // C
|
||||||
|
#define FR_V KC_V // V
|
||||||
|
#define FR_B KC_B // B
|
||||||
|
#define FR_N KC_N // N
|
||||||
|
#define FR_COMM KC_M // ,
|
||||||
|
#define FR_SCLN KC_COMM // ;
|
||||||
|
#define FR_COLN KC_DOT // :
|
||||||
|
#define FR_EXLM KC_SLSH // !
|
||||||
|
|
||||||
#define FR_Q KC_A
|
/* Shifted symbols
|
||||||
#define FR_M KC_SCLN
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define FR_UGRV KC_QUOT
|
* │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ + │ │
|
||||||
#define FR_ASTR KC_NUHS
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ £ │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ % │ µ │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ > │ │ │ │ │ │ │ ? │ . │ / │ § │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define FR_1 S(FR_AMPR) // 1
|
||||||
|
#define FR_2 S(FR_EACU) // 2
|
||||||
|
#define FR_3 S(FR_DQUO) // 3
|
||||||
|
#define FR_4 S(FR_QUOT) // 4
|
||||||
|
#define FR_5 S(FR_LPRN) // 5
|
||||||
|
#define FR_6 S(FR_MINS) // 6
|
||||||
|
#define FR_7 S(FR_EGRV) // 7
|
||||||
|
#define FR_8 S(FR_UNDS) // 8
|
||||||
|
#define FR_9 S(FR_CCED) // 9
|
||||||
|
#define FR_0 S(FR_AGRV) // 0
|
||||||
|
#define FR_DEG S(FR_RPRN) // °
|
||||||
|
#define FR_PLUS S(FR_EQL) // +
|
||||||
|
// Row 2
|
||||||
|
#define FR_DIAE S(FR_CIRC) // ¨ (dead)
|
||||||
|
#define FR_PND S(FR_DLR) // £
|
||||||
|
// Row 3
|
||||||
|
#define FR_PERC S(FR_UGRV) // %
|
||||||
|
#define FR_MICR S(FR_ASTR) // µ
|
||||||
|
// Row 4
|
||||||
|
#define FR_RABK S(FR_LABK) // >
|
||||||
|
#define FR_QUES S(FR_COMM) // ?
|
||||||
|
#define FR_DOT S(FR_SCLN) // .
|
||||||
|
#define FR_SLSH S(FR_COLN) // /
|
||||||
|
#define FR_SECT S(FR_EXLM) // §
|
||||||
|
|
||||||
#define FR_LESS KC_NUBS
|
/* AltGr symbols
|
||||||
#define FR_W KC_Z
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
#define FR_COMM KC_M
|
* │ │ │ ~ │ # │ { │ [ │ | │ ` │ \ │ │ @ │ ] │ } │ │
|
||||||
#define FR_SCLN KC_COMM
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
#define FR_COLN KC_DOT
|
* │ │ │ │ € │ │ │ │ │ │ │ │ │ ¤ │ │
|
||||||
#define FR_EXLM KC_SLSH
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
// Row 1
|
||||||
|
#define FR_TILD ALGR(FR_EACU) // ~ (dead)
|
||||||
|
#define FR_HASH ALGR(FR_DQUO) // #
|
||||||
|
#define FR_LCBR ALGR(FR_QUOT) // {
|
||||||
|
#define FR_LBRC ALGR(FR_LPRN) // [
|
||||||
|
#define FR_PIPE ALGR(FR_MINS) // |
|
||||||
|
#define FR_GRV ALGR(FR_EGRV) // ` (dead)
|
||||||
|
#define FR_BSLS ALGR(FR_UNDS) // (backslash)
|
||||||
|
#define FR_AT ALGR(FR_AGRV) // @
|
||||||
|
#define FR_RBRC ALGR(FR_RPRN) // ]
|
||||||
|
#define FR_RCBR ALGR(FR_EQL) // }
|
||||||
|
// Row 2
|
||||||
|
#define FR_EURO ALGR(KC_E) // €
|
||||||
|
#define FR_CURR ALGR(FR_DLR) // ¤
|
||||||
|
|
||||||
// Shifted characters
|
// DEPRECATED
|
||||||
#define FR_1 LSFT(KC_1)
|
#define FR_AMP FR_AMPR
|
||||||
#define FR_2 LSFT(KC_2)
|
#define FR_APOS FR_QUOT
|
||||||
#define FR_3 LSFT(KC_3)
|
#define FR_LESS FR_LABK
|
||||||
#define FR_4 LSFT(KC_4)
|
#define FR_OVRR FR_DEG
|
||||||
#define FR_5 LSFT(KC_5)
|
#define FR_UMLT FR_DIAE
|
||||||
#define FR_6 LSFT(KC_6)
|
#define FR_MU FR_MICR
|
||||||
#define FR_7 LSFT(KC_7)
|
#define FR_GRTR FR_RABK
|
||||||
#define FR_8 LSFT(KC_8)
|
#define FR_CCIRC FR_CIRC
|
||||||
#define FR_9 LSFT(KC_9)
|
#define FR_BULT FR_CURR
|
||||||
#define FR_0 LSFT(KC_0)
|
|
||||||
#define FR_OVRR LSFT(FR_RPRN)
|
|
||||||
#define FR_PLUS LSFT(FR_EQL)
|
|
||||||
|
|
||||||
#define FR_UMLT LSFT(FR_CIRC)
|
|
||||||
#define FR_PND LSFT(FR_DLR)
|
|
||||||
#define FR_PERC LSFT(FR_UGRV)
|
|
||||||
#define FR_MU LSFT(FR_ASTR)
|
|
||||||
|
|
||||||
#define FR_GRTR LSFT(FR_LESS)
|
|
||||||
#define FR_QUES LSFT(FR_COMM)
|
|
||||||
#define FR_DOT LSFT(FR_SCLN)
|
|
||||||
#define FR_SLSH LSFT(FR_COLN)
|
|
||||||
#define FR_SECT LSFT(FR_EXLM)
|
|
||||||
|
|
||||||
// Alt Gr-ed characters
|
|
||||||
#define FR_TILD ALGR(KC_2)
|
|
||||||
#define FR_HASH ALGR(KC_3)
|
|
||||||
#define FR_LCBR ALGR(KC_4)
|
|
||||||
#define FR_LBRC ALGR(KC_5)
|
|
||||||
#define FR_PIPE ALGR(KC_6)
|
|
||||||
#define FR_GRV ALGR(KC_7)
|
|
||||||
#define FR_BSLS ALGR(KC_8)
|
|
||||||
#define FR_CCIRC ALGR(KC_9)
|
|
||||||
#define FR_AT ALGR(KC_0)
|
|
||||||
#define FR_RBRC ALGR(FR_RPRN)
|
|
||||||
#define FR_RCBR ALGR(FR_EQL)
|
|
||||||
|
|
||||||
#define FR_EURO ALGR(KC_E)
|
|
||||||
#define FR_BULT ALGR(FR_DLR)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
/* Copyright 2020
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Sendstring lookup tables for Brazilian (ABNT2) layouts
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "keymap_br_abnt2.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
|
const uint8_t ascii_to_shift_lut[16] PROGMEM = {
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
|
||||||
|
KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 0),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
|
||||||
|
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
|
||||||
|
// NUL SOH STX ETX EOT ENQ ACK BEL
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// BS TAB LF VT FF CR SO SI
|
||||||
|
KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
// CAN EM SUB ESC FS GS RS US
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
|
||||||
|
// ! " # $ % & '
|
||||||
|
KC_SPC, BR_1, BR_QUOT, BR_3, BR_4, BR_5, BR_7, BR_QUOT,
|
||||||
|
// ( ) * + , - . /
|
||||||
|
BR_9, BR_0, BR_8, BR_EQL, BR_COMM, BR_MINS, BR_DOT, BR_SLSH,
|
||||||
|
// 0 1 2 3 4 5 6 7
|
||||||
|
BR_0, BR_1, BR_2, BR_3, BR_4, BR_5, BR_6, BR_7,
|
||||||
|
// 8 9 : ; < = > ?
|
||||||
|
BR_8, BR_9, BR_SCLN, BR_SCLN, BR_COMM, BR_EQL, BR_DOT, BR_SLSH,
|
||||||
|
// @ A B C D E F G
|
||||||
|
BR_2, BR_A, BR_B, BR_C, BR_D, BR_E, BR_F, BR_G,
|
||||||
|
// H I J K L M N O
|
||||||
|
BR_H, BR_I, BR_J, BR_K, BR_L, BR_M, BR_N, BR_O,
|
||||||
|
// P Q R S T U V W
|
||||||
|
BR_P, BR_Q, BR_R, BR_S, BR_T, BR_U, BR_V, BR_W,
|
||||||
|
// X Y Z [ \ ] ^ _
|
||||||
|
BR_X, BR_Y, BR_Z, BR_LBRC, BR_BSLS, BR_RBRC, BR_TILD, BR_MINS,
|
||||||
|
// ` a b c d e f g
|
||||||
|
BR_ACUT, BR_A, BR_B, BR_C, BR_D, BR_E, BR_F, BR_G,
|
||||||
|
// h i j k l m n o
|
||||||
|
BR_H, BR_I, BR_J, BR_K, BR_L, BR_M, BR_N, BR_O,
|
||||||
|
// p q r s t u v w
|
||||||
|
BR_P, BR_Q, BR_R, BR_S, BR_T, BR_U, BR_V, BR_W,
|
||||||
|
// x y z { | } ~ DEL
|
||||||
|
BR_X, BR_Y, BR_Z, BR_LBRC, BR_BSLS, BR_RBRC, BR_TILD, KC_DEL
|
||||||
|
};
|
||||||
@@ -40,7 +40,7 @@ const uint8_t ascii_to_shift_lut[16] PROGMEM = {
|
|||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
|
const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
|
||||||
@@ -60,7 +60,7 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
|
|||||||
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
|
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
|
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
|
||||||
@@ -74,27 +74,27 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
|
|||||||
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
|
||||||
// ! " # $ % & '
|
// ! " # $ % & '
|
||||||
KC_SPC, FR_EXLM, FR_QUOT, FR_QUOT, FR_DLR, FR_UGRV, FR_AMP, FR_APOS,
|
KC_SPC, FR_EXLM, FR_QUOT, FR_DQUO, FR_DLR, FR_UGRV, FR_AMP, FR_QUOT,
|
||||||
// ( ) * + , - . /
|
// ( ) * + , - . /
|
||||||
FR_LPRN, FR_RPRN, FR_ASTR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
|
FR_LPRN, FR_RPRN, FR_ASTR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
|
||||||
// 0 1 2 3 4 5 6 7
|
// 0 1 2 3 4 5 6 7
|
||||||
FR_AGRV, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, FR_MINS, FR_EGRV,
|
FR_AGRV, FR_AMPR, FR_EACU, FR_DQUO, FR_QUOT, FR_LPRN, FR_MINS, FR_EGRV,
|
||||||
// 8 9 : ; < = > ?
|
// 8 9 : ; < = > ?
|
||||||
FR_CCED, FR_AGRV, FR_COLN, FR_SCLN, FR_LESS, FR_EQL, FR_LESS, FR_COMM,
|
FR_CCED, FR_AGRV, FR_COLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_COMM,
|
||||||
// @ A B C D E F G
|
// @ A B C D E F G
|
||||||
FR_AGRV, FR_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
|
FR_AGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
|
||||||
// H I J K L M N O
|
// H I J K L M N O
|
||||||
KC_H, KC_I, KC_J, KC_K, KC_L, FR_M, KC_N, KC_O,
|
FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
|
||||||
// P Q R S T U V W
|
// P Q R S T U V W
|
||||||
KC_P, FR_Q, KC_R, KC_S, KC_T, KC_U, KC_V, FR_W,
|
FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
|
||||||
// X Y Z [ \ ] ^ _
|
// X Y Z [ \ ] ^ _
|
||||||
KC_X, KC_Y, FR_Z, FR_LPRN, FR_UNDS, FR_RPRN, FR_CCED, FR_UNDS,
|
FR_X, FR_Y, FR_Z, FR_LPRN, FR_UNDS, FR_RPRN, FR_CCED, FR_UNDS,
|
||||||
// ` a b c d e f g
|
// ` a b c d e f g
|
||||||
FR_EGRV, FR_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
|
FR_EGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
|
||||||
// h i j k l m n o
|
// h i j k l m n o
|
||||||
KC_H, KC_I, KC_J, KC_K, KC_L, FR_M, KC_N, KC_O,
|
FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
|
||||||
// p q r s t u v w
|
// p q r s t u v w
|
||||||
KC_P, FR_Q, KC_R, KC_S, KC_T, KC_U, KC_V, FR_W,
|
FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
|
||||||
// x y z { | } ~ DEL
|
// x y z { | } ~ DEL
|
||||||
KC_X, KC_Y, FR_Z, FR_APOS, FR_MINS, FR_EQL, FR_EACU, KC_DEL
|
FR_X, FR_Y, FR_Z, FR_QUOT, FR_MINS, FR_EQL, FR_EACU, KC_DEL
|
||||||
};
|
};
|
||||||
Reference in new issue
Block a user