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

Linux版 gvimで imactivatefunc / imstatusfunc が 8.0.1344以降、呼ばれなくなっている #1130

Open
presuku opened this Issue Dec 18, 2017 · 14 comments

Comments

Projects
None yet
4 participants
@presuku
Member

presuku commented Dec 18, 2017

質問・報告の内容

Linux版 gvim で、imactivatefunc / imstatusfunc が 8.0.1344 以降、
呼ばれなくなったのですが、これは何か明確な理由があったのでしょうか?
(helpの更新もあり、Windows版以外のGUI環境でも呼ばれなくなった)
その結果、Linux の gvim で IM の制御ができなくなり、かなり不便な状態です。

下記のパッチの様に、ifdefの条件を変更すれば良いと思うのですが、 8.0.1344 より GUI 環境では、imactivatefunc / imstatusfunc は使わせないと言う意図を感じ、元の状態に戻らないような気がしています…

diff --git a/src/mbyte.c b/src/mbyte.c
index 742c220df..62d77d0e4 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4782,7 +4782,7 @@ iconv_end(void)
 
 #endif /* FEAT_MBYTE */
 
-#ifdef FEAT_GUI
+#if defined(FEAT_GUI) && defined(WIN3264)
 # define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
 # define USE_IMSTATUSFUNC (!gui.in_use && *p_imsf != NUL)
 #else

Vimのバージョン

8.0.1402 で確認

OSの種類/ディストリ/バージョン

  • Xubuntu 14.04.5 LTS 64bit / Xubuntu 17.04 64bit

使用している or 関係していそうなプラグイン

  • IM 制御する plugin

その他

iminsert の設定値によって imactivatefunc / imstatusfunc の呼ばれ方が変わります。
また、その挙動が日本語ヘルプの訳注と異なります。

  • iminsert=0 の場合
    Insert モードから抜けるとき、 imstatusfunc が 非0 を返す場合 imactivatefunc によって IM を off にします
  • iminsert=1 の場合
    :lmap についてよく理解していないので未検証
  • iminsert=2 の場合
    Insert モードに入る時、IM状態にかかわらず imactivatefuncによって IM を on にします
    Insert モードから抜けるとき、 imstatusfunc が 非0 を返す場合 imactivatefunc によって IM を off にします

日本語ヘルプには、

{訳注: iminsert=2 の場合、挿入モードを抜けると IM がオフにされます。
再度挿入モードに入ると、前回抜けたときの IM 状態が復元されます。
この機能をオフにするには iminsert=0 にしてください。}

URL: https://github.com/vim-jp/vimdoc-ja/blob/master/doc/options.jax#L4405

とありますが、Linux の gvim では、上記の挙動の様に iminsert=2 のときは、「前回抜けたときの IM 状態」にはなりません。
上記の訳注は Windows版を想定して書かれたのかなと想像しています。

個人的には imactivatefunc / imstatusfunc が (正しく) 設定されている場合には、Windows版と同じように vim 側でステート管理しているので「前回抜けたときの IM 状態」になるように imactivatefunc を呼び分けてくれるのが理想ですが、
現状でも iminsert=2 して、IM 制御 plugin 側でステート管理することで一応回避することはできます。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Dec 18, 2017

Member

本来これが希望でしたが、テストが通らなくて直されてしまいました。もしよかったらテスト通るか確認して貰えますか。

Member

mattn commented Dec 18, 2017

本来これが希望でしたが、テストが通らなくて直されてしまいました。もしよかったらテスト通るか確認して貰えますか。

@koron

This comment has been minimized.

Show comment
Hide comment
@koron
Member

koron commented Dec 18, 2017

個人的にはこのパッチあてて使ってます。
https://github.com/koron/vim-kaoriya-patches/blob/master/master/2010-imaf_imsf_on_gui.diff

@koron

This comment has been minimized.

Show comment
Hide comment
@koron

koron Dec 18, 2017

Member

上記の挙動の様に iminsert=2 のときは、「前回抜けたときの IM 状態」にはなりません。

本来は iminsert の値自体が挿入モードから抜ける時に決定されます。
で、私のパッチ の後半部分では、
その部分が Linux でも機能するように(無理やり)修正しています。

diff --git a/src/ui.c b/src/ui.c
index 7d969fec8..b7d1098bf 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -3322,12 +3322,14 @@ im_save_status(long *psave)
      * And don't save when the GUI is running but our window doesn't have
      * input focus (e.g., when a find dialog is open). */
     if (!p_imdisable && KeyTyped && !KeyStuffed
+#if 0
 # ifdef FEAT_XIM
 	    && xic != NULL
 # endif
 # ifdef FEAT_GUI
 	    && (!gui.in_use || gui.in_focus)
 # endif
+#endif
 	)
     {
 	/* Do save when IM is on, or IM is off and saved status is on. */
Member

koron commented Dec 18, 2017

上記の挙動の様に iminsert=2 のときは、「前回抜けたときの IM 状態」にはなりません。

本来は iminsert の値自体が挿入モードから抜ける時に決定されます。
で、私のパッチ の後半部分では、
その部分が Linux でも機能するように(無理やり)修正しています。

diff --git a/src/ui.c b/src/ui.c
index 7d969fec8..b7d1098bf 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -3322,12 +3322,14 @@ im_save_status(long *psave)
      * And don't save when the GUI is running but our window doesn't have
      * input focus (e.g., when a find dialog is open). */
     if (!p_imdisable && KeyTyped && !KeyStuffed
+#if 0
 # ifdef FEAT_XIM
 	    && xic != NULL
 # endif
 # ifdef FEAT_GUI
 	    && (!gui.in_use || gui.in_focus)
 # endif
+#endif
 	)
     {
 	/* Do save when IM is on, or IM is off and saved status is on. */
@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Dec 19, 2017

Member

本来これが希望でしたが、テストが通らなくて直されてしまいました。

なるほど、そういう事だったのですね。

もしよかったらテスト通るか確認して貰えますか。

make testしたところ、Xubuntuのzsh on xfce4-terminal上では下記のテストがエラーとなってしまいました。
(テスト的にはiminsert関連のテストではなさそうだけども…)

Test results:


From test_alot.vim:
Found errors in Test_statusline():
function RunTheTest[38]..Test_statusline line 149: Pattern '^a<c*d$' does not match 'abccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     '
function RunTheTest[38]..Test_statusline line 151: Pattern '^ab*>$' does not match 'abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      '
TEST FAILURE

その後、xfce4-terminalのWindowサイズが横に広がっているのを直して、
cd src/testdir してから、再度 make すると

rm -f test.log messages
VIMRUNTIME=../../runtime; export VIMRUNTIME;  ../vim -f  -u unix.vim -U NONE --noplugin --not-a-term -S runtest.vim test_alot.vim

Test results:
ALL DONE

となりました。
これで全てパスしてるってことで良いのか、わからない…

本来は iminsert の値自体が挿入モードから抜ける時に決定されます。
で、私のパッチ の後半部分では、
その部分が Linux でも機能するように(無理やり)修正しています。

なるほどなるほど。
こちら、ちょっと試してみます。

Member

presuku commented Dec 19, 2017

本来これが希望でしたが、テストが通らなくて直されてしまいました。

なるほど、そういう事だったのですね。

もしよかったらテスト通るか確認して貰えますか。

make testしたところ、Xubuntuのzsh on xfce4-terminal上では下記のテストがエラーとなってしまいました。
(テスト的にはiminsert関連のテストではなさそうだけども…)

Test results:


From test_alot.vim:
Found errors in Test_statusline():
function RunTheTest[38]..Test_statusline line 149: Pattern '^a<c*d$' does not match 'abccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     '
function RunTheTest[38]..Test_statusline line 151: Pattern '^ab*>$' does not match 'abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      '
TEST FAILURE

その後、xfce4-terminalのWindowサイズが横に広がっているのを直して、
cd src/testdir してから、再度 make すると

rm -f test.log messages
VIMRUNTIME=../../runtime; export VIMRUNTIME;  ../vim -f  -u unix.vim -U NONE --noplugin --not-a-term -S runtest.vim test_alot.vim

Test results:
ALL DONE

となりました。
これで全てパスしてるってことで良いのか、わからない…

本来は iminsert の値自体が挿入モードから抜ける時に決定されます。
で、私のパッチ の後半部分では、
その部分が Linux でも機能するように(無理やり)修正しています。

なるほどなるほど。
こちら、ちょっと試してみます。

@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Dec 19, 2017

Member

@koron さんの後半部分のパッチを試してみたのですが、
そのままでは期待した動作になりませんでした。

と言うのも、私の環境 (Xubuntu 17.04 64bit、vim 8.0.1412、uim) では
KeyTyped が常に0になっていて、ifの条件が真になっていませんでした。
むしろ、 #if 0 〜 #endif しているところは、真となっていました。
(xic != NULLは真、(!gui.in_use || gui.in_focus)もgui.in_focusが1で真)

ここを無理やり真になるように KeyTyped をコメントアウトすると、期待通りの動作になりました。

Member

presuku commented Dec 19, 2017

@koron さんの後半部分のパッチを試してみたのですが、
そのままでは期待した動作になりませんでした。

と言うのも、私の環境 (Xubuntu 17.04 64bit、vim 8.0.1412、uim) では
KeyTyped が常に0になっていて、ifの条件が真になっていませんでした。
むしろ、 #if 0 〜 #endif しているところは、真となっていました。
(xic != NULLは真、(!gui.in_use || gui.in_focus)もgui.in_focusが1で真)

ここを無理やり真になるように KeyTyped をコメントアウトすると、期待通りの動作になりました。

@koron

This comment has been minimized.

Show comment
Hide comment
@koron

koron Dec 22, 2017

Member

@presuku ありがとうございます。

やっぱ後半は利用者の環境によって大きく差異がでてますね。
どうしようこれ。

Member

koron commented Dec 22, 2017

@presuku ありがとうございます。

やっぱ後半は利用者の環境によって大きく差異がでてますね。
どうしようこれ。

@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Oct 1, 2018

Member

この件、長い間放置してました…申し訳ないです。

iminsertの値の問題や、最後の #1130 (comment) の件のKeyTypedはについては、 新しい環境 (Xubuntu 18.04 64bit、vim 8.1.443、fctix) になったので、再度色々試したところplugin内で <ESC> を imap しているものがあり、そちらの問題だった様です。 (こちらの件は別にissueを立てたいと思います)

Linux環境のGUI環境で、patch当てないとimaf・imsfが使えないのは不便なので
首題に戻って、マクロの修正を優先できればと思います。

下記のversion、diffで、一番下のtest resultとなり、Linux上では、全てテストはパスしています。
(diffの内容は #1130 (comment) と同一です)

version

8.1.443

diff

diff --git a/src/mbyte.c b/src/mbyte.c
index 26233e423..c43c9b483 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4800,7 +4800,7 @@ iconv_end(void)
 
 #endif /* FEAT_MBYTE */
 
-#ifdef FEAT_GUI
+#if defined(FEAT_GUI) && defined(WIN3264)
 # define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
 # define USE_IMSTATUSFUNC (!gui.in_use && *p_imsf != NUL)
 #else

test result

...snip...
Executed 401 tests

Test results:
ALL DONE
...snip...
./json_test || exit 1; echo  passed;
passed
...snip...
./kword_test || exit 1; echo  passed;
passed
...snip...
./memfile_test || exit 1; echo  passed;
passed
...snip...
./message_test || exit 1; echo  passed;
passed
Member

presuku commented Oct 1, 2018

この件、長い間放置してました…申し訳ないです。

iminsertの値の問題や、最後の #1130 (comment) の件のKeyTypedはについては、 新しい環境 (Xubuntu 18.04 64bit、vim 8.1.443、fctix) になったので、再度色々試したところplugin内で <ESC> を imap しているものがあり、そちらの問題だった様です。 (こちらの件は別にissueを立てたいと思います)

Linux環境のGUI環境で、patch当てないとimaf・imsfが使えないのは不便なので
首題に戻って、マクロの修正を優先できればと思います。

下記のversion、diffで、一番下のtest resultとなり、Linux上では、全てテストはパスしています。
(diffの内容は #1130 (comment) と同一です)

version

8.1.443

diff

diff --git a/src/mbyte.c b/src/mbyte.c
index 26233e423..c43c9b483 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4800,7 +4800,7 @@ iconv_end(void)
 
 #endif /* FEAT_MBYTE */
 
-#ifdef FEAT_GUI
+#if defined(FEAT_GUI) && defined(WIN3264)
 # define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
 # define USE_IMSTATUSFUNC (!gui.in_use && *p_imsf != NUL)
 #else

test result

...snip...
Executed 401 tests

Test results:
ALL DONE
...snip...
./json_test || exit 1; echo  passed;
passed
...snip...
./kword_test || exit 1; echo  passed;
passed
...snip...
./memfile_test || exit 1; echo  passed;
passed
...snip...
./message_test || exit 1; echo  passed;
passed
@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Oct 3, 2018

Member

よく確認していないのですが、パッチを見る限り Windows 向けのパッチに見えるのですがいいんですっけ?

Member

mattn commented Oct 3, 2018

よく確認していないのですが、パッチを見る限り Windows 向けのパッチに見えるのですがいいんですっけ?

@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Oct 4, 2018

Member

#ifdef FEAT_GUI の場合に、 (!gui.in_use && *p_imaf != NUL) という条件になっていて、
gvimだと!gui.in_useが0になってしまうので、imaf/imsfが呼ばれません。

patch 8.0.1344 ( vim/vim@2877d33 ) をみると、以前のhelpに
Does not work in the MS-Windows GUI version. とあるので、
FEAT_GUIかつWindows限定とすることで、以前の動作に戻したいです。

そもそも patch 8.0.1344 自体が using 'imactivatefunc' in the GUI does not work のパッチなので、Linuxでは普通にGUIで使えるのに、なぜGUIで使えなくしたのだろう?
というのが、本issueを立てた際の疑問だったと思います。

Member

presuku commented Oct 4, 2018

#ifdef FEAT_GUI の場合に、 (!gui.in_use && *p_imaf != NUL) という条件になっていて、
gvimだと!gui.in_useが0になってしまうので、imaf/imsfが呼ばれません。

patch 8.0.1344 ( vim/vim@2877d33 ) をみると、以前のhelpに
Does not work in the MS-Windows GUI version. とあるので、
FEAT_GUIかつWindows限定とすることで、以前の動作に戻したいです。

そもそも patch 8.0.1344 自体が using 'imactivatefunc' in the GUI does not work のパッチなので、Linuxでは普通にGUIで使えるのに、なぜGUIで使えなくしたのだろう?
というのが、本issueを立てた際の疑問だったと思います。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Oct 4, 2018

Member

ですとコメント書いた方がいいですね。「Windows の場合、IME の活性化は OS に任せる他ないが、他の場合はユーザが IME を活性化させる事ができる」みたいな事が掛かれていればいいかと。

Member

mattn commented Oct 4, 2018

ですとコメント書いた方がいいですね。「Windows の場合、IME の活性化は OS に任せる他ないが、他の場合はユーザが IME を活性化させる事ができる」みたいな事が掛かれていればいいかと。

@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Oct 9, 2018

Member

そうだと思います。

問題の 8.0.1344 までの経緯を調べてみると、一連のパッチは 8.0.1336 から始まっていて、 8.0.1341 でWindowsのテストが失敗するとのことでDoes not work in the MS-Windows GUI version.が追加され、最終的に 8.0.1344 でGUI環境全てで無効にされてしまったようです。

この辺りの説明を全て英語で説明するのは厳しいので、誰かにお願いしたいです 🙇

Member

presuku commented Oct 9, 2018

そうだと思います。

問題の 8.0.1344 までの経緯を調べてみると、一連のパッチは 8.0.1336 から始まっていて、 8.0.1341 でWindowsのテストが失敗するとのことでDoes not work in the MS-Windows GUI version.が追加され、最終的に 8.0.1344 でGUI環境全てで無効にされてしまったようです。

この辺りの説明を全て英語で説明するのは厳しいので、誰かにお願いしたいです 🙇

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Oct 9, 2018

Member

iminsert=2 で IME が有効になる IME とそうでない物があって、Windows だと必ず有効、Linux だと有効になりません。
なのでテストがそもそも不味いですね。Windows の場合、必ずアクティブになるのでそうなると imak には入らないのですよね。

Member

mattn commented Oct 9, 2018

iminsert=2 で IME が有効になる IME とそうでない物があって、Windows だと必ず有効、Linux だと有効になりません。
なのでテストがそもそも不味いですね。Windows の場合、必ずアクティブになるのでそうなると imak には入らないのですよね。

@presuku

This comment has been minimized.

Show comment
Hide comment
@presuku

presuku Oct 10, 2018

Member

iminsert=2 で IME が有効になる IME とそうでない物があって、Windows だと必ず有効、Linux だと有効になりません。

そうですね。Linuxでは各種IM様に適切に imaf を設定しないと有効にならないですね。

なのでテストがそもそも不味いですね。Windows の場合、必ずアクティブになるのでそうなると imak には入らないのですよね。

なるほど。まずいテストというのは func Test_iminsert2() のことですか?
そうだとすると、Windowsでは imaf を設定してても imaf が呼ばれないということなのでしょうか?

また、文中の imak は、 imaf (imactivatefunc) のことですよね?
それとも本当に imak (imactivatekey) でしょうか? そもそも自分は何か勘違いしてるのかな…

Member

presuku commented Oct 10, 2018

iminsert=2 で IME が有効になる IME とそうでない物があって、Windows だと必ず有効、Linux だと有効になりません。

そうですね。Linuxでは各種IM様に適切に imaf を設定しないと有効にならないですね。

なのでテストがそもそも不味いですね。Windows の場合、必ずアクティブになるのでそうなると imak には入らないのですよね。

なるほど。まずいテストというのは func Test_iminsert2() のことですか?
そうだとすると、Windowsでは imaf を設定してても imaf が呼ばれないということなのでしょうか?

また、文中の imak は、 imaf (imactivatefunc) のことですよね?
それとも本当に imak (imactivatekey) でしょうか? そもそも自分は何か勘違いしてるのかな…

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Oct 10, 2018

Member

そうだとすると、Windowsでは imaf を設定してても imaf が呼ばれないということなのでしょうか?

です。キーボード操作を完全に奪ってしまうので、imaf まで届きません。

なるほど。まずいテストというのは func Test_iminsert2() のことですか?

func Test_iminsert2()
  set imactivatefunc=IM_activatefunc
  set imstatusfunc=IM_statusfunc
  set iminsert=2
  normal! i
  set iminsert=0
  set imactivatefunc=
  set imstatusfunc=

  let expected = has('gui_running') ? 0 : 1
  call assert_equal(expected, s:imactivatefunc_called)
  call assert_equal(expected, s:imstatusfunc_called)
endfunc

Windows の場合は iminsert=2 の時点で確実に IME を activate 出来ますが、Linux の IME にはそういった機能が無いのでテストを書き分ける必要があるのです。
(テスト書いたの僕ですすみませんすみません)

また、文中の imak は、 imaf (imactivatefunc) のことですよね?

すみません。typo です。

Member

mattn commented Oct 10, 2018

そうだとすると、Windowsでは imaf を設定してても imaf が呼ばれないということなのでしょうか?

です。キーボード操作を完全に奪ってしまうので、imaf まで届きません。

なるほど。まずいテストというのは func Test_iminsert2() のことですか?

func Test_iminsert2()
  set imactivatefunc=IM_activatefunc
  set imstatusfunc=IM_statusfunc
  set iminsert=2
  normal! i
  set iminsert=0
  set imactivatefunc=
  set imstatusfunc=

  let expected = has('gui_running') ? 0 : 1
  call assert_equal(expected, s:imactivatefunc_called)
  call assert_equal(expected, s:imstatusfunc_called)
endfunc

Windows の場合は iminsert=2 の時点で確実に IME を activate 出来ますが、Linux の IME にはそういった機能が無いのでテストを書き分ける必要があるのです。
(テスト書いたの僕ですすみませんすみません)

また、文中の imak は、 imaf (imactivatefunc) のことですよね?

すみません。typo です。

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