New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect keystroke resolution on Linux when ctrl modifier is used #12951

Closed
code-tree opened this Issue Oct 12, 2016 · 48 comments

Comments

Projects
None yet
@code-tree

code-tree commented Oct 12, 2016

Prerequisites

Description

When using a custom keyboard layout (e.g. Dvorak), characters are entered correctly when typing, however, key bindings are mapped as if I am using QWERTY layout.

(making Atom unusable for me)

Steps to Reproduce

  1. Type normally using DVORAK layout
  2. Use any keybinding (e.g. ctrl-c)

Expected behavior: Selected text is copied (when using ctrl+c)

Actual behavior: ctrl+i is triggered

image

Versions

Atom : 1.12.0-beta0
Electron: 1.3.6
Chrome : 52.0.2743.82
Node : 6.3.0

OS: Ubuntu 16.04

@Ben3eeE

This comment has been minimized.

Member

Ben3eeE commented Oct 12, 2016

Did this work before you installed Atom 1.12.0-beta0?

@code-tree

This comment has been minimized.

code-tree commented Oct 12, 2016

Yes, everything was fine before I upgraded to 1.12.0-beta0

@Evpok

This comment has been minimized.

Contributor

Evpok commented Oct 12, 2016

Exact same problem here (same version and OS too) but with the fr (variant) layout.

@Ben3eeE

This comment has been minimized.

Member

Ben3eeE commented Oct 12, 2016

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 12, 2016

Wow, I'm worried this might be a bug in Chrome on Linux. I'll fire up a VM to investigate.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 12, 2016

Yep. Looks like Chrome is reporting incorrect KeyboardEvent.key values on Linux with Dvorak when modifier keys are held down. 😭 Still investigating solutions.

@Ben3eeE Ben3eeE added bug linux and removed needs-reproduction labels Oct 12, 2016

@code-tree

This comment has been minimized.

code-tree commented Oct 13, 2016

I'm running Chrome 55.0.2882.0 dev (64-bit) on Ubuntu (as a browser that is, not Atom), and key bindings work ok.

(Not sure if that's relevant though)

@Ben3eeE Ben3eeE referenced this issue Oct 13, 2016

Closed

1.12.0-beta1 breaks palette on Fedora #12969

6 of 6 tasks complete
@quasipedia

This comment has been minimized.

quasipedia commented Oct 13, 2016

@code-tree - I tried with both Chromium 53.0.2785.116 Fedora Project (64-bit) and Chrome-unstable Version 55.0.2882.0 dev (64-bit), and the key seems to be mapped wrong.

On CTRL-P I get:

selection_037

(so: it registers as an R instead)

Oddly enough, the browser will still bring up the print dialogue (so: internally the event is treated as a CTRL-P, not as a CTRL-R...).

Go figure... 😭

@escobera

This comment has been minimized.

escobera commented Oct 13, 2016

I'm having the same problem on

1.12.0-beta1
Linux Mint 18

Keyboard is pt-BR.

ctrl+/ is reported as ctrl+unidentified
ctrl+; is reported as ctrl+/

text is working fine with my keyboard, only shortcuts are misbehaving.

@Ben3eeE

This comment has been minimized.

Member

Ben3eeE commented Oct 13, 2016

We are working on it: atom/atom-keymap#144 (comment)

@code-tree

This comment has been minimized.

code-tree commented Oct 14, 2016

@quasipedia Oh, yea, I just tested if it worked or not. You're right, it is incorrect.

image

(I'm pressing QWERTY n, which should be DVORAK b, as Dvorak is enabled)

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 14, 2016

Pretty close to having a workaround for this ready. We're planning to build our own keymap using X11 keyboard APIs so we can lookup the correct key value when ctrlKey is true.

atom/keyboard-layout#18

@quasipedia

This comment has been minimized.

quasipedia commented Oct 14, 2016

@nathansobo - That is excellent!. Please make sure it works with Fedora in Wayland mode too though. Lots of Fedora guys use wayland nowadays and - most importantly - in exactly 1 month F25 will hit the shelves and wayland will be the default for everybody. :)

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 14, 2016

@quasipedia Can you confirm whether this ctrlKey bug is an issue on Wayland as well? If it isn't, life gets easier in that we'll just have to disable the custom maps on Wayland. Would anybody be interested in contributing a Wayland implementation to the keyboard-layout library?

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 14, 2016

Can anybody suggest a resource for how I might detect if Wayland is running rather than X from a C++ library? Looks like this Firefox bug has some info. Anything else?

@nathansobo nathansobo changed the title from Custom keyboard layout ignored by key bindings to Incorrect keystroke resolution on Linux when ctrl modifier is used Oct 14, 2016

@quasipedia

This comment has been minimized.

quasipedia commented Oct 14, 2016

@nathansobo - I can confirm the the issue is there in Atom and Chrome when running a Wayland session. I'm unable to say - though - if they are running under "native wayland" (possible, but not so probable) or rather on "xwayland" (which is the X "emulation layer" for wayland to run legacy apps). If the latter is the case, it may well be that the fix done using the X11 API may work under xwayland too...

Unluckily at this stage I don't have the possibility to commit private time to port the library (and my employer gave me a negative answer, when asked), sorry. :(

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 14, 2016

No worries. Maybe you can give our candidate build a spin on Wayland when it's ready? I'm really hoping the x emulation layer works for us so I don't have to go back and add a bunch of preprocessor macros, but I guess we'll see.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 15, 2016

Okay, I have what seems to be a working fix based on my local tests, but I can't release it until Travis merges this addition to their package whitelist so it can build on their containerized architecture.

travis-ci/apt-package-safelist#3434

Not sure how long these things take.

In the meantime if people want to try building #12985 from source and testing that would be super helpful.

@lakano

This comment has been minimized.

lakano commented Oct 16, 2016

@nathansobo Thanks for your patch. Just for information, I can confirm Atom run under XWayland and not directly under Wayland, here is the result of xwininfo on the Atom window:

% xwininfo

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x1a00001 "Welcome Guide — Atom"

  Absolute upper-left X:  0
  Absolute upper-left Y:  27
  Relative upper-left X:  1
  Relative upper-left Y:  1
  Width: 1920
  Height: 1053
  Depth: 24
  Visual: 0x24
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x23 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +0+27  -0+27  -0-0  +0-0
  -geometry 1920x1053+-1--1

I have the same keyboard problem, I'm under Fedora 25, Wayland session, with a french keyboard and Atom beta1. I'm waiting the Travis merges conflict resolution and the rpm build to test.
Regards,

EDIT: I've just tested to disable Wayland and test the beta1 under Xorg and I have the same keyboard problem, so I suppose it's not relayed to Wayland.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 16, 2016

@lakano The big question is whether the workaround we're working on will work under XWayland. But to test that you'll need to wait for the Travis build or build from source.

@quasipedia

This comment has been minimized.

quasipedia commented Oct 17, 2016

Well done @nathansobo it works! :) 👍

@quasipedia

This comment has been minimized.

quasipedia commented Oct 17, 2016

...actually. I spoke to early, @nathansobo: it does only work on the Setting page when pressing CTRL-p. But it does not work anywhere else... :(

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 17, 2016

@quasipedia We still don't have a release out with the fixes, so unless you're building from source on the branch associated with PR #12985, it won't work yet.

@quasipedia

This comment has been minimized.

quasipedia commented Oct 18, 2016

@nathansobo - Sorry my bad. I thought beta-2 was the version with the fixes. Still, odd that CTRL-P worked on Settings... 🤔

@Kampfmoehre

This comment has been minimized.

Kampfmoehre commented Oct 24, 2016

I cannot build from branch ns-fix-keymap-ctrl-issue. Build fails with error:

> oniguruma@6.1.0 install /home/<user>/dev/atom/node_modules/oniguruma
> node-gyp rebuild

make: Entering directory '/home/<user>/dev/atom/node_modules/oniguruma/build'
  CC(target) Release/obj.target/oniguruma/deps/onig/regcomp.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regenc.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regerror.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regexec.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regext.o
  CC(target) Release/obj.target/oniguruma/deps/onig/reggnu.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regparse.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regposerr.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regposix.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regsyntax.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regtrav.o
  CC(target) Release/obj.target/oniguruma/deps/onig/regversion.o
  CC(target) Release/obj.target/oniguruma/deps/onig/st.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/ascii.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/big5.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/cp1251.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_jp.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_kr.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_tw.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/gb18030.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_1.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_2.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_3.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_4.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_5.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_6.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_7.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_8.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_9.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_10.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_11.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_13.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_14.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_15.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_16.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8_r.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/mktable.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/sjis.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/unicode.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_be.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_le.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_be.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_le.o
  CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf8.o
  AR(target) Release/obj.target/oniguruma.a
  COPY Release/oniguruma.a
  CXX(target) Release/obj.target/onig_scanner/src/onig-result.o
  CXX(target) Release/obj.target/onig_scanner/src/onig-reg-exp.o
  CXX(target) Release/obj.target/onig_scanner/src/onig-scanner.o
  CXX(target) Release/obj.target/onig_scanner/src/onig-scanner-worker.o
  CXX(target) Release/obj.target/onig_scanner/src/onig-searcher.o
  CXX(target) Release/obj.target/onig_scanner/src/onig-string.o
  SOLINK_MODULE(target) Release/obj.target/onig_scanner.node
  COPY Release/onig_scanner.node
make: Leaving directory '/home/<user>/dev/atom/node_modules/oniguruma/build'

> marker-index@4.0.1 install /home/<user>/dev/atom/node_modules/marker-index
> node-gyp rebuild

make: Entering directory '/home/<user>/dev/atom/node_modules/marker-index/build'
  CXX(target) Release/obj.target/marker_index/src/native/iterator.o
  CXX(target) Release/obj.target/marker_index/src/native/marker-index-wrapper.o
  CXX(target) Release/obj.target/marker_index/src/native/marker-index.o
  CXX(target) Release/obj.target/marker_index/src/native/node.o
  CXX(target) Release/obj.target/marker_index/src/native/point.o
  SOLINK_MODULE(target) Release/obj.target/marker_index.node
  COPY Release/marker_index.node
make: Leaving directory '/home/<user>/dev/atom/node_modules/marker-index/build'

> runas@3.1.1 install /home/<user>/dev/atom/node_modules/runas
> node-gyp rebuild

make: Entering directory '/home/<user>/dev/atom/node_modules/runas/build'
  CXX(target) Release/obj.target/runas/src/main.o
  CXX(target) Release/obj.target/runas/src/runas_posix.o
  CXX(target) Release/obj.target/runas/src/fork.o
  SOLINK_MODULE(target) Release/obj.target/runas.node
  COPY Release/runas.node
make: Leaving directory '/home/<user>/dev/atom/node_modules/runas/build'

> keyboard-layout@2.0.0 install /home/<user>/dev/atom/node_modules/keyboard-layout
> node-gyp rebuild

make: Entering directory '/home/<user>/dev/atom/node_modules/keyboard-layout/build'
  CXX(target) Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o
keyboard-layout-manager.target.mk:96: recipe for target 'Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o' failed
make: Leaving directory '/home/<user>/dev/atom/node_modules/keyboard-layout/build'
atom@1.13.0-dev /home/<user>/dev/atom
├── async@0.2.6 
├── atom-ui@0.4.1 
├─┬ babel-core@5.8.38 
│ ├── babel-plugin-constant-folding@1.0.1 
│ ├── babel-plugin-dead-code-elimination@1.0.2 
│ ├── babel-plugin-eval@1.0.1 
│ ├── babel-plugin-inline-environment-variables@1.0.1 
│ ├── babel-plugin-jscript@1.0.4 
│ ├── babel-plugin-member-expression-literals@1.0.1 
│ ├── babel-plugin-property-literals@1.0.1 
│ ├── babel-plugin-proto-to-assign@1.0.4 
│ ├── babel-plugin-react-constant-elements@1.0.3 
│ ├── babel-plugin-react-display-name@1.0.3 
│ ├── babel-plugin-remove-console@1.0.1 
│ ├── babel-plugin-remove-debugger@1.0.1 
│ ├── babel-plugin-runtime@1.0.7 
│ ├─┬ babel-plugin-undeclared-variables-check@1.0.2 
│ │ └── leven@1.0.2 
│ ├── babel-plugin-undefined-to-void@1.1.6 
│ ├── babylon@5.8.38 
│ ├── bluebird@2.11.0 
│ ├─┬ chalk@1.1.3 
│ │ ├── ansi-styles@2.2.1 
│ │ ├── escape-string-regexp@1.0.5 
│ │ ├─┬ has-ansi@2.0.0 
│ │ │ └── ansi-regex@2.0.0 
│ │ ├── strip-ansi@3.0.1 
│ │ └── supports-color@2.0.0 
│ ├── convert-source-map@1.3.0 
│ ├── core-js@1.2.7 
│ ├─┬ debug@2.2.0 
│ │ └── ms@0.7.1 
│ ├─┬ detect-indent@3.0.1 
│ │ ├── get-stdin@4.0.1 
│ │ └── minimist@1.2.0 
│ ├── esutils@2.0.2 
│ ├── fs-readdir-recursive@0.1.2 
│ ├── globals@6.4.1 
│ ├─┬ home-or-tmp@1.0.0 
│ │ ├── os-tmpdir@1.0.2 
│ │ └── user-home@1.1.1 
│ ├─┬ is-integer@1.0.6 
│ │ └─┬ is-finite@1.0.2 
│ │   └── number-is-nan@1.0.1 
│ ├── js-tokens@1.0.1 
│ ├── json5@0.4.0 
│ ├── lodash@3.10.1 
│ ├─┬ minimatch@2.0.10 
│ │ └─┬ brace-expansion@1.1.6 
│ │   ├── balanced-match@0.4.2 
│ │   └── concat-map@0.0.1 
│ ├─┬ output-file-sync@1.1.2 
│ │ ├── graceful-fs@4.1.9 
│ │ ├─┬ mkdirp@0.5.1 
│ │ │ └── minimist@0.0.8 
│ │ └── object-assign@4.1.0 
│ ├── path-exists@1.0.0 
│ ├── path-is-absolute@1.0.1 
│ ├── private@0.1.6 
│ ├─┬ regenerator@0.8.40 
│ │ ├─┬ commoner@0.10.4 
│ │ │ ├─┬ commander@2.9.0 
│ │ │ │ └── graceful-readlink@1.0.1 
│ │ │ ├─┬ detective@4.3.2 
│ │ │ │ ├── acorn@3.3.0 
│ │ │ │ └── defined@1.0.0 
│ │ │ ├─┬ glob@5.0.15 
│ │ │ │ ├─┬ inflight@1.0.6 
│ │ │ │ │ └── wrappy@1.0.2 
│ │ │ │ └── once@1.4.0 
│ │ │ ├─┬ mkdirp@0.5.1 
│ │ │ │ └── minimist@0.0.8 
│ │ │ └── q@1.4.1 
│ │ ├─┬ defs@1.1.1 
│ │ │ ├─┬ alter@0.2.0 
│ │ │ │ └── stable@0.1.5 
│ │ │ ├── ast-traverse@0.1.1 
│ │ │ ├── breakable@1.0.0 
│ │ │ ├── simple-fmt@0.1.0 
│ │ │ ├── simple-is@0.2.0 
│ │ │ ├── stringmap@0.2.2 
│ │ │ ├── stringset@0.2.1 
│ │ │ ├── tryor@0.1.2 
│ │ │ └─┬ yargs@3.27.0 
│ │ │   ├── camelcase@1.2.1 
│ │ │   └─┬ cliui@2.1.0 
│ │ │     ├─┬ center-align@0.1.3 
│ │ │     │ ├─┬ align-text@0.1.4 
│ │ │     │ │ ├─┬ kind-of@3.0.4 
│ │ │     │ │ │ └── is-buffer@1.1.4 
│ │ │     │ │ ├── longest@1.0.1 
│ │ │     │ │ └── repeat-string@1.6.1 
│ │ │     │ └── lazy-cache@1.0.4 
│ │ │     ├── right-align@0.1.3 
│ │ │     └── wordwrap@0.0.2 
│ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb 
│ │ ├─┬ recast@0.10.33 
│ │ │ └── ast-types@0.8.12 
│ │ └── through@2.3.8 
│ ├─┬ regexpu@1.3.0 
│ │ ├── esprima@2.7.3 
│ │ ├── regenerate@1.3.1 
│ │ ├── regjsgen@0.2.0 
│ │ └─┬ regjsparser@0.1.5 
│ │   └── jsesc@0.5.0 
│ ├── repeating@1.1.3 
│ ├── shebang-regex@1.0.0 
│ ├── slash@1.0.0 
│ ├── source-map@0.5.6 
│ ├─┬ source-map-support@0.2.10 
│ │ └── source-map@0.1.32 
│ ├── to-fast-properties@1.0.2 
│ ├── trim-right@1.0.1 
│ └── try-resolve@1.0.1 
├─┬ cached-run-in-this-context@0.4.1 
│ └── nan@2.4.0 
├─┬ chai@3.5.0 
│ ├── assertion-error@1.0.2 
│ ├─┬ deep-eql@0.1.3 
│ │ └── type-detect@0.1.1 
│ └── type-detect@1.0.0 
├── clear-cut@2.0.1 
├── coffee-script@1.11.1 
├─┬ color@0.7.3 
│ ├── color-convert@0.5.3 
│ └─┬ color-string@0.2.4 
│   └── color-name@1.0.1 
├── dedent@0.6.0 
├─┬ devtron@1.3.0 
│ ├── highlight.js@9.7.0 
│ └── humanize-plus@1.8.2 
├── event-kit@2.2.0 
├── find-parent-dir@0.3.0 
├─┬ first-mate@6.1.0 
│ ├── emissary@1.3.3 
│ └── event-kit@1.5.0 
├─┬ fs-plus@2.9.2 
│ ├── async@0.2.10 
│ ├── mkdirp@0.3.5 
│ ├── rimraf@2.2.8 
│ └─┬ tildify@1.2.0 
│   └── os-homedir@1.0.2 
├─┬ fstream@0.1.24 
│ ├── graceful-fs@2.0.3 
│ └── inherits@2.0.3 
├── fuzzaldrin@2.1.0 
├── git-utils@4.1.2 
├── grim@1.5.0 
├── jasmine-json@0.0.3 
├─┬ jasmine-tagged@1.1.4 
│ └─┬ jasmine-focused@1.0.7 
│   └─┬ jasmine-node@1.10.2  (git+https://github.com/kevinsawicki/jasmine-node.git#81af4f953a2b7dfb5bde8331c05362a4b464c5ef)
│     ├─┬ coffeestack@1.1.2 
│     │ ├── coffee-script@1.8.0 
│     │ └── source-map@0.1.43 
│     ├─┬ gaze@0.3.4 
│     │ ├─┬ fileset@0.1.8 
│     │ │ ├─┬ glob@3.2.11 
│     │ │ │ └── minimatch@0.3.0 
│     │ │ └── minimatch@0.4.0 
│     │ └── minimatch@0.2.14 
│     ├─┬ jasmine-reporters@2.2.0 
│     │ ├─┬ jasmine@2.5.2 
│     │ │ ├── exit@0.1.2 
│     │ │ ├─┬ glob@7.1.1 
│     │ │ │ ├── fs.realpath@1.0.0 
│     │ │ │ └── minimatch@3.0.3 
│     │ │ └── jasmine-core@2.5.2 
│     │ ├─┬ mkdirp@0.5.1 
│     │ │ └── minimist@0.0.8 
│     │ └── xmldom@0.1.22 
│     └── requirejs@2.3.2 
├── jquery@2.1.4 
├── key-path-helpers@0.4.0 
├─┬ less-cache@0.23.0 
│ ├─┬ less@1.7.5 
│ │ ├─┬ clean-css@2.2.23 
│ │ │ └── commander@2.2.0 
│ │ ├─┬ graceful-fs@3.0.11 
│ │ │ └── natives@1.1.0 
│ │ ├── mime@1.2.11 
│ │ ├─┬ mkdirp@0.5.1 
│ │ │ └── minimist@0.0.8 
│ │ ├─┬ request@2.40.0 
│ │ │ ├── aws-sign2@0.5.0 
│ │ │ ├── forever-agent@0.5.2 
│ │ │ ├─┬ form-data@0.1.4 
│ │ │ │ ├── async@0.9.2 
│ │ │ │ └─┬ combined-stream@0.0.7 
│ │ │ │   └── delayed-stream@0.0.5 
│ │ │ ├─┬ hawk@1.1.1 
│ │ │ │ ├── boom@0.4.2 
│ │ │ │ ├── cryptiles@0.2.2 
│ │ │ │ ├── hoek@0.9.1 
│ │ │ │ └── sntp@0.2.4 
│ │ │ ├─┬ http-signature@0.10.1 
│ │ │ │ ├── asn1@0.1.11 
│ │ │ │ ├── assert-plus@0.1.5 
│ │ │ │ └── ctype@0.5.3 
│ │ │ ├── json-stringify-safe@5.0.1 
│ │ │ ├── mime-types@1.0.2 
│ │ │ ├── node-uuid@1.4.7 
│ │ │ ├── oauth-sign@0.3.0 
│ │ │ ├── qs@1.0.2 
│ │ │ ├── stringstream@0.0.5 
│ │ │ ├── tough-cookie@2.3.1 
│ │ │ └── tunnel-agent@0.4.3 
│ │ └── source-map@0.1.43 
│ └── walkdir@0.0.7 
├─┬ line-top-index@0.2.0 
│ └── random-seed@0.2.0 
├── marked@0.3.6 
├─┬ mocha@2.5.1 
│ ├── commander@2.3.0 
│ ├── diff@1.4.0 
│ ├── escape-string-regexp@1.0.2 
│ ├─┬ glob@3.2.11 
│ │ └─┬ minimatch@0.3.0 
│ │   ├── lru-cache@2.7.3 
│ │   └── sigmund@1.0.1 
│ ├── growl@1.9.2 
│ ├─┬ jade@0.26.3 
│ │ ├── commander@0.6.1 
│ │ └── mkdirp@0.3.0 
│ ├─┬ mkdirp@0.5.1 
│ │ └── minimist@0.0.8 
│ ├── supports-color@1.2.0 
│ └── to-iso-string@0.0.2 
├─┬ normalize-package-data@2.3.5 
│ ├── hosted-git-info@2.1.5 
│ ├─┬ is-builtin-module@1.0.0 
│ │ └── builtin-modules@1.1.1 
│ └─┬ validate-npm-package-license@3.0.1 
│   ├─┬ spdx-correct@1.0.2 
│   │ └── spdx-license-ids@1.2.2 
│   └── spdx-expression-parse@1.0.4 
├── nslog@3.0.0 
├── oniguruma@6.1.0 
├─┬ pathwatcher@6.5.0 
│ ├── async@0.2.10 
│ ├── event-kit@1.5.0 
│ └── iconv-lite@0.4.13 
├─┬ property-accessors@1.1.3 
│ ├─┬ es6-weak-map@0.1.4 
│ │ ├── d@0.1.1 
│ │ ├─┬ es5-ext@0.10.12 
│ │ │ ├── es6-iterator@2.0.0 
│ │ │ └── es6-symbol@3.1.0 
│ │ ├── es6-iterator@0.1.3 
│ │ └── es6-symbol@2.0.1 
│ └── mixto@1.0.0 
├── random-words@0.0.1 
├── resolve@1.1.7 
├── runas@3.1.1 
├─┬ scandal@2.2.1 
│ ├─┬ argparse@1.0.9 
│ │ └── sprintf-js@1.0.3 
│ ├── isbinaryfile@2.0.4 
│ ├── split@1.0.0 
│ └── temp@0.8.3 
├─┬ scoped-property-store@0.17.0 
│ ├── atom-slick@2.0.0 
│ ├── event-kit@1.5.0 
│ └── key-path-helpers@0.1.0 
├─┬ scrollbar-style@3.2.0 
│ └── event-kit@1.5.0 
├─┬ season@5.4.1 
│ ├─┬ cson-parser@1.0.9 
│ │ └── coffee-script@1.9.0 
│ └─┬ optimist@0.4.0 
│   └── wordwrap@0.0.3 
├── semver@4.3.6 
├─┬ service-hub@0.7.2 
│ └── event-kit@1.5.0 
├─┬ sinon@1.17.4 
│ ├── formatio@1.1.1 
│ ├── lolex@1.3.2 
│ ├── samsam@1.1.2 
│ └─┬ util@0.10.3 
│   └── inherits@2.0.1 
├─┬ source-map-support@0.3.3 
│ └─┬ source-map@0.1.32 
│   └── amdefine@1.0.0 
├── temp@0.8.1 
├─┬ text-buffer@9.3.0 
│ ├── atom-patch@0.3.0 
│ ├── delegato@1.0.0 
│ ├── diff@2.2.3 
│ ├── display-index@0.1.0 
│ ├── line-length-index@0.0.2 
│ ├── marker-index@4.0.1 
│ ├─┬ pathwatcher@6.7.1 
│ │ ├── async@0.2.10 
│ │ └── event-kit@1.5.0 
│ ├─┬ serializable@1.0.3 
│ │ └── get-parameter-names@0.2.0 
│ └── span-skip-list@0.2.0 
├─┬ typescript-simple@1.0.0 
│ └── typescript@1.4.1 
├─┬ underscore-plus@1.6.6 
│ └── underscore@1.6.0 
├── winreg@1.2.2 
└─┬ yargs@3.32.0 
  ├── camelcase@2.1.1 
  ├─┬ cliui@3.2.0 
  │ └── wrap-ansi@2.0.0 
  ├── decamelize@1.2.0 
  ├─┬ os-locale@1.4.0 
  │ └─┬ lcid@1.0.0 
  │   └── invert-kv@1.0.0 
  ├─┬ string-width@1.0.2 
  │ ├── code-point-at@1.0.1 
  │ └── is-fullwidth-code-point@1.0.0 
  ├── window-size@0.1.4 
  └── y18n@3.2.1 


npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@2.0.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.4.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated jade@0.26.3: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated to-iso-string@0.0.2: to-iso-string has been deprecated, use @segment/to-iso-string instead.
npm WARN prefer global typescript@1.4.1 should be installed with -g
npm WARN prefer global jasmine-node@1.10.2 should be installed with -g
../src/onig-string.cc: In constructor ‘OnigString::OnigString(v8::Local<v8::String>)’:
../src/onig-string.cc:25:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   hasMultiByteChars = (value->Length() != utf8_length_);
                                        ^
../src/native/marker-index-wrapper.cc: In static member function ‘static bool MarkerIndexWrapper::IsFinite(v8::Local<v8::Integer>)’:
../src/native/marker-index-wrapper.cc:128:92: warning: ‘v8::Local<v8::Value> v8::Object::CallAsFunction(v8::Local<v8::Value>, int, v8::Local<v8::Value>*)’ is deprecated (declared at /home/<user>/.atom/.node-gyp/.node-gyp/iojs-1.3.6/deps/v8/include/v8.h:2983): Use maybe version [-Wdeprecated-declarations]
     Local<Value> result = Nan::New(is_finite_function)->CallAsFunction(Nan::Null(), 1, argv);
                                                                                            ^
In file included from ../src/keyboard-layout-manager-linux.cc:1:0:
../src/keyboard-layout-manager.h:7:22: fatal error: X11/Xlib.h: No such file or directory
 #include <X11/Xlib.h>
                      ^
compilation terminated.
make: *** [Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/<user>/dev/atom/apm/node_modules/atom-package-manager/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.16.0-4-amd64
gyp ERR! command "/home/<user>/dev/atom/apm/node_modules/atom-package-manager/bin/node" "/home/<user>/dev/atom/apm/node_modules/atom-package-manager/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /home/<user>/dev/atom/node_modules/keyboard-layout
gyp ERR! node -v v4.4.5
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok 
npm ERR! Linux 3.16.0-4-amd64
npm ERR! argv "/home/<user>/dev/atom/apm/node_modules/atom-package-manager/bin/node" "/home/<user>/dev/atom/apm/node_modules/atom-package-manager/node_modules/npm/bin/npm-cli.js" "--globalconfig" "/home/<user>/.atom/.apm/.apmrc" "--userconfig" "/home/<user>/.atom/.apmrc" "install" "--runtime=electron" "--target=1.3.6" "--arch=x64"
npm ERR! node v4.4.5
npm ERR! npm  v3.10.5
npm ERR! code ELIFECYCLE

npm ERR! keyboard-layout@2.0.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the keyboard-layout@2.0.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the keyboard-layout package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs keyboard-layout
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls keyboard-layout
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/<user>/dev/atom/npm-debug.log
child_process.js:506
    throw err;
    ^

Error: Command failed: /home/<user>/dev/atom/apm/node_modules/atom-package-manager/bin/apm --loglevel=error install
    at checkExecSyncError (child_process.js:483:13)
    at Object.execFileSync (child_process.js:503:13)
    at module.exports (/home/<user>/dev/atom/script/lib/install-atom-dependencies.js:19:16)
    at Object.<anonymous> (/home/<user>/dev/atom/script/bootstrap:28:1)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)

I attached the npm debug log (renamed to npm-debug.txt due to Attachement filetype restrictions).
Note: I replaced my Linux username with <user> in all logs.
npm-debug.txt

I'm running Debian 8.6 in Virtual Box.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 25, 2016

Can folks give 1.12.0-beta4 a try and see if ctrl-modified keystrokes are resolving correctly on Linux? Thanks.

@escobera

This comment has been minimized.

escobera commented Oct 25, 2016

@nathansobo ctrl+/ still resolving as ctrl+unidentified here.

Linux Mint 18
pt-BR keyboard

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 25, 2016

Any other reports? I'm seeing this working for the Portuguese Brazilian layout on Ubuntu.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 26, 2016

@escobera Can you do the following in the dev tools console:

window.addEventListener('keydown', e => console.log(e), true)

Then type that keystroke and tell me what you see?

@escobera

This comment has been minimized.

escobera commented Oct 26, 2016

selection_014

If you need more info lemme know

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 26, 2016

@escobera That looks like a different bug maybe. Are other ctrl- combos working for you?

@escobera

This comment has been minimized.

escobera commented Oct 26, 2016

@nathansobo yeah, everything is resolving properly. The Keybind Resolver is showing every char I could test. Even the more problematic ones like ctrl-ç , ctrl-~ , ctrl-\ , ctrl-] and ctrl-;

I've tested with another keyboard (different driver/module) and the same problem occurs.

oh, and btw: before this version ctrl-; was resolving to ctrl-/. Now it shows properly on Keybind Resolver, but still triggers the Toggle Comment shortcut (witch is set to the default ctrl-/)

@dmig

This comment has been minimized.

dmig commented Oct 26, 2016

Hi everyone!

I saw this in changes for 1.12b4: "Fix incorrect keystroke resolution on Linux when ctrl is held down on non-U.S. keyboard layouts. #12951"

Updated to it, tested -- no changes. I have remapped NumLock to Insert on my keyboard and having problems with Ctrl+Insert since 1.12b0.

Key Binding Resolver tells Insert is pressed for plain key press and Alt/Shift combos. But still shows Numlock for all Ctrl combos.

I'm using Ubuntu 16.04 x64.
_2016-10-26_11-29-32
_2016-10-26_11-30-50
_2016-10-26_11-31-01

@Swatinem

This comment has been minimized.

Swatinem commented Oct 26, 2016

Thank you for finally trying to make atom usable on foreign keyboard layouts.
I am using de-neo2 (http://www.neo-layout.org/) which has a few more layers than usual keyboards, for example it puts all the special chars used in programming on a layer accessible using CapsLock.

The move from beta3 -> beta4 fixed all the shortcuts that just involve ctrl alone, so ctrl+s (which is ctrl+h in qwertz) works fine to save a file, ctrl+z (ctrl+b on qwertz) works for undo, etc.

However all the shortcuts with special chars that require Mod3 (CapsLock or ' on qwertz [seems like that’s the \ key on qwerty]) are breaking and are interpreted as ctrl+alt+$key.

Here is the sequence i, /, ctrl-/, the first two are correct, the third resolved to ctrl-alt-i:
bildschirmfoto von 2016-10-26 13-07-20

Here is the sequence m, %, ctrl-%, the first two are correct, the third resolves to ctrl-alt-m:
bildschirmfoto von 2016-10-26 13-06-21

Both of these sequences are with the left ctrl and capslock keys. But neo2 also had a Mod3 on the right side, here is the sequence with those:

i, /, ctrl-/, the third first triggers triggers the ctrl-\ shortcut, which is totally wrong, then pressing the third key interpreted as ctrl-alt-i, same as if I use the left side Mod3:
bildschirmfoto von 2016-10-26 13-19-20

m, %, ctrl-%, same as before, the ctrl+Mod3 is interpreted as ctrl+\ and toggles the file browser:
bildschirmfoto von 2016-10-26 13-22-06

@quasipedia

This comment has been minimized.

quasipedia commented Oct 26, 2016

@nathansobo - Apropos beta4. It seems to fix the problem on both XOrg and Wayland. Tested on Fedora 24 64bit - Colemak UK layout. Thank you a lot! :) 👍

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 27, 2016

@Swatinem So it seems like on Linux, people (including you?) are expecting to be able to compose keystrokes that combine modifiers with AltGraph-modified characters. This isn't really possible on Mac and Windows because they don't have a dedicated AltGraph key (on Mac it's option, on Windows it's conflated with ctrl-alt). It could work on Linux, but then we're inconsistent across platforms, which isn't necessarily a deal-breaker.

The big question is, if you're holding down other modifier keys, is it reasonable to always take the non-modified keycap or do we want to honor the AltGraph. So left-alt plus right-alt plus QWERTY S on your Neo layout would resolve to something like alt-/ for example if / was accessed via right alt.

The number of combinations is pretty daunting in all this.

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 27, 2016

Another question for this crowd... If I opened up a simple API in the keymap system that allowed users to assign custom keystroke resolvers, would people be open to using it to meet their personal desires or work around bugs in the short term?

Basically, I'm imagining doing something like the following in your Atom init script:

atom.keymaps.addKeystrokeResolver(event => {
  if (event.code === 'KeyS' && event.altKey && event.getModifierKey('AltGraph') {
    return 'alt-/'
  }
})

You could register an arbitrary function that would receive the raw DOM keyboard event. If you returned a string, we would use a normalized version of that string as the basis for the match. If you returned undefined we would use the built-in resolution system.

Obviously it would be ideal to never need this and perfectly satisfy everyone with the core functionality, but I feel like this could give a lot of people what they need for a pretty minimal bit of configuration.

@Swatinem

This comment has been minimized.

Swatinem commented Oct 27, 2016

@nathansobo I just tried a few examples with de-de.
On de-de, / is shift-7 and \ is altGraph-ß (which apparently is - on en-us)

So here is the sequence /, ctrl-/ (aka shift-7, ctrl-shift-7 on de-de): The ctrl-modified version does not trigger the ctrl-/ shortcut correctly.
bildschirmfoto von 2016-10-27 08-48-38

here is the sequence \, ctrl-\ (aka altGraph-ß, ctrl-altGraph-ß on de-de): The ctrl-modified version triggers the ctrl-alt-- shortcut instead, which is wrong. It basically maps modified keys back to en-us layout which is not what people using de-de would expect.
bildschirmfoto von 2016-10-27 08-49-16

I think on de-de under linux at least, we should always honor altGraph, I just tested that it does not remap to ctrl-alt, so ctrl-alt-ß does not lead to \ on de-de.

de-neo2 is a completely different thing. On de-neo2 I don’t have altGraph at all. Instead I have Mod3 and Mod4 to switch to different layers, for example this is my key layout with Mod3:
de-neo2 Mod3
Thats the keys I used in my previous comment. I also do find it kinda strange that Chrome/Electron/Atom assume there is some altGraph involved. There wasn’t. Maybe its just an implementation detail that Mod3 (aka CapsLock) is somehow mapped to altGraph.

@Evpok

This comment has been minimized.

Contributor

Evpok commented Oct 27, 2016

If I opened up a simple API in the keymap system that allowed users to assign custom keystroke resolvers, would people be open to using it to meet their personal desires or work around bugs in the short term?

Yes, please!

@Swatinem

This comment has been minimized.

Swatinem commented Oct 27, 2016

Oh, interesting. The de-neo2 Mod4 keys are translated to ShiftLevel5:
bildschirmfoto von 2016-10-27 09-12-30
de-neo2 Mod4

However all the Mod4 modified key combos fail as well. So Mod4+i (= <+s on de-de [that < key apparently does not even exist on standard 104-key us keyboards, haha]) = ArrowLeft, but when using it with ctrl, it does not work.

@lakano

This comment has been minimized.

lakano commented Oct 27, 2016

@nathansobo Just for information, under Fedora 64 bits, Xorg & Wayland, the Beta4 solve the problem for me. Also, the « CTRL + / » works correctly ( all combinations from left or right CTRL key, and from classic or numpad « / » ). I'm under a french layout keyboard. Thanks for the fix !

@Kampfmoehre

This comment has been minimized.

Kampfmoehre commented Oct 28, 2016

I still cannot build atom from master since you merged your branch, can someone help me?

✔ ~/dev/atom [master|✔ ]
07:38 $ sudo script/clean
[sudo] password for :
Cleaning /home//dev/atom/apm/node_modules
Cleaning /home//dev/atom/node_modules
Cleaning /home//dev/atom/script/node_modules
Cleaning /home//dev/atom/electron
Cleaning /root/.atom/.node-gyp
Cleaning /root/.atom/storage
Cleaning /root/.atom/.apm
Cleaning /root/.atom/.npm
Cleaning /root/.atom/compile-cache
Cleaning /root/.atom/atom-shell
Cleaning /root/.atom/electron
Cleaning /tmp/atom-build
Cleaning /tmp/atom-cached-atom-shells
✔ ~/dev/atom [master|✔ ]
07:38 $ script/build --create-debian-package
Node: v6.9.1
Npm: v3.10.8
Installing script dependencies
Installing apm
../src/onig-string.cc: In constructor ‘OnigString::OnigString(v8::Localv8::String)’:
../src/onig-string.cc:25:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
hasMultiByteChars = (value->Length() != utf8_length_);
^
../src/onig-string.cc: In constructor ‘OnigString::OnigString(v8::Localv8::String)’:
../src/onig-string.cc:25:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
hasMultiByteChars = (value->Length() != utf8_length_);
^
Installing modules ✗

oniguruma@6.1.0 install /home//dev/atom/node_modules/oniguruma
node-gyp rebuild

make: Entering directory '/home//dev/atom/node_modules/oniguruma/build'
CC(target) Release/obj.target/oniguruma/deps/onig/regcomp.o
CC(target) Release/obj.target/oniguruma/deps/onig/regenc.o
CC(target) Release/obj.target/oniguruma/deps/onig/regerror.o
CC(target) Release/obj.target/oniguruma/deps/onig/regexec.o
CC(target) Release/obj.target/oniguruma/deps/onig/regext.o
CC(target) Release/obj.target/oniguruma/deps/onig/reggnu.o
CC(target) Release/obj.target/oniguruma/deps/onig/regparse.o
CC(target) Release/obj.target/oniguruma/deps/onig/regposerr.o
CC(target) Release/obj.target/oniguruma/deps/onig/regposix.o
CC(target) Release/obj.target/oniguruma/deps/onig/regsyntax.o
CC(target) Release/obj.target/oniguruma/deps/onig/regtrav.o
CC(target) Release/obj.target/oniguruma/deps/onig/regversion.o
CC(target) Release/obj.target/oniguruma/deps/onig/st.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/ascii.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/big5.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/cp1251.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_jp.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_kr.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/euc_tw.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/gb18030.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_1.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_2.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_3.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_4.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_5.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_6.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_7.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_8.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_9.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_10.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_11.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_13.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_14.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_15.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/iso8859_16.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/koi8_r.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/mktable.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/sjis.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/unicode.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_be.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf16_le.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_be.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf32_le.o
CC(target) Release/obj.target/oniguruma/deps/onig/enc/utf8.o
AR(target) Release/obj.target/oniguruma.a
COPY Release/oniguruma.a
CXX(target) Release/obj.target/onig_scanner/src/onig-result.o
CXX(target) Release/obj.target/onig_scanner/src/onig-reg-exp.o
CXX(target) Release/obj.target/onig_scanner/src/onig-scanner.o
CXX(target) Release/obj.target/onig_scanner/src/onig-scanner-worker.o
CXX(target) Release/obj.target/onig_scanner/src/onig-searcher.o
CXX(target) Release/obj.target/onig_scanner/src/onig-string.o
SOLINK_MODULE(target) Release/obj.target/onig_scanner.node
COPY Release/onig_scanner.node
make: Leaving directory '/home//dev/atom/node_modules/oniguruma/build'

marker-index@4.0.1 install /home//dev/atom/node_modules/marker-index
node-gyp rebuild

make: Entering directory '/home//dev/atom/node_modules/marker-index/build'
CXX(target) Release/obj.target/marker_index/src/native/iterator.o
CXX(target) Release/obj.target/marker_index/src/native/marker-index-wrapper.o
CXX(target) Release/obj.target/marker_index/src/native/marker-index.o
CXX(target) Release/obj.target/marker_index/src/native/node.o
CXX(target) Release/obj.target/marker_index/src/native/point.o
SOLINK_MODULE(target) Release/obj.target/marker_index.node
COPY Release/marker_index.node
make: Leaving directory '/home//dev/atom/node_modules/marker-index/build'

runas@3.1.1 install /home//dev/atom/node_modules/runas
node-gyp rebuild

make: Entering directory '/home//dev/atom/node_modules/runas/build'
CXX(target) Release/obj.target/runas/src/main.o
CXX(target) Release/obj.target/runas/src/runas_posix.o
CXX(target) Release/obj.target/runas/src/fork.o
SOLINK_MODULE(target) Release/obj.target/runas.node
COPY Release/runas.node
make: Leaving directory '/home//dev/atom/node_modules/runas/build'

keyboard-layout@2.0.1 install /home//dev/atom/node_modules/keyboard-layout
node-gyp rebuild

make: Entering directory '/home//dev/atom/node_modules/keyboard-layout/build'
CXX(target) Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o
keyboard-layout-manager.target.mk:96: recipe for target 'Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o' failed
make: Leaving directory '/home//dev/atom/node_modules/keyboard-layout/build'
atom@1.13.0-dev /home//dev/atom
├── async@0.2.6
├── atom-ui@0.4.1
├─┬ babel-core@5.8.38
│ ├── babel-plugin-constant-folding@1.0.1
│ ├── babel-plugin-dead-code-elimination@1.0.2
│ ├── babel-plugin-eval@1.0.1
│ ├── babel-plugin-inline-environment-variables@1.0.1
│ ├── babel-plugin-jscript@1.0.4
│ ├── babel-plugin-member-expression-literals@1.0.1
│ ├── babel-plugin-property-literals@1.0.1
│ ├── babel-plugin-proto-to-assign@1.0.4
│ ├── babel-plugin-react-constant-elements@1.0.3
│ ├── babel-plugin-react-display-name@1.0.3
│ ├── babel-plugin-remove-console@1.0.1
│ ├── babel-plugin-remove-debugger@1.0.1
│ ├── babel-plugin-runtime@1.0.7
│ ├─┬ babel-plugin-undeclared-variables-check@1.0.2
│ │ └── leven@1.0.2
│ ├── babel-plugin-undefined-to-void@1.1.6
│ ├── babylon@5.8.38
│ ├── bluebird@2.11.0
│ ├─┬ chalk@1.1.3
│ │ ├── ansi-styles@2.2.1
│ │ ├── escape-string-regexp@1.0.5
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.0.0
│ │ ├── strip-ansi@3.0.1
│ │ └── supports-color@2.0.0
│ ├── convert-source-map@1.3.0
│ ├── core-js@1.2.7
│ ├─┬ debug@2.2.0
│ │ └── ms@0.7.1
│ ├─┬ detect-indent@3.0.1
│ │ ├── get-stdin@4.0.1
│ │ └── minimist@1.2.0
│ ├── esutils@2.0.2
│ ├── fs-readdir-recursive@0.1.2
│ ├── globals@6.4.1
│ ├─┬ home-or-tmp@1.0.0
│ │ ├── os-tmpdir@1.0.2
│ │ └── user-home@1.1.1
│ ├─┬ is-integer@1.0.6
│ │ └─┬ is-finite@1.0.2
│ │ └── number-is-nan@1.0.1
│ ├── js-tokens@1.0.1
│ ├── json5@0.4.0
│ ├── lodash@3.10.1
│ ├─┬ minimatch@2.0.10
│ │ └─┬ brace-expansion@1.1.6
│ │ ├── balanced-match@0.4.2
│ │ └── concat-map@0.0.1
│ ├─┬ output-file-sync@1.1.2
│ │ ├── graceful-fs@4.1.9
│ │ ├─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ └── object-assign@4.1.0
│ ├── path-exists@1.0.0
│ ├── path-is-absolute@1.0.1
│ ├── private@0.1.6
│ ├─┬ regenerator@0.8.40
│ │ ├─┬ commoner@0.10.4
│ │ │ ├─┬ commander@2.9.0
│ │ │ │ └── graceful-readlink@1.0.1
│ │ │ ├─┬ detective@4.3.2
│ │ │ │ ├── acorn@3.3.0
│ │ │ │ └── defined@1.0.0
│ │ │ ├── glob@5.0.15
│ │ │ ├─┬ mkdirp@0.5.1
│ │ │ │ └── minimist@0.0.8
│ │ │ └── q@1.4.1
│ │ ├─┬ defs@1.1.1
│ │ │ ├─┬ alter@0.2.0
│ │ │ │ └── stable@0.1.5
│ │ │ ├── ast-traverse@0.1.1
│ │ │ ├── breakable@1.0.0
│ │ │ ├── simple-fmt@0.1.0
│ │ │ ├── simple-is@0.2.0
│ │ │ ├── stringmap@0.2.2
│ │ │ ├── stringset@0.2.1
│ │ │ ├── tryor@0.1.2
│ │ │ └─┬ yargs@3.27.0
│ │ │ ├── camelcase@1.2.1
│ │ │ └─┬ cliui@2.1.0
│ │ │ ├─┬ center-align@0.1.3
│ │ │ │ ├─┬ align-text@0.1.4
│ │ │ │ │ ├─┬ kind-of@3.0.4
│ │ │ │ │ │ └── is-buffer@1.1.4
│ │ │ │ │ ├── longest@1.0.1
│ │ │ │ │ └── repeat-string@1.6.1
│ │ │ │ └── lazy-cache@1.0.4
│ │ │ ├── right-align@0.1.3
│ │ │ └── wordwrap@0.0.2
│ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb
│ │ ├─┬ recast@0.10.33
│ │ │ └── ast-types@0.8.12
│ │ └── through@2.3.8
│ ├─┬ regexpu@1.3.0
│ │ ├── esprima@2.7.3
│ │ ├── regenerate@1.3.1
│ │ ├── regjsgen@0.2.0
│ │ └─┬ regjsparser@0.1.5
│ │ └── jsesc@0.5.0
│ ├── repeating@1.1.3
│ ├── shebang-regex@1.0.0
│ ├── slash@1.0.0
│ ├── source-map@0.5.6
│ ├─┬ source-map-support@0.2.10
│ │ └── source-map@0.1.32
│ ├── to-fast-properties@1.0.2
│ ├── trim-right@1.0.1
│ └── try-resolve@1.0.1
├─┬ cached-run-in-this-context@0.4.1
│ └── nan@2.4.0
├─┬ chai@3.5.0
│ ├── assertion-error@1.0.2
│ ├─┬ deep-eql@0.1.3
│ │ └── type-detect@0.1.1
│ └── type-detect@1.0.0
├─┬ chart.js@2.3.0
│ ├─┬ chartjs-color@2.0.0
│ │ └─┬ chartjs-color-string@0.4.0
│ │ └── color-name@1.1.1
│ └── moment@2.15.2
├── clear-cut@2.0.1
├── coffee-script@1.11.1
├─┬ color@0.7.3
│ ├── color-convert@0.5.3
│ └─┬ color-string@0.2.4
│ └── color-name@1.0.1
├── dedent@0.6.0
├─┬ devtron@1.3.0
│ ├── highlight.js@9.7.0
│ └── humanize-plus@1.8.2
├── event-kit@2.2.0
├── find-parent-dir@0.3.0
├─┬ first-mate@6.1.0
│ ├── emissary@1.3.3
│ └── event-kit@1.5.0
├─┬ fs-plus@2.9.2
│ ├── async@0.2.10
│ ├── mkdirp@0.3.5
│ ├── rimraf@2.2.8
│ └─┬ tildify@1.2.0
│ └── os-homedir@1.0.2
├─┬ fstream@0.1.24
│ ├── graceful-fs@2.0.3
│ └── inherits@2.0.3
├── fuzzaldrin@2.1.0
├── git-utils@4.1.2
├─┬ glob@7.1.1
│ ├── fs.realpath@1.0.0
│ ├─┬ inflight@1.0.6
│ │ └── wrappy@1.0.2
│ ├── minimatch@3.0.3
│ └── once@1.4.0
├── grim@1.5.0
├── jasmine-json@0.0.3
├─┬ jasmine-tagged@1.1.4
│ └─┬ jasmine-focused@1.0.7
│ └─┬ jasmine-node@1.10.2 (git+https://github.com/kevinsawicki/jasmine-node.git#81af4f953a2b7dfb5bde8331c05362a4b464c5ef)
│ ├─┬ coffeestack@1.1.2
│ │ ├── coffee-script@1.8.0
│ │ └── source-map@0.1.43
│ ├─┬ gaze@0.3.4
│ │ ├─┬ fileset@0.1.8
│ │ │ ├─┬ glob@3.2.11
│ │ │ │ └── minimatch@0.3.0
│ │ │ └── minimatch@0.4.0
│ │ └── minimatch@0.2.14
│ ├─┬ jasmine-reporters@2.2.0
│ │ ├─┬ jasmine@2.5.2
│ │ │ ├── exit@0.1.2
│ │ │ └── jasmine-core@2.5.2
│ │ ├─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ └── xmldom@0.1.22
│ └── requirejs@2.3.2
├── jquery@2.1.4
├── key-path-helpers@0.4.0
├─┬ less-cache@0.23.0
│ ├─┬ less@1.7.5
│ │ ├─┬ clean-css@2.2.23
│ │ │ └── commander@2.2.0
│ │ ├─┬ graceful-fs@3.0.11
│ │ │ └── natives@1.1.0
│ │ ├── mime@1.2.11
│ │ ├─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ ├─┬ request@2.40.0
│ │ │ ├── aws-sign2@0.5.0
│ │ │ ├── forever-agent@0.5.2
│ │ │ ├─┬ form-data@0.1.4
│ │ │ │ ├── async@0.9.2
│ │ │ │ └─┬ combined-stream@0.0.7
│ │ │ │ └── delayed-stream@0.0.5
│ │ │ ├─┬ hawk@1.1.1
│ │ │ │ ├── boom@0.4.2
│ │ │ │ ├── cryptiles@0.2.2
│ │ │ │ ├── hoek@0.9.1
│ │ │ │ └── sntp@0.2.4
│ │ │ ├─┬ http-signature@0.10.1
│ │ │ │ ├── asn1@0.1.11
│ │ │ │ ├── assert-plus@0.1.5
│ │ │ │ └── ctype@0.5.3
│ │ │ ├── json-stringify-safe@5.0.1
│ │ │ ├── mime-types@1.0.2
│ │ │ ├── node-uuid@1.4.7
│ │ │ ├── oauth-sign@0.3.0
│ │ │ ├── qs@1.0.2
│ │ │ ├── stringstream@0.0.5
│ │ │ ├─┬ tough-cookie@2.3.2
│ │ │ │ └── punycode@1.4.1
│ │ │ └── tunnel-agent@0.4.3
│ │ └── source-map@0.1.43
│ └── walkdir@0.0.7
├─┬ line-top-index@0.2.0
│ └── random-seed@0.2.0
├── marked@0.3.6
├─┬ mocha@2.5.1
│ ├── commander@2.3.0
│ ├── diff@1.4.0
│ ├── escape-string-regexp@1.0.2
│ ├─┬ glob@3.2.11
│ │ └─┬ minimatch@0.3.0
│ │ ├── lru-cache@2.7.3
│ │ └── sigmund@1.0.1
│ ├── growl@1.9.2
│ ├─┬ jade@0.26.3
│ │ ├── commander@0.6.1
│ │ └── mkdirp@0.3.0
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ ├── supports-color@1.2.0
│ └── to-iso-string@0.0.2
├─┬ normalize-package-data@2.3.5
│ ├── hosted-git-info@2.1.5
│ ├─┬ is-builtin-module@1.0.0
│ │ └── builtin-modules@1.1.1
│ └─┬ validate-npm-package-license@3.0.1
│ ├─┬ spdx-correct@1.0.2
│ │ └── spdx-license-ids@1.2.2
│ └── spdx-expression-parse@1.0.4
├── nslog@3.0.0
├── oniguruma@6.1.0
├─┬ pathwatcher@6.5.0
│ ├── async@0.2.10
│ ├── event-kit@1.5.0
│ └── iconv-lite@0.4.13
├─┬ postcss@5.2.4
│ ├── js-base64@2.1.9
│ └─┬ supports-color@3.1.2
│ └── has-flag@1.0.0
├─┬ postcss-selector-parser@2.2.1
│ ├── flatten@1.0.2
│ ├── indexes-of@1.0.1
│ └── uniq@1.0.1
├─┬ property-accessors@1.1.3
│ ├─┬ es6-weak-map@0.1.4
│ │ ├── d@0.1.1
│ │ ├─┬ es5-ext@0.10.12
│ │ │ ├── es6-iterator@2.0.0
│ │ │ └── es6-symbol@3.1.0
│ │ ├── es6-iterator@0.1.3
│ │ └── es6-symbol@2.0.1
│ └── mixto@1.0.0
├── random-words@0.0.1
├── resolve@1.1.7
├── runas@3.1.1
├─┬ scandal@2.2.1
│ ├─┬ argparse@1.0.9
│ │ └── sprintf-js@1.0.3
│ ├── isbinaryfile@2.0.4
│ ├── split@1.0.0
│ └── temp@0.8.3
├─┬ scoped-property-store@0.17.0
│ ├── atom-slick@2.0.0
│ ├── event-kit@1.5.0
│ └── key-path-helpers@0.1.0
├─┬ scrollbar-style@3.2.0
│ └── event-kit@1.5.0
├─┬ season@5.4.1
│ ├─┬ cson-parser@1.0.9
│ │ └── coffee-script@1.9.0
│ └─┬ optimist@0.4.0
│ └── wordwrap@0.0.3
├── semver@4.3.6
├─┬ service-hub@0.7.2
│ └── event-kit@1.5.0
├─┬ sinon@1.17.4
│ ├── formatio@1.1.1
│ ├── lolex@1.3.2
│ ├── samsam@1.1.2
│ └─┬ util@0.10.3
│ └── inherits@2.0.1
├─┬ source-map-support@0.3.3
│ └─┬ source-map@0.1.32
│ └── amdefine@1.0.0
├── temp@0.8.1
├─┬ text-buffer@9.4.0
│ ├── atom-patch@0.3.0
│ ├── delegato@1.0.0
│ ├── diff@2.2.3
│ ├── display-index@0.1.0
│ ├── line-length-index@0.0.2
│ ├── marker-index@4.0.1
│ ├─┬ pathwatcher@6.7.1
│ │ ├── async@0.2.10
│ │ └── event-kit@1.5.0
│ ├── regression@1.2.1
│ ├─┬ serializable@1.0.3
│ │ └── get-parameter-names@0.2.0
│ └── span-skip-list@0.2.0
├─┬ typescript-simple@1.0.0
│ └── typescript@1.4.1
├─┬ underscore-plus@1.6.6
│ └── underscore@1.6.0
├── winreg@1.2.2
└─┬ yargs@3.32.0
├── camelcase@2.1.1
├─┬ cliui@3.2.0
│ └── wrap-ansi@2.0.0
├── decamelize@1.2.0
├─┬ os-locale@1.4.0
│ └─┬ lcid@1.0.0
│ └── invert-kv@1.0.0
├─┬ string-width@1.0.2
│ ├── code-point-at@1.0.1
│ └── is-fullwidth-code-point@1.0.0
├── window-size@0.1.4
└── y18n@3.2.1

npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@2.0.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.4.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated to-iso-string@0.0.2: to-iso-string has been deprecated, use @segment/to-iso-string instead.
npm WARN deprecated jade@0.26.3: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN prefer global typescript@1.4.1 should be installed with -g
npm WARN prefer global jasmine-node@1.10.2 should be installed with -g
../src/onig-string.cc: In constructor ‘OnigString::OnigString(v8::Localv8::String)’:
../src/onig-string.cc:25:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
hasMultiByteChars = (value->Length() != utf8_length_);
^
../src/native/marker-index-wrapper.cc: In static member function ‘static bool MarkerIndexWrapper::IsFinite(v8::Localv8::Integer)’:
../src/native/marker-index-wrapper.cc:128:92: warning: ‘v8::Localv8::Value v8::Object::CallAsFunction(v8::Localv8::Value, int, v8::Localv8::Value_)’ is deprecated (declared at /home//.atom/.node-gyp/.node-gyp/iojs-1.3.6/deps/v8/include/v8.h:2983): Use maybe version [-Wdeprecated-declarations]
Local result = Nan::New(is_finite_function)->CallAsFunction(Nan::Null(), 1, argv);
^
In file included from ../src/keyboard-layout-manager-linux.cc:1:0:
../src/keyboard-layout-manager.h:7:22: fatal error: X11/Xlib.h: No such file or directory
#include <X11/Xlib.h>
^
compilation terminated.
make: *_* [Release/obj.target/keyboard-layout-manager/src/keyboard-layout-manager-linux.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home//dev/atom/apm/node_modules/atom-package-manager/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.16.0-4-amd64
gyp ERR! command "/home//dev/atom/apm/node_modules/atom-package-manager/bin/node" "/home//dev/atom/apm/node_modules/atom-package-manager/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /home//dev/atom/node_modules/keyboard-layout
gyp ERR! node -v v4.4.5
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Linux 3.16.0-4-amd64
npm ERR! argv "/home//dev/atom/apm/node_modules/atom-package-manager/bin/node" "/home//dev/atom/apm/node_modules/atom-package-manager/node_modules/npm/bin/npm-cli.js" "--globalconfig" "/home//.atom/.apm/.apmrc" "--userconfig" "/home//.atom/.apmrc" "install" "--runtime=electron" "--target=1.3.6" "--arch=x64"
npm ERR! node v4.4.5
npm ERR! npm v3.10.5
npm ERR! code ELIFECYCLE

npm ERR! keyboard-layout@2.0.1 install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the keyboard-layout@2.0.1 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the keyboard-layout package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs keyboard-layout
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls keyboard-layout
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home//dev/atom/npm-debug.log
child_process.js:506
throw err;
^

Error: Command failed: /home//dev/atom/apm/node_modules/atom-package-manager/bin/apm --loglevel=error install
at checkExecSyncError (child_process.js:483:13)
at Object.execFileSync (child_process.js:503:13)
at module.exports (/home//dev/atom/script/lib/install-atom-dependencies.js:19:16)
at Object. (/home//dev/atom/script/bootstrap:28:1)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
✘ ~/dev/atom [master|✔ ]

Am I missing something?

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Oct 28, 2016

@Kampfmoehre There's a couple new system dependencies you need installed for the keyboard support to compile... libx11-dev and libxkbfile-dev. Check out the updated build instructions.

@Kampfmoehre

This comment has been minimized.

Kampfmoehre commented Oct 28, 2016

Ok, after installing libx11-dev libxkbfile-dev I can build again, however adding the ppa with

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

results in

W: Failed to fetch http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu/dists/jessie/main/binary-amd64/Packages 404 Not Found

Build works anyway and I can finally use my german shortcuts again, thank you.

@Swatinem

This comment has been minimized.

Swatinem commented Oct 29, 2016

Hah, I actually think the problems I see with neo2 are due to bugged keyboard events emitted by chrome/electron.
Just out of curiosity, I wanted to see what kind of keyboard events Firefox gives me, and they are actually correct and what I would expect, whereas Chrome completely messes those up.

So here is how I use the key combos ctrl-/, ctrl-% (both with left-hand-side modifiers), ctrl-/, ctrl-% (with right-hand-side modifiers) [these use neo2 Mod3], ctrl-left (lhs), ctrl-left (rhs) [these use neo2 Mod4]

in Firefox 52 (correct)
bildschirmfoto von 2016-10-29 22-16-45

in Chrome 56 (broken)
bildschirmfoto von 2016-10-29 22-16-16

This is only in combination with ctrl however!

Here is both browsers behaving correctly if I just type /, /, %, %, left, left (each one with lhs and rhs modifiers)

in firefox:
bildschirmfoto von 2016-10-29 22-24-15

in chrome:
bildschirmfoto von 2016-10-29 22-23-07

Should I file a bug upstream for chrome or will you take care of that? @nathansobo Or is there another way to work around this problem?

@nathansobo

This comment has been minimized.

Contributor

nathansobo commented Nov 1, 2016

@Swatinem If you could file the upstream bug, that would be super helpful. It's hard to juggle platform issues along with everything else and you're probably in the best position to dialog with the Chromium team about the problem.

In the meantime, check out the new custom keystroke resolver API that will land in 1.12.0-beta6 some time this week. That should give you a place to put some ad hoc code to band-aid this issue until it's resolved in Chrome.

@GunterVomRas

This comment has been minimized.

GunterVomRas commented Nov 4, 2016

Hi, new to github so hopefully not lowering the SNR by commenting here.
Just tested e13a453 from #12985 and it fixed the issue (z being recognized as w on my azerty keyboard).
Thanks !

@lock

This comment has been minimized.

lock bot commented Apr 4, 2018

This issue has been automatically locked since there has not been any recent activity after it was closed. If you can still reproduce this issue in Safe Mode then please open a new issue and fill out the entire issue template to ensure that we have enough information to address your issue. Thanks!

@lock lock bot locked and limited conversation to collaborators Apr 4, 2018

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.