ueno / ibus-skk

Japanese SKK engine for IBus

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

入力確定時の確定文字列の損失

masatake opened this issue · comments

Baai[space],

と入力すると[space]をキー入力したところで「場合」と表示される、それをアプリケーションに与えたいのですが、","を入力したところで表示されていた「場合」消えてしまい、アプリケーションへ渡し切れません。
ビデオをとってみました。

Screencast.from.2023-11-06.00-38-06.webm

「場合」だけでなく

KudaSai

でも"i"の手前で "下さ" まで表示されるのですが、("下さい"と入力すべく)"i"を押したところで、"下さ" が消えてしまいます。

Fedora38のfirefoxとgnome-terminalで再現するのを確認しました。

$ rpm -q firefox gnome-termianl ibus-skk ibus
firefox-118.0.2-1.fc38.x86_64
package gnome-termianl is not installed
ibus-skk-1.4.3-14.fc38.x86_64
ibus-1.5.28-6.fc38.x86_64

同じ現象が現象がどれぐらいの範囲で発生しているのか知りたいので、同じ事象に遭遇した方でこれをご覧になった方はプラットフォームとターゲットアプリケーションを添えてコメントして欲しいです。

同じ環境ですが、確かに発生しますね。ただ、文字列自体は CommitText シグナルを通じて確かに送られているようです。

$ dbus-monitor --address $(ibus address)
...
signal time=1699235895.326008 sender=:1.8 -> destination=(null destination) serial=263 path=/org/freedesktop/IBus/Engine/2; interface=org.freedesktop.IBus.Engine; member=CommitText
   variant       struct {
         string "IBusText"
         array [
         ]
         string "場合"
         variant             struct {
               string "IBusAttrList"
               array [
               ]
               array [
               ]
            }
      }
signal time=1699235895.326249 sender=:1.8 -> destination=(null destination) serial=264 path=/org/freedesktop/IBus/Engine/2; interface=org.freedesktop.IBus.Engine; member=CommitText
   variant       struct {
         string "IBusText"
         array [
         ]
         string "、"
         variant             struct {
               string "IBusAttrList"
               array [
               ]
               array [
               ]
            }
      }

どちらも "," が起点になっていますが、"場合" は候補リストを確定した段階で送られ、"、" は "," を確定した段階で送られています。なので、以下のように、最初の時点では CommitText を送らないようにすれば回避できると思います。

diff --git a/src/engine.vala b/src/engine.vala
index a55d4ca..49c2526 100644
--- a/src/engine.vala
+++ b/src/engine.vala
@@ -140,11 +140,13 @@ class SkkEngine : IBus.Engine {
                 set_lookup_table_cursor_pos ();
             });
         context.candidates.selected.connect (() => {
+#if false
                 var output = context.poll_output ();
                 if (output.length > 0) {
                     var text = new IBus.Text.from_string (output);
                     commit_text (text);
                 }
+#endif
                 if (lookup_table_visible) {
                     hide_lookup_table ();
                     hide_auxiliary_text ();

ありがとうございます。試して結果を報告します。

もう少しきちんと回避するとこんな感じでしょうか (#72)。scratch build を用意したのでお試しください:
https://koji.fedoraproject.org/koji/taskinfo?taskID=108739794

パッケージを試したところ、直りました。ありがとうございます。