Skip to content
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

JRE込みのPyCharmで日本語入力がおかしい #24

Closed
jbking opened this issue Aug 27, 2015 · 10 comments

Comments

@jbking
Copy link

commented Aug 27, 2015

PyCharm: 4.5.3 Build #PY-141.1899, built on July 6, 2015
JRE: 1.8.0_40-internal-b82 x86_64
JVM: OpenJDK 64-bit Server VM by JetBrains s.r.o
AquaSKK: 4.2.6
Mac: 10.10.5 (Yosemite)

上記環境において以下の現象が発生しています。

  • C-jで日本語入力に切り換えするときに直前の文字が削除される
  • 日本語でひらがなを入力中に母音(あいうえお)がaiueoと入力される(子音つきの文字は正しく入力される)

こちらの環境依存の可能性が高いのですが、デバッグ方法をご教授いただけませんでしょうか。

@mzp

This comment has been minimized.

Copy link
Member

commented Aug 28, 2015

うーん、なんでしょうね。その症状。

とりあえずいつも私がやっているデバッグ方法は

  1. 自分でAquaSKKをビルドする(ログ出力が有効になる)
  2. Console.app でログを確認する
  3. 問題を再発させて、処理の流れを追う

という感じですねぇ。

@jbking

This comment has been minimized.

Copy link
Author

commented Sep 9, 2015

ログをとってみました。

(分かりづらかったので正常な入力と比較するようにしました)

差分は

AquaSKK[397]: com.jetbrains.pycharm: cancel key event

これのみのようです。

実施手順は

  1. C-jで日本語モードに切り換え
  2. そのまま平仮名で「あき」と入力
  3. lでアスキーモードに切り換え

メッセージアプリ(正常)

2015/09/09 17:59:00.917 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0x40000 win=0x0 winNum=0 ctxt=0x0 chars="
" unmodchars="j" repeat=0 keyCode=38
2015/09/09 17:59:00.917 AquaSKK[397]: event=SKK_JMODE, code=0x6a, attr=none
2015/09/09 17:59:02.669 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="a" unmodchars="a" repeat=0 keyCode=0
2015/09/09 17:59:02.669 AquaSKK[397]: event=SKK_CHAR, code=0x61, attr=InputChars
2015/09/09 17:59:03.013 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="k" unmodchars="k" repeat=0 keyCode=40
2015/09/09 17:59:03.013 AquaSKK[397]: event=SKK_CHAR, code=0x6b, attr=InputChars
2015/09/09 17:59:03.221 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="i" unmodchars="i" repeat=0 keyCode=34
2015/09/09 17:59:03.221 AquaSKK[397]: event=SKK_CHAR, code=0x69, attr=InputChars
2015/09/09 17:59:05.520 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="l" unmodchars="l" repeat=0 keyCode=37
2015/09/09 17:59:05.520 AquaSKK[397]: event=SKK_CHAR, code=0x6c, attr=SwitchToAscii,InputChars

PyCharm(異常)

  1. C-jで直前の文字が削除される
  2. 母音がaiueoで入力される
2015/09/09 18:00:49.995 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0x40000 win=0x0 winNum=0 ctxt=0x0 chars="
" unmodchars="j" repeat=0 keyCode=38
2015/09/09 18:00:49.995 AquaSKK[397]: event=SKK_JMODE, code=0x6a, attr=none
2015/09/09 18:00:50.000 AquaSKK[397]: com.jetbrains.pycharm: cancel key event
2015/09/09 18:00:54.154 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="a" unmodchars="a" repeat=0 keyCode=0
2015/09/09 18:00:54.154 AquaSKK[397]: event=SKK_CHAR, code=0x61, attr=InputChars
2015/09/09 18:00:54.601 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="k" unmodchars="k" repeat=0 keyCode=40
2015/09/09 18:00:54.601 AquaSKK[397]: event=SKK_CHAR, code=0x6b, attr=InputChars
2015/09/09 18:00:54.921 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="i" unmodchars="i" repeat=0 keyCode=34
2015/09/09 18:00:54.921 AquaSKK[397]: event=SKK_CHAR, code=0x69, attr=InputChars
2015/09/09 18:00:57.874 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="l" unmodchars="l" repeat=0 keyCode=37
2015/09/09 18:00:57.875 AquaSKK[397]: event=SKK_CHAR, code=0x6c, attr=SwitchToAscii,InputChars

PyCharm (JDKバンドルなし、異常)

  1. C-jで直前の文字が削除される
  2. 母音はかな入力できる(!)、ただしC-jと同様に直前の文字が削除される
2015/09/09 18:08:33.562 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0x40000 win=0x0 winNum=0 ctxt=0x0 chars="
" unmodchars="j" repeat=0 keyCode=38
2015/09/09 18:08:33.562 AquaSKK[397]: event=SKK_JMODE, code=0x6a, attr=none
2015/09/09 18:08:33.567 AquaSKK[397]: com.jetbrains.pycharm: cancel key event
2015/09/09 18:08:34.361 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="a" unmodchars="a" repeat=0 keyCode=0
2015/09/09 18:08:34.361 AquaSKK[397]: event=SKK_CHAR, code=0x61, attr=InputChars
2015/09/09 18:08:35.061 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="k" unmodchars="k" repeat=0 keyCode=40
2015/09/09 18:08:35.062 AquaSKK[397]: event=SKK_CHAR, code=0x6b, attr=InputChars
2015/09/09 18:08:35.776 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="i" unmodchars="i" repeat=0 keyCode=34
2015/09/09 18:08:35.777 AquaSKK[397]: event=SKK_CHAR, code=0x69, attr=InputChars
2015/09/09 18:08:37.209 AquaSKK[397]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="l" unmodchars="l" repeat=0 keyCode=37
2015/09/09 18:08:37.209 AquaSKK[397]: event=SKK_CHAR, code=0x6c, attr=SwitchToAscii,InputChars
2015/09/09 18:08:37.214 AquaSKK[397]: com.jetbrains.pycharm: cancel key event

(ふと気になってIdeaVimが悪さしているのかと思って無効にしてみましたが結果は変わらずでした。参考まで。)

@mzp

This comment has been minimized.

Copy link
Member

commented Sep 19, 2015

とりあえず手元で再現するか確認します。

@mzp

This comment has been minimized.

Copy link
Member

commented Sep 19, 2015

  1. 「C-jで直前の文字が削除される」は確認できませんでした。
  2. JDKバンドルあり版で「母音がaiueoで入力される」が再現するのは確認しました。

とりあえず2を調査します。

@mzp

This comment has been minimized.

Copy link
Member

commented Sep 19, 2015

cancel key eventはJRE系のアプリでCtrl-Jやlでうまくモード切り替えができない件に対するworkaroundです。 そして、これが誤発動すると、たしかに直前の文字が削除されます。

が、JREを使ってるなら、ないと逆にまずい気がするんですが、なぜ問題になるんだろう....。

@mzp

This comment has been minimized.

Copy link
Member

commented Sep 19, 2015

workaroundはみつけましたが、不適切な挙動だと思うので、issue報告をしました。
https://youtrack.jetbrains.com/issue/PY-16964

@jbking

This comment has been minimized.

Copy link
Author

commented Sep 29, 2015

Java系の問題だということだったのでOracle JDKの現時点での最新版、1.8.0_64 (x86_64)をインストールして使うようにしてみたところ、この問題が解消しました。「なぜか」までは追ってませんがご報告まで。

(ログ上では変化みられないように思いますが)該当箇所のコンソールログを添付しておきます。

2015/09/29 13:37:28.332 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0x40000 win=0x0 winNum=0 ctxt=0x0 chars="
" unmodchars="j" repeat=0 keyCode=38
2015/09/29 13:37:28.333 AquaSKK[38264]: event=SKK_JMODE, code=0x6a, attr=none
2015/09/29 13:37:28.337 AquaSKK[38264]: com.jetbrains.pycharm: cancel key event
2015/09/29 13:37:33.012 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="i" unmodchars="i" repeat=0 keyCode=34
2015/09/29 13:37:33.012 AquaSKK[38264]: event=SKK_CHAR, code=0x69, attr=InputChars
2015/09/29 13:37:33.179 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="r" unmodchars="r" repeat=0 keyCode=15
2015/09/29 13:37:33.179 AquaSKK[38264]: event=SKK_CHAR, code=0x72, attr=InputChars
2015/09/29 13:37:33.284 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="o" unmodchars="o" repeat=0 keyCode=31
2015/09/29 13:37:33.284 AquaSKK[38264]: event=SKK_CHAR, code=0x6f, attr=InputChars
2015/09/29 13:37:33.643 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="h" unmodchars="h" repeat=0 keyCode=4
2015/09/29 13:37:33.643 AquaSKK[38264]: event=SKK_CHAR, code=0x68, attr=InputChars
2015/09/29 13:37:33.723 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="a" unmodchars="a" repeat=0 keyCode=0
2015/09/29 13:37:33.723 AquaSKK[38264]: event=SKK_CHAR, code=0x61, attr=InputChars
2015/09/29 13:37:35.420 AquaSKK[38264]: NSEvent: type=KeyDown loc=(0,0) time=0.0 flags=0 win=0x0 winNum=0 ctxt=0x0 chars="l" unmodchars="l" repeat=0 keyCode=37
2015/09/29 13:37:35.420 AquaSKK[38264]: event=SKK_CHAR, code=0x6c, attr=SwitchToAscii,InputChars
@mzp

This comment has been minimized.

Copy link
Member

commented Sep 29, 2015

ありがとうございます。 なぜだろう...。

解消した問題は「C-jで日本語入力に切り換えするときに直前の文字が削除される」「aiueoが入力できない」の両方ですか?

@jbking

This comment has been minimized.

Copy link
Author

commented Sep 29, 2015

はい、両方ともです…謎い

普段使いしてみてまた何かおかしなことを見つけたら報告します。
ともあれ、ありがとうございました!

@mzp

This comment has been minimized.

Copy link
Member

commented Sep 29, 2015

なるほど。了解です。とりあえず close ということで...。

@mzp mzp closed this Sep 29, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.