Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin e9e4e7bcb6 feat(developer): &CasedKeys system store
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.
2021-03-04 13:41:04 +11:00
.github chore: Enhance PR labeling based on PR title 2021-01-27 16:06:25 +01:00
android chore(android): Check in crowdin files for de 2021-03-03 14:45:53 +07:00
common auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
developer auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
docs chore(linux): Update debian metadata based on Debian repos 2021-01-12 18:38:18 +01:00
ios fix(ios): handling of cases with no welcome.htm 2021-03-03 13:21:49 +07:00
linux Merge pull request #4569 from keymanapp/feat/linux/issue-4542 2021-03-03 14:54:59 +01:00
mac chore(mac): Check in markdown help 2021-02-11 15:02:16 +07:00
oem/firstvoices Merge pull request #4471 from keymanapp/change/oem/fv/ios/use-fv_all-package 2021-02-11 15:50:36 +07:00
resources auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
web auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
windows/src feat(developer): &CasedKeys system store 2021-03-04 13:41:04 +11:00
.editorconfig fix(linux): add more package requirements 2020-02-06 18:26:57 +01:00
.flake8 feat(linux): Install keyboard on Gnome 2020-06-24 19:13:40 +02:00
.gitignore chore(windows): remove obsolete importkeyboard app 2020-12-15 11:20:09 +11:00
configure-repo.sh feat(common): Support git worktree when configuring local hooks 2020-02-24 18:30:57 +01:00
crowdin.yml chore(common): Update crowdin.yml Windows files for fr 2021-02-03 20:40:09 +07:00
HISTORY.md auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
lerna.json auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
linux.code-workspace default platform and baselayout for linux 2018-12-18 15:49:56 +07:00
package-lock.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
package.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
README.md chore: Add localization progress badge 2021-02-04 11:40:34 +07:00
TIER.md chore: update tier 2020-12-15 06:43:19 +11:00
VERSION.md auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00

Keyman

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

Crowdin

Get involved

Development Status on status.keyman.com

Platform Alpha Beta Stable
Windows Alpha Beta Stable
macOS Alpha Beta Stable
Web Alpha Beta Stable
Android Alpha Beta Stable
iOS Alpha Beta Stable
Linux Alpha Beta Stable

Getting Started

Desktop Platforms

Web & Mobile Platforms

Release Types

Each platform maintains multiple types of releases:

  • Stable: A released version. On a stable or stable-<version> branch.
  • Beta: A version that is nearing full "stable" release. On the beta branch.
  • Alpha: Contains the very latest code. These versions are published daily whenever the code changes. On master branch.

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.