Ubuntu 下 Emacs 中无法激活搜狗输入法

在emacs中貌似不能激活中文输入法. 之前是可以的,但是突然就不行了. 现象:

  1. 从快速启动栏启动emacs之后,使用C-SPC不能切换到中文输入法, mini-buffer显示mark-set或者mark-active
  2. 从命令行启动emacs, 使用C-SPC可以切换到中文输入法
  3. 从快速启动栏启动chrome, 使用C-SPC可以切换到中文输入法

环境:

  1. ubuntu 16.04 LTS
  2. emacs 24.5.1
  3. spacemacs 0.105.22, develop
  4. 使用的搜狗输入法

如果系统语言是zh_CN.UTF8应该可以,如果是en_US.UTF-8是fcitx在emacs下的bug,emacs的bug,因为年代久远已经不会被修复了。 https://wiki.archlinux.org/index.php/Fcitx_(简体中文)#Emacs_.E6.97.A0.E6.B3.95.E4.BD.BF.E7.94.A8.E8.BE.93.E5.85.A5.E6.B3.95

可以使用cli,也可以使用emacs内置输入法,如 GitHub - tumashu/pyim: 一个 emacs 中文输入法,支持全拼,双拼,五笔,仓颉和Rime,pyim 是 GNU elpa 包。

我在.bashrc中加入 export LC_CTYPE=zh_CN.UTF-8 但是并没有效果

另外,你说的cli是指什么呢?

source ~/.bashrc 一次然后从命令行启动spacemacs试试? 实际上ubuntu的话如果不熟悉命令行可以直接去系统语言里更改 cli指 emacs-nox, 或者emacs -nw 即命令行版emacs

修改.bashrc之后我是重新登录过的 而且从命令行启动的话一直是可以切换中文输入法的,只有从快速启动栏启动的话不能切换

那试试把export 加入到.xprofile 或者.xinitrc里再登录

这个我觉得 C -space 快捷键 在你的emacs 被占了。 c-h-k c-space 确认下。

测试过加入到~/.xinitrc中,重新登录无效 在emacs中使用 (getenv "LC_CTYPE') 的结果是zh_CN.UTF-8

得到的输出如下:

C-SPC runs the command set-mark-command, which is an interactive compiled Lisp function in `simple.el’.

It is bound to C-@, C-SPC.

(set-mark-command ARG)

Set the mark where point is, or jump to the mark. Setting the mark also alters the region, which is the text between point and mark; this is the closest equivalent in Emacs to what some editors call the “selection”.

With no prefix argument, set the mark at point, and push the old mark position on local mark ring. Also push the old mark on global mark ring, if the previous mark was set in another buffer.

When Transient Mark Mode is off, immediately repeating this command activates `transient-mark-mode’ temporarily.

With prefix argument (e.g., SPC u C-SPC), jump to the mark, and set the mark from position popped off the local mark ring (this does not affect the global mark ring). Use C-x C-@ to jump to a mark popped off the global mark ring (see `pop-global-mark’).

If `set-mark-command-repeat-pop’ is non-nil, repeating the C-SPC command with no prefix argument pops the next position off the local (or global) mark ring and jumps there.

With SPC u SPC u as prefix argument, unconditionally set mark where point is, even if `set-mark-command-repeat-pop’ is non-nil.

Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. See the documentation of `set-mark’ for more information.

感觉是应该先被输入法切换截获的快捷键,不知怎么的被emacs处理掉了.关键是从快速启动栏启动才会有问题,而从终端启动emacs是Ok的.

那就是被占了… Emacs 快捷键基本都是 Ctrl 开头的。 我 电脑全局至少都是 三个键开始的 Ctrl shift 还有四个的 Ctrl ALT shift的

很奇怪哎 我系统的切换源快捷键是: Super + 空格 但是实际使用上是 Ctrl + SPC 才有效

以前用英文的 Ubuntu 会输入不了中文, 后来换成中文的就好啦.

键是不是被重定义了啊。我Mac 可以把左边的 caps lock 定义成 Ctrl…

我来当个搬运工吧,我啥原理也不懂,但是以前在Ubuntu和Mint上各种折腾也解决过这个问题。 方法就是网上大家说的,export LC_CTYPE=zh_CN.UTF-8,实在不会的,可以设置语言为中文(也就相当于 export LANG=zh_CN.UTF-8),然后什么都是zh_CN.UTF-8了,就不用再担心环境变量的问题了。 另外,Ubuntu和Mint上在安装fcitx以后,在系统的输入法设置里面,可以看到fcitx项有红色的提示,大概意思是,建议安装fcitx一些附加的增强组件,这些安装上后,设置emacs输入中文成功的几率好像要大些。

最近换了Archlinux,搞了几天以后,今天终于也把emacs上调用fcitx输入法的问题解决了,我用的是搜狗输入法,关键的配置来自于这里: http://tech.memoryimprintstudio.com/issues-with-fcitx-sougou-for-chinese-input-in-emacs/

disable ./Xresources while it inclues: emacs*useXIM: false

In script file .xprofile, add following lines to support GTK+ and Qt modules Fcitx in Arch Linux. export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx

估计这个设置对其他linux系统也是很有用的,当然,export LC_CTYPE=zh_CN.UTF-8 也是必须的

5 个赞

对了,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上也要注意一下

4 个赞

可能我没有说清楚,我使用的就是简体中文版UBUNTU

中文ubuntu的话感觉占用快捷键的可能性比较大

先用我说的方法看一下,emacs启动过后,emacs里运行locale,看看环境是什么样,语言是中文,也不代表LC_xxx都是中文,都是可以设置不一样的

输入法(fcitx?)config里,改一下输入法的快捷键试一下呢,比如改成Ctrl+shift

晚上回家了才能测试,公司里的电脑没这问题。 到时会把测试结果贴上来

测试结果如下: LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh:en_US: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=