OneDeadKey / kalamine

Keyboard Layout Maker
MIT License
113 stars 29 forks source link

Generating bepo layout generates `Exception: Too many OEM keys` #175

Closed gagath closed 1 week ago

gagath commented 6 months ago

This seems to be related to the klc Windows generator. When building the Linux files only, the program exits successfully:

$ kalamine build bepo.toml
... dist/custom.ahk
Traceback (most recent call last):
  File "$HOME/kalamine/venv/bin/kalamine", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/kalamine/cli.py", line 137, in build
    build_all(layout, Path("dist"))
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/kalamine/cli.py", line 73, in build_all
    file.write(klc.klc(layout))
               ^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/kalamine/generators/klc.py", line 384, in klc
    out = substitute_lines(out, "LAYOUT",         klc_keymap(layout))
                                                  ^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/kalamine/generators/klc.py", line 139, in klc_keymap
    virtual_key = klc_virtual_key(layout, symbols, scan_code)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "$HOME/kalamine/venv/lib/python3.12/site-packages/kalamine/generators/klc.py", line 91, in klc_virtual_key
    raise Exception("Too many OEM keys")
Exception: Too many OEM keys

The used bepo.toml attached: bepo.toml.txt

Suggestion: the error should be fixed, or at least a clear error message with actionable explanation should be displayed.

Ced-C commented 6 months ago

Same issue when trying to generate driver for the latest version of Bépolar:

base = ''' ╭╌╌╌╌╌┰─────┬─────┬─────┬─────┬─────┰─────┬─────┬─────┬─────┬─────┰╌╌╌╌╌┬╌╌╌╌╌╮ ┆ ¬ ┃ # │ « “ │ » ” │ ( „ │ ) ‘ ┃ @ │ + ÷ │ ^ˇ │ / | │ × ┃µ ┆ § ¶ ┆ ┆ ~~ ┃ 1 & │ 2 < │ 3 > │ 4 ( │ 5 ) ┃ 6 @ │ 7 ± │ 8^ │ 9 \ │ 0 ° ┃ = ≠ ┆ % ‰ ┆ ╰╌╌╌╌╌╂─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┼╌╌╌╌╌┤ · ┃ B │ M │ P │ O │ W ┃ Z │ V │ D │ L │ J ┃ { ┆ } ┆ · ┃ â │ û │ î │ ô │ œ ┃ │ ŭ │ ( │ ) │ ) ┃ [ ┆ ] ┆ · ┠─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┼╌╌╌╌╌┤ · ┃ A │ U │ I │ E │ ; ┃ C │ T │ S │ R │ N ┃ " ┆ €¤ ┆ · ┃ à │ ù │ é │ è │ , ê ┃ ç │ ™ │ ß │ ® │ ñ ┃ ' ` ┆ $ ¢ ┆ ╭╌╌╌╌╌╂─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┴╌╌╌╌╌╯ ┆ \ ¦ ┃ ! ¡ │ Y │ X │ : · │ K ┃ ? ¿ │ Q │ G │ H │ F ┃ · ┆ / | ┃ - — │ ŷ │ _ │ . … │ æ ┃***¨ │ – │ µ │ © │ ‑ ┃ · ╰╌╌╌╌╌┸─────┴─────┴─────┴─────┴─────┸─────┴─────┴─────┴─────┴─────┚ · · · · · · '''

altgr = ''' ╭╌╌╌╌╌┰─────┬─────┬─────┬─────┬─────┰─────┬─────┬─────┬─────┬─────┰╌╌╌╌╌┬╌╌╌╌╌╮ ┆ ┃ ¹ │ ² │ ³ │ ⁴ │ ⁵ ┃ ⁶ │ ⁷ │ ⁸ │ ⁹ │ ⁰ ┃ ┆ ┆ ┆ ┃ ₁ │ ₂ │ ₃ │ ₄ │ ₅ ┃ ₆ │ ₇ │ ₈ │ ₉ │ ₀ ┃ ┆ ┆ ╰╌╌╌╌╌╂─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┼╌╌╌╌╌┤ · ┃ ^ │ ≤ │ ≥ │ ¤ │ ‰ ┃ ˚ │ │ × │ ´ │ ` ┃ ┆ ┆ · ┃ ^ │ < │ > │ $ │ % ┃ @ │ & │ │ ' │ ` ┃ ┆ ┆ · ┠─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┼╌╌╌╌╌┤ · ┃ ˇ │ │ │ ˙ │ ≠ ┃ / │ ± │ ¯ │ ÷ │ ” ┃ ┆ ┆ · ┃ { │ ( │ ) │ } │ = ┃ \ │ + │ - │ / │ " ┃ ´ ┆ ┆ ╭╌╌╌╌╌╂─────┼─────┼─────┼─────┼─────╂─────┼─────┼─────┼─────┼─────╂╌╌╌╌╌┴╌╌╌╌╌╯ ┆ ┃ ~ │ , │ ˛ │ – │ ┃ ¦ │ ¬ │ ¸ │ : │ *˘ ┃ · ┆ ┃ ~ │ [ │ ] │ _ │ # ┃ | │ ! │ ; │ : │ ? ┃ · ╰╌╌╌╌╌┸─────┴─────┴─────┴─────┴─────┸─────┴─────┴─────┴─────┴─────┚ · · · · · · '''

[spacebar] shift = "\u202f" # NARROW NO-BREAK SPACE altgr = "\u0020" # SPACE altgr_shift = "\u00a0" # NO-BREAK SPACE 1dk = "\u2019" # RIGHT SINGLE QUOTATION MARK 1dk_shift = "\u2019" # RIGHT SINGLE QUOTATION MARK


using kalamine V**0.36**
Geobert commented 6 months ago

on both instances, removal of the 2 leading spaces on each line of base description fixes the issue

we need to bullet proof the parser

Geobert commented 2 weeks ago

@adrienm7 can I have your toml please? did you tried https://github.com/OneDeadKey/kalamine/issues/175#issuecomment-2143433366 ?

adrienm7 commented 2 weeks ago

@adrienm7 can I have your toml please? did you tried #175 (comment) ?

hyper_1dk.txt

Le fichier suivant compile bien, mais a 9 caractères pour le nom généré. Modifier le name8 en supprimant l’underscore génère l’erreur. Extension .txt a renommer en .toml

Geobert commented 1 week ago

@adrienm7 can I have your toml please? did you tried #175 (comment) ?

hyper_1dk.txt

Le fichier suivant compile bien, mais a 9 caractères pour le nom généré. Modifier le name8 en supprimant l’underscore génère l’erreur. Extension .txt a renommer en .toml

Le soucis est qu’il ya des touches sans rien. Du coup je ne sais pas quel VK mettre et par défaut, on met VK_OEM_ mais on est limité a 9 maxi et elles sont utilisée pour d’autre

adrienm7 commented 1 week ago

C’est donc peut-être ça la raison, qu’il faut remplir chaque touche même si elle est en 6e et 7e colonne. Ce qui est étrange est que cela build apparemment sans problème avec ces touches vides, et que c’est la changement du name8 qui casse tout. Peut-être qu’avant, comme mon name8 était > 8 caractères, une étape de compilation n’était pas lancée, et que quand on renomme en 8 caractères non, et que seulement là le compilateur a l’erreur de trop de touches vides.

Geobert commented 1 week ago

Je crois que je sors dès que je vois que > 8 pour Windows oui