Fixes #2241. The `&CasedKeys` system store is a compiler feature that reduces the repetitive nature of keyboard rules for `CAPS` and `NCAPS`. The `&CasedKeys` system store defines a list of virtual keys for which 'normal' Caps Lock rules apply. This store has no default value, for backward compatibility. Once this store is defined, then you can define just the unshifted and shifted versions of a rule, and Keyman Developer will synthesize the `CAPS` and `NCAPS` versions of the rule. For example, you may have the following rules: ``` store(&CasedKeys) [K_A] + [K_A] > 'α' + [SHIFT K_A] > 'Α' ``` These would be replaced by the compiler with: ``` store(&CasedKeys) [K_A] + [NCAPS K_A] > 'α' + [SHIFT CAPS K_A] > 'α' + [CAPS K_A] > 'Α' + [SHIFT NCAPS K_A] > 'Α' ``` You can also use this functionality with characters in the key part of the rule: ``` store(&CasedKeys) 'a'..'c' + 'a' > 'α' + 'A' > 'Α' ``` and the compiled expansion would be similar: ``` store(&CasedKeys) [K_A] [K_B] [K_C] + [NCAPS K_A] > 'α' + [SHIFT CAPS K_A] > 'α' + [CAPS K_A] > 'Α' + [SHIFT NCAPS K_A] > 'Α' ``` This feature is backwardly compatible with Keyman 6.0, as it is entirely implemented in the compiler. This feature is not compatible with mnemonic layouts, and the keys defined in the `&CasedKeys` store must be the unshifted base keys as found on a US English keyboard, or you can use ISO9995 identifiers if you prefer. If you define a rule where you specify either `NCAPS` or `CAPS`, for a key found in the store, then no change will be made to that rule. You can also continue to define rules which use `NCAPS` or `CAPS` for keys not found in the store. As a side-benefit, this allows the visual designer to be used and support Caps Lock, although at this stage, the `&CasedKeys` store is not surfaced in the visual designer. |
||
|---|---|---|
| .github | ||
| android | ||
| common | ||
| developer | ||
| docs | ||
| ios | ||
| linux | ||
| mac | ||
| oem/firstvoices | ||
| resources | ||
| web | ||
| windows/src | ||
| .editorconfig | ||
| .flake8 | ||
| .gitignore | ||
| configure-repo.sh | ||
| crowdin.yml | ||
| HISTORY.md | ||
| lerna.json | ||
| linux.code-workspace | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| TIER.md | ||
| VERSION.md | ||
Keyman makes it possible for you to type in any language on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. Create keyboard layouts with Keyman Developer and share them with the community in the keyboards repository. The Keyman Community have already contributed keyboard layouts for over 1,500 languages!
Keyman is an open source project distributed under the MIT license.
Get Involved
Development Status on status.keyman.com
| Platform | Alpha | Beta | Stable |
|---|---|---|---|
| Windows | |||
| macOS | |||
| Web | |||
| Android | |||
| iOS | |||
| Linux |
Getting Started
Desktop Platforms
Web & Mobile Platforms
Release Types
Each platform maintains multiple types of releases:
- Stable: A released version. On a
stableorstable-<version>branch. - Beta: A version that is nearing full "stable" release. On the
betabranch. - Alpha: Contains the very latest code. These versions are published daily whenever the code changes. On
masterbranch.
License
Copyright (c) 2018-2021 SIL International. All rights reserved.
Licensed under the MIT License.
Keyman for Linux is licensed under the MIT License apart from ibus-kmfl which is licensed under 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.
Notes for Contributors
When cloning this repo for local development on a Windows machine, take care not to place it overly deep in your file system.
Some of the paths for compilation can push character lengths around 160 characters long, while certain operations on Windows systems may be limited to paths of 260 characters or less.
For example, git clean on Windows with msys is limited due to dependence on older Windows APIs.
