Emacs GUI下不能输入中文

还有一种方法,用emacs里的输入法而不是系统的。我已经用了几个月了。还不错。这是我当初安装的时候写的博客。

$ sudo mv /usr/bin/emacs /usr/bin/emacs.origin $ sudo touch /usr/bin/emacs $ sudo vim /usr/bin/emacs

#!/bin/zsh LC_CTYPE=zh_CN.UTF-8 /usr/bin/emacs.origin “$@”

$ vim ~/.xinitrc … export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" fcitx & if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi …

$ vim ~/.Xmodmap

! ! Swap Caps_Lock and Control_L ! remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L

$ vim .config/fcitx/config … TriggerKey=CTRL_RSPACE … IMSwitchHotkey=ALT_SUPER …

1 个赞

我这边 Ubuntu 下英文的 locale 也没问题。不清楚你的环境下是不是只有 Emacs 有这个问题,还是所有的 GTK 程序都有这个问题?要是不是的话,我觉得有可能跟 Emacs 没关系,Emacs 只是一只普通的 GTK 程序而已。不妨到 Arch 的论坛问问。

我也用了呆神的PYIM插件, 的确是很不错的输入法。不过我除了英文,中文还有芬兰语。。平时常写的东西需要3种输入法切换,所以内置输入法不适合我

ubuntu下的确没有这个问题。 @xianghx 给的方法解决了输入法不跳出的问题。 不过很多emacs设置跟着就用了zh_CN。。需要手动再配置。。实在代价有点大。。

我慢慢尝试用terminal下的emacs看效果如何吧。

再次感谢各位大大的帮忙!

1 个赞

我的新装的 Ubuntu 16.04 (默认的 Unity 和英文环境)也有类似的问题,切换至 fcitx-googlepinyin 的按键确实是被操作系统接受了,但是输入法还是调不出来。其他的 GTK 程序比如 gedit 之类的都没有这个问题。真是太奇怪了。

根据 Arch wiki 上的提示(Emacs 无法使用输入法),一个 work-around 是把 LC_CTYPE 设为中文,我用的是下面的方法:

$ LC_CTYPE=zh_CN.UTF-8 emacs --daemon
$ emacsclient --create-frame --no-wait

(背景:我只习惯用 GUI 下的 Emacs,不然的话鼠标、菜单、按钮、字体等都用不上了。)

只设置 LC_CTYPE 的话,ispell 还是能正常工作(对我来说是能检测英文)的。

目前还是不清楚问题出在哪里,以及如何解决。

1 个赞

谢谢, 的确是LC_ALL的原因! 是我用的一个别人的fish shell配置把LC_ALL也设置进去了。

非常感谢, 这两个命令很cool, 我已经开始用了!

1 个赞

请教一下一个跟 Emacs 无关的话题, 如果在国内的话,芬兰语使用的场合一般有哪些? 芬兰语实际使用时语法真的必需那么复杂吗? 可以私信联系一下吗?谢谢!

除了LC_CTYPE还有一个原因 就是字库的原因 emacs从X中找不到你要的字体

新建 /etc/X11/xorg.conf.d/fonts.conf 写入

Section "Files"
	FontPath "/usr/share/fonts/misc"
	FontPath "你的/字体/路径""
EndSection 

记得在你的字体目录下

mkfontdir
mkfontscale
fc-cache -v
1 个赞

上面的方法都试过一遍了,还是不行。。。

给 Emacs 设置 LC_CTYPE 应该有用吧,我的 Ubuntu 用上了 fcitx,除 GUI Emacs 外的其它程序都没问题,设置了 LC_CTYPE 之后 Emacs 也正常了。我发现 ~/.profile 中设置的环境变量,GUI 程序也能继承到,所以我现在不用在命令行设置它了。

但这毕竟还是一个 work-around。我依旧不清楚究竟是怎么回事(这个锅到底该谁来背?Emacs、Fcitx、Gtk+、X 还是别的程序)。

1 个赞

系统ubuntu16.04, gnome桌面, fcitx.输入法, Emacs GUI. 上面的方法我都试过了一次了, shift键切换搜狗输入法都不行. 后来我发现win+space可以掉出ibus输入法, 现在将就用. 我尝试过卸载ibus, 不过会把ubuntu desktop也删掉, 我只好再装一次ubuntu desktop, 然后ibus也被装上了.

emacs 有个古老 bug 导致 fcitx 不能在 LC_CTYPE 为 en 时打开,为什么这个问题还是讨论了这么久捏……:mask:

XIM for Emacs: Your LC_CTYPE is set to en_US.UTF-8 instead of one of zh, ja, ko. You may not be able to use input method in emacs because of an really old emacs bug that upstream refuse to fix for years.

ibus 没有这个问题,我在 .xprofile 里运行 fcitx 后 加入 LC_CTYPE=zh_CN.UTF-8 exec emacs --daemon=workspace0 &后 emacsclient 也可以使用 fcitx

1 个赞

谁可以帮我看看吗…困扰好久, 折腾了好久都不行, 还是想用fcitx. 现在的情况是我可以使用win+spc来调出ibus来使用中文输入法, 但是不能C-spc(已经屏蔽原来的按键nil)和shift都调不出fcitx.

尝试过:

  1. LC_CTYPE=zh_CN.UTF-8 emacs无效, 把系统语言改成中文环境都不行(第一次我我设成中文环境fcitx可以过, 但是我还是希望设成英文环境, 所以又改成英文环境了, 但是不行, 以后设成中文环境都不可以了)
  2. 在.zshrc里加入(,类似的文件也设置过了, 还有.profile, etc的一个profile)
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

fcitx-diagnose会少一个错误, 但是fcitx和ibus都调不出 3. 改emacs的字体为中文的字体, 没反应 4. 卸载iBus, 但它和ubuntu destkop绑定的, 卸载它x就打不开了

gnome-shell, ubuntu 16.04, emacs25 附fcitx-diagnose

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

        Linux E430 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

2.  `lsb_release -a`:

        No LSB modules are available.
        Distributor ID: Ubuntu
        Description:    Ubuntu 16.04.2 LTS
        Release:        16.04
        Codename:       xenial

3.  `lsb_release -d`:

        Description:    Ubuntu 16.04.2 LTS

4.  `/etc/lsb-release`:

        DISTRIB_ID=Ubuntu
        DISTRIB_RELEASE=16.04
        DISTRIB_CODENAME=xenial
        DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

5.  `/etc/os-release`:

        NAME="Ubuntu"
        VERSION="16.04.2 LTS (Xenial Xerus)"
        ID=ubuntu
        ID_LIKE=debian
        PRETTY_NAME="Ubuntu 16.04.2 LTS"
        VERSION_ID="16.04"
        HOME_URL="http://www.ubuntu.com/"
        SUPPORT_URL="http://help.ubuntu.com/"
        BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
        VERSION_CODENAME=xenial
        UBUNTU_CODENAME=xenial

6.  Desktop Environment:

    Desktop environment is `gnome3`.

7.  Bash Version:

        BASH_VERSION='4.3.48(1)-release'

# Environment:
1.  DISPLAY:

        DISPLAY=':0'

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+us:2+inet(evdev)+ctrl(nocaps)+terminate(ctrl_alt_bksp)"  };
                xkb_geometry  { include "pc(pc105)"     };
            };

    2.  `xprop`:

            _XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us,us", "", "terminate:ctrl_alt_bksp,ctrl:nocaps"

3.  Locale:

    1.  All locale:

            C
            C.UTF-8
            en_AG
            en_AG.utf8
            en_AU.utf8
            en_BW.utf8
            en_CA.utf8
            en_DK.utf8
            en_GB.utf8
            en_HK.utf8
            en_IE.utf8
            en_IN
            en_IN.utf8
            en_NG
            en_NG.utf8
            en_NZ.utf8
            en_PH.utf8
            en_SG.utf8
            en_US.utf8
            en_ZA.utf8
            en_ZM
            en_ZM.utf8
            en_ZW.utf8
            POSIX
            zh_CN
            zh_CN.gb2312
            zh_CN.utf8
            zh_SG.utf8

    2.  Current locale:

            LANG=en_US.UTF-8
            LANGUAGE=en
            LC_CTYPE="zh_CN.UTF-8"
            LC_NUMERIC="zh_CN.UTF-8"
            LC_TIME="zh_CN.UTF-8"
            LC_COLLATE="zh_CN.UTF-8"
            LC_MONETARY="zh_CN.UTF-8"
            LC_MESSAGES="zh_CN.UTF-8"
            LC_PAPER="zh_CN.UTF-8"
            LC_NAME="zh_CN.UTF-8"
            LC_ADDRESS="zh_CN.UTF-8"
            LC_TELEPHONE="zh_CN.UTF-8"
            LC_MEASUREMENT="zh_CN.UTF-8"
            LC_IDENTIFICATION="zh_CN.UTF-8"
            LC_ALL=zh_CN.UTF-8

4.  Directories:

    1.  Home:

            /home/ycs

    2.  `${XDG_CONFIG_HOME}`:

        Environment variable `XDG_CONFIG_HOME` is not set.

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

    3.  Fcitx Settings Directory:

        Current fcitx settings directory is `~/.config/fcitx` (`/home/ycs/.config/fcitx`).

5.  Current user:

    The script is run as ycs (1000).

# Fcitx State:
1.  executable:

    Found fcitx at `/usr/bin/fcitx`.

2.  version:

    Fcitx version: `4.2.9.1`

3.  process:

    Found 2 fcitx processes:

         2241 fcitx
         2299 fcitx-dbus-watc

4.  `fcitx-remote`:

    `fcitx-remote` works properly.

# Fcitx Configure UI:
1.  Config Tool Wrapper:

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

2.  Config GUI for gtk2:

    **Config GUI for gtk2 not found.**

3.  Config GUI for gtk3:

    Found `fcitx-config-gtk3` at `/usr/bin/fcitx-config-gtk3`.

4.  Config GUI for kde:

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

    **Environment variable XMODIFIERS is "@im=ibus" instead of "@im=fcitx". Please check if you have exported it incorrectly in any of your init files.**

    **Please set environment variable XMODIFIERS to "@im=fcitx" using the tool your distribution provides or add `export XMODIFIERS=@im=fcitx` to your `~/.xprofile`. See [Input Method Related Environment Variables: XMODIFIERS](http://fcitx-im.org/wiki/Input_method_related_environment_variables#XMODIFIERS).**

    Xim Server Name from Environment variable is ibus.

2.  XIM_SERVERS on root window:

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

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

    Environment variable QT4_IM_MODULE is set to "fcitx" correctly.

2.  qt5 - `${QT_IM_MODULE}`:

    **Environment variable QT_IM_MODULE is "ibus" instead of "fcitx". Please check if you have exported it incorrectly in any of your init files.**
    **You may have trouble using fcitx in qt5 programs.**

    **Please set environment variable QT_IM_MODULE to "fcitx" using the tool your distribution provides or add `export QT_IM_MODULE=fcitx` to your `~/.xprofile`. See [Input Method Related Environment Variables: QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables#QT_IM_MODULE).**

3.  Qt IM module files:
    Found fcitx im module for Qt5: `/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so`.
    Found fcitx im module for Qt4: `/usr/lib/x86_64-linux-gnu/qt4/plugins/inputmethods/qtim-fcitx.so`.

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

    Environment variable GTK_IM_MODULE is set to "fcitx" correctly.

2.  `gtk-query-immodules`:

    1.  gtk 2:

        **Cannot find `gtk-query-immodules` for gtk 2**

        **Cannot find fcitx im module for gtk 2.**

    2.  gtk 3:

        **Cannot find `gtk-query-immodules` for gtk 3**

        **Cannot find fcitx im module for gtk 3.**

3.  Gtk IM module cache:

    1.  gtk 2:

        Found immodules cache for gtk `2.24.30` at `/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules.cache`.
        Version Line:

            # Created by /usr/lib/x86_64-linux-gnu/libgtk2.0-0/gtk-query-immodules-2.0 from gtk+-2.24.30

        Found fcitx im modules for gtk `2.24.30`.

            "/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so"
            "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*"

    2.  gtk 3:

        Found immodules cache for gtk `3.20.8` at `/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache`.
        Version Line:

            # Created by /usr/lib/x86_64-linux-gnu/libgtk-3-0/gtk-query-immodules-3.0 from gtk+-3.20.8

        Found fcitx im modules for gtk `3.20.8`.

            "/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-fcitx.so"
            "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/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.

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

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

2.  Addon List:

    1.  Found 34 enabled addons:

            fcitx-autoeng
            fcitx-autoeng-ng
            fcitx-chttrans
            fcitx-classic-ui
            fcitx-clipboard
            fcitx-cloudpinyin
            fcitx-dbus
            fcitx-freedesktop-notify
            fcitx-fullwidth-char
            fcitx-fullwidth-char-enhance
            fcitx-googlepinyin
            fcitx-imselector
            fcitx-ipc
            fcitx-keyboard
            fcitx-kimpanel-ui
            fcitx-lua
            fcitx-notificationitem
            fcitx-pinyin
            fcitx-pinyin-enhance
            fcitx-punc
            fcitx-punc-ng
            fcitx-quickphrase
            fcitx-remote
            fcitx-sogoucloudpinyin
            fcitx-sogoupinyin
            fcitx-spell
            fcitx-sunpinyin
            fcitx-table
            fcitx-unicode
            fcitx-vk
            fcitx-x11
            fcitx-xim
            fcitx-xkb
            fcitx-xkbdbus

    2.  Found 0 disabled addons:

3.  Addon Libraries:

    All libraries for all addons are found.

4.  User Interface:

    Found 2 enabled user interface addons:

        fcitx-classic-ui
        fcitx-kimpanel-ui

    Kimpanel process:

         2390 sogou-qimpanel

## Input Methods:
1.  Found 3 enabled input methods:

        fcitx-keyboard-us
        sogoupinyin
        googlepinyin

2.  Default input methods:

    You have a keyboard input method "fcitx-keyboard-us" correctly added as your default input method.

# Log:
1.  `date`:

        2017年 07月 09日 星期日 18:44:56 CST

2.  `~/.config/fcitx/log/`:

        total 0

3.  `~/.config/fcitx/log/crash.log`:

    `~/.config/fcitx/log/crash.log` not found.

有一瞬间可以了, 但当我从evil-normal-state切到evil-insert-state后又不行了

我把桌面切换到xfce居然可以了

4.  Config GUI for kde:

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

    **Environment variable XMODIFIERS is "@im=ibus" instead of "@im=fcitx". Please check if you have exported it incorrectly in any of your init files.**

    **Please set environment variable XMODIFIERS to "@im=fcitx" using the tool your distribution provides or add `export XMODIFIERS=@im=fcitx` to your `~/.xprofile`. See [Input Method Related Environment Variables: XMODIFIERS](http://fcitx-im.org/wiki/Input_method_related_environment_variables#XMODIFIERS).**

    Xim Server Name from Environment variable is ibus.

2.  XIM_SERVERS on root window:

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

关键的是怎么把这里设置对了就好了

现在是暴力hack了, 把ibus服务命令去掉再重启, 终于可以了

sudo mv /usr/bin/ibus-daemon /usr/bin/ibus-daemon.bak 

fish-shell中。

alias emacs="env LC_CTYPE=zh_CN.UTF-8 emacs"
funcsave emacs
emacs

谁用谁知道。

2 个赞

删除ibus-daemon即可

1 个赞