How to create a keyboard with store(&MnemonicLayout) "1" and also have its key mapping be based off of the Latinoamericano Keyboard


Thank you so much for developing this amazing tool!

I am trying to develop a keyboard with Keyman Developer 16.0.145. When I try to debug, the output is the result of what my keystrokes would output on a standard English keyboard. I get the same result when I compile, install, activate, and test the keyboard. However, my American laptop keyboard and Latinoamericano external keyboard are normally set to Latinoamericano, so the key assignations are different than the American ones.

For example, I have "&" + "c" > "ĉ". But when I hit “Shift” + " “7” + “c” (like the American keyboard) I get "&c ". And when I hit “Shift” + " “6” + “c” (like the Latinoamericano keyboard) I get “^c”. I don’t get “ĉ” as desired.

Here is my complete keyboard:

store(&VERSION) '10.0'
c Un teclado para el uso de los idiomas Quechua y los lingüistas que los investigan.
c Primera versión hecha por Alex Castille Larkin, de SIL International. 
c Grafemas lingüísticas corresponden por lo general con el SIL IPA Keyboard.
store(&NAME) 'Teclado Quechua'
store(&COPYRIGHT) '© SIL'
store(&TARGETS) 'any'
store(&BITMAP) 'teclado_quechua.ico'
store(&VISUALKEYBOARD) 'teclado_quechua.kvks'
store(&LAYOUTFILE) 'teclado_quechua.keyman-touch-layout'
store(&MESSAGE) 'Un teclado para el uso de los idiomas Quechua y los lingüistas que los investigan.'

begin Unicode > use(main)

group(main) using keys

c == Consonantes ==
"´" + "c" > "ć" c primer método para teclados latinoamericanos
"´" + "C" > "Ć" c primer método para teclados latinoamericanos
"`" + "c" > "ć" c segundo método para teclados norteamericanos
"`" + "C" > "Ć" c segundo método para teclados norteamericanos
"|" + "c" > "ć" c tercer método (heredero)
"|" + "C" > "Ć" c tercer  método (heredero)

"&" + "c" > "ĉ" c usamos el "&" ya que el "^" es difícil de teclear en teclados latinoamericanos y el & está en la misma ubicación
"&" + "C" > "Ĉ" c usamos el "&" ya que el "^" es difícil de teclear en teclados latinoamericanos y el & está en la misma ubicación
"%" + "c" > "č"
"%" + "C" > "Č"
"´" + "r" > "ŕ"
"´" + "R" > "Ŕ"
"´" + "s" > "ś"
"´" + "S" > "Ś"
"%" + "s" > "š"
"%" + "S" > "Š"

c == Vocales ==
"´" + "a" > "á"
"´" + "A" > "Á"
"¨" + "a" > "ä"
"¨" + "A" > "Ä"
"´" + "e" > "é"
"´" + "E" > "É"
"¨" + "e" > "ë"
"¨" + "E" > "Ë"
"´" + "i" > "í"
"´" + "I" > "Í"
"¨" + "i" > "ï"
"¨" + "I" > "Ï"
"´" + "o" > "ó"
"´" + "O" > "Ó"
"¨" + "o" > "ö"
"¨" + "O" > "Ö"
"´" + "u" > "ú"
"´" + "U" > "Ú"
"¨" + "u" > "ü"
"¨" + "U" > "Ü"

c == Puntuación ==
c   --> primer método para teclados con < y >
"<" + "<" > "«" 
"«" + "<" > "‹"
">" + ">" > "»"
"»" + ">" > "›"
c  --> segundo método para teclados sin < y >
"(" + "(" > "«"
"«" + "(" > "‹"
")" + ")" > "»"
"»" + ")" > "›"
c  --> teclear el glotal
"´" + "'" > "ꞌ"

c == IPA ==
c ya que en los teclados latinoamericanos el "=" se consigue con "Mayús" + "0", 
c me pregunto si sería mejor usar "+", para así ahorrar una pulsación. Así la 
c "ɑ" se consiguiera con "a" + "+", en vez de "a" + "Mauýs" + "0". 
"]" + "]" > "ʼ"
"a" + "=" > "ɑ"
"a" + "<" > "æ"
"o" + "<" > "ɔ"
"e" + "=" > "ə"
"e" + "<" > "ɛ"
"G" + "=" > "ɢ"
"g" + "=" > "ɣ"
"h" + "&" > "ʰ" c usamos el "&" ya que el "^" es difícil de teclear en teclados latinoamericanos y el & está en la misma ubicación
"i" + "=" > "ɪ"
"n" + "=" > "ɲ"
"f" + "=" > "ɸ"
"s" + "=" > "ʃ"
"u" + "<" > "ʊ"
"L" + "<" > "ʎ"
"b" + "=" > "β"
"t" + "=" > "θ"
"x" + "=" > "χ"

I added the store(&MnemonicLayout) "1" option because I want my rules to work according to the actual output. But I realize that I also want my keyboard’s key mapping to be based on the Latinoamericano keyboard. That must be part of why I can’t get my keyboard to work. How do I specify that?

What do I need to change?

Thanks so much.

Simple answer is that the Keyman Developer Debugger currently only supports US English base layout. Keyman for Windows fully supports mnemonic layouts. Keyman on other platforms only support US English base layout at this point.

So to test, you could install the keyboard into Keyman for Windows first.

Good morning Marc! Thanks so much for the quick answer. I did try installing and it didn’t give me the desired result. It was like I was just using the default English keyboard, without Keyman.

What might I be doing wrong?


P.S. after getting it to work on Windows I also want to configure the Touch Layout and then get an app in the Play Store. I’m not sure if that affects things.

Depending on how different the US English and the Latinoamericano keyboards are, you may (instead of using &MnemonicLayout with one keyboard) want to create two separate keyboards for the different desktop layouts (with corresponding touch layouts). In other words, if users are accustomed to the Latinoamericano touch layout, and the US English one is wildly different, you may not want to be limited to a single touch layout, but would rather have a touch layout that matches the corresponding desktop layout.

Note that &MnemonicLayout is only fully supported on the Windows desktop platform.

Thanks Drowe for weighing in.

Latinoamericano (I think it might actually be called “Latin American” in English) is like US English, but there are many changes to the symbols in the top number row, and on the right side. There is also a Ñ key to the right of the L key, and the < and > are in a single key to the left of Z.

Most of the intended audience of this keyboard will be accustomed to the Latin American keyboard, which is why I feel comfortable giving a single keyboard to both those with US English keyboards and Latin American keyboards.

Do I need to employ other features or functions?

Thanks so much!

Have you tried checking the Base Keyboard setting in Keyman Configuration?

Ah, that’s what I needed to do!

For posterity, in Keyman Configuration (not in Keyman developer) I selected options, scrolled down to the bottom, clicked Base Keyboard, and chose Spanish- Latin American.

Is there no way for the Keyman keyboard to select the base keyboard, or at least prompt the user to change to the base keyboard it was designed for? As it is, it looks like I will have to instruct the users to make the settings change, in addition to installing the keyboard. (I understand that the base keyboard setting applies to all Keyman keyboards installed.)

Again, thanks so much!


Generally, if you want the default keyboard to be changed, then you probably didn’t want to create a a mnemonic keyboard. I maintain separate keyboards for US and AZERTY-based keyboards because they are VERY different, much different than what you describe. We also have to deal with the missing >< key.
If you need them to respond differently, you may want to create a positional layout for both keyboards and you should define anything that should (or shouldn’t) be output. The easiest way to do that is probably to import the Latinamericano keyboard from Windows (Project>New project>Import Import Windows Keyboard) and modify that to add your special characters.

With that said, I don’t know what triggers that Keyman setting to be adjusted when installed on a new machine. Does it read something about the physical keyboard or pick the default that the user chose?

Keyman for Windows detects the Windows keyboard that is installed on the computer at install time.

You could also make a single keyboard that uses the baselayout system store instead of mnemoniclayout to achieve the same result.

Thanks so much @Marc, @drowe, and @Matthew_Lee for weighing in. Based on your feedback I decided to start working on a positional layout based on the Latin American keyboard rather than a mnemonic layout. I’m running into some issues there but I will make a new post for that.