qmk-keychron-q3-colemak-dh/quantum/keymap_extras/keymap_french_afnor.h
Guillaume Gérard 5f9fb01020
[Keymap Extra] Add French AZERTY (AFNOR - NF Z71-300) (#9644)
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-07-08 19:55:02 +01:00

254 lines
14 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Copyright 2020 Guillaume Gérard
*
* 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/>.
*/
/* French AZERTY - AFNOR NF Z71-300
*
* A standard for the French keyboard
*
* The project was launched at the end of 2015 on the proposal of the General
* Delegation for the French language and the languages of France (Ministry
* of Culture), starting from the observation that the current "azerty"
* keyboards constrain the writing of French, languages regional and European
* languages with Latin alphabet.
*
* For the first time, a standard (NF Z71-300) defines the placement of
* characters on the French keyboard. It offers two layouts, one of which
* closely follows the QWERTY keyboard used by most people who write in French.
*
* However, it is in many ways superior to the old keyboard:
*
* - it contains all the characters required to enter text in French (for example É, œ and ")
* - it is designed to be more ergonomic and allow faster typing
* - it includes almost 60 additional characters for entering foreign languages, technical content, etc
* - however, the characters remain easy to locate thanks to intuitive groupings
*
* Source: https://norme-azerty.fr
*/
#pragma once
#include "keymap.h"
// clang-format off
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ @ │ à │ é │ è │ ê │ ( │ ) │ ‘ │ ’ │ « │ » │ ' │ ^ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │      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_AT KC_GRV // @
#define FR_AGRV KC_1 // à
#define FR_EACU KC_2 // é
#define FR_EGRV KC_3 // è
#define FR_ECIR KC_4 // ê
#define FR_LPRN KC_5 // (
#define FR_RPRN KC_6 // )
#define FR_LSQU KC_7 //
#define FR_RSQU KC_8 //
#define FR_LDAQ KC_9 // «
#define FR_RDAQ KC_0 // »
#define FR_QUOT KC_MINS // '
#define FR_DCIR KC_EQL // ^ (dead)
// 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_MINS KC_LBRC // -
#define FR_PLUS 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_SLSH 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_DOT KC_M // .
#define FR_COMM KC_COMM // ,
#define FR_COLN KC_DOT // :
#define FR_SCLN KC_SLSH // ;
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ #  1  2  3  4  5  6  7  8  9  0  " │ ¨ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │ – │ ± │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │ \ │ ½ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ > │   │   │   │   │   │   │ ? │ ! │ … │ = │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define FR_HASH S(FR_AT) // #
#define FR_1 S(FR_AGRV) // 1
#define FR_2 S(FR_EACU) // 2
#define FR_3 S(FR_EGRV) // 3
#define FR_4 S(FR_ECIR) // 4
#define FR_5 S(FR_LPRN) // 5
#define FR_6 S(FR_RPRN) // 6
#define FR_7 S(FR_LSQU) // 7
#define FR_8 S(FR_RSQU) // 8
#define FR_9 S(FR_LDAQ) // 9
#define FR_0 S(FR_RDAQ) // 0
#define FR_DQUO S(FR_QUOT) // "
#define FR_DIAE S(FR_DCIR) // ¨ (dead)
// Row 2
#define FR_NDSH S(FR_MINS) //
#define FR_PLMN S(FR_PLUS) // ±
// Row 3
#define FR_BSLS S(FR_SLSH) // (backslash)
#define FR_HALF S(FR_ASTR) // ½
// Row 4
#define FR_RABK S(FR_LABK) // >
#define FR_QUES S(FR_DOT) // ?
#define FR_EXLM S(FR_COMM) // !
#define FR_ELLP S(FR_COLN) // …
#define FR_EQL S(FR_SCLN) // =
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ˘ │ § │ ´ │ ` │ & │ [ │ ]  ¯  _      °  ˇ        
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │ æ │ £ │ € │ ® │ { │ } │ ù │ ˙ │ œ │ % │ − │ † │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │ θ │ ß │ $  ¤  µ  Eu│      | │ ∞ │ ÷ │ × │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ ≤ │ ʒ │ © │ ç │ ¸ │ − │ ~ │ ¿ │ ¡ │ · │ ≃ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define FR_BREV ALGR(FR_AT) // ˘ (dead)
#define FR_SECT ALGR(FR_AGRV) // §
#define FR_ACUT ALGR(FR_EACU) // ´ (dead)
#define FR_GRV ALGR(FR_EGRV) // ` (dead)
#define FR_AMPR ALGR(FR_ECIR) // &
#define FR_LBRC ALGR(FR_LPRN) // [
#define FR_RBRC ALGR(FR_RPRN) // ]
#define FR_MACR ALGR(FR_LSQU) // ¯ (dead)
#define FR_UNDS ALGR(FR_RSQU) // _
#define FR_LDQU ALGR(FR_LDAQ) // “
#define FR_RDQU ALGR(FR_RDAQ) // ”
#define FR_DEG ALGR(FR_QUOT) // °
#define FR_CARN ALGR(FR_DCIR) // ˇ (dead)
// Row 2
#define FR_AE ALGR(FR_A) // æ
#define FR_PND ALGR(FR_Z) // £
#define FR_EURO ALGR(FR_E) // €
#define FR_REGD ALGR(FR_R) // ®
#define FR_LCBR ALGR(FR_T) // {
#define FR_RCBR ALGR(FR_Y) // }
#define FR_UGRV ALGR(FR_U) // ù
#define FR_DOTA ALGR(FR_I) // ˙ (dead)
#define FR_OE ALGR(FR_O) // œ
#define FR_PERC ALGR(FR_P) // %
#define FR_MMNS ALGR(FR_MINS) //
#define FR_DAGG ALGR(FR_PLUS) // †
// Row 3
#define FR_THET ALGR(FR_Q) // θ
#define FR_SS ALGR(FR_S) // ß
#define FR_DLR ALGR(FR_D) // $
#define FR_CURR ALGR(FR_F) // ¤ (dead monetary key)
#define FR_DGRK ALGR(FR_G) // µ (dead Greek key)
#define FR_EU ALGR(FR_H) // Eu (dead European symbol key)
#define FR_DSLS ALGR(FR_K) // (dead)
#define FR_PIPE ALGR(FR_L) // |
#define FR_INFN ALGR(FR_M) // ∞
#define FR_DIV ALGR(FR_SLSH) // ÷
#define FR_MUL ALGR(FR_ASTR) // ×
// Row 4
#define FR_LEQL ALGR(FR_LABK) // ≤
#define FR_EZH ALGR(FR_W) // ʒ
#define FR_COPY ALGR(FR_X) // ©
#define FR_CCED ALGR(FR_C) // ç
#define FR_CEDL ALGR(FR_V) // ¸ (dead)
#define FR_DMNS ALGR(FR_B) // (dead)
#define FR_DTIL ALGR(FR_N) // ~ (dead)
#define FR_IQUE ALGR(FR_DOT) // ¿
#define FR_IEXL ALGR(FR_COMM) // ¡
#define FR_MDDT ALGR(FR_COLN) // ·
#define FR_AEQL ALGR(FR_SCLN) // ≃
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │  ̑ │   │   │   │   │ ˝ │  ̏ │   │ — │ ‹ │ › │ ˚ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │ ™ │   │   │  ̣ │   │ ‰ │ ‑ │ ‡ │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │ ˍ │   │   │   │   │ √ │ ¼ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ ≥ │   │   │   │ ˛ │   │   │   │  ̦ │   │ ≠ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define FR_IBRV S(ALGR(FR_AT)) //  ̑ (dead)
#define FR_DACU S(ALGR(FR_LPRN)) // ˝ (dead)
#define FR_DGRV S(ALGR(FR_RPRN)) //  ̏ (dead)
#define FR_MDSH S(ALGR(FR_RSQU)) // —
#define FR_LSAQ S(ALGR(FR_LDAQ)) //
#define FR_RSAQ S(ALGR(FR_RDAQ)) //
#define FR_RNGA S(ALGR(FR_QUOT)) // ˚ (dead)
// Row 2
#define FR_TM S(ALGR(FR_T)) // ™
#define FR_DOTB S(ALGR(FR_I)) //  ̣ (dead)
#define FR_PERM S(ALGR(FR_P)) // ‰
#define FR_NBHY S(ALGR(FR_MINS)) // (non-breaking hyphen)
#define FR_DDAG S(ALGR(FR_PLUS)) // ‡
// Row 3
#define FR_MACB S(ALGR(FR_H)) // ˍ (dead)
#define FR_SQRT S(ALGR(FR_SLSH)) // √
#define FR_QRTR S(ALGR(FR_ASTR)) // ¼
// Row 4
#define FR_GEQL S(ALGR(FR_LABK)) // ≥
#define FR_OGON S(ALGR(FR_V)) // ˛ (dead)
#define FR_DCMM S(ALGR(FR_COMM)) //  ̦ (dead)
#define FR_NEQL S(ALGR(FR_SCLN)) // ≠