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

x11: Add XIM support #11657

Merged
merged 8 commits into from May 16, 2024
Merged

x11: Add XIM support #11657

merged 8 commits into from May 16, 2024

Conversation

npmania
Copy link
Contributor

@npmania npmania commented May 10, 2024

This pull request adds XIM (X Input Method) support to x11 platform.

The implementation utilizes xim-rs, a XIM library written entirely in Rust, to provide asynchronous XIM communication.
Preedit and candidate positioning are fully supported in the editor interface, yet notably absent in the terminal environment.

This work is sponsored by Rainlab Inc.

Release Notes:

  • N/A

Signed-off-by: npmania <np@mkv.li>
Copy link

cla-bot bot commented May 10, 2024

We require contributors to sign our Contributor License Agreement, and we don't have @npmania on file. You can sign our CLA at https://zed.dev/cla. Once you've signed, post a comment here that says '@cla-bot check'.

@maxdeviant maxdeviant changed the title x11: add XIM support x11: Add XIM support May 10, 2024
@zed-industries-bot
Copy link

zed-industries-bot commented May 10, 2024

Warnings
⚠️

This PR is missing release notes.

Please add a "Release Notes" section that describes the change:

Release Notes:

- (Added|Fixed|Improved) ... ([#<public_issue_number_if_exists>](https://github.com/zed-industries/zed/issues/<public_issue_number_if_exists>)).

If your change is not user-facing, you can use "N/A" for the entry:

Release Notes:

- N/A

Generated by 🚫 dangerJS against d78ca21

@npmania
Copy link
Contributor Author

npmania commented May 10, 2024

@cla-bot check

Copy link

cla-bot bot commented May 10, 2024

The cla-bot has been summoned, and re-checked this pull request!

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label May 10, 2024
@npmania
Copy link
Contributor Author

npmania commented May 10, 2024

out2.mp4

Here's a short video testing English, BQN, Korean, Japanese and Chinese input.

Signed-off-by: npmania <np@mkv.li>
Signed-off-by: npmania <np@mkv.li>
Signed-off-by: npmania <np@mkv.li>
Signed-off-by: npmania <np@mkv.li>
@mikayla-maki
Copy link
Contributor

Thank you for this work, it's been needed!

Can you tell me a bit more about xim-rs? Is there a compelling reason to use it, rather than handling the xim messages ourselves?

crates/gpui/src/platform/linux/x11/window.rs Outdated Show resolved Hide resolved
crates/gpui/src/platform/linux/x11/window.rs Outdated Show resolved Hide resolved
@npmania
Copy link
Contributor Author

npmania commented May 13, 2024

Can you tell me a bit more about xim-rs? Is there a compelling reason to use it, rather than handling the xim messages ourselves?

The XIM protocol is not implemented in XCB, so communicating with XIM with the current xcb_ffi would require manual parsing of the XIM protocol. xim-rs provides an XIM protocol parsing interface over x11rb client, allowing non-blocking communication with the XIM server.

@mikayla-maki
Copy link
Contributor

Gotcha thanks for the context! I did some reading and research on XIM and have a better understanding of how this all fits together now :D

crates/gpui/src/platform/linux/x11/client.rs Outdated Show resolved Hide resolved
crates/gpui/src/platform/linux/x11/client.rs Show resolved Hide resolved
crates/gpui/src/platform/linux/x11/window.rs Outdated Show resolved Hide resolved
@mikayla-maki
Copy link
Contributor

See handle_key_event on macOS for a rough guide on how IME and keyevents should interact.

https://github.com/zed-industries/zed/blob/main/crates/gpui/src/platform/mac/window.rs#L1202-L1307

Signed-off-by: npmania <np@mkv.li>
@mikayla-maki
Copy link
Contributor

Seems that this PR needs a cargo fmt

Signed-off-by: npmania <np@mkv.li>
@npmania
Copy link
Contributor Author

npmania commented May 16, 2024

Oops, fixed formatting on the last commit. I believe I've ran typo checker and clippy already, so hopefully the rest will be fine.

@mikayla-maki mikayla-maki merged commit b60254f into zed-industries:main May 16, 2024
8 checks passed
@aohanhongzhi
Copy link

image

@npmania
Copy link
Contributor Author

npmania commented May 18, 2024

@aohanhongzhi Please provide me about your setup so I can reproduce it on my environment.
Maybe a new issue can be fine, titled something like "incorrect candidate window positioning on (Your setup)". You can tag my id there.

osiewicz pushed a commit to RemcoSmitsDev/zed that referenced this pull request May 18, 2024
This pull request adds XIM (X Input Method) support to x11 platform.

The implementation utilizes [xim-rs](https://crates.io/crates/xim), a
XIM library written entirely in Rust, to provide asynchronous XIM
communication.
Preedit and candidate positioning are fully supported in the editor
interface, yet notably absent in the terminal environment.

This work is sponsored by [Rainlab Inc.](https://rainlab.co.jp/en/)

Release Notes:
- N/A

---------

Signed-off-by: npmania <np@mkv.li>
@eatradish
Copy link

eatradish commented May 19, 2024

@aohanhongzhi Please provide me about your setup so I can reproduce it on my environment. Maybe a new issue can be fine, titled something like "incorrect candidate window positioning on (Your setup)". You can tag my id there.

I was able to reproduce that this is the LANG=C fcitx5-diagnose output:

# System Info:
1.  `uname -a`:

        Linux Daylily 6.9.0-aosc-main #1 SMP PREEMPT_DYNAMIC Mon Apr  8 14:34:55 UTC 2024 x86_64 GNU/Linux

2.  `lsb_release -a`:

        LSB Version:	n/a
        Distributor ID:	AOSC OS
        Description:	AOSC OS
        Release:	11.4.1
        Codename:	Koshki

3.  `lsb_release -d`:

        Description:	AOSC OS

4.  `/etc/lsb-release`:

        # FSG lsb_release configuration file template
        # If the distribution is LSB compliant, uncomment the following line
        # and set the version appropriately
        # LSB_VERSION=""
        DISTRIB_ID="AOSC OS"
        DISTRIB_CODENAME="Koshki"
        DISTRIB_RELEASE="11.4.1"
        DISTRIB_DESCRIPTION="AOSC OS"

5.  `/etc/os-release`:

        PRETTY_NAME="AOSC OS (11.4.1)"
        NAME="AOSC OS"
        VERSION_ID="11.4.1"
        VERSION="11.4.1 (Koshki)"
        BUILD_ID="20240507"
        ID=aosc
        ANSI_COLOR="1;36"
        HOME_URL="https://aosc.io/"
        SUPPORT_URL="https://github.com/AOSC-Dev/aosc-os-abbs"
        BUG_REPORT_URL="https://github.com/AOSC-Dev/aosc-os-abbs/issues/new/choose"

6.  Desktop Environment:

    Desktop environment is `kde`.

7.  XDG SESSION TYPE:

        XDG_SESSION_TYPE='x11'

8.  Bash Version:

        BASH_VERSION='5.2.26(1)-release'

# Environment:
1.  DISPLAY:

        DISPLAY=':0'


        WAYLAND_DISPLAY=''

2.  Keyboard Layout:

    1.  `setxkbmap`:

            xkb_keymap {
            	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
            	xkb_types     { include "complete"	};
            	xkb_compat    { include "complete"	};
            	xkb_symbols   { include "pc+us+inet(evdev)"	};
            	xkb_geometry  { include "pc(pc104)"	};
            };

    2.  `xprop`:

            _XKB_RULES_NAMES(STRING) = "evdev", "pc104", "us", "", ""

3.  Locale:

    1.  All locales:

            C
            C.utf8
            POSIX
            aa_DJ
            aa_DJ.iso88591
            aa_DJ.utf8
            aa_ER
            aa_ER.utf8
            aa_ER.utf8@saaho
            aa_ER@saaho
            aa_ET
            aa_ET.utf8
            af_ZA
            af_ZA.iso88591
            af_ZA.utf8
            agr_PE
            agr_PE.utf8
            ak_GH
            ak_GH.utf8
            am_ET
            am_ET.utf8
            an_ES
            an_ES.iso885915
            an_ES.utf8
            anp_IN
            anp_IN.utf8
            ar_AE
            ar_AE.iso88596
            ar_AE.utf8
            ar_BH
            ar_BH.iso88596
            ar_BH.utf8
            ar_DZ
            ar_DZ.iso88596
            ar_DZ.utf8
            ar_EG
            ar_EG.iso88596
            ar_EG.utf8
            ar_IN
            ar_IN.utf8
            ar_IQ
            ar_IQ.iso88596
            ar_IQ.utf8
            ar_JO
            ar_JO.iso88596
            ar_JO.utf8
            ar_KW
            ar_KW.iso88596
            ar_KW.utf8
            ar_LB
            ar_LB.iso88596
            ar_LB.utf8
            ar_LY
            ar_LY.iso88596
            ar_LY.utf8
            ar_MA
            ar_MA.iso88596
            ar_MA.utf8
            ar_OM
            ar_OM.iso88596
            ar_OM.utf8
            ar_QA
            ar_QA.iso88596
            ar_QA.utf8
            ar_SA
            ar_SA.iso88596
            ar_SA.utf8
            ar_SD
            ar_SD.iso88596
            ar_SD.utf8
            ar_SS
            ar_SS.utf8
            ar_SY
            ar_SY.iso88596
            ar_SY.utf8
            ar_TN
            ar_TN.iso88596
            ar_TN.utf8
            ar_YE
            ar_YE.iso88596
            ar_YE.utf8
            as_IN
            as_IN.utf8
            ast_ES
            ast_ES.iso885915
            ast_ES.utf8
            ayc_PE
            ayc_PE.utf8
            az_AZ
            az_AZ.utf8
            az_IR
            az_IR.utf8
            be_BY
            be_BY.cp1251
            be_BY.utf8
            be_BY.utf8@latin
            be_BY@latin
            bem_ZM
            bem_ZM.utf8
            ber_DZ
            ber_DZ.utf8
            ber_MA
            ber_MA.utf8
            bg_BG
            bg_BG.cp1251
            bg_BG.utf8
            bhb_IN.utf8
            bho_IN
            bho_IN.utf8
            bho_NP
            bho_NP.utf8
            bi_VU
            bi_VU.utf8
            bn_BD
            bn_BD.utf8
            bn_IN
            bn_IN.utf8
            bo_CN
            bo_CN.utf8
            bo_IN
            bo_IN.utf8
            bokmal
            br_FR
            br_FR.iso88591
            br_FR.iso885915@euro
            br_FR.utf8
            br_FR@euro
            brx_IN
            brx_IN.utf8
            bs_BA
            bs_BA.iso88592
            bs_BA.utf8
            byn_ER
            byn_ER.utf8
            ca_AD
            ca_AD.iso885915
            ca_AD.utf8
            ca_ES
            ca_ES.iso88591
            ca_ES.iso885915@euro
            ca_ES.utf8
            ca_ES.utf8@valencia
            ca_ES@euro
            ca_ES@valencia
            ca_FR
            ca_FR.iso885915
            ca_FR.utf8
            ca_IT
            ca_IT.iso885915
            ca_IT.utf8
            catalan
            ce_RU
            ce_RU.utf8
            chr_US
            chr_US.utf8
            ckb_IQ
            ckb_IQ.utf8
            cmn_TW
            cmn_TW.utf8
            crh_UA
            crh_UA.utf8
            croatian
            cs_CZ
            cs_CZ.iso88592
            cs_CZ.utf8
            csb_PL
            csb_PL.utf8
            cv_RU
            cv_RU.utf8
            cy_GB
            cy_GB.iso885914
            cy_GB.utf8
            czech
            da_DK
            da_DK.iso88591
            da_DK.utf8
            danish
            dansk
            de_AT
            de_AT.iso88591
            de_AT.iso885915@euro
            de_AT.utf8
            de_AT@euro
            de_BE
            de_BE.iso88591
            de_BE.iso885915@euro
            de_BE.utf8
            de_BE@euro
            de_CH
            de_CH.iso88591
            de_CH.utf8
            de_DE
            de_DE.iso88591
            de_DE.iso885915@euro
            de_DE.utf8
            de_DE@euro
            de_IT
            de_IT.iso88591
            de_IT.utf8
            de_LI.utf8
            de_LU
            de_LU.iso88591
            de_LU.iso885915@euro
            de_LU.utf8
            de_LU@euro
            deutsch
            doi_IN
            doi_IN.utf8
            dsb_DE
            dsb_DE.utf8
            dutch
            dv_MV
            dv_MV.utf8
            dz_BT
            dz_BT.utf8
            eesti
            el_CY
            el_CY.iso88597
            el_CY.utf8
            el_GR
            el_GR.iso88597
            el_GR.iso88597@euro
            el_GR.utf8
            el_GR@euro
            en_AG
            en_AG.utf8
            en_AU
            en_AU.iso88591
            en_AU.utf8
            en_BW
            en_BW.iso88591
            en_BW.utf8
            en_CA
            en_CA.iso88591
            en_CA.utf8
            en_DK
            en_DK.iso88591
            en_DK.utf8
            en_GB
            en_GB.iso88591
            en_GB.utf8
            en_HK
            en_HK.iso88591
            en_HK.utf8
            en_IE
            en_IE.iso88591
            en_IE.iso885915@euro
            en_IE.utf8
            en_IE@euro
            en_IL
            en_IL.utf8
            en_IN
            en_IN.utf8
            en_NG
            en_NG.utf8
            en_NZ
            en_NZ.iso88591
            en_NZ.utf8
            en_PH
            en_PH.iso88591
            en_PH.utf8
            en_SC.utf8
            en_SG
            en_SG.iso88591
            en_SG.utf8
            en_US
            en_US.iso88591
            en_US.utf8
            en_ZA
            en_ZA.iso88591
            en_ZA.utf8
            en_ZM
            en_ZM.utf8
            en_ZW
            en_ZW.iso88591
            en_ZW.utf8
            eo
            eo.utf8
            es_AR
            es_AR.iso88591
            es_AR.utf8
            es_BO
            es_BO.iso88591
            es_BO.utf8
            es_CL
            es_CL.iso88591
            es_CL.utf8
            es_CO
            es_CO.iso88591
            es_CO.utf8
            es_CR
            es_CR.iso88591
            es_CR.utf8
            es_CU
            es_CU.utf8
            es_DO
            es_DO.iso88591
            es_DO.utf8
            es_EC
            es_EC.iso88591
            es_EC.utf8
            es_ES
            es_ES.iso88591
            es_ES.iso885915@euro
            es_ES.utf8
            es_ES@euro
            es_GT
            es_GT.iso88591
            es_GT.utf8
            es_HN
            es_HN.iso88591
            es_HN.utf8
            es_MX
            es_MX.iso88591
            es_MX.utf8
            es_NI
            es_NI.iso88591
            es_NI.utf8
            es_PA
            es_PA.iso88591
            es_PA.utf8
            es_PE
            es_PE.iso88591
            es_PE.utf8
            es_PR
            es_PR.iso88591
            es_PR.utf8
            es_PY
            es_PY.iso88591
            es_PY.utf8
            es_SV
            es_SV.iso88591
            es_SV.utf8
            es_US
            es_US.iso88591
            es_US.utf8
            es_UY
            es_UY.iso88591
            es_UY.utf8
            es_VE
            es_VE.iso88591
            es_VE.utf8
            estonian
            et_EE
            et_EE.iso88591
            et_EE.iso885915
            et_EE.utf8
            eu_ES
            eu_ES.iso88591
            eu_ES.iso885915@euro
            eu_ES.utf8
            eu_ES@euro
            fa_IR
            fa_IR.utf8
            ff_SN
            ff_SN.utf8
            fi_FI
            fi_FI.iso88591
            fi_FI.iso885915@euro
            fi_FI.utf8
            fi_FI@euro
            fil_PH
            fil_PH.utf8
            finnish
            fo_FO
            fo_FO.iso88591
            fo_FO.utf8
            fr_BE
            fr_BE.iso88591
            fr_BE.iso885915@euro
            fr_BE.utf8
            fr_BE@euro
            fr_CA
            fr_CA.iso88591
            fr_CA.utf8
            fr_CH
            fr_CH.iso88591
            fr_CH.utf8
            fr_FR
            fr_FR.iso88591
            fr_FR.iso885915@euro
            fr_FR.utf8
            fr_FR@euro
            fr_LU
            fr_LU.iso88591
            fr_LU.iso885915@euro
            fr_LU.utf8
            fr_LU@euro
            french
            fur_IT
            fur_IT.utf8
            fy_DE
            fy_DE.utf8
            fy_NL
            fy_NL.utf8
            ga_IE
            ga_IE.iso88591
            ga_IE.iso885915@euro
            ga_IE.utf8
            ga_IE@euro
            galego
            galician
            gd_GB
            gd_GB.iso885915
            gd_GB.utf8
            german
            gez_ER
            gez_ER.utf8
            gez_ER.utf8@abegede
            gez_ER@abegede
            gez_ET
            gez_ET.utf8
            gez_ET.utf8@abegede
            gez_ET@abegede
            gl_ES
            gl_ES.iso88591
            gl_ES.iso885915@euro
            gl_ES.utf8
            gl_ES@euro
            greek
            gu_IN
            gu_IN.utf8
            gv_GB
            gv_GB.iso88591
            gv_GB.utf8
            ha_NG
            ha_NG.utf8
            hak_TW
            hak_TW.utf8
            he_IL
            he_IL.iso88598
            he_IL.utf8
            hebrew
            hi_IN
            hi_IN.utf8
            hif_FJ
            hif_FJ.utf8
            hne_IN
            hne_IN.utf8
            hr_HR
            hr_HR.iso88592
            hr_HR.utf8
            hrvatski
            hsb_DE
            hsb_DE.iso88592
            hsb_DE.utf8
            ht_HT
            ht_HT.utf8
            hu_HU
            hu_HU.iso88592
            hu_HU.utf8
            hungarian
            hy_AM
            hy_AM.armscii8
            hy_AM.utf8
            ia_FR
            ia_FR.utf8
            icelandic
            id_ID
            id_ID.iso88591
            id_ID.utf8
            ig_NG
            ig_NG.utf8
            ik_CA
            ik_CA.utf8
            is_IS
            is_IS.iso88591
            is_IS.utf8
            it_CH
            it_CH.iso88591
            it_CH.utf8
            it_IT
            it_IT.iso88591
            it_IT.iso885915@euro
            it_IT.utf8
            it_IT@euro
            italian
            iu_CA
            iu_CA.utf8
            ja_JP
            ja_JP.eucjp
            ja_JP.ujis
            ja_JP.utf8
            japanese
            japanese.euc
            ka_GE
            ka_GE.georgianps
            ka_GE.utf8
            kab_DZ
            kab_DZ.utf8
            kk_KZ
            kk_KZ.pt154
            kk_KZ.utf8
            kl_GL
            kl_GL.iso88591
            kl_GL.utf8
            km_KH
            km_KH.utf8
            kn_IN
            kn_IN.utf8
            ko_KR
            ko_KR.euckr
            ko_KR.utf8
            kok_IN
            kok_IN.utf8
            korean
            korean.euc
            ks_IN
            ks_IN.utf8
            ks_IN.utf8@devanagari
            ks_IN@devanagari
            ku_TR
            ku_TR.iso88599
            ku_TR.utf8
            kw_GB
            kw_GB.iso88591
            kw_GB.utf8
            ky_KG
            ky_KG.utf8
            lb_LU
            lb_LU.utf8
            lg_UG
            lg_UG.iso885910
            lg_UG.utf8
            li_BE
            li_BE.utf8
            li_NL
            li_NL.utf8
            lij_IT
            lij_IT.utf8
            lithuanian
            ln_CD
            ln_CD.utf8
            lo_LA
            lo_LA.utf8
            lt_LT
            lt_LT.iso885913
            lt_LT.utf8
            lv_LV
            lv_LV.iso885913
            lv_LV.utf8
            lzh_TW
            lzh_TW.utf8
            mag_IN
            mag_IN.utf8
            mai_IN
            mai_IN.utf8
            mai_NP
            mai_NP.utf8
            mfe_MU
            mfe_MU.utf8
            mg_MG
            mg_MG.iso885915
            mg_MG.utf8
            mhr_RU
            mhr_RU.utf8
            mi_NZ
            mi_NZ.iso885913
            mi_NZ.utf8
            miq_NI
            miq_NI.utf8
            mjw_IN
            mjw_IN.utf8
            mk_MK
            mk_MK.iso88595
            mk_MK.utf8
            ml_IN
            ml_IN.utf8
            mn_MN
            mn_MN.utf8
            mni_IN
            mni_IN.utf8
            mnw_MM
            mnw_MM.utf8
            mr_IN
            mr_IN.utf8
            ms_MY
            ms_MY.iso88591
            ms_MY.utf8
            mt_MT
            mt_MT.iso88593
            mt_MT.utf8
            my_MM
            my_MM.utf8
            nan_TW
            nan_TW.utf8
            nan_TW.utf8@latin
            nan_TW@latin
            nb_NO
            nb_NO.iso88591
            nb_NO.utf8
            nds_DE
            nds_DE.utf8
            nds_NL
            nds_NL.utf8
            ne_NP
            ne_NP.utf8
            nhn_MX
            nhn_MX.utf8
            niu_NU
            niu_NU.utf8
            niu_NZ
            niu_NZ.utf8
            nl_AW
            nl_AW.utf8
            nl_BE
            nl_BE.iso88591
            nl_BE.iso885915@euro
            nl_BE.utf8
            nl_BE@euro
            nl_NL
            nl_NL.iso88591
            nl_NL.iso885915@euro
            nl_NL.utf8
            nl_NL@euro
            nn_NO
            nn_NO.iso88591
            nn_NO.utf8
            no_NO
            no_NO.ISO-8859-1
            norwegian
            nr_ZA
            nr_ZA.utf8
            nso_ZA
            nso_ZA.utf8
            nynorsk
            oc_FR
            oc_FR.iso88591
            oc_FR.utf8
            om_ET
            om_ET.utf8
            om_KE
            om_KE.iso88591
            om_KE.utf8
            or_IN
            or_IN.utf8
            os_RU
            os_RU.utf8
            pa_IN
            pa_IN.utf8
            pa_PK
            pa_PK.utf8
            pap_AW
            pap_AW.utf8
            pap_CW
            pap_CW.utf8
            pl_PL
            pl_PL.iso88592
            pl_PL.utf8
            polish
            portuguese
            ps_AF
            ps_AF.utf8
            pt_BR
            pt_BR.iso88591
            pt_BR.utf8
            pt_PT
            pt_PT.iso88591
            pt_PT.iso885915@euro
            pt_PT.utf8
            pt_PT@euro
            quz_PE
            quz_PE.utf8
            raj_IN
            raj_IN.utf8
            rif_MA
            rif_MA.utf8
            ro_RO
            ro_RO.iso88592
            ro_RO.utf8
            romanian
            ru_RU
            ru_RU.iso88595
            ru_RU.koi8r
            ru_RU.utf8
            ru_UA
            ru_UA.koi8u
            ru_UA.utf8
            russian
            rw_RW
            rw_RW.utf8
            sa_IN
            sa_IN.utf8
            sah_RU
            sah_RU.utf8
            sat_IN
            sat_IN.utf8
            sc_IT
            sc_IT.utf8
            sd_IN
            sd_IN.utf8
            sd_IN.utf8@devanagari
            sd_IN@devanagari
            se_NO
            se_NO.utf8
            sgs_LT
            sgs_LT.utf8
            shn_MM
            shn_MM.utf8
            shs_CA
            shs_CA.utf8
            si_LK
            si_LK.utf8
            sid_ET
            sid_ET.utf8
            sk_SK
            sk_SK.iso88592
            sk_SK.utf8
            sl_SI
            sl_SI.iso88592
            sl_SI.utf8
            slovak
            slovene
            slovenian
            sm_WS
            sm_WS.utf8
            so_DJ
            so_DJ.iso88591
            so_DJ.utf8
            so_ET
            so_ET.utf8
            so_KE
            so_KE.iso88591
            so_KE.utf8
            so_SO
            so_SO.iso88591
            so_SO.utf8
            spanish
            sq_AL
            sq_AL.iso88591
            sq_AL.utf8
            sq_MK
            sq_MK.utf8
            sr_ME
            sr_ME.utf8
            sr_RS
            sr_RS.utf8
            sr_RS.utf8@latin
            sr_RS@latin
            ss_ZA
            ss_ZA.utf8
            st_ZA
            st_ZA.iso88591
            st_ZA.utf8
            sv_FI
            sv_FI.iso88591
            sv_FI.iso885915@euro
            sv_FI.utf8
            sv_FI@euro
            sv_SE
            sv_SE.iso88591
            sv_SE.utf8
            sw_KE
            sw_KE.utf8
            sw_TZ
            sw_TZ.utf8
            swedish
            syr
            syr.utf8
            szl_PL
            szl_PL.utf8
            ta_IN
            ta_IN.utf8
            ta_LK
            ta_LK.utf8
            tcy_IN.utf8
            te_IN
            te_IN.utf8
            tg_TJ
            tg_TJ.koi8t
            tg_TJ.utf8
            th_TH
            th_TH.tis620
            th_TH.utf8
            thai
            the_NP
            the_NP.utf8
            ti_ER
            ti_ER.utf8
            ti_ET
            ti_ET.utf8
            tig_ER
            tig_ER.utf8
            tk_TM
            tk_TM.utf8
            tl_PH
            tl_PH.iso88591
            tl_PH.utf8
            tn_ZA
            tn_ZA.utf8
            to_TO
            to_TO.utf8
            tpi_PG
            tpi_PG.utf8
            tr_CY
            tr_CY.iso88599
            tr_CY.utf8
            tr_TR
            tr_TR.iso88599
            tr_TR.utf8
            ts_ZA
            ts_ZA.utf8
            tt_RU
            tt_RU.utf8
            tt_RU.utf8@iqtelif
            tt_RU@iqtelif
            turkish
            ug_CN
            ug_CN.utf8
            uk_UA
            uk_UA.koi8u
            uk_UA.utf8
            unm_US
            unm_US.utf8
            ur_IN
            ur_IN.utf8
            ur_PK
            ur_PK.utf8
            uz_UZ
            uz_UZ.iso88591
            uz_UZ.utf8
            uz_UZ.utf8@cyrillic
            uz_UZ@cyrillic
            ve_ZA
            ve_ZA.utf8
            vi_VN
            vi_VN.utf8
            wa_BE
            wa_BE.iso88591
            wa_BE.iso885915@euro
            wa_BE.utf8
            wa_BE@euro
            wae_CH
            wae_CH.utf8
            wal_ET
            wal_ET.utf8
            wo_SN
            wo_SN.utf8
            xh_ZA
            xh_ZA.iso88591
            xh_ZA.utf8
            yi_US
            yi_US.cp1255
            yi_US.utf8
            yo_NG
            yo_NG.utf8
            yue_HK
            yue_HK.utf8
            yuw_PG
            yuw_PG.utf8
            zh_CN
            zh_CN.gb18030
            zh_CN.gb2312
            zh_CN.gbk
            zh_CN.utf8
            zh_HK
            zh_HK.big5hkscs
            zh_HK.utf8
            zh_SG
            zh_SG.gb2312
            zh_SG.gbk
            zh_SG.utf8
            zh_TW
            zh_TW.big5
            zh_TW.euctw
            zh_TW.utf8
            zu_ZA
            zu_ZA.iso88591
            zu_ZA.utf8

    2.  Current locale:

            LANG=C
            LC_CTYPE="C"
            LC_NUMERIC="C"
            LC_TIME="C"
            LC_COLLATE="C"
            LC_MONETARY="C"
            LC_MESSAGES="C"
            LC_PAPER="C"
            LC_NAME="C"
            LC_ADDRESS="C"
            LC_TELEPHONE="C"
            LC_MEASUREMENT="C"
            LC_IDENTIFICATION="C"
            LC_ALL=

4.  Directories:

    1.  Home:

            /home/saki

    2.  `${XDG_CONFIG_HOME}`:

        Environment variable `XDG_CONFIG_HOME` is not set.

        Current value of `XDG_CONFIG_HOME` is `~/.config` (`/home/saki/.config`).

    3.  Fcitx5 Settings Directory:

        Current fcitx5 settings directory is `~/.config/fcitx5` (`/home/saki/.config/fcitx5`).

5.  Current user:

    The script is run as saki (1000).

# Fcitx State:
1.  executable:

    Found fcitx5 at `/usr/bin/fcitx5`.

2.  version:

    Fcitx version: `5.1.9`

3.  process:

    Found 1 fcitx5 process:

           3363 fcitx5

4.  `fcitx5-remote`:

    `fcitx5-remote` works properly.

5.  DBus interface:

    Using `dbus-send` to check dbus.

    Owner of DBus name `org.fcitx.Fcitx5` is `:1.49`.

    PID of DBus name `org.fcitx.Fcitx5` owner is `3363`.

    Debug information from dbus:

           Group [x11::0] has 72 InputContext(s)
          IC [1a6b8ce2ed554d678556660646ed07d3] program:telegram-desktop frontend:dbus cap:16000800072 focus:0
          IC [52496efd75204f50961e7669252d16dc] program:clash-verge frontend:dbus cap:6000000032 focus:0
          IC [780cb629d6c548fe9f7a0dfc1eaf1b9f] program:plasmashell frontend:dbus cap:16000800072 focus:0
          IC [9a1e8f33eab04e4bb08d4745b58d3bd1] program:code frontend:dbus cap:6000000032 focus:0
          IC [57a7da3177ac49718d1f7529cdad469f] program:telegram-desktop frontend:dbus cap:6800800072 focus:0
          IC [a4efa96244964e938512ea4e74d2d3db] program:dolphin frontend:dbus cap:16000800072 focus:0
          IC [239fc5c277284ea5b78baacf32d60f37] program:Discord frontend:dbus cap:6000000032 focus:0
          IC [5cc2b355b5e0488fb65133938f66d3ee] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [361b07f764cd4a0295d1a6ef9068cc07] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [214459aec5854836960785544e55401e] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [eb13193103f640d99d9278b3ca0ef99b] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [64fc3b210de74b0fa8a3ef5b48ba9238] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [f1700eda50ec48188b49b8cb0509abd9] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [a4fc991133d346d6bae663664bb04953] program:virt-manager frontend:dbus cap:600000003a focus:0
          IC [1e47842e769b470f9ec8f57bec01d0ad] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [0a20259c3a774a6fbb0f9aca61f301f0] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [ceaa7aaea8e04068962bec659b25d278] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [8786ae13ef8d4011a0b3fbf0d9c63b76] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [e99ce8f4dc9743feb717642fa707b874] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [eef27ce587f244378b6ab88a5427396e] program:firefox frontend:dbus cap:6000000032 focus:0
          IC [d69c1324093c40ff9f3c8b362132f080] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [e872a794fd404cad94b6b61dddf86872] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [746388f1d2e04532b52a8de5d8dc38ca] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [da25a1ac0dd8447c94b5699650c4a0df] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [c84262a5490448a7ad3cbc3ca6ae835e] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [1e08b318fc5341638a031a6feeb77581] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [536ed29bacf44be5b96acd49b49fe82b] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [3fe3aa839fbe4688bd61083b2fcd39f9] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [8cb6406d830d458eb94eb08eb2a43a7f] program:virt-manager frontend:dbus cap:6000000072 focus:0
          IC [626af363195e4dd58ccf2bcfbab614ae] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [5a28f1983b34489e88fefbc2692dead7] program:qq frontend:dbus cap:6000000032 focus:0
          IC [d8ee03ddfe054facaeab867d89565de4] program:spectacle frontend:dbus cap:16000800072 focus:0
          IC [66538317c13b487f830ec827d191a8c7] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [ba9cfeb737ff4abbb6afa0b23e63deab] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [4227387379c74c0c8851ec135f9219da] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [62a6d80aebff4e1cb07399a11d28d951] program:firefox frontend:dbus cap:6000000032 focus:0
          IC [7d1e7f9e7a924d31a9ad97590cdb8ed0] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [43b8b899d4a54681a4decc6a34e09dbc] program:plasmashell frontend:dbus cap:16000800072 focus:0
          IC [6672741eb9f048b0838a982b058e4c17] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [011db2e593cc478780caaa7238919ee4] program:plasmashell frontend:dbus cap:6000820072 focus:0
          IC [f33e76ba26e74e77a367174624f7dc9c] program:firefox frontend:dbus cap:6000000032 focus:0
          IC [ee894de64d3e45a8a5dcad20b99184d6] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [519c22791560400b959807c5f4326e84] program:kwin_x11 frontend:dbus cap:16000800072 focus:0
          IC [8647db7beced485794aa3b0bbe532ae7] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [f07e2e0c12274e5d913396a726500f76] program:konsole frontend:dbus cap:6000820872 focus:0
          IC [7d52151be9004ce3845fe2922d7f6d15] program:plasmashell frontend:dbus cap:6000820072 focus:0
          IC [8469153f16b64369979b291781097b9b] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [c5a6c9a65412478d93d5e673e89e2cb4] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [b98f157892594884ac9299def24fd106] program:firefox frontend:dbus cap:6000000072 focus:0
          IC [b0919338a70b42fab200afea2b246f50] program:plasmashell frontend:dbus cap:16000800072 focus:0
          IC [401756b8f78b441fbe4437ab7982b9dc] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [e5c0ffd2ccd040a88a198922b79f8acf] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [f0f01237bb7043268d4284e14016879a] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [1879372aee844876929dcba55c2392ab] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [0f163a42479f46219e79aba87180c031] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [97803f15a3284211a6312daaef5516a4] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [089cfb56c98342bea828386715c55927] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [d204841c9b2d44d8b29aaefffbbee7aa] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [0fb0691f41914b30b28f768951002b22] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [1047ea3159ca42769c0c92b1b39a12f1] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [d0e98d4b709b4c69ad9b15ebf4f1e372] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [3f3182595a02407c8ce58f50155d2450] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [b1c4472de8af42dcb68cecf69a74289a] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [b0a2c53b0cf34ca7b4ddce813258b334] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [1d93e5a03d214811bcef641b6da46d91] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [65dc9a9d9ff04139919be44fe8f78426] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [0ea4f754628c4b8985eaa5ef1699b15b] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [8d820c5906e741fb9e9e2b256f6e96ae] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [761df1ab200c43f1ac56dd6182db5501] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [27f3dad3338741ada8fce1b782fce051] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [eaf058dd831a4951a728d9ea31120be0] program:virt-manager frontend:dbus cap:6000000032 focus:0
          IC [508ef8c78a714179be575967b8e20f71] program:virt-manager frontend:dbus cap:6000000032 focus:0
        Input Context without group

# Fcitx Configure UI:
1.  Config Tool Wrapper:

    Found fcitx5-configtool at `/usr/bin/fcitx5-configtool`.

2.  Config GUI for qt:

    Found `fcitx5-config-qt` at `/usr/bin/fcitx5-config-qt`.

3.  Config GUI for kde:

    Found fcitx5 kcm module.

        kcm_fcitx5                     - Configure Input Method

# Frontends setup:
The environment variable checked by this script only shows the environment under current shell. It is still possible that you did not set the environment to the whole graphic desktop session. You may inspect the actual environment variable of a certain process by using `xargs -0 -L1 /proc/$PID/environ` for a certain process that you find not working.

## Xim:
1.  `${XMODIFIERS}`:

    Environment variable XMODIFIERS is set to "@im=fcitx" correctly.
    Xim Server Name from Environment variable is fcitx.

2.  XIM_SERVERS on root window:

    Xim server name is the same with that set in the environment variable.

3.  XIM encoding:

    **Your LC_CTYPE is set to C whose encoding is not UTF-8. You may have trouble committing strings using XIM.**

## Qt:
1.  qt4 - `${QT4_IM_MODULE}`:

    Environment variable QT_IM_MODULE is set to "fcitx" correctly.

    **`fcitx5-qt4-immodule-probing` not found.**

2.  qt5 - `${QT_IM_MODULE}`:

    Environment variable QT_IM_MODULE is set to "fcitx" correctly.

    Using fcitx5-qt5-immodule-probing to check the actual im module to be used under current environment:

        QT_QPA_PLATFORM=xcb
        QT_IM_MODULE=fcitx
        IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext

3.  qt6 - `${QT_IM_MODULE}`:

    Environment variable QT_IM_MODULE is set to "fcitx" correctly.

    Using fcitx5-qt6-immodule-probing to check the actual im module to be used under current environment:

        QT_QPA_PLATFORM=xcb
        QT_IM_MODULE=fcitx
        IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext

4.  Qt IM module files:

    Found unknown fcitx qt module: `/usr/lib/wps-office/office6/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so`.
    Found fcitx5 im module for qt6: `/usr/lib/qt6/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`.
    Found fcitx5 im module for qt5: `/usr/lib/qt5/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`.
    Found unknown fcitx qt module: `/usr/lib/qt5/plugins/plasma/kcms/systemsettings/kcm_fcitx5.so`.
    Found fcitx5 qt6 module: `/usr/lib/fcitx5/qt6/libfcitx5-unikey-macro-editor.so`.
    Found fcitx5 qt6 module: `/usr/lib/fcitx5/qt6/libfcitx-quickphrase-editor5.so`.
    Found fcitx5 qt6 module: `/usr/lib/fcitx5/qt6/libfcitx5-kkc-config.so`.
    Found fcitx5 qt6 module: `/usr/lib/fcitx5/qt6/libfcitx5-unikey-keymap-editor.so`.
    Found fcitx5 qt6 module: `/usr/lib/fcitx5/qt6/libfcitx5-skk-config.so`.
    Found fcitx5 qt5 module: `/usr/lib/fcitx5/qt5/libfcitx-quickphrase-editor5.so`.

    Following error may not be accurate because guessing Qt version from path depends on how your distribution packages Qt. It is not a critical error if you do not use any Qt application with certain version of Qt or you are using text-input support by Qt under Wayland.
    **Cannot find fcitx5 input method module for Qt4.**

## Gtk:
1.  gtk - `${GTK_IM_MODULE}`:

    Environment variable GTK_IM_MODULE is set to "fcitx" correctly.

    Using fcitx5-gtk2-immodule-probing to check the actual im module to be used under current environment:

        GTK_IM_MODULE=fcitx

    Using fcitx5-gtk3-immodule-probing to check the actual im module to be used under current environment:

        GTK_IM_MODULE=fcitx

    Using fcitx5-gtk4-immodule-probing to check the actual im module to be used under current environment:

        GTK_IM_MODULE=fcitx

2.  `gtk-query-immodules`:

    1.  gtk 2:

        Found `gtk-query-immodules` for gtk `2.24.33` at `/usr/bin/gtk-query-immodules-2.0`.
        Version Line:

            # Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.33

        Found fcitx5 im modules for gtk `2.24.33`.

            "/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so" 
            "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 
            "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 

    2.  gtk 3:

        Found `gtk-query-immodules` for gtk `3.24.38` at `/usr/bin/gtk-query-immodules-3.0`.
        Version Line:

            # Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.24.38

        Found fcitx5 im modules for gtk `3.24.38`.

            "/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so" 
            "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 
            "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 

3.  Gtk IM module cache:

    1.  gtk 2:

        Found immodules cache for gtk `2.24.33` at `/usr/lib/gtk-2.0/2.10.0/immodules.cache`.
        Version Line:

            # Created by gtk-query-immodules-2.0 from gtk+-2.24.33

        Found fcitx5 im modules for gtk `2.24.33`.

            "/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so" 
            "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 
            "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 

    2.  gtk 3:

        Found immodules cache for gtk `3.24.38` at `/usr/lib/gtk-3.0/3.0.0/immodules.cache`.
        Version Line:

            # Created by gtk-query-immodules-3.0 from gtk+-3.24.38

        Found fcitx5 im modules for gtk `3.24.38`.

            "/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so" 
            "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 
            "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 

4.  Gtk IM module files:

    1.  gtk 2:

        All found Gtk 2 immodule files exist.

    2.  gtk 3:

        All found Gtk 3 immodule files exist.

    3.  gtk 4:

        All found Gtk 4 immodule files exist.

# Configuration:
## Fcitx Addons:
1.  Addon Config Dir:

    Found fcitx5 addon config directory: `/usr/share/fcitx5/addon`.

2.  Addon List:

    1.  Found 39 enabled addons:

            Anthy 5.1.4
            Chewing 5.1.3
            Simplified and Traditional Chinese Translation 5.1.5
            Classic User Interface 5.1.9
            Clipboard 5.1.9
            Cloud Pinyin 5.1.5
            DBus 5.1.9
            DBus Frontend 5.1.9
            Emoji 5.1.9
            Fcitx4 Frontend 5.1.9
            Full width character 5.1.5
            Hangul 5.1.3
            IBus Frontend 5.1.9
            Lua IME API 5.0.13
            Input method selector 5.1.9
            Keyboard 5.1.9
            KDE Input Method Panel 5.1.9
            KKC Addon of Fcitx 5.1.3
            LibThai Addon of Fcitx 5.1.3
            Lua Addon Loader 5.0.13
            M17N 5.1.1
            Status Notifier 5.1.9
            Notification 5.1.9
            Pinyin 5.1.5
            Extra Pinyin functionality 5.1.5
            Punctuation 5.1.5
            Quick Phrase 5.1.9
            Rime 5.1.6
            Sayura Sinhala Input Method For Fcitx 5.1.2
            SKK 5.1.3
            Spell 5.1.9
            Table 5.1.5
            Unicode 5.1.9
            Unikey Wrapper For Fcitx 5.1.4
            DBus Virtual Keyboard 5.1.9
            Wayland 5.1.9
            Wayland Input method frontend 5.1.9
            XCB 5.1.9
            X Input Method Frontend 5.1.9

    2.  Found 0 disabled addons:

3.  Addon Libraries:

    All libraries for all addons are found.

4.  User Interface:

    Found 3 enabled user interface addons:

        Classic User Interface
        KDE Input Method Panel
        DBus Virtual Keyboard

## Input Methods:
1.  `/home/saki/.config/fcitx5/profile`:

        [Groups/0]
        # Group Name
        Name=默认
        # Layout
        Default Layout=us
        # Default Input Method
        DefaultIM=pinyin

        [Groups/0/Items/0]
        # Name
        Name=keyboard-us
        # Layout
        Layout=

        [Groups/0/Items/1]
        # Name
        Name=pinyin
        # Layout
        Layout=

        [Groups/0/Items/2]
        # Name
        Name=rime
        # Layout
        Layout=

        [GroupOrder]
        0=默认

# Log:
1.  `date`:

        Sun May 19 12:33:56 CST 2024

2.  `/home/saki/.config/fcitx5/crash.log`:

    `/home/saki/.config/fcitx5/crash.log` not found.

**Warning: the output of fcitx5-diagnose contains sensitive information, including the distribution name, kernel version, name of currently running programs, etc.**

**Though such information can be helpful to developers for diagnostic purpose, please double check and remove as necessary before posting it online publicly.**

@npmania
Copy link
Contributor Author

npmania commented May 19, 2024

@eatradish Thanks a lot! I will try to investigate into this issue in a few days.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla-signed The user has signed the Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants