请教下:linux的输入法的系统大概是什么样的? #364
-
大家好,
|
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 3 replies
-
https://www.csslayer.info/wordpress/fcitx-dev/fcitx5-dev-keyevent-from-app-to-fcitx/ gtk/qt 和 qt 提供了一个跨平台的抽象给程序。对于 C/S 架构的输入法而言,需要某种手段把按键从程序传输给输入法。gtk 和 qt 过去都是通过和你说的一样的机制通过 XIM 来实现的,但是问题是 XIM (或者说现存的 xim 实现)自己存在了太多问题,以及扩展性方面的考虑,ibus,fcitx(还有过去的 scim)都选择了自己实现自己的接口。简单来说你可以当作把协议的控制掌握在自己手里的一种行为。Qt5 因为迁移到 xcb 的关系,已经不支持 xim 了(当时还没有基于 xcb 的 xim 实现)。Gtk4 似乎也删掉了 xim。 你要选择实现自己的输入法,如果你乐意也可以选择实现 fcitx 或者 ibus 的接口(都是基于 dbus 的),就像 fcitx5 就实现了 ibus 的接口可以和用 ibus im module 的程序通信。 但是如果回到你最初的问题,想要把 Android 的键盘对接到能打字,如果只考虑 X 不考虑 wayland 的话,不一定要选择输入法。 如果你了解一个叫做 xdotool 的命令,就知道你可以使用 这是如何实现的呢?很简单,Xlib 的按键在某个特定的编码之后表示按键就是表示 unicode,直接通过模拟按键来发送了汉字,如果你用 xev 抓取的话就可以看到这样的内容: KeyPress event, serial 68, synthetic NO, window 0x1800001, 理论上你可以通过模拟按键发送任意文本。 |
Beta Was this translation helpful? Give feedback.
-
就和fcitx ibus那个一样啊。ibus 那个 qt 是官方做的,fcitx 的是我做的相对于 qt 是第三方。平心而论
qt官方做的那个bug很多…
当然你乐意也可以提交给 qt 官方(顺便qt5已经不会有新版本了)
Dean ***@***.***>于2021年10月26日 周二01:26写道:
… qt5 就是单纯没人实现一个 xim 的 im module,如果你乐意也完全可以写一个。我的 xcb-imdkit 里面也有客户端的 api。
如果写一个im module的话,是要提交给qt5,随qt5一起发布还是说我们写完了放在系统的指定文件夹下就可以?也就是这qt5对im
module的使用是可配置的还是硬编码的?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#364 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAB7MZGD3LYACGWPGL3IQETUIZQ3BANCNFSM5GWWMZXQ>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
|
Beta Was this translation helpful? Give feedback.
-
自己做的界面抢占输入焦点,请教fcitx中要怎么处理或者调用什么函数来设置自己的界面不抢占焦点? |
Beta Was this translation helpful? Give feedback.
https://www.csslayer.info/wordpress/fcitx-dev/fcitx5-dev-keyevent-from-app-to-fcitx/
协议的文档:https://www.x.org/releases/X11R7.6/doc/libX11/specs/XIM/xim.html
现存的实现:
服务器端 https://www.x.org/archive/unsupported/lib/IMdkit/ https://github.com/fcitx/xcb-imdkit/
客户端:Xlib
gtk/qt 和 qt 提供了一个跨平台的抽象给程序。对于 C/S 架构的输入法而言,需要某种手段把按键从程序传输给输入法。gtk 和 qt 过去都是通过和你说的一样的机制通过 XIM 来实现的,但是问题是 XIM (或者说现存的 xim 实现)自己存在了太多问题,以及扩展性方面的考虑,ibus,fcitx(还有过去的 scim)都选择了自己实现自己的接口。简单来说你可以当作把协议的控制掌握在自己手里的一种行为。Qt5 因为迁移到 xcb 的关系,已经不支持 xim 了(当时还没有基于 xcb 的 xim 实现)。Gtk4 似乎也删掉了 xim。
你要选择实现自己的输入法,如果你乐意也可以选择实现 fcitx 或者 ibus 的接口(都是基于 dbus 的),就像 fcitx5 就实现了 ibus 的接口可以和用 ibus im module 的程序通信。
但是如果回到你最初的问题,想要把 Android 的键盘对接到能打字,如果只考虑 X 不考虑 wa…