mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-23 00:37:41 +00:00
[Windows] Fix Caps Lock header support
This commit is contained in:
parent
988a0917cb
commit
5b60359aa2
29 changed files with 760 additions and 32 deletions
|
|
@ -100,14 +100,17 @@ void ProcessToggleChange(UINT key) { // I4793
|
|||
switch(key) {
|
||||
case VK_CAPITAL: flag = CAPITALFLAG; break;
|
||||
case VK_NUMLOCK: flag = NUMLOCKFLAG; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
if(*Globals::ShiftState() & flag) {
|
||||
*Globals::ShiftState() &= ~flag;
|
||||
}
|
||||
else {
|
||||
if (GetKeyState(key) & 1) {
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "ProcessToggleChange: Setting %s", flag == CAPITALFLAG ? "CAPITALFLAG" : "NUMLOCKFLAG");
|
||||
*Globals::ShiftState() |= flag;
|
||||
}
|
||||
else {
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "ProcessToggleChange: Clearing %s", flag == CAPITALFLAG ? "CAPITALFLAG" : "NUMLOCKFLAG");
|
||||
*Globals::ShiftState() &= ~flag;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" __declspec(dllexport) BOOL WINAPI TIPProcessKey(WPARAM wParam, LPARAM lParam, // I3589 // I3588
|
||||
|
|
@ -131,6 +134,11 @@ extern "C" __declspec(dllexport) BOOL WINAPI TIPProcessKey(WPARAM wParam, LPARAM
|
|||
}
|
||||
|
||||
if(scan == SCAN_FLAG_KEYMAN_KEY_EVENT) { // I4370
|
||||
if (wParam == VK_CAPITAL && !isUp) {
|
||||
// Must also record toggle state change when Keyman has generated
|
||||
// a Caps Lock event
|
||||
ProcessToggleChange((UINT)wParam); // I4793
|
||||
}
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "TIPProcessKey: Virtual Key was generated by Keyman [Scan=0xFF]");
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -154,10 +162,10 @@ extern "C" __declspec(dllexport) BOOL WINAPI TIPProcessKey(WPARAM wParam, LPARAM
|
|||
switch(wParam) {
|
||||
case VK_CAPITAL:
|
||||
if(!isUp) ProcessToggleChange((UINT) wParam); // I4793
|
||||
KeyCapsLockPress(isUp); // I4548
|
||||
if(!Updateable) KeyCapsLockPress(isUp); // I4548
|
||||
return FALSE;
|
||||
case VK_SHIFT:
|
||||
KeyShiftPress(isUp); // I4548
|
||||
if (!Updateable) KeyShiftPress(isUp); // I4548
|
||||
// Fall through
|
||||
case VK_MENU:
|
||||
case VK_CONTROL:
|
||||
|
|
|
|||
|
|
@ -87,9 +87,7 @@ BOOL AIWin2000Unicode::IsWindowHandled(HWND ahwnd)
|
|||
BOOL AIWin2000Unicode::IsUnicode()
|
||||
{
|
||||
BOOL Result = IsWindowUnicode(hwnd);
|
||||
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "IsWindowUnicode=%s WM_UNICHAR:%s",
|
||||
Result ? "Yes" : "No", FUnicharOkay ? "Yes" : "No");
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "IsWindowUnicode=%s", Result ? "Yes" : "No");
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@ class AIWin2000Unicode:public AppIntegration
|
|||
{
|
||||
private:
|
||||
|
||||
BYTE kbstate[256];
|
||||
BOOL FUnicharOkay;
|
||||
|
||||
BOOL PostKeys();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,12 +26,6 @@
|
|||
*/
|
||||
#include "pch.h"
|
||||
|
||||
static BYTE kbstate[256];
|
||||
extern BOOL FShouldIgnoreNextKey[256];
|
||||
|
||||
//extern "C" void FAR PASCAL keybd_event(void);
|
||||
|
||||
|
||||
void ResetCapsLock(void)
|
||||
{
|
||||
PKEYMAN64THREADDATA _td = ThreadGlobals();
|
||||
|
|
@ -63,7 +57,8 @@ void KeyCapsLockPress(BOOL FIsUp) // I3284 - void // I3529
|
|||
|
||||
if(_td->lpActiveKeyboard->Keyboard->dwFlags & KF_CAPSONONLY)
|
||||
{
|
||||
if(FIsUp && !(GetKeyState(VK_CAPITAL) & 1)) // I267 - 24/11/2006 invert GetKeyState test
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "KeyCapsLockPress: KF_CAPSONONLY: FIsUp=%d CapsState=%d", FIsUp, GetKeyState(VK_CAPITAL) & 1);
|
||||
if(FIsUp && !(GetKeyState(VK_CAPITAL) & 1)) // I267 - 24/11/2006 invert GetKeyState test
|
||||
{
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, 0, 0);
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, KEYEVENTF_KEYUP, 0);
|
||||
|
|
@ -71,7 +66,8 @@ void KeyCapsLockPress(BOOL FIsUp) // I3284 - void // I3529
|
|||
}
|
||||
else if(_td->lpActiveKeyboard->Keyboard->dwFlags & KF_CAPSALWAYSOFF)
|
||||
{
|
||||
if(!FIsUp && (GetKeyState(VK_CAPITAL) & 1))
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "KeyCapsLockPress: KF_CAPSALWAYSOFF: FIsUp=%d CapsState=%d", FIsUp, GetKeyState(VK_CAPITAL) & 1);
|
||||
if(!FIsUp && (GetKeyState(VK_CAPITAL) & 1))
|
||||
{ // I267 - 24/11/2006 invert GetKeyState test
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, KEYEVENTF_KEYUP, 0);
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, 0, 0);
|
||||
|
|
@ -86,11 +82,10 @@ void KeyShiftPress(BOOL FIsUp) // I3284 - void // I3529
|
|||
if(!_td) return;
|
||||
if(!_td->lpActiveKeyboard) return; // pass through to window
|
||||
|
||||
if((GetKeyState(VK_CAPITAL) & 1) == 0) return;
|
||||
|
||||
if(_td->lpActiveKeyboard->Keyboard->dwFlags & KF_SHIFTFREESCAPS)
|
||||
{
|
||||
if(!FIsUp)
|
||||
SendDebugMessageFormat(0, sdmAIDefault, 0, "KeyShiftPress: KF_SHIFTFREESCAPS: FIsUp=%d CapsState=%d", FIsUp, GetKeyState(VK_CAPITAL) & 1);
|
||||
if(!FIsUp && (GetKeyState(VK_CAPITAL) & 1))
|
||||
{
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, 0, 0);
|
||||
keybd_event(VK_CAPITAL, SCAN_FLAG_KEYMAN_KEY_EVENT, KEYEVENTF_KEYUP, 0);
|
||||
|
|
|
|||
|
|
@ -23,9 +23,6 @@
|
|||
*/
|
||||
#include "pch.h" // I4551
|
||||
|
||||
BYTE kbstate[256];
|
||||
|
||||
|
||||
#define MAX_RSHIFT 24
|
||||
#define MAX_KSHIFT 18
|
||||
|
||||
|
|
|
|||
|
|
@ -174,7 +174,8 @@ STDAPI CKMTipTextService::OnTestKeyDown(ITfContext *pContext, WPARAM wParam, LPA
|
|||
{
|
||||
LogKey("CKMTipTextService::OnTestKeyDown", 0, wParam, lParam);
|
||||
// If the keystroke is a Keyman-generated key, ignore it
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L) // I3566
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L &&
|
||||
wParam != VK_CAPITAL) // I3566
|
||||
*pfEaten = FALSE;
|
||||
else
|
||||
*pfEaten = _KeymanProcessKeystroke(pContext, wParam, lParam, FALSE, FALSE); // I3588
|
||||
|
|
@ -208,7 +209,8 @@ STDAPI CKMTipTextService::OnKeyDown(ITfContext *pContext, WPARAM wParam, LPARAM
|
|||
STDAPI CKMTipTextService::OnTestKeyUp(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
|
||||
{
|
||||
LogKey("CKMTipTextService::OnTestKeyUp", 2, wParam, lParam);
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L) // I3566
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L &&
|
||||
wParam != VK_CAPITAL) // I3566
|
||||
*pfEaten = FALSE;
|
||||
else
|
||||
{
|
||||
|
|
@ -230,7 +232,8 @@ STDAPI CKMTipTextService::OnTestKeyUp(ITfContext *pContext, WPARAM wParam, LPARA
|
|||
STDAPI CKMTipTextService::OnKeyUp(ITfContext *pContext, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
|
||||
{
|
||||
LogKey("CKMTipTextService::OnKeyUp", 3, wParam, lParam);
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L) // I3566 // I3605
|
||||
if((lParam & 0x00FF0000L) == 0xFF0000L &&
|
||||
wParam != VK_CAPITAL) // I3566 // I3605
|
||||
*pfEaten = FALSE;
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -117,7 +117,8 @@ BOOL CKMTipTextService::_KeymanProcessKeystroke(ITfContext *pContext, WPARAM wPa
|
|||
Log(L"_KeymanProcessKeystroke (%x %x %s %s ex=%x)", wParam, lParam, fUpdate?L"update":L"", fPreserved?L"preserved":L"", GetMessageExtraInfo()); // I4378
|
||||
|
||||
// Don't process keystrokes generated by Keyman (scan code = 0xFF)
|
||||
if ((lParam & 0xFF0000) == 0xFF0000) {
|
||||
if ((lParam & 0xFF0000) == 0xFF0000 &&
|
||||
wParam != VK_CAPITAL) {
|
||||
return FALSE; // I4378
|
||||
}
|
||||
|
||||
|
|
@ -200,8 +201,8 @@ STDAPI CKeymanEditSession::DoEditSession(TfEditCookie ec)
|
|||
else
|
||||
{
|
||||
if (!(*pTIPProcessKey)(_wParam, _lParam, ExtKeymanProcessOutput, ExtKeymanGetContext, _fUpdate, _fPreserved)) {
|
||||
SendDebugMessage(L"DoEditSession: TIPProcessKey failed");
|
||||
_hr = E_FAIL;
|
||||
SendDebugMessage(L"DoEditSession: TIPProcessKey did not handle the keystroke");
|
||||
_hr = E_FAIL; // TODO: use S_FALSE -> this tells _KeymanProcessKeystroke to pass keystroke on
|
||||
}
|
||||
}
|
||||
ExtEditSession = NULL;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
caps_lock_shift_frees_caps Change History
|
||||
====================
|
||||
|
||||
1.0 (2019-01-07)
|
||||
----------------
|
||||
* Created by
|
||||
21
windows/src/test/manual-tests/caps_lock_headers/LICENSE.md
Normal file
21
windows/src/test/manual-tests/caps_lock_headers/LICENSE.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
©
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
29
windows/src/test/manual-tests/caps_lock_headers/README.md
Normal file
29
windows/src/test/manual-tests/caps_lock_headers/README.md
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
caps_lock_shift_frees_caps keyboard
|
||||
==============
|
||||
|
||||
©
|
||||
|
||||
Version 1.0
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
caps_lock_shift_frees_caps generated from template
|
||||
|
||||
Links
|
||||
-----
|
||||
|
||||
Supported Platforms
|
||||
-------------------
|
||||
* Windows
|
||||
* macOS
|
||||
* Linux
|
||||
* Web
|
||||
* iPhone
|
||||
* iPad
|
||||
* Android phone
|
||||
* Android tablet
|
||||
* Mobile devices
|
||||
* Desktop devices
|
||||
* Tablet devices
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"license": "mit",
|
||||
"languages": [
|
||||
|
||||
],
|
||||
"description": "caps_lock_shift_frees_caps generated from template"
|
||||
}
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<KeymanDeveloperProject>
|
||||
<Options>
|
||||
<BuildPath>$PROJECTPATH\build</BuildPath>
|
||||
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
|
||||
<WarnDeprecatedCode>True</WarnDeprecatedCode>
|
||||
</Options>
|
||||
<Files>
|
||||
<File>
|
||||
<ID>id_fb55c4befba94fb9e7468d5126e5ed10</ID>
|
||||
<Filename>caps_lock_shift_frees_caps.kmn</Filename>
|
||||
<Filepath>source\caps_lock_shift_frees_caps.kmn</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kmn</FileType>
|
||||
<Details>
|
||||
<Name>caps_lock_shift_frees_caps</Name>
|
||||
<Copyright>© 2019 SIL International</Copyright>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_bae62fccce40fcec206e0258206bd18c</ID>
|
||||
<Filename>caps_lock_caps_always_off.kmn</Filename>
|
||||
<Filepath>source\caps_lock_caps_always_off.kmn</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kmn</FileType>
|
||||
<Details>
|
||||
<Name>caps_lock_caps_on_only</Name>
|
||||
<Copyright>© 2019 SIL International</Copyright>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_7fff108dc6e58551d8bd46f89477c870</ID>
|
||||
<Filename>caps_lock_caps_on_only.kmn</Filename>
|
||||
<Filepath>source\caps_lock_caps_on_only.kmn</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kmn</FileType>
|
||||
<Details>
|
||||
<Name>caps_lock_caps_always_off</Name>
|
||||
<Copyright>© 2019 SIL International</Copyright>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_b84bf1d230e3916202970f55640a5eea</ID>
|
||||
<Filename>caps_lock_headers.kps</Filename>
|
||||
<Filepath>source\caps_lock_headers.kps</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kps</FileType>
|
||||
<Details>
|
||||
<Name>caps_lock_shift_frees_caps</Name>
|
||||
<Copyright>©</Copyright>
|
||||
<Version>1.0</Version>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_cd9d739b26ce5dd73af0540ad4365954</ID>
|
||||
<Filename>caps_lock_shift_frees_caps.kmx</Filename>
|
||||
<Filepath>source\..\build\caps_lock_shift_frees_caps.kmx</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kmx</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_a5299cc81250ba8131c83b259bb365f8</ID>
|
||||
<Filename>caps_lock_shift_frees_caps.kvk</Filename>
|
||||
<Filepath>source\..\build\caps_lock_shift_frees_caps.kvk</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kvk</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
|
||||
<Filename>welcome.htm</Filename>
|
||||
<Filepath>source\welcome.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
|
||||
<Filename>readme.htm</Filename>
|
||||
<Filepath>source\readme.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_0e43bd214d366e11a424144a99978808</ID>
|
||||
<Filename>caps_lock_caps_on_only.kvk</Filename>
|
||||
<Filepath>source\..\build\caps_lock_caps_on_only.kvk</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kvk</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_55c8833c53e3295cd9424a114280a63b</ID>
|
||||
<Filename>caps_lock_caps_always_off.kmx</Filename>
|
||||
<Filepath>source\..\build\caps_lock_caps_always_off.kmx</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kmx</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_141ea53b18baa35cf62ededea4321523</ID>
|
||||
<Filename>caps_lock_caps_always_off.kvk</Filename>
|
||||
<Filepath>source\..\build\caps_lock_caps_always_off.kvk</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kvk</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_7b23e6d989803a371ca8e77bc862d26f</ID>
|
||||
<Filename>caps_lock_caps_on_only.kmx</Filename>
|
||||
<Filepath>source\..\build\caps_lock_caps_on_only.kmx</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kmx</FileType>
|
||||
<ParentFileID>id_b84bf1d230e3916202970f55640a5eea</ParentFileID>
|
||||
</File>
|
||||
</Files>
|
||||
</KeymanDeveloperProject>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
c caps_lock_caps_on_only generated from template at 2019-01-07 14:12:26
|
||||
|
||||
store(&VERSION) '10.0'
|
||||
store(&NAME) 'caps_lock_caps_on_only'
|
||||
store(©RIGHT) '© 2019 SIL International'
|
||||
store(&KEYBOARDVERSION) '1.0'
|
||||
store(&TARGETS) 'windows'
|
||||
store(&VISUALKEYBOARD) 'caps_lock_caps_on_only.kvks'
|
||||
store(&CAPSONONLY) '1'
|
||||
|
||||
begin Unicode > use(main)
|
||||
|
||||
group(main) using keys
|
||||
|
||||
+ [NCAPS K_A] > 'lower-a'
|
||||
+ [CAPS K_A] > 'capital-a'
|
||||
+ [NCAPS SHIFT K_A] > 'shift-a'
|
||||
+ [CAPS SHIFT K_A] > 'capital-shift-a'
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<visualkeyboard>
|
||||
<header>
|
||||
<version>10.0</version>
|
||||
<kbdname>caps_lock_caps_always_off</kbdname>
|
||||
<flags>
|
||||
<displayunderlying/>
|
||||
</flags>
|
||||
</header>
|
||||
<encoding name="unicode" fontname="Arial" fontsize="-12">
|
||||
<layer shift="">
|
||||
<key vkey="K_BKQUOTE">`</key>
|
||||
<key vkey="K_1">1</key>
|
||||
<key vkey="K_2">2</key>
|
||||
<key vkey="K_3">3</key>
|
||||
<key vkey="K_4">4</key>
|
||||
<key vkey="K_5">5</key>
|
||||
<key vkey="K_6">6</key>
|
||||
<key vkey="K_7">7</key>
|
||||
<key vkey="K_8">8</key>
|
||||
<key vkey="K_9">9</key>
|
||||
<key vkey="K_0">0</key>
|
||||
<key vkey="K_HYPHEN">-</key>
|
||||
<key vkey="K_EQUAL">=</key>
|
||||
<key vkey="K_Q">q</key>
|
||||
<key vkey="K_W">w</key>
|
||||
<key vkey="K_E">e</key>
|
||||
<key vkey="K_R">r</key>
|
||||
<key vkey="K_T">t</key>
|
||||
<key vkey="K_Y">y</key>
|
||||
<key vkey="K_U">u</key>
|
||||
<key vkey="K_I">i</key>
|
||||
<key vkey="K_O">o</key>
|
||||
<key vkey="K_P">p</key>
|
||||
<key vkey="K_LBRKT">[</key>
|
||||
<key vkey="K_RBRKT">]</key>
|
||||
<key vkey="K_BKSLASH">\</key>
|
||||
<key vkey="K_A">lower-a</key>
|
||||
<key vkey="K_S">s</key>
|
||||
<key vkey="K_D">d</key>
|
||||
<key vkey="K_F">f</key>
|
||||
<key vkey="K_G">g</key>
|
||||
<key vkey="K_H">h</key>
|
||||
<key vkey="K_J">j</key>
|
||||
<key vkey="K_K">k</key>
|
||||
<key vkey="K_L">l</key>
|
||||
<key vkey="K_COLON">;</key>
|
||||
<key vkey="K_QUOTE">'</key>
|
||||
<key vkey="K_oE2">\</key>
|
||||
<key vkey="K_Z">z</key>
|
||||
<key vkey="K_X">x</key>
|
||||
<key vkey="K_C">c</key>
|
||||
<key vkey="K_V">v</key>
|
||||
<key vkey="K_B">b</key>
|
||||
<key vkey="K_N">n</key>
|
||||
<key vkey="K_M">m</key>
|
||||
<key vkey="K_COMMA">,</key>
|
||||
<key vkey="K_PERIOD">.</key>
|
||||
<key vkey="K_SLASH">/</key>
|
||||
<key vkey="K_SPACE"></key>
|
||||
</layer>
|
||||
<layer shift="S">
|
||||
<key vkey="K_BKQUOTE">~</key>
|
||||
<key vkey="K_1">!</key>
|
||||
<key vkey="K_2">@</key>
|
||||
<key vkey="K_3">#</key>
|
||||
<key vkey="K_4">$</key>
|
||||
<key vkey="K_5">%</key>
|
||||
<key vkey="K_6">^</key>
|
||||
<key vkey="K_7">&</key>
|
||||
<key vkey="K_8">*</key>
|
||||
<key vkey="K_9">(</key>
|
||||
<key vkey="K_0">)</key>
|
||||
<key vkey="K_HYPHEN">_</key>
|
||||
<key vkey="K_EQUAL">+</key>
|
||||
<key vkey="K_Q">Q</key>
|
||||
<key vkey="K_W">W</key>
|
||||
<key vkey="K_E">E</key>
|
||||
<key vkey="K_R">R</key>
|
||||
<key vkey="K_T">T</key>
|
||||
<key vkey="K_Y">Y</key>
|
||||
<key vkey="K_U">U</key>
|
||||
<key vkey="K_I">I</key>
|
||||
<key vkey="K_O">O</key>
|
||||
<key vkey="K_P">P</key>
|
||||
<key vkey="K_LBRKT">{</key>
|
||||
<key vkey="K_RBRKT">}</key>
|
||||
<key vkey="K_BKSLASH">|</key>
|
||||
<key vkey="K_A">shift-a</key>
|
||||
<key vkey="K_S">S</key>
|
||||
<key vkey="K_D">D</key>
|
||||
<key vkey="K_F">F</key>
|
||||
<key vkey="K_G">G</key>
|
||||
<key vkey="K_H">H</key>
|
||||
<key vkey="K_J">J</key>
|
||||
<key vkey="K_K">K</key>
|
||||
<key vkey="K_L">L</key>
|
||||
<key vkey="K_COLON">:</key>
|
||||
<key vkey="K_QUOTE">"</key>
|
||||
<key vkey="K_oE2">|</key>
|
||||
<key vkey="K_Z">Z</key>
|
||||
<key vkey="K_X">X</key>
|
||||
<key vkey="K_C">C</key>
|
||||
<key vkey="K_V">V</key>
|
||||
<key vkey="K_B">B</key>
|
||||
<key vkey="K_N">N</key>
|
||||
<key vkey="K_M">M</key>
|
||||
<key vkey="K_COMMA"><</key>
|
||||
<key vkey="K_PERIOD">></key>
|
||||
<key vkey="K_SLASH">?</key>
|
||||
<key vkey="K_SPACE"></key>
|
||||
</layer>
|
||||
<layer shift="C">
|
||||
<key vkey="K_SPACE"></key>
|
||||
</layer>
|
||||
</encoding>
|
||||
</visualkeyboard>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
c caps_lock_caps_always_off generated from template at 2019-01-07 14:12:26
|
||||
|
||||
store(&VERSION) '10.0'
|
||||
store(&NAME) 'caps_lock_caps_always_off'
|
||||
store(©RIGHT) '© 2019 SIL International'
|
||||
store(&KEYBOARDVERSION) '1.0'
|
||||
store(&TARGETS) 'windows'
|
||||
store(&VISUALKEYBOARD) 'caps_lock_caps_always_off.kvks'
|
||||
store(&CAPSALWAYSOFF) '1'
|
||||
|
||||
begin Unicode > use(main)
|
||||
|
||||
group(main) using keys
|
||||
|
||||
+ [NCAPS K_A] > 'lower-a'
|
||||
+ [CAPS K_A] > 'capital-a'
|
||||
+ [NCAPS SHIFT K_A] > 'shift-a'
|
||||
+ [CAPS SHIFT K_A] > 'capital-shift-a'
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<visualkeyboard>
|
||||
<header>
|
||||
<version>10.0</version>
|
||||
<kbdname>caps_lock_caps_always_off</kbdname>
|
||||
<flags>
|
||||
<displayunderlying/>
|
||||
</flags>
|
||||
</header>
|
||||
<encoding name="unicode" fontname="Arial" fontsize="-12">
|
||||
<layer shift="">
|
||||
<key vkey="K_BKQUOTE">`</key>
|
||||
<key vkey="K_1">1</key>
|
||||
<key vkey="K_2">2</key>
|
||||
<key vkey="K_3">3</key>
|
||||
<key vkey="K_4">4</key>
|
||||
<key vkey="K_5">5</key>
|
||||
<key vkey="K_6">6</key>
|
||||
<key vkey="K_7">7</key>
|
||||
<key vkey="K_8">8</key>
|
||||
<key vkey="K_9">9</key>
|
||||
<key vkey="K_0">0</key>
|
||||
<key vkey="K_HYPHEN">-</key>
|
||||
<key vkey="K_EQUAL">=</key>
|
||||
<key vkey="K_Q">q</key>
|
||||
<key vkey="K_W">w</key>
|
||||
<key vkey="K_E">e</key>
|
||||
<key vkey="K_R">r</key>
|
||||
<key vkey="K_T">t</key>
|
||||
<key vkey="K_Y">y</key>
|
||||
<key vkey="K_U">u</key>
|
||||
<key vkey="K_I">i</key>
|
||||
<key vkey="K_O">o</key>
|
||||
<key vkey="K_P">p</key>
|
||||
<key vkey="K_LBRKT">[</key>
|
||||
<key vkey="K_RBRKT">]</key>
|
||||
<key vkey="K_BKSLASH">\</key>
|
||||
<key vkey="K_A">lower-a</key>
|
||||
<key vkey="K_S">s</key>
|
||||
<key vkey="K_D">d</key>
|
||||
<key vkey="K_F">f</key>
|
||||
<key vkey="K_G">g</key>
|
||||
<key vkey="K_H">h</key>
|
||||
<key vkey="K_J">j</key>
|
||||
<key vkey="K_K">k</key>
|
||||
<key vkey="K_L">l</key>
|
||||
<key vkey="K_COLON">;</key>
|
||||
<key vkey="K_QUOTE">'</key>
|
||||
<key vkey="K_oE2">\</key>
|
||||
<key vkey="K_Z">z</key>
|
||||
<key vkey="K_X">x</key>
|
||||
<key vkey="K_C">c</key>
|
||||
<key vkey="K_V">v</key>
|
||||
<key vkey="K_B">b</key>
|
||||
<key vkey="K_N">n</key>
|
||||
<key vkey="K_M">m</key>
|
||||
<key vkey="K_COMMA">,</key>
|
||||
<key vkey="K_PERIOD">.</key>
|
||||
<key vkey="K_SLASH">/</key>
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
<layer shift="S">
|
||||
<key vkey="K_BKQUOTE">~</key>
|
||||
<key vkey="K_1">!</key>
|
||||
<key vkey="K_2">@</key>
|
||||
<key vkey="K_3">#</key>
|
||||
<key vkey="K_4">$</key>
|
||||
<key vkey="K_5">%</key>
|
||||
<key vkey="K_6">^</key>
|
||||
<key vkey="K_7">&</key>
|
||||
<key vkey="K_8">*</key>
|
||||
<key vkey="K_9">(</key>
|
||||
<key vkey="K_0">)</key>
|
||||
<key vkey="K_HYPHEN">_</key>
|
||||
<key vkey="K_EQUAL">+</key>
|
||||
<key vkey="K_Q">Q</key>
|
||||
<key vkey="K_W">W</key>
|
||||
<key vkey="K_E">E</key>
|
||||
<key vkey="K_R">R</key>
|
||||
<key vkey="K_T">T</key>
|
||||
<key vkey="K_Y">Y</key>
|
||||
<key vkey="K_U">U</key>
|
||||
<key vkey="K_I">I</key>
|
||||
<key vkey="K_O">O</key>
|
||||
<key vkey="K_P">P</key>
|
||||
<key vkey="K_LBRKT">{</key>
|
||||
<key vkey="K_RBRKT">}</key>
|
||||
<key vkey="K_BKSLASH">|</key>
|
||||
<key vkey="K_A">shift-a</key>
|
||||
<key vkey="K_S">S</key>
|
||||
<key vkey="K_D">D</key>
|
||||
<key vkey="K_F">F</key>
|
||||
<key vkey="K_G">G</key>
|
||||
<key vkey="K_H">H</key>
|
||||
<key vkey="K_J">J</key>
|
||||
<key vkey="K_K">K</key>
|
||||
<key vkey="K_L">L</key>
|
||||
<key vkey="K_COLON">:</key>
|
||||
<key vkey="K_QUOTE">"</key>
|
||||
<key vkey="K_oE2">|</key>
|
||||
<key vkey="K_Z">Z</key>
|
||||
<key vkey="K_X">X</key>
|
||||
<key vkey="K_C">C</key>
|
||||
<key vkey="K_V">V</key>
|
||||
<key vkey="K_B">B</key>
|
||||
<key vkey="K_N">N</key>
|
||||
<key vkey="K_M">M</key>
|
||||
<key vkey="K_COMMA"><</key>
|
||||
<key vkey="K_PERIOD">></key>
|
||||
<key vkey="K_SLASH">?</key>
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
<layer shift="C">
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
</encoding>
|
||||
</visualkeyboard>
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package>
|
||||
<System>
|
||||
<KeymanDeveloperVersion>11.0.1300.0</KeymanDeveloperVersion>
|
||||
<FileVersion>7.0</FileVersion>
|
||||
</System>
|
||||
<Options>
|
||||
<ExecuteProgram></ExecuteProgram>
|
||||
<ReadMeFile>readme.htm</ReadMeFile>
|
||||
<MSIFileName></MSIFileName>
|
||||
<MSIOptions></MSIOptions>
|
||||
<FollowKeyboardVersion/>
|
||||
</Options>
|
||||
<StartMenu>
|
||||
<Folder></Folder>
|
||||
<Items/>
|
||||
</StartMenu>
|
||||
<Info>
|
||||
<Name URL="">caps_lock_shift_frees_caps</Name>
|
||||
<Copyright URL="">©</Copyright>
|
||||
<Author URL=""></Author>
|
||||
<Version URL="">1.0</Version>
|
||||
</Info>
|
||||
<Files>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_shift_frees_caps.kmx</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kmx</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_shift_frees_caps.kvk</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kvk</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>welcome.htm</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.htm</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>readme.htm</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.htm</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_caps_on_only.kvk</Name>
|
||||
<Description>File caps_lock_caps_on_only.kvk</Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kvk</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_caps_always_off.kmx</Name>
|
||||
<Description>Keyboard caps_lock_caps_on_only</Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kmx</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_caps_always_off.kvk</Name>
|
||||
<Description>File caps_lock_caps_always_off.kvk</Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kvk</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\caps_lock_caps_on_only.kmx</Name>
|
||||
<Description>Keyboard caps_lock_caps_always_off</Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kmx</FileType>
|
||||
</File>
|
||||
</Files>
|
||||
<Keyboards>
|
||||
<Keyboard>
|
||||
<Name>caps_lock_shift_frees_caps</Name>
|
||||
<ID>caps_lock_shift_frees_caps</ID>
|
||||
<Version>1.0</Version>
|
||||
<Languages/>
|
||||
</Keyboard>
|
||||
<Keyboard>
|
||||
<Name>caps_lock_caps_on_only</Name>
|
||||
<ID>caps_lock_caps_always_off</ID>
|
||||
<Version>1.0</Version>
|
||||
<Languages/>
|
||||
</Keyboard>
|
||||
<Keyboard>
|
||||
<Name>caps_lock_caps_always_off</Name>
|
||||
<ID>caps_lock_caps_on_only</ID>
|
||||
<Version>1.0</Version>
|
||||
<Languages/>
|
||||
</Keyboard>
|
||||
</Keyboards>
|
||||
<Strings/>
|
||||
</Package>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
c caps_lock_shift_frees_caps generated from template at 2019-01-07 14:12:26
|
||||
store(&VERSION) '10.0'
|
||||
store(&NAME) 'caps_lock_shift_frees_caps'
|
||||
store(©RIGHT) '© 2019 SIL International'
|
||||
store(&KEYBOARDVERSION) '1.0'
|
||||
store(&TARGETS) 'windows'
|
||||
store(&VISUALKEYBOARD) 'caps_lock_shift_frees_caps.kvks'
|
||||
store(&SHIFTFREESCAPS) '1'
|
||||
|
||||
begin Unicode > use(main)
|
||||
|
||||
group(main) using keys
|
||||
|
||||
+ [NCAPS K_A] > 'lower-a'
|
||||
+ [CAPS K_A] > 'capital-a'
|
||||
+ [NCAPS SHIFT K_A] > 'shift-a'
|
||||
+ [CAPS SHIFT K_A] > 'capital-shift-a'
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<visualkeyboard>
|
||||
<header>
|
||||
<version>10.0</version>
|
||||
<kbdname>caps_lock_shift_frees_caps</kbdname>
|
||||
<flags/>
|
||||
</header>
|
||||
<encoding name="unicode" fontname="Arial" fontsize="-12">
|
||||
<layer shift="">
|
||||
<key vkey="K_BKQUOTE">`</key>
|
||||
<key vkey="K_1">1</key>
|
||||
<key vkey="K_2">2</key>
|
||||
<key vkey="K_3">3</key>
|
||||
<key vkey="K_4">4</key>
|
||||
<key vkey="K_5">5</key>
|
||||
<key vkey="K_6">6</key>
|
||||
<key vkey="K_7">7</key>
|
||||
<key vkey="K_8">8</key>
|
||||
<key vkey="K_9">9</key>
|
||||
<key vkey="K_0">0</key>
|
||||
<key vkey="K_HYPHEN">-</key>
|
||||
<key vkey="K_EQUAL">=</key>
|
||||
<key vkey="K_Q">q</key>
|
||||
<key vkey="K_W">w</key>
|
||||
<key vkey="K_E">e</key>
|
||||
<key vkey="K_R">r</key>
|
||||
<key vkey="K_T">t</key>
|
||||
<key vkey="K_Y">y</key>
|
||||
<key vkey="K_U">u</key>
|
||||
<key vkey="K_I">i</key>
|
||||
<key vkey="K_O">o</key>
|
||||
<key vkey="K_P">p</key>
|
||||
<key vkey="K_LBRKT">[</key>
|
||||
<key vkey="K_RBRKT">]</key>
|
||||
<key vkey="K_BKSLASH">\</key>
|
||||
<key vkey="K_A">lower-a</key>
|
||||
<key vkey="K_S">s</key>
|
||||
<key vkey="K_D">d</key>
|
||||
<key vkey="K_F">f</key>
|
||||
<key vkey="K_G">g</key>
|
||||
<key vkey="K_H">h</key>
|
||||
<key vkey="K_J">j</key>
|
||||
<key vkey="K_K">k</key>
|
||||
<key vkey="K_L">l</key>
|
||||
<key vkey="K_COLON">;</key>
|
||||
<key vkey="K_QUOTE">'</key>
|
||||
<key vkey="K_oE2">\</key>
|
||||
<key vkey="K_Z">z</key>
|
||||
<key vkey="K_X">x</key>
|
||||
<key vkey="K_C">c</key>
|
||||
<key vkey="K_V">v</key>
|
||||
<key vkey="K_B">b</key>
|
||||
<key vkey="K_N">n</key>
|
||||
<key vkey="K_M">m</key>
|
||||
<key vkey="K_COMMA">,</key>
|
||||
<key vkey="K_PERIOD">.</key>
|
||||
<key vkey="K_SLASH">/</key>
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
<layer shift="S">
|
||||
<key vkey="K_BKQUOTE">~</key>
|
||||
<key vkey="K_1">!</key>
|
||||
<key vkey="K_2">@</key>
|
||||
<key vkey="K_3">#</key>
|
||||
<key vkey="K_4">$</key>
|
||||
<key vkey="K_5">%</key>
|
||||
<key vkey="K_6">^</key>
|
||||
<key vkey="K_7">&</key>
|
||||
<key vkey="K_8">*</key>
|
||||
<key vkey="K_9">(</key>
|
||||
<key vkey="K_0">)</key>
|
||||
<key vkey="K_HYPHEN">_</key>
|
||||
<key vkey="K_EQUAL">+</key>
|
||||
<key vkey="K_Q">Q</key>
|
||||
<key vkey="K_W">W</key>
|
||||
<key vkey="K_E">E</key>
|
||||
<key vkey="K_R">R</key>
|
||||
<key vkey="K_T">T</key>
|
||||
<key vkey="K_Y">Y</key>
|
||||
<key vkey="K_U">U</key>
|
||||
<key vkey="K_I">I</key>
|
||||
<key vkey="K_O">O</key>
|
||||
<key vkey="K_P">P</key>
|
||||
<key vkey="K_LBRKT">{</key>
|
||||
<key vkey="K_RBRKT">}</key>
|
||||
<key vkey="K_BKSLASH">|</key>
|
||||
<key vkey="K_A">shift-a</key>
|
||||
<key vkey="K_S">S</key>
|
||||
<key vkey="K_D">D</key>
|
||||
<key vkey="K_F">F</key>
|
||||
<key vkey="K_G">G</key>
|
||||
<key vkey="K_H">H</key>
|
||||
<key vkey="K_J">J</key>
|
||||
<key vkey="K_K">K</key>
|
||||
<key vkey="K_L">L</key>
|
||||
<key vkey="K_COLON">:</key>
|
||||
<key vkey="K_QUOTE">"</key>
|
||||
<key vkey="K_oE2">|</key>
|
||||
<key vkey="K_Z">Z</key>
|
||||
<key vkey="K_X">X</key>
|
||||
<key vkey="K_C">C</key>
|
||||
<key vkey="K_V">V</key>
|
||||
<key vkey="K_B">B</key>
|
||||
<key vkey="K_N">N</key>
|
||||
<key vkey="K_M">M</key>
|
||||
<key vkey="K_COMMA"><</key>
|
||||
<key vkey="K_PERIOD">></key>
|
||||
<key vkey="K_SLASH">?</key>
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
<layer shift="C">
|
||||
<key vkey="K_SPACE"> </key>
|
||||
</layer>
|
||||
</encoding>
|
||||
</visualkeyboard>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>caps_lock_shift_frees_caps</title>
|
||||
<style type="text/css">
|
||||
p { font: 10pt Tahoma; }
|
||||
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
|
||||
h2 { font: bold 12pt Tahoma; color: #4444cc; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>caps_lock_shift_frees_caps</h1>
|
||||
|
||||
<p>
|
||||
caps_lock_shift_frees_caps 1.0 generated from template.
|
||||
</p>
|
||||
|
||||
<p>©</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Start Using caps_lock_shift_frees_caps</title>
|
||||
<style type="text/css">
|
||||
p { font: 10pt Tahoma; }
|
||||
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
|
||||
h2 { font: bold 12pt Tahoma; color: #4444cc; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Start Using caps_lock_shift_frees_caps</h1>
|
||||
|
||||
<p>
|
||||
caps_lock_shift_frees_caps 1.0 generated from template.
|
||||
</p>
|
||||
|
||||
<h1>Keyboard Layout</h1>
|
||||
|
||||
<!-- Insert Keyboard Layout Images or HTML here -->
|
||||
|
||||
<p>©</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Reference in a new issue