Emacs GUI下不能输入中文

google了也看了论坛其他中文输入的解决办法,却依然未卵。

我用的archlinux + i3WM (GUI), 安装了fctix 下的google pinyin. 用的emacs 下的spacemacs配置。Troubleshooting如下:

  1. chromium 和 urxvt terminal 下 google pinyin能ctrl+spc 顺利切换和输入中文 (我现在就是在chroium下写的这个提问)
  2. 但是在emacs GUI 下, 切换google pinyin 没反映,fctix的icon保持依然是英文键盘。
  • 尝试了ctrl-spc切换键盘, 无效
  • 尝试右键点击fctix图标-> input method -> 选中 google pinyin. 如果当下激活窗口是chroium 会出现google pinyin 图标, 如果当下激活窗口是emacs, 是英文键盘的图标(也就是说无法输入中文)。
  1. 尝试 emacs -Q & 启动裸体emacs, 依然有如上问题
  2. 尝试 LC_CTYPE=zh_CN.UTF-8 emacs & 运行emacs, 依然有如上问题
  3. 尝试 LC_CTYPE=zh_CN.UTF-8 emacs -Q & 运行裸体emacs, 依然有如上问题
  4. 尝试 运行emacs在terminal下, 可以输入中文。 但是emacs在GUI下才是我要的…
  5. 已经在.xinitrc 下 加入了如下。 如果不加这3行,连terminal下都无法输入中文 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx

实在是黔驴技穷了, 求大家帮忙!!

1 个赞

fcitx-gtk* 装下试试

最好的办法是修改.bashrc:export LANG=en_US.UTF-8export LC_CTYPE=zh_CN.UTF-8 图形界面的emacs在 emacs-china有帖子如下(其中~/xprofile测试有效):对了,Linux上还有一个坑,就是有的情况下(比如我的Archlinux+LXDE)无论你的bash下怎么设置环境变量,你的图形界面的LC_CTYPE永远是en_US,这就导致你无论怎么设置,从图形界面上启动emacs,就是激活不了fcitx输入法。验证的方法就是,图形界面上启动emacs后,在emacs里 M-x shell-command 回车,然后输入 locale 查看当前emacs环境的locale设置(spacemace配置)。然后修改的办法就是除了设置shell的环境变量以外,还要设置图形界面的环境变量: vim ~/.xprofile export LANG=en_US.UTF-8 export LC_CTYPE=zh_CN.UTF-8或者vim /etc/locale.conf LANG=en_US.UTF-8 LC_CTYPE=zh_CN.UTF-8这个坑其他linux上也要注意一下 来源: Ubuntu 下 Emacs 中无法激活搜狗输入法 - #15,来自 liugdft

3 个赞

我遇到过类似的问题,我只要从终端打开也输入不了中文,但是如果从启动器中打开就可以。

楼上的都试过了,不行呀。。。 悲剧

在用户目录下建立.xprofile文件,加入 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx 试一下吧

可以的话把fcitx-diagnose的结果贴出来,我用的是archlinux+gnome3,前两天也出现这个问题,最后解决了,但首先得把emacs的C-SPC本身按键kill掉,在你的配置加入 (global-set-key (kbd “C-SPC”) 'nil)

如果还有问题的话,可以看一下是不是安装了ibus,我的gnome默认安装ibus,卸载之后就没有其他问题了,emacs可以输入中文了

1 个赞

fcitx-diagnose结果是:

System Info:

  1. uname -a:

    Linux Traxex 4.7.4-1-ARCH #1 SMP PREEMPT Thu Sep 15 15:24:29 CEST 2016 x86_64 GNU/Linux
    
  2. lsb_release:

    lsb_release not found.

  3. /etc/lsb-release:

    /etc/lsb-release not found.

  4. /etc/os-release:

    NAME="Arch Linux"
    ID=arch
    PRETTY_NAME="Arch Linux"
    ANSI_COLOR="0;36"
    HOME_URL="https://www.archlinux.org/"
    SUPPORT_URL="https://bbs.archlinux.org/"
    BUG_REPORT_URL="https://bugs.archlinux.org/"
    
  5. Desktop Environment:

    Cannot determine desktop environment.

  6. Bash Version:

    BASH_VERSION='4.3.46(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+fi(classic):2+inet(evdev)"	};
      	xkb_geometry  { include "pc(pc105)"	};
      };
      
    2. xprop:

      _XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us,fi", ",classic", ""
      
  3. Locale:

    1. All locale:

      C
      en_US
      en_US.iso88591
      en_US.utf8
      POSIX
      zh_CN
      zh_CN.gb18030
      zh_CN.gb2312
      zh_CN.gbk
      zh_CN.utf8
      
    2. Current locale:

      LANG=
      LC_CTYPE="en_US.UTF-8"
      LC_NUMERIC="en_US.UTF-8"
      LC_TIME="en_US.UTF-8"
      LC_COLLATE="en_US.UTF-8"
      LC_MONETARY="en_US.UTF-8"
      LC_MESSAGES="en_US.UTF-8"
      LC_PAPER="en_US.UTF-8"
      LC_NAME="en_US.UTF-8"
      LC_ADDRESS="en_US.UTF-8"
      LC_TELEPHONE="en_US.UTF-8"
      LC_MEASUREMENT="en_US.UTF-8"
      LC_IDENTIFICATION="en_US.UTF-8"
      LC_ALL=en_US.UTF-8
      
  4. Directories:

    1. Home:

      /home/finxxi
      
    2. ${XDG_CONFIG_HOME}:

      Environment variable XDG_CONFIG_HOME is not set.

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

    3. Fcitx Settings Directory:

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

  5. Current user:

    The script is run as finxxi (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:

      745 fcitx
      759 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:

    kcmshell4 not found.

Frontends setup:

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 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.

Qt:

  1. qt4 - ${QT4_IM_MODULE}:

    Environment variable QT_IM_MODULE is set to “fcitx” correctly.

  2. qt5 - ${QT_IM_MODULE}:

    Environment variable QT_IM_MODULE is set to “fcitx” correctly.

  3. Qt IM module files: Found fcitx qt module: /usr/lib/fcitx/qt/libfcitx-quickphrase-editor.so. Found fcitx im module for Qt5: /usr/lib/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so. Found fcitx im module for Qt4: /usr/lib/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:

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

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

      Found fcitx im modules for gtk 2.24.31.

      "/usr/lib/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 gtk-query-immodules for gtk 3.20.9 at /usr/bin/gtk-query-immodules-3.0. Version Line:

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

      Found fcitx im modules for gtk 3.20.9.

      "/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx.so" 
      "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*" 
      
  3. Gtk IM module cache:

    1. gtk 2:

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

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

      Found fcitx im modules for gtk 2.24.31.

      "/usr/lib/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.9 at /usr/lib/gtk-3.0/3.0.0/immodules.cache. Version Line:

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

      Found fcitx im modules for gtk 3.20.9.

      "/usr/lib/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 26 enabled addons:

      fcitx-autoeng
      fcitx-chttrans
      fcitx-classic-ui
      fcitx-clipboard
      fcitx-dbus
      fcitx-freedesktop-notify
      fcitx-fullwidth-char
      fcitx-googlepinyin
      fcitx-imselector
      fcitx-ipc
      fcitx-keyboard
      fcitx-kimpanel-ui
      fcitx-notificationitem
      fcitx-pinyin
      fcitx-pinyin-enhance
      fcitx-punc
      fcitx-quickphrase
      fcitx-remote
      fcitx-spell
      fcitx-table
      fcitx-unicode
      fcitx-vk
      fcitx-x11
      fcitx-xim
      fcitx-xkb
      fcitx-xkbdbus
      
    2. Found 1 disabled addons:

      fcitx-qw
      
  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
    

Input Methods:

  1. Found 3 enabled input methods:

    fcitx-keyboard-us
    googlepinyin
    fcitx-keyboard-fi-classic
    
  2. Default input methods:

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

Log:

  1. date:

    Sun Oct  2 21:47:05 UTC 2016
    
  2. ~/.config/fcitx/log/:

    total 4
    -rw-r--r-- 1 finxxi users 44 Sep 29 22:46 crash.log
    
  3. ~/.config/fcitx/log/crash.log:

    fcitx: BadWindow (invalid Window parameter)

这个配置我也在troubleshooting的时候使用过了, 而且现在的配置就是屏蔽了C-SPC的。 依然未果。

其实不只是中文, 我还有个芬兰与键盘, 也不能。 简单的说就是除了默认的英文键盘,其他的都不让切换(摊手

的确在emacs GUI下看locale LC_CTYPE=en_US.UTF-8, 但是不管我用什么办法, 就是没法在emacs GUI下改动这个参数… 真的很无奈啊。。。

没用…

算了。 我就在terminal下用256color凑合吧, 打开速度还比GUI快一点。 习惯了就好^^,这个坑有点大。

谢谢大家的帮忙!

感谢! LC_ALL=zh_CN.UTF-8 emacs 这个命令的确可以使用fcitx-googlepinyin了! 但是代价太大了, emacs下好多东西都和locale挂钩,比如flyspell默认的dictionary, org 下 图标的样式, 还有各种各样突然毛出来的中文。。。

我感觉还是只能在终端下用emacs了, 虽然也不是完美,但是比 zh_CN locale要能接受一些。

1 个赞

还有一种方法,用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 个赞