Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin 39b7c882a3 feat(developer): Multi-process model for projects 🦕
This is a bit of an omnibus commit, apologies for that. This commit
moves Keyman Developer to a proper multi-process model, where editing
files from multiple projects is handled much more cleanly, with each
project loaded in a separate process.

Files that are edited outside of a project structure are loaded into a
'temporary project' in a single process, which provides a pathway for
existing users who may have legacy files outside the normal Keyman
Developer project model.

There are several components to this:

1. Inter-process communication (Multiprocess, CopyDataHelper units and
   multiprocess test project). These modules establish a method of
   enumerating running Keyman Developer instances (with EnumWindow),
   recording relevant metadata for each instance (by thread id) in the
   registry (registry used because it manages contention without
   additional effort from us), and communicating between processes with
   WM_COPYDATA.
2. Command-line parsing (TikeCommandLine). Determines project ownership
   (ProjectOwningFile) for each filename passed on the command-line, and
   passes these over to existing instances of Keyman Developer that have
   that project loaded, or starts new instances as needed.
3. Temporary project management. Mostly in ProjectUI.

Also, moved GlobalProjectStateWnd management out of ProjectFile.pas and
into Project.pas, alongside other global project variables.

A follow-up will add functionality to determine if a file opened within
the Keyman Developer UI should open in the same instance or in a
separate instance (see TfrmKeymanDeveloper.OpenFileInProject). This will
use the same methodology as TikeCommandLine does now, so may involve
further refactoring.

This commit establishes the idea of 'keyman.kpj' as a future default
filename for Keyman Developer projects, but does not enable it, in
ProjectOwningFile. It is planned to introduce this fixed filename in
version 18.0 (see #10113).
2023-12-01 11:48:09 +07:00
.github chore(linux): Address code review comments 2023-11-13 18:14:55 +01:00
android chore(android/engine): Revert build.sh 2023-11-15 06:30:36 +07:00
common feat(developer): Multi-process model for projects 🦕 2023-12-01 11:48:09 +07:00
core feat(common): dx: fix cast in 32 bit Debug_UnicodeString 🙀 2023-11-14 07:31:58 -06:00
developer feat(developer): Multi-process model for projects 🦕 2023-12-01 11:48:09 +07:00
docs Merge pull request #9867 from keymanapp/chore/linux/9801_coreversion 2023-11-14 16:26:51 +07:00
ios refactor(web): drops banner options paradigm in favor of simple "inactiveBanner" prop 2023-11-13 13:31:57 +07:00
linux chore(linux): reduce number of checkouts 2023-11-14 10:26:29 +01:00
mac increase disk image template size by 2MB 2023-10-30 15:11:22 +07:00
oem/firstvoices fix(ios): missing backslash in build script 2023-10-16 04:20:01 +07:00
resources Merge pull request #10009 from keymanapp/fix/linux/improveGHATrigger 2023-11-15 10:20:13 +01:00
web Merge pull request #9988 from keymanapp/refactor/web/inactive-banner-management 2023-11-16 08:06:17 +07:00
windows fix(windows): setup handle whitespace in setup.inf 2023-11-14 12:47:13 +07:00
.clang-format chore(common): Add C++ formatting rules 2021-07-29 18:50:25 +02:00
.editorconfig chore(linux): Address a few more lintian warnings 2022-03-15 15:32:10 +01:00
.eslintrc.cjs chore(developer): add eslint devDependency for kmc 2023-04-25 13:44:56 +07:00
.flake8 chore(linux): Add integration tests for ibus-keyman 2021-11-04 09:22:28 +01:00
.gitignore feat(developer): remove kmcomp 2023-09-09 17:47:15 +02:00
.nycrc.json feat(developer): fixup and prepare build scripts and docs for kmc 2022-09-19 06:36:06 +10:00
.shellcheckrc chore(linux): Properly fix shellcheck SC1091 warnings 2023-05-11 11:59:15 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-10-08 10:46:53 +11:00
configure-repo.sh chore: update docs and non-standard readlink refs 2023-02-22 10:41:54 +07:00
CONTRIBUTING.md chore(linux): Fix lintian warnings 2022-03-10 20:30:44 +01:00
crowdin.yml chore(common): Update Kannada strings 2023-02-07 21:39:23 +07:00
HISTORY.md auto: increment master version to 17.0.212 2023-11-15 13:05:03 -05:00
LICENSE.md chore: license date 2022-03-15 13:59:27 +11:00
package-lock.json fix(developer): Sentry in Server should honour reporting settings 2023-11-06 08:18:24 +07:00
package.json feat(common): precompile json schemas to improve performance 2023-10-05 13:56:53 +07:00
README.md Update README.md 2021-10-08 18:06:46 +11:00
TIER.md Update TIER.md 2022-11-14 07:34:26 +11:00
tsconfig.base.json chore: fixup js imports for schema validators 2023-10-07 06:46:10 +07:00
tsconfig.json chore: Merge branch 'epic/package-metadata' into chore/merge-master-into-package-metadata 2023-10-06 11:52:13 +07:00
VERSION.md auto: increment master version to 17.0.212 2023-11-15 13:05:03 -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 2,000 languages!

License

Copyright (c) SIL International.

Keyman is an open source project distributed under the MIT license.

Get Involved

Development Status

Important Links