diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 46646e70fa1..af8a43774f9 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,8 +2,6 @@ name: linux_build on: workflow_dispatch: - schedule: - - cron: '0 0 * * *' push: pull_request: branches: [ master ] @@ -20,17 +18,11 @@ jobs: strategy: fail-fast: false matrix: - vscode_arch: [x64, arm64, armhf] + vscode_arch: [x64] include: - vscode_arch: x64 npm_arch: x64 image: vscodium/vscodium-linux-build-agent:bionic-x64 - - vscode_arch: arm64 - npm_arch: arm64 - image: vscodium/vscodium-linux-build-agent:stretch-arm64 - - vscode_arch: armhf - npm_arch: armv7l - image: vscodium/vscodium-linux-build-agent:stretch-armhf steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml deleted file mode 100644 index 4fe74be7802..00000000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,120 +0,0 @@ -name: macos_build - -on: - workflow_dispatch: - schedule: - - cron: '0 0 * * *' - push: - pull_request: - branches: [ master ] - -jobs: - build: - runs-on: macOS-latest - env: - OS_NAME: "osx" - VSCODE_ARCH: "x64" - steps: - - uses: actions/checkout@v2 - - - name: Setup Node.js environment - uses: actions/setup-node@v1 - with: - node-version: 14 - - - name: Check PR or cron - run: | - . check_cron_or_pr.sh - - - name: Clone VSCode repo - run: | - . get_repo.sh - - - name: Check existing VSCodium tags/releases - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - . check_tags.sh - if: env.SHOULD_DEPLOY == 'yes' - - - name: Compute cache key - id: yarnCacheKey - run: echo "::set-output name=value::$(node build/azure-pipelines/computeYarnCacheKey.js)" - if: env.SHOULD_BUILD == 'yes' - - - name: Get yarn cache directory path - id: yarnCacheDirPath - run: echo "::set-output name=dir::$(yarn cache dir)" - if: env.SHOULD_BUILD == 'yes' - - - name: Cache yarn directory - uses: actions/cache@v2 - with: - path: ${{ steps.yarnCacheDirPath.outputs.dir }} - key: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir-${{ steps.yarnCacheKey.outputs.value }} - restore-keys: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir- - if: env.SHOULD_BUILD == 'yes' - - - name: Build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./build.sh - if: env.SHOULD_BUILD == 'yes' - - - name: Sign binary - env: - CERTIFICATE_OSX_P12: ${{ secrets.CERTIFICATE_OSX_P12 }} - CERTIFICATE_OSX_PASSWORD: ${{ secrets.CERTIFICATE_OSX_PASSWORD }} - CERTIFICATE_OSX_ID: ${{ secrets.CERTIFICATE_OSX_ID }} - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - run: | - if [ -d "VSCode-darwin-${VSCODE_ARCH}" ]; then # just in case the build failed - cd "VSCode-darwin-${VSCODE_ARCH}" - export CERTIFICATE_P12=VSCodium.p12 - echo $CERTIFICATE_OSX_P12 | base64 --decode > $CERTIFICATE_P12 - export KEYCHAIN=build.keychain - security create-keychain -p mysecretpassword $KEYCHAIN - security default-keychain -s $KEYCHAIN - security unlock-keychain -p mysecretpassword $KEYCHAIN - security import $CERTIFICATE_P12 -k $KEYCHAIN -P $CERTIFICATE_OSX_PASSWORD -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword $KEYCHAIN - codesign --deep --force --verbose --sign "$CERTIFICATE_OSX_ID" VSCodium.app - fi - - - name: Zip release - run: | - cd "VSCode-darwin-${VSCODE_ARCH}" - zip -r -X -y ../VSCodium-darwin-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip ./*.app - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - - - name: DMG the release - run: | - pushd "VSCode-darwin-${VSCODE_ARCH}" - npx create-dmg VSCodium.app .. - mv "../VSCodium ${LATEST_MS_TAG}.dmg" "../VSCodium.${VSCODE_ARCH}.${LATEST_MS_TAG}.dmg" - popd - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - - - name: Generate shasums - run: ./sum.sh - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - - - name: Release - uses: softprops/action-gh-release@v1 - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - with: - tag_name: ${{ env.LATEST_MS_TAG }} - files: | - ./*.zip - ./*.dmg - ./*.sha256 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Update versions repo - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - run: ./update_version.sh - env: - GITHUB_TOKEN: ${{ secrets.STRONGER_GITHUB_TOKEN }} - GITHUB_USERNAME: ${{ github.repository_owner }} - diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index 16e16365849..00000000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: windows_build - -on: - workflow_dispatch: - schedule: - - cron: '0 0 * * *' - push: - pull_request: - branches: [ master ] - -jobs: - windows: - runs-on: windows-2016 - env: - VSCODE_ARCH: ${{ matrix.vscode_arch }} - OS_NAME: 'windows' - strategy: - fail-fast: false - matrix: - vscode_arch: [x64, ia32, arm64] - - steps: - - uses: actions/checkout@v2 - - - name: Setup Node.js environment - uses: actions/setup-node@v1 - with: - node-version: 14 - - - name: Install Yarn - run: npm install -g yarn - - - name: Setup Python 2 - uses: actions/setup-python@v2 - with: - python-version: '2.x' - - - name: Check PR or cron - run: ./check_cron_or_pr.sh - shell: bash - - - name: Clone VSCode repo - run: ./get_repo.sh - shell: bash - - - name: Check existing VSCodium tags/releases - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./check_tags.sh - shell: bash - if: env.SHOULD_DEPLOY == 'yes' - - - name: Compute cache key - id: yarnCacheKey - run: echo "::set-output name=value::$(node build/azure-pipelines/computeYarnCacheKey.js)" - if: env.SHOULD_BUILD == 'yes' - - - name: Get yarn cache directory path - id: yarnCacheDirPath - run: echo "::set-output name=dir::$(yarn cache dir)" - if: env.SHOULD_BUILD == 'yes' - - - name: Cache yarn directory - uses: actions/cache@v2 - with: - path: ${{ steps.yarnCacheDirPath.outputs.dir }} - key: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir-${{ steps.yarnCacheKey.outputs.value }} - restore-keys: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir- - if: env.SHOULD_BUILD == 'yes' - - - name: Build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - npm_config_arch: ${{ matrix.vscode_arch }} - npm_config_target_arch: ${{ matrix.vscode_arch }} - run: ./build.sh - shell: bash - if: env.SHOULD_BUILD == 'yes' - - - name: Move/rename build artifacts - run: | - mv vscode\\.build\\win32-${VSCODE_ARCH}\\system-setup\\VSCodeSetup.exe VSCodiumSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe - mv vscode\\.build\\win32-${VSCODE_ARCH}\\user-setup\\VSCodeSetup.exe VSCodiumUserSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe - mv vscode\\.build\\win32-${VSCODE_ARCH}\\archive\\VSCode-win32-${VSCODE_ARCH}.zip VSCodium-win32-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip - shell: bash - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - - - name: Generate shasums - run: ./sum.sh - shell: bash - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - - - name: Release - uses: softprops/action-gh-release@v1 - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - with: - tag_name: ${{ env.LATEST_MS_TAG }} - files: | - ./*.sha256 - ./VSCodium*.zip - ./VSCodiumUserSetup*.exe - ./VSCodiumSetup*.exe - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Update versions repo - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - run: ./update_version.sh - shell: bash - env: - GITHUB_TOKEN: ${{ secrets.STRONGER_GITHUB_TOKEN }} - GITHUB_USERNAME: ${{ github.repository_owner }} - diff --git a/patches/user/0001-feat-replace-keyboard-layout-to-Programmer-Dvorak.patch b/patches/user/0001-feat-replace-keyboard-layout-to-Programmer-Dvorak.patch new file mode 100644 index 00000000000..b344204169d --- /dev/null +++ b/patches/user/0001-feat-replace-keyboard-layout-to-Programmer-Dvorak.patch @@ -0,0 +1,1441 @@ +From a2d3678576262c5a137eea9505ace7630b45e07f Mon Sep 17 00:00:00 2001 +From: Dash Eclipse +Date: Mon, 5 Jul 2021 18:46:24 +0000 +Subject: [PATCH] feat: replace keyboard layout to Programmer Dvorak + +- Programmer Dvorak: https://www.kaufmann.no/roland/dvorak/ +- dvp.ts is generated by "F1 > Inspect Key Mappings (JSON)" + +[https://github.com/microsoft/vscode/issues/127932#issuecomment-873978131] +--- + .../keyboardLayout/electron-main/dvp.ts | 1395 +++++++++++++++++ + .../keyboardLayoutMainService.ts | 5 +- + 2 files changed, 1398 insertions(+), 2 deletions(-) + create mode 100644 src/vs/platform/keyboardLayout/electron-main/dvp.ts + +diff --git a/src/vs/platform/keyboardLayout/electron-main/dvp.ts b/src/vs/platform/keyboardLayout/electron-main/dvp.ts +new file mode 100644 +index 00000000000..defefc364df +--- /dev/null ++++ b/src/vs/platform/keyboardLayout/electron-main/dvp.ts +@@ -0,0 +1,1395 @@ ++export default { ++ "layout": { ++ "model": "pc104", ++ "layout": "us", ++ "variant": "dvp", ++ "options": "", ++ "rules": "evdev" ++ }, ++ "rawMapping": { ++ "Sleep": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "WakeUp": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "KeyA": { ++ "value": "a", ++ "withShift": "A", ++ "withAltGr": "å", ++ "withShiftAltGr": "Å", ++ "withLevel5": "a", ++ "withLevel3Level5": "å" ++ }, ++ "KeyB": { ++ "value": "x", ++ "withShift": "X", ++ "withAltGr": "x", ++ "withShiftAltGr": "X", ++ "withLevel5": "x", ++ "withLevel3Level5": "x" ++ }, ++ "KeyC": { ++ "value": "j", ++ "withShift": "J", ++ "withAltGr": "j", ++ "withShiftAltGr": "J", ++ "withLevel5": "j", ++ "withLevel3Level5": "j" ++ }, ++ "KeyD": { ++ "value": "e", ++ "withShift": "E", ++ "withAltGr": "æ", ++ "withShiftAltGr": "Æ", ++ "withLevel5": "e", ++ "withLevel3Level5": "æ" ++ }, ++ "KeyE": { ++ "value": ".", ++ "withShift": ">", ++ "withAltGr": "»", ++ "withShiftAltGr": "”", ++ "withLevel5": ".", ++ "withLevel3Level5": "»" ++ }, ++ "KeyF": { ++ "value": "u", ++ "withShift": "U", ++ "withAltGr": "é", ++ "withShiftAltGr": "É", ++ "withLevel5": "u", ++ "withLevel3Level5": "é" ++ }, ++ "KeyG": { ++ "value": "i", ++ "withShift": "I", ++ "withAltGr": "i", ++ "withShiftAltGr": "I", ++ "withLevel5": "i", ++ "withLevel3Level5": "i" ++ }, ++ "KeyH": { ++ "value": "d", ++ "withShift": "D", ++ "withAltGr": "ð", ++ "withShiftAltGr": "Ð", ++ "withLevel5": "d", ++ "withLevel3Level5": "ð" ++ }, ++ "KeyI": { ++ "value": "c", ++ "withShift": "C", ++ "withAltGr": "ç", ++ "withShiftAltGr": "Ç", ++ "withLevel5": "c", ++ "withLevel3Level5": "ç" ++ }, ++ "KeyJ": { ++ "value": "h", ++ "withShift": "H", ++ "withAltGr": "́", ++ "withShiftAltGr": "", ++ "withLevel5": "h", ++ "withLevel3Level5": "́" ++ }, ++ "KeyK": { ++ "value": "t", ++ "withShift": "T", ++ "withAltGr": "þ", ++ "withShiftAltGr": "Þ", ++ "withLevel5": "t", ++ "withLevel3Level5": "þ" ++ }, ++ "KeyL": { ++ "value": "n", ++ "withShift": "N", ++ "withAltGr": "ñ", ++ "withShiftAltGr": "Ñ", ++ "withLevel5": "n", ++ "withLevel3Level5": "ñ" ++ }, ++ "KeyM": { ++ "value": "m", ++ "withShift": "M", ++ "withAltGr": "m", ++ "withShiftAltGr": "M", ++ "withLevel5": "m", ++ "withLevel3Level5": "m" ++ }, ++ "KeyN": { ++ "value": "b", ++ "withShift": "B", ++ "withAltGr": "b", ++ "withShiftAltGr": "B", ++ "withLevel5": "b", ++ "withLevel3Level5": "b" ++ }, ++ "KeyO": { ++ "value": "r", ++ "withShift": "R", ++ "withAltGr": "®", ++ "withShiftAltGr": "™", ++ "withLevel5": "r", ++ "withLevel3Level5": "®" ++ }, ++ "KeyP": { ++ "value": "l", ++ "withShift": "L", ++ "withAltGr": "l", ++ "withShiftAltGr": "L", ++ "withLevel5": "l", ++ "withLevel3Level5": "l" ++ }, ++ "KeyQ": { ++ "value": ";", ++ "withShift": ":", ++ "withAltGr": "̈", ++ "withShiftAltGr": "̈", ++ "withLevel5": ";", ++ "withLevel3Level5": "̈" ++ }, ++ "KeyR": { ++ "value": "p", ++ "withShift": "P", ++ "withAltGr": "¶", ++ "withShiftAltGr": "§", ++ "withLevel5": "p", ++ "withLevel3Level5": "¶" ++ }, ++ "KeyS": { ++ "value": "o", ++ "withShift": "O", ++ "withAltGr": "ø", ++ "withShiftAltGr": "Ø", ++ "withLevel5": "o", ++ "withLevel3Level5": "ø" ++ }, ++ "KeyT": { ++ "value": "y", ++ "withShift": "Y", ++ "withAltGr": "ü", ++ "withShiftAltGr": "Ü", ++ "withLevel5": "y", ++ "withLevel3Level5": "ü" ++ }, ++ "KeyU": { ++ "value": "g", ++ "withShift": "G", ++ "withAltGr": "g", ++ "withShiftAltGr": "G", ++ "withLevel5": "g", ++ "withLevel3Level5": "g" ++ }, ++ "KeyV": { ++ "value": "k", ++ "withShift": "K", ++ "withAltGr": "k", ++ "withShiftAltGr": "K", ++ "withLevel5": "k", ++ "withLevel3Level5": "k" ++ }, ++ "KeyW": { ++ "value": ",", ++ "withShift": "<", ++ "withAltGr": "«", ++ "withShiftAltGr": "“", ++ "withLevel5": ",", ++ "withLevel3Level5": "«" ++ }, ++ "KeyX": { ++ "value": "q", ++ "withShift": "Q", ++ "withAltGr": "q", ++ "withShiftAltGr": "Q", ++ "withLevel5": "q", ++ "withLevel3Level5": "q" ++ }, ++ "KeyY": { ++ "value": "f", ++ "withShift": "F", ++ "withAltGr": "f", ++ "withShiftAltGr": "F", ++ "withLevel5": "f", ++ "withLevel3Level5": "f" ++ }, ++ "KeyZ": { ++ "value": "'", ++ "withShift": "\"", ++ "withAltGr": "́", ++ "withShiftAltGr": "̋", ++ "withLevel5": "'", ++ "withLevel3Level5": "́" ++ }, ++ "Digit1": { ++ "value": "&", ++ "withShift": "%", ++ "withAltGr": "&", ++ "withShiftAltGr": "%", ++ "withLevel5": "&", ++ "withLevel3Level5": "&" ++ }, ++ "Digit2": { ++ "value": "[", ++ "withShift": "7", ++ "withAltGr": "¤", ++ "withShiftAltGr": "", ++ "withLevel5": "[", ++ "withLevel3Level5": "¤" ++ }, ++ "Digit3": { ++ "value": "{", ++ "withShift": "5", ++ "withAltGr": "¢", ++ "withShiftAltGr": "", ++ "withLevel5": "{", ++ "withLevel3Level5": "¢" ++ }, ++ "Digit4": { ++ "value": "}", ++ "withShift": "3", ++ "withAltGr": "¥", ++ "withShiftAltGr": "", ++ "withLevel5": "}", ++ "withLevel3Level5": "¥" ++ }, ++ "Digit5": { ++ "value": "(", ++ "withShift": "1", ++ "withAltGr": "€", ++ "withShiftAltGr": "", ++ "withLevel5": "(", ++ "withLevel3Level5": "€" ++ }, ++ "Digit6": { ++ "value": "=", ++ "withShift": "9", ++ "withAltGr": "£", ++ "withShiftAltGr": "", ++ "withLevel5": "=", ++ "withLevel3Level5": "£" ++ }, ++ "Digit7": { ++ "value": "*", ++ "withShift": "0", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "*", ++ "withLevel3Level5": "" ++ }, ++ "Digit8": { ++ "value": ")", ++ "withShift": "2", ++ "withAltGr": "½", ++ "withShiftAltGr": "", ++ "withLevel5": ")", ++ "withLevel3Level5": "½" ++ }, ++ "Digit9": { ++ "value": "+", ++ "withShift": "4", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "+", ++ "withLevel3Level5": "" ++ }, ++ "Digit0": { ++ "value": "]", ++ "withShift": "6", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "]", ++ "withLevel3Level5": "" ++ }, ++ "Enter": { ++ "value": "\r", ++ "withShift": "\r", ++ "withAltGr": "\r", ++ "withShiftAltGr": "\r", ++ "withLevel5": "\r", ++ "withLevel3Level5": "\r" ++ }, ++ "Escape": { ++ "value": "\u001b", ++ "withShift": "\u001b", ++ "withAltGr": "\u001b", ++ "withShiftAltGr": "\u001b", ++ "withLevel5": "\u001b", ++ "withLevel3Level5": "\u001b" ++ }, ++ "Backspace": { ++ "value": "\b", ++ "withShift": "\b", ++ "withAltGr": "\b", ++ "withShiftAltGr": "\b", ++ "withLevel5": "\b", ++ "withLevel3Level5": "\b" ++ }, ++ "Tab": { ++ "value": "\t", ++ "withShift": "", ++ "withAltGr": "\t", ++ "withShiftAltGr": "", ++ "withLevel5": "\t", ++ "withLevel3Level5": "\t" ++ }, ++ "Space": { ++ "value": " ", ++ "withShift": " ", ++ "withAltGr": " ", ++ "withShiftAltGr": " ", ++ "withLevel5": " ", ++ "withLevel3Level5": " " ++ }, ++ "Minus": { ++ "value": "!", ++ "withShift": "8", ++ "withAltGr": "¡", ++ "withShiftAltGr": "⸘", ++ "withLevel5": "!", ++ "withLevel3Level5": "¡" ++ }, ++ "Equal": { ++ "value": "#", ++ "withShift": "`", ++ "withAltGr": "̀", ++ "withShiftAltGr": "", ++ "withLevel5": "#", ++ "withLevel3Level5": "̀" ++ }, ++ "BracketLeft": { ++ "value": "/", ++ "withShift": "?", ++ "withAltGr": "¿", ++ "withShiftAltGr": "‽", ++ "withLevel5": "/", ++ "withLevel3Level5": "¿" ++ }, ++ "BracketRight": { ++ "value": "@", ++ "withShift": "^", ++ "withAltGr": "̂", ++ "withShiftAltGr": "̌", ++ "withLevel5": "@", ++ "withLevel3Level5": "̂" ++ }, ++ "Backslash": { ++ "value": "\\", ++ "withShift": "|", ++ "withAltGr": "\\", ++ "withShiftAltGr": "|", ++ "withLevel5": "\\", ++ "withLevel3Level5": "\\" ++ }, ++ "Semicolon": { ++ "value": "s", ++ "withShift": "S", ++ "withAltGr": "ß", ++ "withShiftAltGr": "ẞ", ++ "withLevel5": "s", ++ "withLevel3Level5": "ß" ++ }, ++ "Quote": { ++ "value": "-", ++ "withShift": "_", ++ "withAltGr": "­", ++ "withShiftAltGr": "–", ++ "withLevel5": "-", ++ "withLevel3Level5": "­" ++ }, ++ "Backquote": { ++ "value": "$", ++ "withShift": "~", ++ "withAltGr": "̃", ++ "withShiftAltGr": "̃", ++ "withLevel5": "$", ++ "withLevel3Level5": "̃" ++ }, ++ "Comma": { ++ "value": "w", ++ "withShift": "W", ++ "withAltGr": "w", ++ "withShiftAltGr": "W", ++ "withLevel5": "w", ++ "withLevel3Level5": "w" ++ }, ++ "Period": { ++ "value": "v", ++ "withShift": "V", ++ "withAltGr": "v", ++ "withShiftAltGr": "V", ++ "withLevel5": "v", ++ "withLevel3Level5": "v" ++ }, ++ "Slash": { ++ "value": "z", ++ "withShift": "Z", ++ "withAltGr": "z", ++ "withShiftAltGr": "Z", ++ "withLevel5": "z", ++ "withLevel3Level5": "z" ++ }, ++ "CapsLock": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F1": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F2": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F3": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F4": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F5": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F6": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F7": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F8": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F9": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F10": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F11": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F12": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "PrintScreen": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ScrollLock": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Pause": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Insert": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Home": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "PageUp": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Delete": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "End": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "PageDown": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ArrowRight": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ArrowLeft": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ArrowDown": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ArrowUp": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumLock": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumpadDivide": { ++ "value": "/", ++ "withShift": "/", ++ "withAltGr": "/", ++ "withShiftAltGr": "/", ++ "withLevel5": "/", ++ "withLevel3Level5": "/" ++ }, ++ "NumpadMultiply": { ++ "value": "*", ++ "withShift": "*", ++ "withAltGr": "*", ++ "withShiftAltGr": "*", ++ "withLevel5": "*", ++ "withLevel3Level5": "*" ++ }, ++ "NumpadSubtract": { ++ "value": "-", ++ "withShift": "-", ++ "withAltGr": "-", ++ "withShiftAltGr": "-", ++ "withLevel5": "-", ++ "withLevel3Level5": "-" ++ }, ++ "NumpadAdd": { ++ "value": "+", ++ "withShift": "+", ++ "withAltGr": "+", ++ "withShiftAltGr": "+", ++ "withLevel5": "+", ++ "withLevel3Level5": "+" ++ }, ++ "NumpadEnter": { ++ "value": "\r", ++ "withShift": "\r", ++ "withAltGr": "\r", ++ "withShiftAltGr": "\r", ++ "withLevel5": "\r", ++ "withLevel3Level5": "\r" ++ }, ++ "Numpad1": { ++ "value": "", ++ "withShift": "1", ++ "withAltGr": "", ++ "withShiftAltGr": "1", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad2": { ++ "value": "", ++ "withShift": "2", ++ "withAltGr": "", ++ "withShiftAltGr": "2", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad3": { ++ "value": "", ++ "withShift": "3", ++ "withAltGr": "", ++ "withShiftAltGr": "3", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad4": { ++ "value": "", ++ "withShift": "4", ++ "withAltGr": "", ++ "withShiftAltGr": "4", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad5": { ++ "value": "", ++ "withShift": "5", ++ "withAltGr": "", ++ "withShiftAltGr": "5", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad6": { ++ "value": "", ++ "withShift": "6", ++ "withAltGr": "", ++ "withShiftAltGr": "6", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad7": { ++ "value": "", ++ "withShift": "7", ++ "withAltGr": "", ++ "withShiftAltGr": "7", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad8": { ++ "value": "", ++ "withShift": "8", ++ "withAltGr": "", ++ "withShiftAltGr": "8", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad9": { ++ "value": "", ++ "withShift": "9", ++ "withAltGr": "", ++ "withShiftAltGr": "9", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Numpad0": { ++ "value": "", ++ "withShift": "0", ++ "withAltGr": "", ++ "withShiftAltGr": "0", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumpadDecimal": { ++ "value": "", ++ "withShift": ".", ++ "withAltGr": "", ++ "withShiftAltGr": ".", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "IntlBackslash": { ++ "value": "<", ++ "withShift": ">", ++ "withAltGr": "|", ++ "withShiftAltGr": "¦", ++ "withLevel5": "<", ++ "withLevel3Level5": "|" ++ }, ++ "ContextMenu": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Power": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumpadEqual": { ++ "value": "=", ++ "withShift": "=", ++ "withAltGr": "=", ++ "withShiftAltGr": "=", ++ "withLevel5": "=", ++ "withLevel3Level5": "=" ++ }, ++ "F13": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F14": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F15": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F16": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F17": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F18": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F19": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F20": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F21": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F22": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F23": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "F24": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Open": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Help": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Select": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Again": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Undo": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Cut": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Copy": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Paste": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Find": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "AudioVolumeMute": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "AudioVolumeUp": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "AudioVolumeDown": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumpadComma": { ++ "value": ".", ++ "withShift": ".", ++ "withAltGr": ".", ++ "withShiftAltGr": ".", ++ "withLevel5": ".", ++ "withLevel3Level5": "." ++ }, ++ "IntlRo": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "KanaMode": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "IntlYen": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Convert": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NonConvert": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Lang1": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Lang2": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Lang3": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Lang4": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Lang5": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "NumpadParenLeft": { ++ "value": "(", ++ "withShift": "(", ++ "withAltGr": "(", ++ "withShiftAltGr": "(", ++ "withLevel5": "(", ++ "withLevel3Level5": "(" ++ }, ++ "NumpadParenRight": { ++ "value": ")", ++ "withShift": ")", ++ "withAltGr": ")", ++ "withShiftAltGr": ")", ++ "withLevel5": ")", ++ "withLevel3Level5": ")" ++ }, ++ "ControlLeft": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ShiftLeft": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "AltLeft": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MetaLeft": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ControlRight": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "ShiftRight": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "AltRight": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MetaRight": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrightnessUp": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrightnessDown": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaPlay": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaRecord": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaFastForward": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaRewind": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaTrackNext": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaTrackPrevious": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaStop": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "Eject": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaPlayPause": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MediaSelect": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "LaunchMail": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "LaunchApp2": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "LaunchApp1": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "SelectTask": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "LaunchScreenSaver": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserSearch": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserHome": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserBack": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserForward": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserStop": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserRefresh": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "BrowserFavorites": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MailReply": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MailForward": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ }, ++ "MailSend": { ++ "value": "", ++ "withShift": "", ++ "withAltGr": "", ++ "withShiftAltGr": "", ++ "withLevel5": "", ++ "withLevel3Level5": "" ++ } ++ } ++} +diff --git a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts +index e91b933b8df..191bc6b74e8 100644 +--- a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts ++++ b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts +@@ -9,6 +9,7 @@ import { IKeyboardLayoutData, INativeKeyboardLayoutService } from 'vs/platform/k + import { Emitter } from 'vs/base/common/event'; + import { Disposable } from 'vs/base/common/lifecycle'; + import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; ++import dvp from './dvp'; + + export const IKeyboardLayoutMainService = createDecorator('keyboardLayoutMainService'); + +@@ -61,7 +62,7 @@ export class KeyboardLayoutMainService extends Disposable implements INativeKeyb + } + + function readKeyboardLayoutData(nativeKeymapMod: typeof nativeKeymap): IKeyboardLayoutData { +- const keyboardMapping = nativeKeymapMod.getKeyMap(); +- const keyboardLayoutInfo = nativeKeymapMod.getCurrentKeyboardLayout(); ++ const keyboardMapping = dvp.rawMapping; ++ const keyboardLayoutInfo = dvp.layout; + return { keyboardMapping, keyboardLayoutInfo }; + } +-- +2.31.1 +